var spaceAbove = offs.top - rect.y;\r
var spaceBelow = rect.height - height - spaceAbove;\r
\r
- // consolelog('wHeight:'+rect.height+ ' space above: '+spaceAbove + ' spacebelow: '+spaceBelow);\r
+ // consolelog('wHeight:'+rect.height+ ' space above: '+spaceAbove + ' spacebelow: '+spaceBelow);\r
\r
if(spaceAbove>spaceBelow){\r
p.css({\r
'maxHeight':(spaceAbove-p.shadowoffset)+'px',\r
'top':rect.y+'px'\r
- });\r
+ });\r
}else{\r
p.css({\r
'maxHeight':(spaceBelow-p.shadowoffset)+'px',\r
'top':(offs.top+height)+'px'\r
- });\r
+ });\r
}\r
p.css({\r
'height':'auto',\r
'width' :'auto',\r
'maxWidth': (rect.x+rect.width-offs.left)+'px'\r
- });\r
+ });\r
\r
//consolelog("size"); consolelog(size);\r
// p.offset({\r
popup.css({\r
'maxHeight':size.height,\r
'maxWidth':size.width\r
- });\r
+ });\r
popupContent.css({\r
'maxHeight':size.height-(popup.outerHeight()-popup.height()),\r
'maxWidth':size.width-(popup.outerWidth()-popup.width())\r
- });\r
+ });\r
};\r
this.minsize = function(size){\r
popup.css({\r
'minHeight':size.height,\r
'minWidth':size.width\r
- });\r
+ });\r
};\r
this.offset = function(){\r
var ret = popup.offset.apply(popup,arguments);\r
//otherwise execute callback\r
setTimeout(function(){\r
var v = document.activeElement;\r
- // consolelog(v);\r
+ // consolelog(v);\r
if(v && $J(v).attr(focusid)){\r
return;\r
}\r
var div = $J('<div/>').addClass(this.defaultClasses).css({\r
'position':'absolute',\r
'zIndex':this.zIndex,\r
-// 'display':'none',\r
-// 'left':wdw.scrollLeft()+'px',\r
-// 'top':wdw.scrollTop()+'px',\r
- 'overflow':'auto',\r
+ // 'display':'none',\r
+ // 'left':wdw.scrollLeft()+'px',\r
+ // 'top':wdw.scrollTop()+'px',\r
+ // 'overflow':'auto',\r
'padding':'1ex',\r
'border':'1px solid #666'\r
});\r
+ var header = $J('<div/>').css('float','right');\r
+ var container = $J('<div/>').css('overflow','auto');\r
+ var footer = $J('<div/>');\r
+ div.append(header).append(container).append(footer);\r
+\r
//div.appendTo('body'); //necessary to properly display the div size\r
if(content instanceof $J){\r
- div.append(content);\r
+ container.append(content);\r
}else if(typeof content == 'string'){\r
- div.html(""+content);\r
+ container.html(""+content);\r
}else{\r
div.css('overflow',''); //clear overflow\r
- var container = $J('<div/>').css('overflow','auto');\r
var table = $J('<table/>');\r
container.append(table);\r
var insert = function(e1,e2){\r
}\r
}\r
}\r
- div.attr('id',this.defaultId+"_"+(new Date().getTime()));\r
+ \r
this.getFocusId = function(){\r
return this.defaultId+'_focus';\r
}\r
p.defaultId = 'popup_'+(new Date().getTime());\r
p.focusId = p.defaultId+'_focus';\r
\r
+ p.okButtonClass = 'component_icon button icon_ok';\r
+ p.cancelButtonClass = 'component_icon button icon_cancel';\r
//p.wdow = p.$J(window);\r
//methods:\r
+\r
+ p.addButton = function(onTop, caption, classNames, callback){\r
+ var $J = this.$J;\r
+ var div = $J($J(this.getDiv()).children()[onTop ? 0 : 2]);\r
+ var a = $J('<a/>').html(caption).addClass(classNames).attr('href','#').click(function(evt){callback(evt); return false;});\r
+ div.append(a);\r
+ return a;\r
+ },\r
+\r
+ p.addCancelButton = function(caption, removeOnClick){\r
+ var me = this;\r
+ addButton(false,caption,this.cancelButtonClass, removeOnClick ? function(){me.remove()} : function(){me.hide()});\r
+ },\r
+\r
+ p.addOkButton = function(caption, callbackOnClick){\r
+ addButton(false,caption,this.okButtonClass, callbackOnClick);\r
+ },\r
+\r
p.getId = function(){\r
var div = this.getDiv();\r
if(!(div.attr('id'))){\r
return div.attr('id');\r
};\r
//p.createButtons({'ok':function...,'cancel':function,...});\r
- \r
+ p.createButtons = function(jQueryElement){\r
+ var bottomDiv = this.$J(this.getDiv().children()[2]);\r
+ for(k in dict){\r
+ bottomDiv.append(this.$J('<a/>'))\r
+ }\r
+ },\r
\r
p.setAsPopupOf = function(invoker,removeOnBlur){\r
if(!(invoker.is('a') || invoker.is('input[type=button]') || invoker.is('button') ||\r
\r
p.show = function(){\r
var div = this.getDiv();\r
+ var me = this;\r
\r
if(!div.parent().length){\r
div.appendTo('body');\r
}\r
- //set the div as opacity 0 but displayable\r
+ //set the div invisible but displayable to calculate the size (callbackPreShow)\r
div.css({\r
- 'visibility':'visible'\r
- }).fadeTo(0,0).show();\r
+ 'visibility':'hidden'\r
+ }).show();\r
\r
if(this.callbackPreShow){\r
this.callbackPreShow();\r
+\r
+ //set all subdivs to same width. Must be done when the element is full showing\r
+ //apparently, even opacity is considered not fully showing\r
+ var subdiv = div.children();\r
+ consolelog(subdiv);\r
+ var maxw = 0;\r
+ var $J= me.$J;\r
+ var max = Math.max;\r
+ subdiv.each(function(i,d){\r
+ //consolelog(i);\r
+ maxw = max(maxw,$J(d).width());\r
+ });\r
+ subdiv.each(function(i,d){\r
+ $J(d).css('minWidth',maxw+'px');\r
+ });\r
+ $J(subdiv[1]).css('maxHeight',(div.height()-$J(subdiv[0]).outerHeight()-$J(subdiv[2]).outerHeight()-\r
+ ($J(subdiv[1]).outerHeight(true)-$J(subdiv[1]).height()))+'px');\r
+ //done\r
}\r
\r
\r
var shadow = div.clone(true,true).empty().css({\r
'backgroundColor':'#000',\r
'borderColor':'#000',\r
+ 'visibility':'visible',\r
'zIndex':this.zIndex-1\r
}).removeAttr('tabindex').fadeTo(0,0);\r
var id = this.getId();\r
shadow.attr('id',id+'_shadow'); //for use in hide\r
shadow.insertAfter(div);\r
\r
- var me = this;\r
+ \r
var postShowFcn = function(){\r
var rect = me.getBounds.apply(me);\r
shadow.css({\r
'top':(rect.y + me.shadowOffset)+'px',\r
'width':(rect.width)+'px',\r
'height':(rect.height)+'px'\r
- }).fadeTo(0,me.shadowOpacity);\r
+ }).fadeTo(me.defaultFadeTime,me.shadowOpacity);\r
+\r
+ \r
+ \r
if(me.callbackPostShow){\r
me.callbackPostShow.apply(me);\r
}\r
var arg1 = arguments.length && arguments[0] instanceof Function ? arguments[0] : this.defaultFadeTime;\r
var arg2 = arguments.length && arguments[arguments.length-1] instanceof Function ? arguments[arguments.length-1] : undefined;\r
\r
- div.fadeTo(arg1,1,function(){\r
+ div.hide().css('visibility','visible').show(arg1,function(){\r
postShowFcn();\r
if(arg2){\r
arg2();\r
'dislay':'none',
'position':'absolute',
'zIndex':1000,
- 'overflow':'auto'
+ 'overflow':'auto',
+ 'display':'none' //TODO: remove this
//'backgroundColor':'#666'
});
$J('body').append(popupMarker);
},
showMarkerPopup: function(markerIndex){
- var popup = this.getMarkerPopup();
- // consolelog(popup.attr('id'));
-
- if(popup.attr('id') != 'markerpopup'+markerIndex){
-
- var marker = this.getMarkerMap().toArray()[markerIndex];
- var pos = this.getSoundPosition();
- var mPos = marker.offset;
- var span = 0.3;
-
- if(pos>=mPos-span && pos<=mPos+span){
- consolelog('songpos: '+pos+' nextmarkerpos:'+mPos);
- popup.attr('id','markerpopup'+markerIndex);
- popup.find('.title').html(marker.title);
- popup.find('.description').html(marker.desc);
- if(!popup.is(':visible')){
- popup.show('fast');
- }
- }
- }
+// var popup = this.getMarkerPopup();
+//
+// if(popup.attr('id') != 'markerpopup'+markerIndex){
+//
+// var marker = this.getMarkerMap().toArray()[markerIndex];
+// var pos = this.getSoundPosition();
+// var mPos = marker.offset;
+// var span = 0.3;
+//
+// if(pos>=mPos-span && pos<=mPos+span){
+// consolelog('songpos: '+pos+' nextmarkerpos:'+mPos);
+// popup.attr('id','markerpopup'+markerIndex);
+// popup.find('.title').html(marker.title);
+// popup.find('.description').html(marker.desc);
+// if(!popup.is(':visible')){
+// popup.show('fast');
+// }
+// }
+// }
},
resize: function() {