diff options
Diffstat (limited to 'includes/js/dijit/_base/popup.js')
-rw-r--r-- | includes/js/dijit/_base/popup.js | 269 |
1 files changed, 0 insertions, 269 deletions
diff --git a/includes/js/dijit/_base/popup.js b/includes/js/dijit/_base/popup.js deleted file mode 100644 index 6cb4dfc..0000000 --- a/includes/js/dijit/_base/popup.js +++ /dev/null @@ -1,269 +0,0 @@ -if(!dojo._hasResource["dijit._base.popup"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dijit._base.popup"] = true; -dojo.provide("dijit._base.popup"); - -dojo.require("dijit._base.focus"); -dojo.require("dijit._base.place"); -dojo.require("dijit._base.window"); - -dijit.popup = new function(){ - // summary: - // This class is used to show/hide widgets as popups. - // - - var stack = [], - beginZIndex=1000, - idGen = 1; - - this.prepare = function(/*DomNode*/ node){ - // summary: - // Prepares a node to be used as a popup - // - // description: - // Attaches node to dojo.doc.body, and - // positions it off screen, but not display:none, so that - // the widget doesn't appear in the page flow and/or cause a blank - // area at the bottom of the viewport (making scrollbar longer), but - // initialization of contained widgets works correctly - - dojo.body().appendChild(node); - var s = node.style; - if(s.display == "none"){ - s.display=""; - } - s.visibility = "hidden"; // not needed for hiding, but used as flag that node is off-screen - s.position = "absolute"; - s.top = "-9999px"; - }; - - this.open = function(/*Object*/ args){ - // summary: - // Popup the widget at the specified position - // - // args: Object - // popup: Widget - // widget to display, - // parent: Widget - // the button etc. that is displaying this popup - // around: DomNode - // DOM node (typically a button); place popup relative to this node - // orient: Object - // structure specifying possible positions of popup relative to "around" node - // onCancel: Function - // callback when user has canceled the popup by - // 1. hitting ESC or - // 2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog); - // ie: whenever popupWidget.onCancel() is called, args.onCancel is called - // onClose: Function - // callback whenever this popup is closed - // onExecute: Function - // callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only) - // - // examples: - // 1. opening at the mouse position - // dijit.popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY}); - // 2. opening the widget as a dropdown - // dijit.popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...} }); - // - // Note that whatever widget called dijit.popup.open() should also listen to it's own _onBlur callback - // (fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed. - - var widget = args.popup, - orient = args.orient || {'BL':'TL', 'TL':'BL'}, - around = args.around, - id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+idGen++); - - // make wrapper div to hold widget and possibly hold iframe behind it. - // we can't attach the iframe as a child of the widget.domNode because - // widget.domNode might be a <table>, <ul>, etc. - var wrapper = dojo.doc.createElement("div"); - dijit.setWaiRole(wrapper, "presentation"); - wrapper.id = id; - wrapper.className="dijitPopup"; - wrapper.style.zIndex = beginZIndex + stack.length; - wrapper.style.visibility = "hidden"; - if(args.parent){ - wrapper.dijitPopupParent=args.parent.id; - } - dojo.body().appendChild(wrapper); - - var s = widget.domNode.style; - s.display = ""; - s.visibility = ""; - s.position = ""; - wrapper.appendChild(widget.domNode); - - var iframe = new dijit.BackgroundIframe(wrapper); - - // position the wrapper node - var best = around ? - dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) : - dijit.placeOnScreen(wrapper, args, orient == 'R' ? ['TR','BR','TL','BL'] : ['TL','BL','TR','BR']); - - wrapper.style.visibility = "visible"; - // TODO: use effects to fade in wrapper - - var handlers = []; - - // Compute the closest ancestor popup that's *not* a child of another popup. - // Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button. - var getTopPopup = function(){ - for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--){ - /* do nothing, just trying to get right value for pi */ - } - return stack[pi]; - } - - // provide default escape and tab key handling - // (this will work for any widget, not just menu) - handlers.push(dojo.connect(wrapper, "onkeypress", this, function(evt){ - if(evt.keyCode == dojo.keys.ESCAPE && args.onCancel){ - dojo.stopEvent(evt); - args.onCancel(); - }else if(evt.keyCode == dojo.keys.TAB){ - dojo.stopEvent(evt); - var topPopup = getTopPopup(); - if(topPopup && topPopup.onCancel){ - topPopup.onCancel(); - } - } - })); - - // watch for cancel/execute events on the popup and notify the caller - // (for a menu, "execute" means clicking an item) - if(widget.onCancel){ - handlers.push(dojo.connect(widget, "onCancel", null, args.onCancel)); - } - - handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", null, function(){ - var topPopup = getTopPopup(); - if(topPopup && topPopup.onExecute){ - topPopup.onExecute(); - } - })); - - stack.push({ - wrapper: wrapper, - iframe: iframe, - widget: widget, - parent: args.parent, - onExecute: args.onExecute, - onCancel: args.onCancel, - onClose: args.onClose, - handlers: handlers - }); - - if(widget.onOpen){ - widget.onOpen(best); - } - - return best; - }; - - this.close = function(/*Widget*/ popup){ - // summary: - // Close specified popup and any popups that it parented - while(dojo.some(stack, function(elem){return elem.widget == popup;})){ - var top = stack.pop(), - wrapper = top.wrapper, - iframe = top.iframe, - widget = top.widget, - onClose = top.onClose; - - if(widget.onClose){ - widget.onClose(); - } - dojo.forEach(top.handlers, dojo.disconnect); - - // #2685: check if the widget still has a domNode so ContentPane can change its URL without getting an error - if(!widget||!widget.domNode){ return; } - - this.prepare(widget.domNode); - - iframe.destroy(); - dojo._destroyElement(wrapper); - - if(onClose){ - onClose(); - } - } - }; -}(); - -dijit._frames = new function(){ - // summary: cache of iframes - var queue = []; - - this.pop = function(){ - var iframe; - if(queue.length){ - iframe = queue.pop(); - iframe.style.display=""; - }else{ - if(dojo.isIE){ - var html="<iframe src='javascript:\"\"'" - + " style='position: absolute; left: 0px; top: 0px;" - + "z-index: -1; filter:Alpha(Opacity=\"0\");'>"; - iframe = dojo.doc.createElement(html); - }else{ - iframe = dojo.doc.createElement("iframe"); - iframe.src = 'javascript:""'; - iframe.className = "dijitBackgroundIframe"; - } - iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work. - dojo.body().appendChild(iframe); - } - return iframe; - }; - - this.push = function(iframe){ - iframe.style.display=""; - if(dojo.isIE){ - iframe.style.removeExpression("width"); - iframe.style.removeExpression("height"); - } - queue.push(iframe); - } -}(); - -// fill the queue -if(dojo.isIE && dojo.isIE < 7){ - dojo.addOnLoad(function(){ - var f = dijit._frames; - dojo.forEach([f.pop()], f.push); - }); -} - - -dijit.BackgroundIframe = function(/* DomNode */node){ - // summary: - // For IE z-index schenanigans. id attribute is required. - // - // description: - // new dijit.BackgroundIframe(node) - // Makes a background iframe as a child of node, that fills - // area (and position) of node - - if(!node.id){ throw new Error("no id"); } - if((dojo.isIE && dojo.isIE < 7) || (dojo.isFF && dojo.isFF < 3 && dojo.hasClass(dojo.body(), "dijit_a11y"))){ - var iframe = dijit._frames.pop(); - node.appendChild(iframe); - if(dojo.isIE){ - iframe.style.setExpression("width", dojo._scopeName + ".doc.getElementById('" + node.id + "').offsetWidth"); - iframe.style.setExpression("height", dojo._scopeName + ".doc.getElementById('" + node.id + "').offsetHeight"); - } - this.iframe = iframe; - } -}; - -dojo.extend(dijit.BackgroundIframe, { - destroy: function(){ - // summary: destroy the iframe - if(this.iframe){ - dijit._frames.push(this.iframe); - delete this.iframe; - } - } -}); - -} |