* @cfg {String} title of popover (or false to hide)
* @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 {String|Boolean|Roo.Element} add click hander to trigger show over what element
+ * - if false|parent, and it has a 'parent' then it will be automatically added to that element
* @cfg {Number} delay - delay before showing
* @constructor
setTitle: function(str)
{
this.title = str;
- this.el.select('.popover-title',true).first().dom.innerHTML = str;
+ if (this.el) {
+ this.el.select('.popover-title',true).first().dom.innerHTML = str;
+ }
+
},
setContent: function(str)
{
this.html = str;
- this.el.select('.popover-content',true).first().dom.innerHTML = str;
+ if (this.el) {
+ this.el.select('.popover-content',true).first().dom.innerHTML = str;
+ }
+
},
// as it get's added to the bottom of the page.
onRender : function(ct, position)
show : function (on_el)
{
+
+
if (!on_el) {
- on_el= (this.over == 'parent') ? this.parent().el : Roo.get(this.over);
+ if (this.parent() && (this.over == 'parent' || (this.over === false))) {
+ on_el = this.parent().el;
+ } else if (this.over) {
+ Roo.get(this.over);
+ } else {
+ on_el= false;
+ }
}
if (!this.el) {
this.render(document.body);
}
- // 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();
}
+
var placement = typeof this.placement == 'function' ?
this.placement.call(this, this.el, on_el) :
this.placement;
- var autoToken = /\s?auto?\s?/i;
+ /*
+ var autoToken = /\s?auto?\s?/i; /// not sure how this was supposed to work? right auto ? what?
+
+ // I think 'auto right' - but
+
var autoPlace = autoToken.test(placement);
if (autoPlace) {
placement = placement.replace(autoToken, '') || 'top';
}
+ */
+
- //this.el.detach()
- //this.el.setXY([0,0]);
this.el.show();
this.el.dom.style.display='block';
var p = this.getPosition();
var box = this.el.getBox();
- if (autoPlace) {
- // fixme..
- }
+
var align = Roo.bootstrap.Popover.alignment[placement];
this.el.addClass(align[2]);
// Roo.log(align);
- this.el.alignTo(on_el, align[0],align[1]);
+
+ if (on_el) {
+ this.el.alignTo(on_el, align[0],align[1]);
+ } 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 arrow = this.el.select('.arrow',true).first();
//arrow.set(align[2],
// Roo/bootstrap/Popover.js
Roo.bootstrap.Popover=function(A){Roo.bootstrap.Popover.superclass.constructor.call(this,A);this.addEvents({"show":true,"hide":true});};Roo.extend(Roo.bootstrap.Popover,Roo.bootstrap.Component,{title:false,html:false,placement:'right',trigger:'hover',delay:0,over:false,can_build_overlaid:false,getChildContainer:function(){return this.el.select('.popover-content',true).first();
},getAutoCreate:function(){var A={cls:'popover roo-dynamic roo-popover',style:'display:block',cn:[{cls:'arrow'},{cls:'popover-inner ',cn:[{tag:'h3',cls:'popover-title popover-header',html:this.title||''},{cls:'popover-content popover-body'+this.cls,html:this.html||''}
-]}]};return A;},setTitle:function(A){this.title=A;this.el.select('.popover-title',true).first().dom.innerHTML=A;},setContent:function(A){this.html=A;this.el.select('.popover-content',true).first().dom.innerHTML=A;},onRender:function(ct,A){Roo.bootstrap.Component.superclass.onRender.call(this,ct,A);
+]}]};return A;},setTitle:function(A){this.title=A;if(this.el){this.el.select('.popover-title',true).first().dom.innerHTML=A;}},setContent:function(A){this.html=A;if(this.el){this.el.select('.popover-content',true).first().dom.innerHTML=A;}},onRender:function(ct,A){Roo.bootstrap.Component.superclass.onRender.call(this,ct,A);
if(!this.el){var B=Roo.apply({},this.getAutoCreate());B.id=Roo.id();if(this.cls){B.cls+=' '+this.cls;}if(this.style){B.style=this.style;}this.el=Roo.get(document.body).createChild(B,A);}var C=[];if(typeof(this.items)!='undefined'){var D=this.items;delete this.items;
for(var i=0;i<D.length;i++){C.push(this.addxtype(Roo.apply({},D[i])));}}this.items=C;this.initEvents();},initEvents:function(){Roo.bootstrap.Popover.register(this);this.el.select('.popover-title',true).setVisibilityMode(Roo.Element.DISPLAY);this.el.enableDisplayMode('block');
this.el.hide();if(this.over===false&&!this.parent()){return;}if(this.triggers===false){return;}var A=(this.over=='parent'||this.over===false)?this.parent().el:Roo.get(this.over);var B=this.trigger?this.trigger.split(' '):[];Roo.each(B,function(C){if(C=='click'){A.on('click',this.toggle,this);
}else if(C!='manual'){var D=C=='hover'?'mouseenter':'focusin';var E=C=='hover'?'mouseleave':'focusout';A.on(D,this.enter,this);A.on(E,this.leave,this);}},this);},timeout:null,hoverState:null,toggle:function(){this.hoverState=='in'?this.leave():this.enter();
},enter:function(){clearTimeout(this.timeout);this.hoverState='in';if(!this.delay||!this.delay.show){this.show();return;}var _t=this;this.timeout=setTimeout(function(){if(_t.hoverState=='in'){_t.show();}},this.delay.show)},leave:function(){clearTimeout(this.timeout);
-this.hoverState='out';if(!this.delay||!this.delay.hide){this.hide();return;}var _t=this;this.timeout=setTimeout(function(){if(_t.hoverState=='out'){_t.hide();}},this.delay.hide)},show:function(A){if(!A){A=(this.over=='parent')?this.parent().el:Roo.get(this.over);
-}if(!this.el){this.render(document.body);}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();}var B=typeof this.placement=='function'?this.placement.call(this,this.el,A):this.placement;var C=/\s?auto?\s?/i;var D=C.test(B);if(D){B=B.replace(C,'')||'top';}this.el.show();this.el.dom.style.display='block';
-var p=this.getPosition();var E=this.el.getBox();if(D){}var F=Roo.bootstrap.Popover.alignment[B];this.el.addClass(F[2]);this.el.alignTo(A,F[0],F[1]);this.el.addClass('in');if(this.el.hasClass('fade')){}this.hoverState='in';this.fireEvent('show',this);},hide:function(){this.el.setXY([0,0]);
+this.hoverState='out';if(!this.delay||!this.delay.hide){this.hide();return;}var _t=this;this.timeout=setTimeout(function(){if(_t.hoverState=='out'){_t.hide();}},this.delay.hide)},show:function(A){if(!A){if(this.parent()&&(this.over=='parent'||(this.over===false))){A=this.parent().el;
+}else if(this.over){Roo.get(this.over);}else{A=false;}}if(!this.el){this.render(document.body);}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();
+}var B=typeof this.placement=='function'?this.placement.call(this,this.el,A):this.placement;this.el.show();this.el.dom.style.display='block';var p=this.getPosition();var C=this.el.getBox();var D=Roo.bootstrap.Popover.alignment[B];this.el.addClass(D[2]);if(A){this.el.alignTo(A,D[0],D[1]);
+}else{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)]);}this.el.addClass('in');if(this.el.hasClass('fade')){}this.hoverState='in';this.fireEvent('show',this);},hide:function(){this.el.setXY([0,0]);
this.el.removeClass('in');this.el.hide();this.hoverState=null;this.fireEvent('hide',this);}});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']}
,clickHander:false,onMouseDown:function(e){if(!e.getTarget(".roo-popover")){this.hideAll();}},popups:[],register:function(A){if(!Roo.bootstrap.Popover.clickHandler){Roo.bootstrap.Popover.clickHandler=Roo.get(document).on("mousedown",Roo.bootstrap.Popover.onMouseDown,Roo.bootstrap.Popover);
}this.hideAll();this.popups.push(A);},hideAll:function(){this.popups.forEach(function(p){p.hide();});}});