X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Roo%2Fbootstrap%2FModal.js;h=44e49fe371b685ab3b470468aefc6ec17c02d0a6;hb=5c4bd9e5eeb24b7cbf8a5c1bbdbb662847ad8009;hp=ab945dd052c843c8bdcfd5139b1d318fdc36e493;hpb=d7fbd89557759c0d551e98cc0b9c4e8b3e4f524d;p=roojs1 diff --git a/Roo/bootstrap/Modal.js b/Roo/bootstrap/Modal.js index ab945dd052..44e49fe371 100644 --- a/Roo/bootstrap/Modal.js +++ b/Roo/bootstrap/Modal.js @@ -16,8 +16,12 @@ * @cfg {Boolean} animate default true * @cfg {Boolean} allow_close default true * @cfg {Boolean} fitwindow default false + * @cfg {Number} width fixed width - usefull for chrome extension only really. + * @cfg {Number} height fixed height - usefull for chrome extension only really. * @cfg {String} size (sm|lg) default empty * @cfg {Number} max_width set the max width of modal + * @cfg {Boolean} editableTitle can the title be edited + * * * @constructor @@ -42,13 +46,14 @@ Roo.bootstrap.Modal = function(config){ * @param {Roo.EventObject} e */ "resize" : true, - /** - * @event close - * Fire when the top 'x' close button is pressed. + /** + * @event titlechanged + * Fire when the editable title has been changed * @param {Roo.bootstrap.Modal} this - * @param {Roo.EventObject} e + * @param {Roo.EventObject} value */ - "close" : true + "titlechanged" : true + }); this.buttons = this.buttons || []; @@ -94,6 +99,7 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { max_height: 0, fit_content: false, + editableTitle : false, onRender : function(ct, position) { @@ -173,8 +179,9 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { getAutoCreate : function() { + // we will default to modal-body-overflow - might need to remove or make optional later. var bdy = { - cls : 'modal-body', + cls : 'modal-body enable-modal-body-overflow ', html : this.html || '' }; @@ -184,10 +191,9 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { html : this.title }; - if(this.specificTitle){ + if(this.specificTitle){ // WTF is this? title = this.title; - - }; + } var header = []; if (this.allow_close && Roo.bootstrap.version == 3) { @@ -200,6 +206,14 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { header.push(title); + if (this.editableTitle) { + header.push({ + cls: 'form-control roo-editable-title d-none', + tag: 'input', + type: 'text' + }); + } + if (this.allow_close && Roo.bootstrap.version == 4) { header.push({ tag: 'button', @@ -279,17 +293,24 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { initEvents : function() { if (this.allow_close) { - this.closeEl.on('click', this.onClosePress, this); + this.closeEl.on('click', this.hide, this); } Roo.EventManager.onWindowResize(this.resize, this, true); - + if (this.editableTitle) { + this.headerEditEl = this.headerEl.select('.form-control',true).first(); + this.headerEl.on('click', function() { this.toggleHeaderInput(true) } , this); + this.headerEditEl.on('keyup', function(e) { + if(e.isNavKeyPress()){ + this.toggleHeaderInput(false) + } + }, this); + this.headerEditEl.on('blur', function(e) { + this.toggleHeaderInput(false) + },this); + } }, - - onClosePress : function() - { - - }, + resize : function() { @@ -300,8 +321,7 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { if (this.fitwindow) { - var view_height = Roo.lib.Dom.getViewportHeight(true); - + this.setSize( this.width || Roo.lib.Dom.getViewportWidth(true) - 30, this.height || Roo.lib.Dom.getViewportHeight(true) // catering margin-top 30 margin-bottom 30 @@ -365,7 +385,7 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { Roo.get(document.body).addClass('modal-open'); if(this.animate){ // element has 'fade' - so stuff happens after .3s ?- not sure why the delay? - var _this = this; + (function(){ this.el.addClass('show'); this.el.addClass('in'); @@ -472,7 +492,7 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { { this.dialogEl.setWidth(w); - var diff = this.headerEl.getHeight() + this.footerEl.getHeight() + 30; // dialog margin-bottom: 30 + var diff = this.headerEl.getHeight() + this.footerEl.getHeight() + 60; // dialog margin-bottom: 30 this.bodyEl.setHeight(h - diff); @@ -494,6 +514,7 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { */ setTitle: function(str) { this.titleEl.dom.innerHTML = str; + this.title = str; }, /** * Set the body of the Dialog @@ -521,7 +542,7 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { !child_nodes || child_nodes.length == 0 ) { - return; + return 0; } var child_height = 0; @@ -574,6 +595,33 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { } return child_height; + }, + toggleHeaderInput : function(is_edit) + { + + if (is_edit && this.is_header_editing) { + return; // already editing.. + } + if (is_edit) { + + this.headerEditEl.dom.value = this.title; + this.headerEditEl.removeClass('d-none'); + this.headerEditEl.dom.focus(); + this.titleEl.addClass('d-none'); + + this.is_header_editing = true; + return + } + // flip back to not editing. + this.title = this.headerEditEl.dom.value; + this.headerEditEl.addClass('d-none'); + this.titleEl.removeClass('d-none'); + this.titleEl.dom.innerHTML = String.format('{0}', this.title); + this.is_header_editing = false; + this.fireEvent('titlechanged', this, this.title); + + + } }); @@ -642,3 +690,4 @@ Roo.apply(Roo.bootstrap.Modal, { zIndex : 10001 }); +