* @cfg {Boolean} animate default true
* @cfg {Boolean} allow_close default true
* @cfg {Boolean} fitwindow default false
+ * @cfg {Boolean} bodyOverflow should the body element have overflow auto added 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|xl) default empty
{
// we will default to modal-body-overflow - might need to remove or make optional later.
var bdy = {
- cls : 'modal-body ' + (this.fitwindow ? 'overflow-auto' : ''),
+ cls : 'modal-body ' + (this.bodyOverflow ? 'overflow-auto' : ''),
html : this.html || ''
};
var title = {
- tag: 'h4',
+ tag: 'h5',
cls : 'modal-title',
html : this.title
};
if (this.fitwindow) {
-
+ this.dialogEl.setStyle( { 'max-width' : '100%' });
this.setSize(
this.width || Roo.lib.Dom.getViewportWidth(true) - 30,
this.height || Roo.lib.Dom.getViewportHeight(true) // catering margin-top 30 margin-bottom 30
* @cfg {Boolean} inverse
* @cfg {String} type (nav|pills|tab) default nav
* @cfg {String} navId - reference Id for navbar.
-
+ * @cfg {Boolean} pilltype default true (turn to off to disable active toggle)
*
* @constructor
* Create a new nav group
type: 'nav',
navId : '',
// private
+ pilltype : true,
navItems : false,
* @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} button_weight (default|primary|secondary|success|info|warning|danger|link|light|dark) default none
+ * @cfg {Boolean} button_outline show and outlined button
* @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
* @cfg {String} fa - Fontawsome icon name (can add stuff to it like fa-2x)
* @cfg {Boolean} active Is item active
* @cfg {Boolean} disabled Is item disabled
-
+ * @cfg {String} linkcls Link Class
* @cfg {Boolean} preventDefault (true | false) default false
* @cfg {String} tabId the tab that this item activates.
* @cfg {String} tagtype (a|span) render as a href or span?
was_active : false,
button_weight : '',
button_outline : false,
-
+ linkcls : '',
navLink: false,
getAutoCreate : function(){
cls: 'nav-item'
};
+ cfg.cls = typeof(cfg.cls) == 'undefined' ? '' : cfg.cls;
+
if (this.active) {
- cfg.cls = typeof(cfg.cls) == 'undefined' ? 'active' : cfg.cls + ' active';
+ cfg.cls += ' active' ;
}
if (this.disabled) {
cfg.cls += ' disabled';
}
];
if (this.tagtype == 'a') {
- cfg.cn[0].cls = 'nav-link';
+ cfg.cn[0].cls = 'nav-link' + (this.active ? ' active' : '') + ' ' + this.linkcls;
+
}
if (this.icon) {
cfg.cn[0].html = '<i class="'+this.icon+'"></i> <span>' + cfg.cn[0].html + '</span>';
this.menu = this.addxtype(Roo.apply({}, this.menu));
}
- this.el.select('a',true).on('click', this.onClick, this);
+ this.el.on('click', this.onClick, this);
- if(this.tagtype == 'span'){
- this.el.select('span',true).on('click', this.onClick, this);
- }
+ //if(this.tagtype == 'span'){
+ // this.el.select('span',true).on('click', this.onClick, this);
+ //}
// at this point parent should be available..
this.parent().register(this);
var p = this.parent();
- if (['tabs','pills'].indexOf(p.type)!==-1) {
+ if (['tabs','pills'].indexOf(p.type)!==-1 && p.pilltype) {
if (typeof(p.setActiveItem) !== 'undefined') {
p.setActiveItem(this);
}
*/
tooltipEl : function()
{
- return this.el.select('' + this.tagtype + '', true).first();
+ return this.el; //this.tagtype == 'a' ? this.el : this.el.select('' + this.tagtype + '', true).first();
},
scrollToElement : function(e)
* Bootstrap Popover class
* @cfg {String} html contents of the popover (or false to use children..)
* @cfg {String} title of popover (or false to hide)
- * @cfg {String} placement how it is placed
+ * @cfg {String|function} (right|top|bottom|left|auto) placement how it is placed
* @cfg {String} trigger click || hover (or false to trigger manually)
- * @cfg {String} over what (parent or false to trigger manually.)
+ * @cfg {Boolean} modal - popovers that are modal will mask the screen, and must be closed with another event.
+ * @cfg {String|Boolean|Roo.Element} add click hander to trigger show over what element
+ * - if false and it has a 'parent' then it will be automatically added to that element
+ * - if string - Roo.get will be called
* @cfg {Number} delay - delay before showing
* @constructor
Roo.extend(Roo.bootstrap.Popover, Roo.bootstrap.Component, {
- title: 'Fill in a title',
+ title: false,
html: false,
placement : 'right',
trigger : 'hover', // hover
-
+ modal : false,
delay : 0,
- over: 'parent',
+ over: false,
can_build_overlaid : false,
+ maskEl : false, // the mask element
+ headerEl : false,
+ contentEl : false,
+ alignEl : false, // when show is called with an element - this get's stored.
+
getChildContainer : function()
{
- return this.el.select('.popover-content',true).first();
+ return this.contentEl;
+
+ },
+ getPopoverHeader : function()
+ {
+ this.title = true; // flag not to hide it..
+ this.headerEl.addClass('p-0');
+ return this.headerEl
},
+
getAutoCreate : function(){
var cfg = {
- cls : 'popover roo-dynamic',
+ cls : 'popover roo-dynamic shadow roo-popover' + (this.modal ? '-modal' : ''),
style: 'display:block',
cn : [
{
cls : 'arrow'
},
{
- cls : 'popover-inner',
+ cls : 'popover-inner ',
cn : [
{
tag: 'h3',
cls: 'popover-title popover-header',
- html : this.title
+ html : this.title === false ? '' : this.title
},
{
- cls : 'popover-content popover-body',
- html : this.html
+ cls : 'popover-content popover-body ' + (this.cls || ''),
+ html : this.html || ''
}
]
return cfg;
},
+ /**
+ * @param {string} the title
+ */
setTitle: function(str)
{
this.title = str;
- this.el.select('.popover-title',true).first().dom.innerHTML = str;
+ if (this.el) {
+ this.headerEl.dom.innerHTML = str;
+ }
+
},
+ /**
+ * @param {string} the body content
+ */
setContent: function(str)
{
this.html = str;
- this.el.select('.popover-content',true).first().dom.innerHTML = str;
+ if (this.contentEl) {
+ this.contentEl.dom.innerHTML = str;
+ }
+
},
// as it get's added to the bottom of the page.
onRender : function(ct, position)
{
Roo.bootstrap.Component.superclass.onRender.call(this, ct, position);
+
+
+
if(!this.el){
var cfg = Roo.apply({}, this.getAutoCreate());
cfg.id = Roo.id();
this.el = Roo.get(document.body).createChild(cfg, position);
// Roo.log(this.el);
}
+
+ this.contentEl = this.el.select('.popover-content',true).first();
+ this.headerEl = this.el.select('.popover-title',true).first();
+
+ var nitems = [];
+ if(typeof(this.items) != 'undefined'){
+ var items = this.items;
+ delete this.items;
+
+ for(var i =0;i < items.length;i++) {
+ nitems.push(this.addxtype(Roo.apply({}, items[i])));
+ }
+ }
+
+ this.items = nitems;
+
+ this.maskEl = Roo.DomHelper.append(document.body, {tag: "div", cls:"x-dlg-mask"}, true);
+ Roo.EventManager.onWindowResize(this.resizeMask, this, true);
+
+
+
this.initEvents();
},
+ resizeMask : function()
+ {
+ this.maskEl.setSize(
+ Roo.lib.Dom.getViewWidth(true),
+ Roo.lib.Dom.getViewHeight(true)
+ );
+ },
+
initEvents : function()
{
- this.el.select('.popover-title',true).setVisibilityMode(Roo.Element.DISPLAY);
+
+ if (!this.modal) {
+ Roo.bootstrap.Popover.register(this);
+ }
+
+ this.arrowEl = this.el.select('.arrow',true).first();
+ this.headerEl.setVisibilityMode(Roo.Element.DISPLAY); // probably not needed as it's default in BS4
this.el.enableDisplayMode('block');
this.el.hide();
- if (this.over === false) {
+
+
+ if (this.over === false && !this.parent()) {
return;
}
if (this.triggers === false) {
return;
}
- var on_el = (this.over == 'parent') ? this.parent().el : Roo.get(this.over);
+
+ // support parent
+ var on_el = (this.over == 'parent' || this.over === false) ? this.parent().el : Roo.get(this.over);
var triggers = this.trigger ? this.trigger.split(' ') : [];
Roo.each(triggers, function(trigger) {
on_el.on(eventOut, this.leave, this);
}
}, this);
-
},
}
}, this.delay.hide)
},
-
- show : function (on_el)
+ /**
+ * Show the popover
+ * @param {Roo.Element|string|Boolean} - element to align and point to. (set align to [ pos, offset ])
+ * @param {string} (left|right|top|bottom) position
+ */
+ show : function (on_el, placement)
{
+ this.placement = typeof(placement) == 'undefined' ? this.placement : placement;
+ on_el = on_el || false; // default to false
+
if (!on_el) {
- on_el= (this.over == 'parent') ? this.parent().el : Roo.get(this.over);
- }
-
- // set content.
- this.el.select('.popover-title',true).first().dom.innerHtml = this.title;
- if (this.html !== false) {
- this.el.select('.popover-content',true).first().dom.innerHtml = this.html;
- }
- this.el.removeClass([
- 'fade','top','bottom', 'left', 'right','in',
- 'bs-popover-top','bs-popover-bottom', 'bs-popover-left', 'bs-popover-right'
- ]);
- if (!this.title.length) {
- this.el.select('.popover-title',true).hide();
+ if (this.parent() && (this.over == 'parent' || (this.over === false))) {
+ on_el = this.parent().el;
+ } else if (this.over) {
+ Roo.get(this.over);
+ }
+
}
- var placement = typeof this.placement == 'function' ?
- this.placement.call(this, this.el, on_el) :
- this.placement;
-
- var autoToken = /\s?auto?\s?/i;
- var autoPlace = autoToken.test(placement);
- if (autoPlace) {
- placement = placement.replace(autoToken, '') || 'top';
+ this.alignEl = Roo.get( on_el );
+
+ if (!this.el) {
+ this.render(document.body);
}
- //this.el.detach()
- //this.el.setXY([0,0]);
- this.el.show();
- this.el.dom.style.display='block';
- this.el.addClass(placement);
- //this.el.appendTo(on_el);
+
- var p = this.getPosition();
- var box = this.el.getBox();
+ if (this.title === false) {
+ this.headerEl.hide();
+ }
- if (autoPlace) {
- // fixme..
+
+ this.el.show();
+ this.el.dom.style.display = 'block';
+
+
+ if (this.alignEl) {
+ this.updatePosition(this.placement, true);
+
+ } else {
+ // this is usually just done by the builder = to show the popoup in the middle of the scren.
+ var es = this.el.getSize();
+ var x = Roo.lib.Dom.getViewWidth()/2;
+ var y = Roo.lib.Dom.getViewHeight()/2;
+ this.el.setXY([ x-(es.width/2), y-(es.height/2)] );
+
}
- var align = Roo.bootstrap.Popover.alignment[placement];
+
-// Roo.log(align);
- this.el.alignTo(on_el, align[0],align[1]);
//var arrow = this.el.select('.arrow',true).first();
//arrow.set(align[2],
this.el.addClass('in');
-
- if (this.el.hasClass('fade')) {
- // fade it?
- }
+
this.hoverState = 'in';
+ if (this.modal) {
+ this.maskEl.setSize(Roo.lib.Dom.getViewWidth(true), Roo.lib.Dom.getViewHeight(true));
+ this.maskEl.setStyle('z-index', Roo.bootstrap.Popover.zIndex++);
+ this.maskEl.dom.style.display = 'block';
+ this.maskEl.addClass('show');
+ }
+ this.el.setStyle('z-index', Roo.bootstrap.Popover.zIndex++);
+
this.fireEvent('show', this);
},
+ /**
+ * fire this manually after loading a grid in the table for example
+ * @param {string} (left|right|top|bottom) where to try and put it (use false to use the last one)
+ * @param {Boolean} try and move it if we cant get right position.
+ */
+ updatePosition : function(placement, try_move)
+ {
+ // allow for calling with no parameters
+ placement = placement ? placement : this.placement;
+ try_move = typeof(try_move) == 'undefined' ? true : try_move;
+
+ this.el.removeClass([
+ 'fade','top','bottom', 'left', 'right','in',
+ 'bs-popover-top','bs-popover-bottom', 'bs-popover-left', 'bs-popover-right'
+ ]);
+ this.el.addClass(placement + ' bs-popover-' + placement);
+
+ if (!this.alignEl ) {
+ return false;
+ }
+
+ switch (placement) {
+ case 'right':
+ var exact = this.el.getAlignToXY(this.alignEl, 'tl-tr', [10,0]);
+ var offset = this.el.getAlignToXY(this.alignEl, 'tl-tr?',[10,0]);
+ if (!try_move || exact.equals(offset) || exact[0] == offset[0] ) {
+ //normal display... or moved up/down.
+ this.el.setXY(offset);
+ var xy = this.alignEl.getAnchorXY('tr', false);
+ xy[0]+=2;xy[1]+=5;
+ this.arrowEl.setXY(xy);
+ return true;
+ }
+ // continue through...
+ return this.updatePosition('left', false);
+
+
+ case 'left':
+ var exact = this.el.getAlignToXY(this.alignEl, 'tr-tl', [-10,0]);
+ var offset = this.el.getAlignToXY(this.alignEl, 'tr-tl?',[-10,0]);
+ if (!try_move || exact.equals(offset) || exact[0] == offset[0] ) {
+ //normal display... or moved up/down.
+ this.el.setXY(offset);
+ var xy = this.alignEl.getAnchorXY('tl', false);
+ xy[0]-=10;xy[1]+=5; // << fix me
+ this.arrowEl.setXY(xy);
+ return true;
+ }
+ // call self...
+ return this.updatePosition('right', false);
+
+ case 'top':
+ var exact = this.el.getAlignToXY(this.alignEl, 'b-t', [0,-10]);
+ var offset = this.el.getAlignToXY(this.alignEl, 'b-t?',[0,-10]);
+ if (!try_move || exact.equals(offset) || exact[1] == offset[1] ) {
+ //normal display... or moved up/down.
+ this.el.setXY(offset);
+ var xy = this.alignEl.getAnchorXY('t', false);
+ xy[1]-=10; // << fix me
+ this.arrowEl.setXY(xy);
+ return true;
+ }
+ // fall through
+ return this.updatePosition('bottom', false);
+
+ case 'bottom':
+ var exact = this.el.getAlignToXY(this.alignEl, 't-b', [0,10]);
+ var offset = this.el.getAlignToXY(this.alignEl, 't-b?',[0,10]);
+ if (!try_move || exact.equals(offset) || exact[1] == offset[1] ) {
+ //normal display... or moved up/down.
+ this.el.setXY(offset);
+ var xy = this.alignEl.getAnchorXY('b', false);
+ xy[1]+=2; // << fix me
+ this.arrowEl.setXY(xy);
+ return true;
+ }
+ // fall through
+ return this.updatePosition('top', false);
+
+
+ }
+
+
+ return false;
+ },
+
hide : function()
{
this.el.setXY([0,0]);
this.el.removeClass('in');
this.el.hide();
this.hoverState = null;
-
+ this.maskEl.hide(); // always..
this.fireEvent('hide', this);
}
});
-Roo.bootstrap.Popover.alignment = {
- 'left' : ['r-l', [-10,0], 'right bs-popover-right'],
- 'right' : ['l-r', [10,0], 'left bs-popover-left'],
- 'bottom' : ['t-b', [0,10], 'top bs-popover-top'],
- 'top' : [ 'b-t', [0,-10], 'bottom bs-popover-bottom']
+
+Roo.apply(Roo.bootstrap.Popover, {
+
+ alignment : {
+ 'left' : ['r-l', [-10,0], 'left bs-popover-left'],
+ 'right' : ['l-br', [10,0], 'right bs-popover-right'],
+ 'bottom' : ['t-b', [0,10], 'top bs-popover-top'],
+ 'top' : [ 'b-t', [0,-10], 'bottom bs-popover-bottom']
+ },
+
+ zIndex : 20001,
+
+ clickHander : false,
+
+
+ onMouseDown : function(e)
+ {
+ if (!e.getTarget(".roo-popover")) {
+ this.hideAll();
+ }
+
+ },
+
+ popups : [],
+
+ register : function(popup)
+ {
+ if (!Roo.bootstrap.Popover.clickHandler) {
+ Roo.bootstrap.Popover.clickHandler = Roo.get(document).on("mousedown", Roo.bootstrap.Popover.onMouseDown, Roo.bootstrap.Popover);
+ }
+ // hide other popups.
+ this.hideAll();
+ this.popups.push(popup);
+ },
+ hideAll : function()
+ {
+ this.popups.forEach(function(p) {
+ p.hide();
+ });
+ }
+
+});/*
+ * - LGPL
+ *
+ * Card header - holder for the card header elements.
+ *
+ */
+
+/**
+ * @class Roo.bootstrap.PopoverNav
+ * @extends Roo.bootstrap.NavGroup
+ * Bootstrap Popover header navigation class
+ * @constructor
+ * Create a new Popover Header Navigation
+ * @param {Object} config The config object
+ */
+
+Roo.bootstrap.PopoverNav = function(config){
+ Roo.bootstrap.PopoverNav.superclass.constructor.call(this, config);
};
+Roo.extend(Roo.bootstrap.PopoverNav, Roo.bootstrap.NavSimplebar, {
+
+
+ container_method : 'getPopoverHeader'
+
+
+
+
+
+});
+
+
+
/*
* - LGPL
*
//Roo.log(className);
if (className.indexOf('day') > -1 && className.indexOf('disabled') < 0 ){
var day = parseInt(html, 10) || 1;
- var year = this.viewDate.getUTCFullYear(),
- month = this.viewDate.getUTCMonth();
+ var year = (this.viewDate || new Date()).getUTCFullYear(),
+ month = (this.viewDate || new Date()).getUTCMonth();
if (className.indexOf('old') > -1) {
if(month === 0 ){
* valid according to {@link Date#parseDate} (defaults to 'H:i').
*/
format : "H:i",
-
+
+ getAutoCreate : function()
+ {
+ this.after = '<i class="fa far fa-clock"></i>';
+ return Roo.bootstrap.TimeField.superclass.getAutoCreate.call(this);
+
+
+ },
onRender: function(ct, position)
{
Roo.bootstrap.TimeField.superclass.onRender.call(this, ct, position);
- this.el.select('>.input-group', true).first().createChild(Roo.bootstrap.TimeField.template);
+ this.pickerEl = Roo.get(document.body).createChild(Roo.bootstrap.TimeField.template);
this.picker().setVisibilityMode(Roo.Element.DISPLAY).originalDisplay = 'block';
this.fillTime();
this.update();
- this.pop.select('span.hours-up', true).first().on('click', this.onIncrementHours, this);
- this.pop.select('span.hours-down', true).first().on('click', this.onDecrementHours, this);
- this.pop.select('span.minutes-up', true).first().on('click', this.onIncrementMinutes, this);
- this.pop.select('span.minutes-down', true).first().on('click', this.onDecrementMinutes, this);
+ this.pop.select('.hours-up', true).first().on('click', this.onIncrementHours, this);
+ this.pop.select('.hours-down', true).first().on('click', this.onDecrementHours, this);
+ this.pop.select('.minutes-up', true).first().on('click', this.onIncrementMinutes, this);
+ this.pop.select('.minutes-down', true).first().on('click', this.onDecrementMinutes, this);
this.pop.select('button.period', true).first().on('click', this.onTogglePeriod, this);
this.pop.select('button.ok', true).first().on('click', this.setTime, this);
picker : function()
{
- return this.el.select('.datepicker', true).first();
+ return this.pickerEl;
},
fillTime: function()
cls: 'btn',
cn: [
{
- tag: 'span',
- cls: 'hours-up glyphicon glyphicon-chevron-up'
+ tag: 'i',
+ cls: 'hours-up fa fas fa-chevron-up'
}
]
}
cls: 'btn',
cn: [
{
- tag: 'span',
- cls: 'minutes-up glyphicon glyphicon-chevron-up'
+ tag: 'i',
+ cls: 'minutes-up fa fas fa-chevron-up'
}
]
}
cn: [
{
tag: 'span',
- cls: 'hours-down glyphicon glyphicon-chevron-down'
+ cls: 'hours-down fa fas fa-chevron-down'
}
]
}
cn: [
{
tag: 'span',
- cls: 'minutes-down glyphicon glyphicon-chevron-down'
+ cls: 'minutes-down fa fas fa-chevron-down'
}
]
}
cls.pop();
cls.push('left');
}
-
+ //this.picker().setXY(20000,20000);
this.picker().addClass(cls.join('-'));
var _this = this;
Roo.each(cls, function(c){
if(c == 'bottom'){
- _this.picker().setTop(_this.inputEl().getHeight());
+ (function() {
+ //
+ }).defer(200);
+ _this.picker().alignTo(_this.inputEl(), "tr-br", [0, 10], false);
+ //_this.picker().setTop(_this.inputEl().getHeight());
return;
}
if(c == 'top'){
- _this.picker().setTop(0 - _this.picker().getHeight());
+ _this.picker().alignTo(_this.inputEl(), "br-tr", [0, 10], false);
+
+ //_this.picker().setTop(0 - _this.picker().getHeight());
return;
}
-
+ /*
if(c == 'left'){
_this.picker().setLeft(_this.inputEl().getLeft() + _this.inputEl().getWidth() - _this.el.getLeft() - _this.picker().getWidth());
return;
_this.picker().setLeft(_this.inputEl().getLeft() - _this.el.getLeft());
return;
}
+ */
});
},
});
-
-Roo.apply(Roo.bootstrap.TimeField, {
-
- content : {
- tag: 'tbody',
- cn: [
- {
- tag: 'tr',
- cn: [
- {
- tag: 'td',
- colspan: '7'
- }
- ]
- }
- ]
- },
-
- footer : {
- tag: 'tfoot',
- cn: [
- {
- tag: 'tr',
- cn: [
- {
- tag: 'th',
- colspan: '7',
- cls: '',
- cn: [
- {
- tag: 'button',
- cls: 'btn btn-info ok',
- html: 'OK'
- }
- ]
- }
-
- ]
- }
- ]
- }
-});
+
Roo.apply(Roo.bootstrap.TimeField, {
tag: 'table',
cls: 'table-condensed',
cn:[
- Roo.bootstrap.TimeField.content,
- Roo.bootstrap.TimeField.footer
+ {
+ tag: 'tbody',
+ cn: [
+ {
+ tag: 'tr',
+ cn: [
+ {
+ tag: 'td',
+ colspan: '7'
+ }
+ ]
+ }
+ ]
+ },
+ {
+ tag: 'tfoot',
+ cn: [
+ {
+ tag: 'tr',
+ cn: [
+ {
+ tag: 'th',
+ colspan: '7',
+ cls: '',
+ cn: [
+ {
+ tag: 'button',
+ cls: 'btn btn-info ok',
+ html: 'OK'
+ }
+ ]
+ }
+
+ ]
+ }
+ ]
+ }
]
}
]
// private
onLoad : function(ds, r, o)
{
- this.cursor = o.params.start ? o.params.start : 0;
+ this.cursor = o.params && o.params.start ? o.params.start : 0;
var d = this.getPageData(),
ap = d.activePage,
};
-Roo.bootstrap.layout.Border.regions = ["north","south","east","west","center"];
+Roo.bootstrap.layout.Border.regions = ["center", "north","south","east","west"];
Roo.extend(Roo.bootstrap.layout.Border, Roo.bootstrap.layout.Manager, {
this.split.orientation = Roo.bootstrap.SplitBar.VERTICAL;
this.split.el.addClass("roo-layout-split-v");
}
- var size = config.initialSize || config.height;
- if(typeof size != "undefined"){
- this.el.setHeight(size);
- }
+ //var size = config.initialSize || config.height;
+ //if(this.el && typeof size != "undefined"){
+ // this.el.setHeight(size);
+ //}
};
Roo.extend(Roo.bootstrap.layout.North, Roo.bootstrap.layout.Split,
{
orientation: Roo.bootstrap.SplitBar.VERTICAL,
+
+
+ onRender : function(ctr, pos)
+ {
+ Roo.bootstrap.layout.Split.prototype.onRender.call(this, ctr, pos);
+ var size = this.config.initialSize || this.config.height;
+ if(this.el && typeof size != "undefined"){
+ this.el.setHeight(size);
+ }
-
+ },
getBox : function(){
if(this.collapsed){
this.split.orientation = Roo.bootstrap.SplitBar.VERTICAL;
this.split.el.addClass("roo-layout-split-v");
}
- var size = config.initialSize || config.height;
- if(typeof size != "undefined"){
- this.el.setHeight(size);
- }
+
};
Roo.extend(Roo.bootstrap.layout.South, Roo.bootstrap.layout.Split, {
orientation: Roo.bootstrap.SplitBar.VERTICAL,
+
+ onRender : function(ctr, pos)
+ {
+ Roo.bootstrap.layout.Split.prototype.onRender.call(this, ctr, pos);
+ var size = this.config.initialSize || this.config.height;
+ if(this.el && typeof size != "undefined"){
+ this.el.setHeight(size);
+ }
+
+ },
+
getBox : function(){
if(this.collapsed){
return this.collapsedEl.getBox();
this.split.orientation = Roo.bootstrap.SplitBar.HORIZONTAL;
this.split.el.addClass("roo-layout-split-h");
}
- var size = config.initialSize || config.width;
- if(typeof size != "undefined"){
- this.el.setWidth(size);
- }
+
};
Roo.extend(Roo.bootstrap.layout.East, Roo.bootstrap.layout.Split, {
orientation: Roo.bootstrap.SplitBar.HORIZONTAL,
+
+ onRender : function(ctr, pos)
+ {
+ Roo.bootstrap.layout.Split.prototype.onRender.call(this, ctr, pos);
+ var size = this.config.initialSize || this.config.width;
+ if(this.el && typeof size != "undefined"){
+ this.el.setWidth(size);
+ }
+
+ },
+
getBox : function(){
if(this.collapsed){
return this.collapsedEl.getBox();
return this.collapsedEl.getBox();
}
var box = this.el.getBox();
+ if (box.width == 0) {
+ box.width = this.config.width; // kludge?
+ }
if(this.split){
box.width += this.split.el.getWidth();
}
* @cfg {String/Object} params When used with {@link #url}, calls {@link #setUrl} with this value
* @cfg {Boolean} loadOnce When used with {@link #url}, calls {@link #setUrl} with this value
* @cfg {String} content Raw content to fill content panel with (uses setContent on construction.)
+ * @cfg {Boolean} iframe contents are an iframe - makes showing remote sources/CSS feasible..
* @cfg {Boolean} badges render the badges
* @cfg {String} cls extra classes to use
* @cfg {String} background (primary|secondary|success|info|warning|danger|light|dark)
" roo-layout-inactive-content",
id: config.id||el
};
+ if (config.iframe) {
+ elcfg.cn = [
+ {
+ tag : 'iframe',
+ style : 'border: 0px',
+ src : 'about:blank'
+ }
+ ];
+ }
+
if (config.html) {
elcfg.html = config.html;
}
this.el = Roo.DomHelper.append(document.body, elcfg , true);
+ if (config.iframe) {
+ this.iframeEl = this.el.select('iframe',true).first();
+ }
+
}
}
this.closable = false;
- if(this.autoScroll){
+ if(this.autoScroll && !this.iframe){
this.resizeEl.setStyle("overflow", "auto");
} else {
// fix randome scrolling
tabTip : '',
+ iframe : false,
+ iframeEl : false,
+
setRegion : function(region){
this.region = region;
this.setActiveClass(region && !this.background);
return true;
},
/**
- * Updates this panel's element
+ * Updates this panel's element (not for iframe)
* @param {String} content The new content
* @param {Boolean} loadScripts (optional) true to look for and process scripts
*/
setContent : function(content, loadScripts){
+ if (this.iframe) {
+ return;
+ }
+
this.el.update(content, loadScripts);
},
* @return {Roo.UpdateManager} The UpdateManager
*/
getUpdateManager : function(){
+ if (this.iframe) {
+ return false;
+ }
return this.el.getUpdateManager();
},
/**
* Loads this content panel immediately with content from XHR. Note: to delay loading until the panel is activated, use {@link #setUrl}.
+ * Does not work with IFRAME contents
* @param {Object/String/Function} url The url for this request or a function to call to get the url or a config object containing any of the following options:
<pre><code>
panel.load({
scripts: false
});
</code></pre>
+
* The only required property is <i>url</i>. The optional properties <i>nocache</i>, <i>text</i> and <i>scripts</i>
* are shorthand for <i>disableCaching</i>, <i>indicatorText</i> and <i>loadScripts</i> and are used to set their associated property on this panel UpdateManager instance.
* @param {String/Object} params (optional) The parameters to pass as either a URL encoded string "param1=1&param2=2" or an object {param1: 1, param2: 2}
* @return {Roo.ContentPanel} this
*/
load : function(){
+
+ if (this.iframe) {
+ return this;
+ }
+
var um = this.el.getUpdateManager();
um.update.apply(um, arguments);
return this;
* @param {String/Function} url The URL to load the content from or a function to call to get the URL
* @param {String/Object} params (optional) The string params for the update call or an object of the params. See {@link Roo.UpdateManager#update} for more details. (Defaults to null)
* @param {Boolean} loadOnce (optional) Whether to only load the content once. If this is false it makes the Ajax call every time this panel is activated. (Defaults to false)
- * @return {Roo.UpdateManager} The UpdateManager
+ * @return {Roo.UpdateManager|Boolean} The UpdateManager or false if IFRAME
*/
setUrl : function(url, params, loadOnce){
+ if (this.iframe) {
+ this.iframeEl.dom.src = url;
+ return false;
+ }
+
if(this.refreshDelegate){
this.removeListener("activate", this.refreshDelegate);
}
this.el.setSize(width, height);
}
var size = this.adjustForComponents(width, height);
+ if (this.iframe) {
+ this.iframeEl.setSize(width,height);
+ }
+
this.resizeEl.setSize(this.autoWidth ? "auto" : size.width, this.autoHeight ? "auto" : size.height);
this.fireEvent('resize', this, size.width, size.height);
+
+
}
},
var tbf= grid.getGridEl().select('tfoot', true).first();
if (tbf) {
- size.height -= thd.getHeight();
+ size.height -= tbf.getHeight();
}
if (thd) {
size.height -= thd.getHeight();