X-Git-Url: http://git.roojs.org/?p=roojs1;a=blobdiff_plain;f=roojs-bootstrap-debug.js;h=3d4f568459340cece1827786fe25c7071fc218ed;hp=f75c09f76cc348be4cc743aa1f29668d2f3e1bd5;hb=142f0223762b07a2c521635bba61bbb753bb73a4;hpb=b229a5363cce3e5d2a568f04881cfd124a5678f4 diff --git a/roojs-bootstrap-debug.js b/roojs-bootstrap-debug.js index f75c09f76c..3d4f568459 100644 --- a/roojs-bootstrap-debug.js +++ b/roojs-bootstrap-debug.js @@ -413,7 +413,7 @@ Roo.extend(Roo.bootstrap.Component, Roo.BoxComponent, { return; } - this.getVisibilityEl().removeClass('hidden'); + this.getVisibilityEl().removeClass(['hidden','d-none']); this.fireEvent('show', this); @@ -428,7 +428,7 @@ Roo.extend(Roo.bootstrap.Component, Roo.BoxComponent, { return; } - this.getVisibilityEl().addClass('hidden'); + this.getVisibilityEl().addClass(['hidden','d-none']); this.fireEvent('hide', this); @@ -589,7 +589,8 @@ Roo.extend(Roo.bootstrap.ButtonGroup, Roo.bootstrap.Component, { * @cfg {String} href empty or href * @cfg {Boolean} disabled default false; * @cfg {Boolean} isClose default false; - * @cfg {String} glyphicon depricated - use fs + * @cfg {String} glyphicon depricated - use fa + * @cfg {String} fa fontawesome icon - eg. 'comment' - without the fa/fas etc.. * @cfg {String} badge text for badge * @cfg {String} theme (default|glow) * @cfg {Boolean} inverse dark themed version @@ -2409,7 +2410,7 @@ Roo.extend(Roo.bootstrap.Menu, Roo.bootstrap.Component, { this.hide(); } else { Roo.log('show'); - this.show(this.triggerEl, false, false); + this.show(this.triggerEl, '?', false); } if(this.stopEvent || e.getTarget().nodeName.toLowerCase() === 'i'){ @@ -2513,7 +2514,7 @@ Roo.extend(Roo.bootstrap.MenuItem, Roo.bootstrap.Component, { if(this.isContainer){ return { tag: 'li', - cls: 'dropdown-menu-item dropdown-item' + cls: 'dropdown-menu-item ' }; } var ctag = { @@ -2523,6 +2524,7 @@ Roo.extend(Roo.bootstrap.MenuItem, Roo.bootstrap.Component, { var anc = { tag : 'a', + cls : 'dropdown-item', href : '#', cn : [ ] }; @@ -2539,7 +2541,7 @@ Roo.extend(Roo.bootstrap.MenuItem, Roo.bootstrap.Component, { var cfg= { tag: 'li', - cls: 'dropdown-menu-item dropdown-item', + cls: 'dropdown-menu-item', cn: [ anc ] }; if (this.parent().type == 'treeview') { @@ -2640,7 +2642,7 @@ Roo.extend(Roo.bootstrap.MenuSeparator, Roo.bootstrap.Component, { * @cfg {Roo.Template} tmpl - a template with variables. to use it, add a handler in show:method adn * @cfg {Boolean} specificTitle default false * @cfg {Array} buttons Array of buttons or standard button set.. - * @cfg {String} buttonPosition (left|right|center) default right + * @cfg {String} buttonPosition (left|right|center) default right (DEPRICATED) - use mr-auto on buttons to put them on the left * @cfg {Boolean} animate default true * @cfg {Boolean} allow_close default true * @cfg {Boolean} fitwindow default false @@ -2766,7 +2768,7 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { var btn = Roo.factory(b); - btn.render(this.el.select('.modal-footer div').first()); + btn.render(this.getButtonContainer()); },this); } @@ -2834,7 +2836,26 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { if(this.size.length){ size = 'modal-' + this.size; } + + var footer = Roo.bootstrap.version == 3 ? + { + cls : 'modal-footer', + cn : [ + { + tag: 'div', + cls: 'btn-' + this.buttonPosition + } + ] + } : + { // BS4 uses mr-auto on left buttons.... + cls : 'modal-footer' + }; + + + + + var modal = { cls: "modal", cn : [ @@ -2849,18 +2870,7 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { cn : header }, bdy, - { - cls : 'modal-footer', - cn : [ - { - tag: 'div', - cls: 'btn-' + this.buttonPosition - } - ] - - } - - + footer ] } @@ -2883,7 +2893,10 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { }, getButtonContainer : function() { - return this.el.select('.modal-footer div',true).first(); + + return Roo.bootstrap.version == 4 ? + this.el.select('.modal-footer',true).first() + : this.el.select('.modal-footer div',true).first(); }, initEvents : function() @@ -2904,9 +2917,15 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { ); if (this.fitwindow) { + + var view_height = Roo.lib.Dom.getViewportHeight(true); + + Roo.log("dialog height: "+this.height); + Roo.log("view height:" + view_height); + this.setSize( this.width || Roo.lib.Dom.getViewportWidth(true) - 30, - this.height || Roo.lib.Dom.getViewportHeight(true) - 60 + this.height || Roo.lib.Dom.getViewportHeight(true) // catering margin-top 30 margin-bottom 30 ); return; } @@ -3059,7 +3078,7 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { var btn = Roo.factory(b); - btn.render(this.el.select('.modal-footer div').first()); + btn.render(this.getButtonContainer()); return btn; @@ -3069,22 +3088,18 @@ Roo.extend(Roo.bootstrap.Modal, Roo.bootstrap.Component, { { //this.el.select('.modal-footer').() }, - diff : false, resizeTo: function(w,h) { - // skip.. ?? why?? - this.dialogEl.setWidth(w); - if (this.diff === false) { - this.diff = this.dialogEl.getHeight() - this.bodyEl.getHeight(); - } - - this.bodyEl.setHeight(h - this.diff); + + var diff = this.headerEl.getHeight() + this.footerEl.getHeight() + 30; // dialog margin-bottom: 30 + this.bodyEl.setHeight(h - diff); + this.fireEvent('resize', this); - }, + setContentSize : function(w, h) { @@ -3311,10 +3326,11 @@ Roo.bootstrap.MessageBox = function(){ buttons["cancel"].hide(); buttons["yes"].hide(); buttons["no"].hide(); - //dlg.footer.dom.style.display = 'none'; + dlg.footerEl.hide(); + return width; } - dlg.footerEl.dom.style.display = ''; + dlg.footerEl.show(); for(var k in buttons){ if(typeof buttons[k] != "function"){ if(b[k]){ @@ -3591,6 +3607,9 @@ Roo.Msg.show({ textareaEl.hide(); } progressEl.setDisplayed(opt.progress === true); + if (opt.progress) { + d.animate = false; // do not animate progress, as it may not have finished animating before we close it.. + } this.updateProgress(0); activeTextEl.dom.value = opt.value || ""; if(opt.prompt){ @@ -3866,33 +3885,35 @@ Roo.extend(Roo.bootstrap.Navbar, Roo.bootstrap.Component, { if (ce.hasClass('collapse')) { // show it... ce.removeClass('collapse'); - ce.addClass('collapsing'); + ce.addClass('show'); var h = ce.getHeight(); - ce.setHeight(0); // resize it ... - - ce.removeClass('collapsing'); + Roo.log(h); + ce.removeClass('show'); + // at this point we should be able to see it.. ce.addClass('collapsing'); - - // now flag it as moving.. - (function() { + ce.setHeight(0); // resize it ... + ce.on('transitionend', function() { + Roo.log('done transition'); ce.removeClass('collapsing'); ce.addClass('show'); ce.removeClass('collapse'); ce.dom.style.height = ''; - }).defer(500); - ce.setHeight(h) + }, this, { single: true} ); + ce.setHeight(h); } else { - ce.addClass('collapsing'); + ce.setHeight(ce.getHeight()); ce.removeClass('show'); - (function() { + ce.addClass('collapsing'); + + ce.on('transitionend', function() { + ce.dom.style.height = ''; ce.removeClass('collapsing'); ce.addClass('collapse'); - - }).defer(200); - + }, this, { single: true} ); + ce.setHeight(0); } } @@ -4001,14 +4022,23 @@ Roo.extend(Roo.bootstrap.NavSimplebar, Roo.bootstrap.Navbar, { var cfg = { tag : this.tag || 'div', - cls : 'navbar navbar-expand-lg' + cls : 'navbar navbar-expand-lg roo-navbar-simple' }; if (['light','white'].indexOf(this.weight) > -1) { cfg.cls += ['light','white'].indexOf(this.weight) > -1 ? ' navbar-light' : ' navbar-dark'; } cfg.cls += ' bg-' + this.weight; - + if (this.inverse) { + cfg.cls += ' navbar-inverse'; + + } + + // i'm not actually sure these are really used - normally we add a navGroup to a navbar + + //if (Roo.bootstrap.version == 4) { + // return cfg; + //} cfg.cn = [ { @@ -4019,7 +4049,7 @@ Roo.extend(Roo.bootstrap.NavSimplebar, Roo.bootstrap.Navbar, { this.type = this.type || 'nav'; - if (['tabs','pills'].indexOf(this.type)!==-1) { + if (['tabs','pills'].indexOf(this.type) != -1) { cfg.cn[0].cls += ' nav-' + this.type @@ -4033,7 +4063,7 @@ Roo.extend(Roo.bootstrap.NavSimplebar, Roo.bootstrap.Navbar, { - if (['stacked','justified'].indexOf(this.arrangement)!==-1) { + if (['stacked','justified'].indexOf(this.arrangement) != -1) { cfg.cn[0].cls += ' nav-' + this.arrangement; } @@ -4042,10 +4072,7 @@ Roo.extend(Roo.bootstrap.NavSimplebar, Roo.bootstrap.Navbar, { cfg.cn[0].cls += ' navbar-right'; } - if (this.inverse) { - cfg.cls += ' navbar-inverse'; - - } + return cfg; @@ -4163,6 +4190,12 @@ Roo.extend(Roo.bootstrap.NavHeaderbar, Roo.bootstrap.NavSimplebar, { cfg.cls += this.inverse ? ' navbar-inverse navbar-dark bg-dark' : ' navbar-default'; + if (['light','white'].indexOf(this.weight) > -1) { + cfg.cls += ['light','white'].indexOf(this.weight) > -1 ? ' navbar-light' : ' navbar-dark'; + } + cfg.cls += ' bg-' + this.weight; + + if (['fixed-top','fixed-bottom','static-top'].indexOf(this.position)>-1) { cfg.cls += ' navbar-' + this.position + ' ' + this.position ; @@ -4339,15 +4372,22 @@ Roo.extend(Roo.bootstrap.NavGroup, Roo.bootstrap.Component, { tag : 'ul', cls: 'nav' }; - - if (['tabs','pills'].indexOf(this.type)!==-1) { - cfg.cls += ' nav-' + this.type - } else { - if (this.type!=='nav') { - Roo.log('nav type must be nav/tabs/pills') - } - cfg.cls += ' navbar-nav' - } + if (Roo.bootstrap.version == 4) { + if (['tabs','pills'].indexOf(this.type) != -1) { + cfg.cls += ' nav-' + this.type; + } else { + cfg.cls += ' navbar-nav'; + } + } else { + if (['tabs','pills'].indexOf(this.type) != -1) { + cfg.cls += ' nav-' + this.type + } else { + if (this.type !== 'nav') { + Roo.log('nav type must be nav/tabs/pills') + } + cfg.cls += ' navbar-nav' + } + } if (this.parent() && this.parent().sidebar) { cfg = { @@ -4361,7 +4401,7 @@ Roo.extend(Roo.bootstrap.NavGroup, Roo.bootstrap.Component, { if (this.form === true) { cfg = { tag: 'form', - cls: 'navbar-form' + cls: 'navbar-form form-inline' }; if (this.align === 'right') { @@ -4448,7 +4488,10 @@ Roo.extend(Roo.bootstrap.NavGroup, Roo.bootstrap.Component, { */ addItem : function(cfg) { - var cn = new Roo.bootstrap.NavItem(cfg); + if (this.form && Roo.bootstrap.version == 4) { + cfg.tag = 'div'; + } + var cn = new Roo.bootstrap.NavItem(cfg); this.register(cn); cn.parentId = this.id; cn.onRender(this.el, null); @@ -4574,6 +4617,8 @@ Roo.apply(Roo.bootstrap.NavGroup, { * @extends Roo.bootstrap.Component * Bootstrap Navbar.NavItem class * @cfg {String} href link to + * @cfg {String} button_weight (default | primary | secondary | success | info | warning | danger | link ) default none + * @cfg {String} html content of button * @cfg {String} badge text inside badge * @cfg {String} badgecls (bg-green|bg-red|bg-yellow)the extra classes for the badge @@ -4635,16 +4680,20 @@ Roo.extend(Roo.bootstrap.NavItem, Roo.bootstrap.Component, { preventDefault : false, tabId : false, tagtype : 'a', + tag: 'li', disabled : false, animateRef : false, was_active : false, + button_weight : '', + button_outline : false, + + navLink: false, getAutoCreate : function(){ var cfg = { - tag: 'li', + tag: this.tag, cls: 'nav-item' - }; if (this.active) { @@ -4653,6 +4702,27 @@ Roo.extend(Roo.bootstrap.NavItem, Roo.bootstrap.Component, { if (this.disabled) { cfg.cls += ' disabled'; } + + // BS4 only? + if (this.button_weight.length) { + cfg.tag = this.href ? 'a' : 'button'; + cfg.html = this.html || ''; + cfg.cls += ' btn btn' + (this.button_outline ? '-outline' : '') + '-' + this.button_weight; + if (this.href) { + cfg.href = this.href; + } + if (this.fa) { + cfg.html = ' ' + this.html + ''; + } + + // menu .. should add dropdown-menu class - so no need for carat.. + + if (this.badge !== '') { + + cfg.html += ' ' + this.badge + ''; + } + return cfg; + } if (this.href || this.html || this.glyphicon || this.icon || this.fa) { cfg.cn = [ @@ -4666,10 +4736,10 @@ Roo.extend(Roo.bootstrap.NavItem, Roo.bootstrap.Component, { cfg.cn[0].cls = 'nav-link'; } if (this.icon) { - cfg.cn[0].html = ' ' + cfg.cn[0].html + '' + cfg.cn[0].html = ' ' + cfg.cn[0].html + ''; } if (this.fa) { - cfg.cn[0].html = ' ' + cfg.cn[0].html + '' + cfg.cn[0].html = ' ' + cfg.cn[0].html + ''; } if(this.glyphicon) { cfg.cn[0].html = ' ' + cfg.cn[0].html; @@ -4691,6 +4761,19 @@ Roo.extend(Roo.bootstrap.NavItem, Roo.bootstrap.Component, { return cfg; }, + onRender : function(ct, position) + { + // Roo.log("Call onRender: " + this.xtype); + if (Roo.bootstrap.version == 4 && ct.dom.type != 'ul') { + this.tag = 'div'; + } + + var ret = Roo.bootstrap.NavItem.superclass.onRender.call(this, ct, position); + this.navLink = this.el.select('.nav-link',true).first(); + return ret; + }, + + initEvents: function() { if (typeof (this.menu) != 'undefined') { @@ -4792,8 +4875,14 @@ Roo.extend(Roo.bootstrap.NavItem, Roo.bootstrap.Component, { if (!state ) { this.el.removeClass('active'); + this.navLink ? this.navLink.removeClass('active') : false; } else if (!this.el.hasClass('active')) { + this.el.addClass('active'); + if (Roo.bootstrap.version == 4 && this.navLink ) { + this.navLink.addClass('active'); + } + } if (fire) { this.fireEvent('changed', this, state); @@ -8946,12 +9035,12 @@ Roo.extend(Roo.bootstrap.Input, Roo.bootstrap.Component, { /** - * @cfg {String} invalidClass The CSS class to use when marking a field invalid (defaults to "x-form-invalid") + * @cfg {String} invalidClass DEPRICATED - code uses BS4 - is-valid / is-invalid */ invalidClass : "has-warning", /** - * @cfg {String} validClass The CSS class to use when marking a field valid (defaults to "x-form-invalid") + * @cfg {String} validClass DEPRICATED - code uses BS4 - is-valid / is-invalid */ validClass : "has-success", @@ -9230,7 +9319,7 @@ Roo.extend(Roo.bootstrap.Input, Roo.bootstrap.Component, { } if (align ==='left' && this.fieldLabel.length) { - cfg.cls += ' roo-form-group-label-left row'; + cfg.cls += ' roo-form-group-label-left' + (Roo.bootstrap.version == 4 ? ' row' : ''); cfg.cn = [ indicator, @@ -9364,9 +9453,10 @@ Roo.extend(Roo.bootstrap.Input, Roo.bootstrap.Component, { cfg.cls += ' navbar-form'; } - if (this.parentType === 'NavGroup') { - cfg.cls += ' navbar-form'; - cfg.tag = 'li'; + if (this.parentType === 'NavGroup' && !(Roo.bootstrap.version == 4 && this.parent().form)) { + // on BS4 we do this only if not form + cfg.cls += ' navbar-form'; + cfg.tag = 'li'; } return cfg; @@ -9702,8 +9792,8 @@ Roo.extend(Roo.bootstrap.Input, Roo.bootstrap.Component, { return; } - - this.el.removeClass(this.invalidClass); + + this.el.removeClass([this.invalidClass, 'is-invalid']); if(this.hasFeedback && this.inputType != 'hidden' && !this.allowBlank){ @@ -9733,7 +9823,8 @@ Roo.extend(Roo.bootstrap.Input, Roo.bootstrap.Component, { } this.el.removeClass([this.invalidClass, this.validClass]); - + this.inputEl().removeClass(['is-valid', 'is-invalid']); + var feedback = this.el.select('.form-control-feedback', true).first(); if(feedback){ @@ -9752,9 +9843,12 @@ Roo.extend(Roo.bootstrap.Input, Roo.bootstrap.Component, { if(this.allowBlank && !this.getRawValue().length){ return; } - - this.el.addClass(this.validClass); - + if (Roo.bootstrap.version == 3) { + this.el.addClass(this.validClass); + } else { + this.inputEl().addClass('is-valid'); + } + if(this.hasFeedback && this.inputType != 'hidden' && !this.allowBlank && (this.getValue().length || this.forceFeedback)){ var feedback = this.el.select('.form-control-feedback', true).first(); @@ -9780,11 +9874,13 @@ Roo.extend(Roo.bootstrap.Input, Roo.bootstrap.Component, { } this.el.removeClass([this.invalidClass, this.validClass]); + this.inputEl().removeClass(['is-valid', 'is-invalid']); var feedback = this.el.select('.form-control-feedback', true).first(); if(feedback){ - this.el.select('.form-control-feedback', true).first().removeClass([this.invalidFeedbackClass, this.validFeedbackClass]); + this.el.select('.form-control-feedback', true).first().removeClass( + [this.invalidFeedbackClass, this.validFeedbackClass]); } if(this.disabled){ @@ -9799,8 +9895,13 @@ Roo.extend(Roo.bootstrap.Input, Roo.bootstrap.Component, { this.indicator.removeClass(this.indicatorpos == 'right' ? 'hidden' : 'invisible'); this.indicator.addClass('visible'); } + if (Roo.bootstrap.version == 3) { + this.el.addClass(this.invalidClass); + } else { + this.inputEl().addClass('is-invalid'); + } + - this.el.addClass(this.invalidClass); if(this.hasFeedback && this.inputType != 'hidden' && !this.allowBlank){ @@ -10147,9 +10248,9 @@ Roo.extend(Roo.bootstrap.TextArea, Roo.bootstrap.Input, { if(label && icon){ icon.remove(); } - - this.el.removeClass(this.invalidClass); - + this.el.removeClass( this.validClass); + this.inputEl().removeClass('is-invalid'); + if(this.hasFeedback && this.inputType != 'hidden' && !this.allowBlank){ var feedback = this.el.select('.form-control-feedback', true).first(); @@ -10173,6 +10274,7 @@ Roo.extend(Roo.bootstrap.TextArea, Roo.bootstrap.Input, { } this.el.removeClass([this.invalidClass, this.validClass]); + this.inputEl().removeClass(['is-valid', 'is-invalid']); var feedback = this.el.select('.form-control-feedback', true).first(); @@ -10190,8 +10292,12 @@ Roo.extend(Roo.bootstrap.TextArea, Roo.bootstrap.Input, { if(label && icon){ icon.remove(); } + if (Roo.bootstrap.version == 3) { + this.el.addClass(this.validClass); + } else { + this.inputEl().addClass('is-valid'); + } - this.el.addClass(this.validClass); if(this.hasFeedback && this.inputType != 'hidden' && !this.allowBlank && (this.getValue().length || this.forceFeedback)){ @@ -10218,6 +10324,7 @@ Roo.extend(Roo.bootstrap.TextArea, Roo.bootstrap.Input, { } this.el.removeClass([this.invalidClass, this.validClass]); + this.inputEl().removeClass(['is-valid', 'is-invalid']); var feedback = this.el.select('.form-control-feedback', true).first(); @@ -10240,9 +10347,14 @@ Roo.extend(Roo.bootstrap.TextArea, Roo.bootstrap.Input, { style : 'margin-right:5px;' }, label, true); } - - this.el.addClass(this.invalidClass); + if (Roo.bootstrap.version == 3) { + this.el.addClass(this.invalidClass); + } else { + this.inputEl().addClass('is-invalid'); + } + + // fixme ... this may be depricated need to test.. if(this.hasFeedback && this.inputType != 'hidden' && !this.allowBlank){ var feedback = this.el.select('.form-control-feedback', true).first(); @@ -10529,7 +10641,7 @@ Roo.extend(Roo.bootstrap.TriggerField, Roo.bootstrap.Input, { if (align ==='left' && this.fieldLabel.length) { - cfg.cls += ' roo-form-group-label-left row'; + cfg.cls += ' roo-form-group-label-left' + (Roo.bootstrap.version == 4 ? ' row' : ''); cfg.cn = [ indicator, @@ -13218,12 +13330,12 @@ Roo.extend(Roo.bootstrap.ComboBox, Roo.bootstrap.TriggerField, { multiple : false, /** - * @cfg {String} invalidClass The CSS class to use when marking a field invalid (defaults to "x-form-invalid") + * @cfg {String} invalidClass DEPRICATED - uses BS4 is-valid now */ invalidClass : "has-warning", /** - * @cfg {String} validClass The CSS class to use when marking a field valid (defaults to "x-form-invalid") + * @cfg {String} validClass DEPRICATED - uses BS4 is-valid now */ validClass : "has-success", @@ -13370,6 +13482,7 @@ Roo.extend(Roo.bootstrap.ComboBox, Roo.bootstrap.TriggerField, { var box = { tag: 'div', + style : 'display: contents', cn: [ { tag: 'input', @@ -13428,7 +13541,7 @@ Roo.extend(Roo.bootstrap.ComboBox, Roo.bootstrap.TriggerField, { } if (align ==='left' && this.fieldLabel.length) { - cfg.cls += ' roo-form-group-label-left row'; + cfg.cls += ' roo-form-group-label-left' + (Roo.bootstrap.version == 4 ? ' row' : ''); cfg.cn = [ indicator, @@ -18248,7 +18361,7 @@ Roo.extend(Roo.bootstrap.TabGroup, Roo.bootstrap.Column, { { if(this.transition || typeof(pan) == 'undefined'){ Roo.log("waiting for the transitionend"); - return; + return false; } if (typeof(pan) == 'number') { @@ -18280,22 +18393,28 @@ Roo.extend(Roo.bootstrap.TabGroup, Roo.bootstrap.Column, { if (this.carousel && typeof(Roo.get(document.body).dom.style.transition) != 'undefined') { + //class="carousel-item carousel-item-next carousel-item-left" + this.transition = true; var dir = this.indexOfPanel(pan) > this.indexOfPanel(cur) ? 'next' : 'prev'; var lr = dir == 'next' ? 'left' : 'right'; pan.el.addClass(dir); // or prev + pan.el.addClass('carousel-item-' + dir); // or prev pan.el.dom.offsetWidth; // find the offset with - causing a reflow? cur.el.addClass(lr); // or right pan.el.addClass(lr); + cur.el.addClass('carousel-item-' +lr); // or right + pan.el.addClass('carousel-item-' +lr); + var _this = this; cur.el.on('transitionend', function() { Roo.log("trans end?"); - pan.el.removeClass([lr,dir]); + pan.el.removeClass([lr,dir, 'carousel-item-' + lr, 'carousel-item-' + dir]); pan.setActive(true); - cur.el.removeClass([lr]); + cur.el.removeClass([lr, 'carousel-item-' + lr]); cur.setActive(false); _this.transition = false; @@ -18487,10 +18606,12 @@ Roo.extend(Roo.bootstrap.TabPanel, Roo.bootstrap.Component, { href : '', getAutoCreate : function(){ - var cfg = { + + + var cfg = { tag: 'div', // item is needed for carousel - not sure if it has any effect otherwise - cls: 'tab-pane item' + ((this.href.length) ? ' clickable ' : ''), + cls: 'carousel-item tab-pane item' + ((this.href.length) ? ' clickable ' : ''), html: this.html || '' }; @@ -18502,6 +18623,7 @@ Roo.extend(Roo.bootstrap.TabPanel, Roo.bootstrap.Component, { cfg.tabId = this.tabId; } + return cfg; }, @@ -21147,16 +21269,28 @@ Roo.extend(Roo.bootstrap.CheckBox, Roo.bootstrap.Input, { if(this.inputType == 'radio'){ Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){ - e.findParent('.form-group', false, true).removeClass([_this.invalidClass, _this.validClass]); - e.findParent('.form-group', false, true).addClass(_this.validClass); + var fg = e.findParent('.form-group', false, true); + if (Roo.bootstrap.version == 3) { + fg.removeClass([_this.invalidClass, _this.validClass]); + fg.addClass(_this.validClass); + } else { + fg.removeClass(['is-valid', 'is-invalid']); + fg.addClass('is-valid'); + } }); return; } if(!this.groupId){ - this.el.findParent('.form-group', false, true).removeClass([this.invalidClass, this.validClass]); - this.el.findParent('.form-group', false, true).addClass(this.validClass); + var fg = this.el.findParent('.form-group', false, true); + if (Roo.bootstrap.version == 3) { + fg.removeClass([this.invalidClass, this.validClass]); + fg.addClass(this.validClass); + } else { + fg.removeClass(['is-valid', 'is-invalid']); + fg.addClass('is-valid'); + } return; } @@ -21167,8 +21301,14 @@ Roo.extend(Roo.bootstrap.CheckBox, Roo.bootstrap.Input, { } for(var i in group){ - group[i].el.findParent('.form-group', false, true).removeClass([this.invalidClass, this.validClass]); - group[i].el.findParent('.form-group', false, true).addClass(this.validClass); + var fg = group[i].el.findParent('.form-group', false, true); + if (Roo.bootstrap.version == 3) { + fg.removeClass([this.invalidClass, this.validClass]); + fg.addClass(this.validClass); + } else { + fg.removeClass(['is-valid', 'is-invalid']); + fg.addClass('is-valid'); + } } }, @@ -21197,17 +21337,30 @@ Roo.extend(Roo.bootstrap.CheckBox, Roo.bootstrap.Input, { } if(this.inputType == 'radio'){ + Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){ - e.findParent('.form-group', false, true).removeClass([_this.invalidClass, _this.validClass]); - e.findParent('.form-group', false, true).addClass(_this.invalidClass); + var fg = e.findParent('.form-group', false, true); + if (Roo.bootstrap.version == 3) { + fg.removeClass([_this.invalidClass, _this.validClass]); + fg.addClass(_this.invalidClass); + } else { + fg.removeClass(['is-invalid', 'is-valid']); + fg.addClass('is-invalid'); + } }); return; } if(!this.groupId){ - this.el.findParent('.form-group', false, true).removeClass([this.invalidClass, this.validClass]); - this.el.findParent('.form-group', false, true).addClass(this.invalidClass); + var fg = this.el.findParent('.form-group', false, true); + if (Roo.bootstrap.version == 3) { + fg.removeClass([_this.invalidClass, _this.validClass]); + fg.addClass(_this.invalidClass); + } else { + fg.removeClass(['is-invalid', 'is-valid']); + fg.addClass('is-invalid'); + } return; } @@ -21218,8 +21371,14 @@ Roo.extend(Roo.bootstrap.CheckBox, Roo.bootstrap.Input, { } for(var i in group){ - group[i].el.findParent('.form-group', false, true).removeClass([this.invalidClass, this.validClass]); - group[i].el.findParent('.form-group', false, true).addClass(this.invalidClass); + var fg = group[i].el.findParent('.form-group', false, true); + if (Roo.bootstrap.version == 3) { + fg.removeClass([_this.invalidClass, _this.validClass]); + fg.addClass(_this.invalidClass); + } else { + fg.removeClass(['is-invalid', 'is-valid']); + fg.addClass('is-invalid'); + } } }, @@ -21233,8 +21392,8 @@ Roo.extend(Roo.bootstrap.CheckBox, Roo.bootstrap.Input, { var label = Roo.bootstrap.FieldLabel.get(this.name + '-group'); if (label && label.iconEl) { - label.iconEl.removeClass(label.validClass); - label.iconEl.removeClass(label.invalidClass); + label.iconEl.removeClass([ label.validClass, label.invalidClass ]); + label.iconEl.removeClass(['is-invalid', 'is-valid']); } }, @@ -23863,9 +24022,7 @@ Roo.extend(Roo.bootstrap.HtmlEditor, Roo.bootstrap.TextArea, { /** * @cfg {String} inputType @hide */ - /** - * @cfg {String} invalidClass @hide - */ + /** * @cfg {String} invalidText @hide */ @@ -23965,7 +24122,8 @@ Roo.extend(Roo.bootstrap.htmleditor.ToolbarStandard, Roo.bootstrap.NavSimplebar, size : 'sm', xtype: 'Button', xns: Roo.bootstrap, - glyphicon : id, + //glyphicon : id, + fa: id, cmd : id || cmd, enableToggle:toggle !== false, html : html || '', @@ -23985,7 +24143,7 @@ Roo.extend(Roo.bootstrap.htmleditor.ToolbarStandard, Roo.bootstrap.NavSimplebar, xtype: 'Button', size : 'sm', xns: Roo.bootstrap, - glyphicon : 'font', + fa : 'font', //html : 'submit' menu : { xtype: 'Menu', @@ -29170,6 +29328,7 @@ Roo.extend(Roo.bootstrap.DocumentManager, Roo.bootstrap.Component, { this.progressDialog = new Roo.bootstrap.Modal({ cls : 'roo-document-manager-progress-dialog', allow_close : false, + animate : false, title : '', buttons : [ { @@ -30285,8 +30444,8 @@ Roo.extend(Roo.bootstrap.NavProgressItem, Roo.bootstrap.Component, { * @cfg {String} cls class of the element * @cfg {String} target label target * @cfg {Boolean} allowBlank (true|false) target allowBlank default true - * @cfg {String} invalidClass default "text-warning" - * @cfg {String} validClass default "text-success" + * @cfg {String} invalidClass DEPRICATED - BS4 uses is-invalid + * @cfg {String} validClass DEPRICATED - BS4 uses is-valid * @cfg {String} iconTooltip default "This field is required" * @cfg {String} indicatorpos (left|right) default left * @@ -30408,10 +30567,14 @@ Roo.extend(Roo.bootstrap.FieldLabel, Roo.bootstrap.Component, { this.indicator.removeClass('visible'); this.indicator.addClass('invisible'); } + if (Roo.bootstrap.version == 3) { + this.el.removeClass(this.invalidClass); + this.el.addClass(this.validClass); + } else { + this.el.removeClass('is-invalid'); + this.el.addClass('is-valid'); + } - this.el.removeClass(this.invalidClass); - - this.el.addClass(this.validClass); this.fireEvent('valid', this); }, @@ -30426,10 +30589,14 @@ Roo.extend(Roo.bootstrap.FieldLabel, Roo.bootstrap.Component, { this.indicator.removeClass('invisible'); this.indicator.addClass('visible'); } + if (Roo.bootstrap.version == 3) { + this.el.removeClass(this.validClass); + this.el.addClass(this.invalidClass); + } else { + this.el.removeClass('is-valid'); + this.el.addClass('is-invalid'); + } - this.el.removeClass(this.validClass); - - this.el.addClass(this.invalidClass); this.fireEvent('invalid', this, msg); } @@ -34001,21 +34168,23 @@ Roo.extend(Roo.bootstrap.RadioSet, Roo.bootstrap.Input, { } ] }; - - if(this.indicatorpos == 'left'){ - label.cn.unshift({ - tag : 'i', - cls : 'roo-required-indicator left-indicator text-danger fa fa-lg fa-star', - tooltip : 'This field is required' - }); - } else { - label.cn.push({ - tag : 'i', - cls : 'roo-required-indicator right-indicator text-danger fa fa-lg fa-star', - tooltip : 'This field is required' - }); + if (Roo.bootstrap.version == 3) { + + + if(this.indicatorpos == 'left'){ + label.cn.unshift({ + tag : 'i', + cls : 'roo-required-indicator left-indicator text-danger fa fa-lg fa-star', + tooltip : 'This field is required' + }); + } else { + label.cn.push({ + tag : 'i', + cls : 'roo-required-indicator right-indicator text-danger fa fa-lg fa-star', + tooltip : 'This field is required' + }); + } } - var items = { tag : 'div', cls : 'roo-radio-set-items' @@ -34167,14 +34336,19 @@ Roo.extend(Roo.bootstrap.RadioSet, Roo.bootstrap.Input, { markValid : function() { - if(this.labelEl.isVisible(true)){ + if(this.labelEl.isVisible(true) && this.indicatorEl()){ this.indicatorEl().removeClass('visible'); this.indicatorEl().addClass('invisible'); } - this.el.removeClass([this.invalidClass, this.validClass]); - this.el.addClass(this.validClass); + if (Roo.bootstrap.version == 3) { + this.el.removeClass([this.invalidClass, this.validClass]); + this.el.addClass(this.validClass); + } else { + this.el.removeClass(['is-invalid','is-valid']); + this.el.addClass(['is-valid']); + } this.fireEvent('valid', this); }, @@ -34184,13 +34358,17 @@ Roo.extend(Roo.bootstrap.RadioSet, Roo.bootstrap.Input, { return; } - if(this.labelEl.isVisible(true)){ + if(this.labelEl.isVisible(true) && this.indicatorEl()){ this.indicatorEl().removeClass('invisible'); this.indicatorEl().addClass('visible'); } - - this.el.removeClass([this.invalidClass, this.validClass]); - this.el.addClass(this.invalidClass); + if (Roo.bootstrap.version == 3) { + this.el.removeClass([this.invalidClass, this.validClass]); + this.el.addClass(this.invalidClass); + } else { + this.el.removeClass(['is-invalid','is-valid']); + this.el.addClass(['is-invalid']); + } this.fireEvent('invalid', this, msg); @@ -35206,7 +35384,7 @@ layout.addxtype({ case 'Content': // ContentPanel (el, cfg) case 'Scroll': // ContentPanel (el, cfg) case 'View': - cfg.autoCreate = true; + cfg.autoCreate = cfg.autoCreate || true; ret = new cfg.xns[cfg.xtype](cfg); // new panel!!!!! //} else { // var el = this.el.createChild(); @@ -37906,6 +38084,7 @@ Roo.bootstrap.panel.Tabs = function(config){ } this.stripWrap = Roo.get(this.createStrip(this.el.dom), true); this.stripEl = Roo.get(this.createStripList(this.stripWrap.dom), true); + this.stripEl.setVisibilityMode(Roo.Element.DISPLAY); this.stripBody = Roo.get(this.stripWrap.dom.firstChild.firstChild, true); if(Roo.isIE){ Roo.fly(this.stripWrap.dom.firstChild).setStyle("overflow-x", "hidden"); @@ -38065,9 +38244,11 @@ Roo.extend(Roo.bootstrap.panel.Tabs, Roo.util.Observable, { * Adds an existing {@link Roo.TabPanelItem}. * @param {Roo.TabPanelItem} item The TabPanelItem to add */ - addTabItem : function(item){ + addTabItem : function(item) + { this.items[item.id] = item; this.items.push(item); + this.autoSizeTabs(); // if(this.resizeTabs){ // item.setWidth(this.currentTabWidth || this.preferredTabWidth); // this.autoSizeTabs(); @@ -38149,7 +38330,8 @@ Roo.extend(Roo.bootstrap.panel.Tabs, Roo.util.Observable, { * @param {String/Number} id The id or index of the TabPanelItem to activate. * @return {Roo.TabPanelItem} The TabPanelItem. */ - activate : function(id){ + activate : function(id) + { var tab = this.items[id]; if(!tab){ return null; @@ -38215,12 +38397,22 @@ Roo.extend(Roo.bootstrap.panel.Tabs, Roo.util.Observable, { /** * Manual call to resize the tabs (if {@link #resizeTabs} is false this does nothing) */ - autoSizeTabs : function(){ + autoSizeTabs : function() + { var count = this.items.length; var vcount = count - this.hiddenCount; + + if (vcount < 2) { + this.stripEl.hide(); + } else { + this.stripEl.show(); + } + if(!this.resizeTabs || count < 1 || vcount < 1 || this.updating) { return; } + + var w = Math.max(this.el.getWidth() - this.cpad, 10); var availWidth = Math.floor(w / vcount); var b = this.stripBody; @@ -38280,7 +38472,9 @@ Roo.extend(Roo.bootstrap.panel.Tabs, Roo.util.Observable, { createStrip : function(container) { var strip = document.createElement("nav"); - strip.className = "navbar navbar-default"; //"x-tabs-wrap"; + strip.className = Roo.bootstrap.version == 4 ? + "navbar-light bg-light" : + "navbar navbar-default"; //"x-tabs-wrap"; container.appendChild(strip); return strip; }, @@ -38319,7 +38513,7 @@ Roo.extend(Roo.bootstrap.panel.Tabs, Roo.util.Observable, { createStripElements : function(stripEl, text, closable, tpl) { var td = document.createElement("li"); // was td.. - + td.className = 'nav-item'; //stripEl.insertBefore(td, stripEl.childNodes[stripEl.childNodes.length-1]); @@ -38359,12 +38553,18 @@ Roo.extend(Roo.bootstrap.panel.Tabs, Roo.util.Observable, { var template = tpl || this.tabTpl || false; if(!template){ - - template = new Roo.Template( - '' + - '{text}' + template = new Roo.Template( + Roo.bootstrap.version == 4 ? + ( + '{text}' + ) : ( + '' + + '{text}' + ) ); } @@ -38431,8 +38631,13 @@ Roo.bootstrap.panel.TabItem = function(config){ /** @private */ this.el = Roo.get(els.el); this.inner = Roo.get(els.inner, true); - this.textEl = Roo.get(this.el.dom.firstChild, true); - this.pnode = Roo.get(els.el.parentNode, true); + this.textEl = Roo.bootstrap.version == 4 ? + this.el : Roo.get(this.el.dom.firstChild, true); + + this.pnode = this.linode = Roo.get(els.el.parentNode, true); + this.status_node = Roo.bootstrap.version == 4 ? this.el : this.linode; + + // this.el.on("mousedown", this.onTabMouseDown, this); this.el.on("click", this.onTabClick, this); /** @private */ @@ -38487,7 +38692,7 @@ Roo.extend(Roo.bootstrap.panel.TabItem, Roo.util.Observable, * Shows this TabPanelItem -- this does not deactivate the currently active TabPanelItem. */ show : function(){ - this.pnode.addClass("active"); + this.status_node.addClass("active"); this.showAction(); if(Roo.isOpera){ this.tabPanel.stripWrap.repaint(); @@ -38507,7 +38712,7 @@ Roo.extend(Roo.bootstrap.panel.TabItem, Roo.util.Observable, * Hides this TabPanelItem -- if you don't activate another TabPanelItem this could look odd. */ hide : function(){ - this.pnode.removeClass("active"); + this.status_node.removeClass("active"); this.hideAction(); this.fireEvent("deactivate", this.tabPanel, this); }, @@ -38554,10 +38759,10 @@ Roo.extend(Roo.bootstrap.panel.TabItem, Roo.util.Observable, }, setWidth : function(width){ - var iwidth = width - this.pnode.getPadding("lr"); + var iwidth = width - this.linode.getPadding("lr"); this.inner.setWidth(iwidth); this.textEl.setWidth(iwidth-this.inner.getPadding("lr")); - this.pnode.setWidth(width); + this.linode.setWidth(width); }, */ /** @@ -38566,7 +38771,7 @@ Roo.extend(Roo.bootstrap.panel.TabItem, Roo.util.Observable, */ setHidden : function(hidden){ this.hidden = hidden; - this.pnode.setStyle("display", hidden ? "none" : ""); + this.linode.setStyle("display", hidden ? "none" : ""); }, /** @@ -38592,7 +38797,7 @@ Roo.extend(Roo.bootstrap.panel.TabItem, Roo.util.Observable, * #2804 [new] Tabs in Roojs * increase the width by 2-4 pixels to prevent the ellipssis showing in chrome */ - //this.setWidth(this.textEl.dom.scrollWidth+this.pnode.getPadding("lr")+this.inner.getPadding("lr") + 2); + //this.setWidth(this.textEl.dom.scrollWidth+this.linode.getPadding("lr")+this.inner.getPadding("lr") + 2); //this.el.endMeasure(); //}, @@ -38621,7 +38826,7 @@ Roo.extend(Roo.bootstrap.panel.TabItem, Roo.util.Observable, disable : function(){ if(this.tabPanel.active != this){ this.disabled = true; - this.pnode.addClass("disabled"); + this.status_node.addClass("disabled"); } }, @@ -38630,7 +38835,7 @@ Roo.extend(Roo.bootstrap.panel.TabItem, Roo.util.Observable, */ enable : function(){ this.disabled = false; - this.pnode.removeClass("disabled"); + this.status_node.removeClass("disabled"); }, /**