require({cache:{ 'url:dojox/layout/resources/FloatingPane.html':"
\n\t
\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
\n\t
\n\t\t
\n\t\t
\n\t\t\n\t
\n
\n"}}); define("dojox/layout/FloatingPane", ["dojo/_base/kernel","dojo/_base/lang","dojo/_base/window","dojo/_base/declare", "dojo/_base/fx","dojo/_base/connect","dojo/_base/array","dojo/_base/sniff", "dojo/window","dojo/dom","dojo/dom-class","dojo/dom-geometry","dojo/dom-construct", "dijit/_TemplatedMixin","dijit/_Widget","dijit/BackgroundIframe","dojo/dnd/Moveable", "./ContentPane","./ResizeHandle","dojo/text!./resources/FloatingPane.html","./Dock"], function( kernel, lang, winUtil, declare, baseFx, connectUtil, arrayUtil, has, windowLib, dom, domClass, domGeom, domConstruct, TemplatedMixin, Widget, BackgroundIframe, Moveable, ContentPane, ResizeHandle, template,Dock){ kernel.experimental("dojox.layout.FloatingPane"); var FloatingPane = declare("dojox.layout.FloatingPane", [ ContentPane, TemplatedMixin ],{ // summary: // A non-modal Floating window. // description: // Makes a `dojox.layout.ContentPane` float and draggable by it's title [similar to TitlePane] // and over-rides onClick to onDblClick for wipeIn/Out of containerNode // provides minimize(dock) / show() and hide() methods, and resize [almost] // closable: Boolean // Allow closure of this Node closable: true, // dockable: Boolean // Allow minimizing of pane if true dockable: true, // resizable: Boolean // Allow resizing of pane true if true resizable: false, // maxable: Boolean // Horrible param name for "Can you maximize this floating pane?" maxable: false, // resizeAxis: String // One of: x | xy | y to limit pane's sizing direction resizeAxis: "xy", // title: String // Title to use in the header title: "", // dockTo: DomNode? // if empty, will create private layout.Dock that scrolls with viewport // on bottom span of viewport. dockTo: "", // duration: Integer // Time is MS to spend toggling in/out node duration: 400, /*===== // iconSrc: String // [not implemented yet] will be either icon in titlepane to left // of Title, and/or icon show when docked in a fisheye-like dock // or maybe dockIcon would be better? iconSrc: null, =====*/ // contentClass: String // The className to give to the inner node which has the content contentClass: "dojoxFloatingPaneContent", // animation holders for toggle _showAnim: null, _hideAnim: null, // node in the dock (if docked) _dockNode: null, // privates: _restoreState: {}, _allFPs: [], _startZ: 100, templateString: template, attributeMap: lang.delegate(Widget.prototype.attributeMap, { title: { type:"innerHTML", node:"titleNode" } }), postCreate: function(){ this.inherited(arguments); new Moveable(this.domNode,{ handle: this.focusNode }); //this._listener = dojo.subscribe("/dnd/move/start",this,"bringToTop"); if(!this.dockable){ this.dockNode.style.display = "none"; } if(!this.closable){ this.closeNode.style.display = "none"; } if(!this.maxable){ this.maxNode.style.display = "none"; this.restoreNode.style.display = "none"; } if(!this.resizable){ this.resizeHandle.style.display = "none"; }else{ this.domNode.style.width = domGeom.getMarginBox(this.domNode).w + "px"; } this._allFPs.push(this); this.domNode.style.position = "absolute"; this.bgIframe = new BackgroundIframe(this.domNode); this._naturalState = domGeom.position(this.domNode); }, startup: function(){ if(this._started){ return; } this.inherited(arguments); if(this.resizable){ if(has("ie")){ this.canvas.style.overflow = "auto"; }else{ this.containerNode.style.overflow = "auto"; } this._resizeHandle = new ResizeHandle({ targetId: this.id, resizeAxis: this.resizeAxis },this.resizeHandle); } if(this.dockable){ // FIXME: argh. var tmpName = this.dockTo; if(this.dockTo){ this.dockTo = dijit.byId(this.dockTo); }else{ this.dockTo = dijit.byId('dojoxGlobalFloatingDock'); } if(!this.dockTo){ var tmpId, tmpNode; // we need to make our dock node, and position it against // .dojoxDockDefault .. this is a lot. either dockto="node" // and fail if node doesn't exist or make the global one // once, and use it on empty OR invalid dockTo="" node? if(tmpName){ tmpId = tmpName; tmpNode = dom.byId(tmpName); }else{ tmpNode = domConstruct.create('div', null, winUtil.body()); domClass.add(tmpNode,"dojoxFloatingDockDefault"); tmpId = 'dojoxGlobalFloatingDock'; } this.dockTo = new Dock({ id: tmpId, autoPosition: "south" }, tmpNode); this.dockTo.startup(); } if((this.domNode.style.display == "none")||(this.domNode.style.visibility == "hidden")){ // If the FP is created dockable and non-visible, start up docked. this.minimize(); } } this.connect(this.focusNode,"onmousedown","bringToTop"); this.connect(this.domNode, "onmousedown","bringToTop"); // Initial resize to give child the opportunity to lay itself out this.resize(domGeom.position(this.domNode)); this._started = true; }, setTitle: function(/* String */ title){ // summary: // Update the Title bar with a new string kernel.deprecated("pane.setTitle", "Use pane.set('title', someTitle)", "2.0"); this.set("title", title); }, close: function(){ // summary: // Close and destroy this widget if(!this.closable){ return; } connectUtil.unsubscribe(this._listener); this.hide(lang.hitch(this,function(){ this.destroyRecursive(); })); }, hide: function(/* Function? */ callback){ // summary: // Close, but do not destroy this FloatingPane baseFx.fadeOut({ node:this.domNode, duration:this.duration, onEnd: lang.hitch(this,function() { this.domNode.style.display = "none"; this.domNode.style.visibility = "hidden"; if(this.dockTo && this.dockable){ this.dockTo._positionDock(null); } if(callback){ callback(); } }) }).play(); }, show: function(/* Function? */callback){ // summary: // Show the FloatingPane var anim = baseFx.fadeIn({node:this.domNode, duration:this.duration, beforeBegin: lang.hitch(this,function(){ this.domNode.style.display = ""; this.domNode.style.visibility = "visible"; if (this.dockTo && this.dockable) { this.dockTo._positionDock(null); } if (typeof callback == "function") { callback(); } this._isDocked = false; if (this._dockNode) { this._dockNode.destroy(); this._dockNode = null; } }) }).play(); this.resize(domGeom.position(this.domNode)); this._onShow(); // lazy load trigger }, minimize: function(){ // summary: // Hide and dock the FloatingPane if(!this._isDocked){ this.hide(lang.hitch(this,"_dock")); } }, maximize: function(){ // summary: // Make this FloatingPane full-screen (viewport) if(this._maximized){ return; } this._naturalState = domGeom.position(this.domNode); if(this._isDocked){ this.show(); setTimeout(lang.hitch(this,"maximize"),this.duration); } domClass.add(this.focusNode,"floatingPaneMaximized"); this.resize(windowLib.getBox()); this._maximized = true; }, _restore: function(){ if(this._maximized){ this.resize(this._naturalState); domClass.remove(this.focusNode,"floatingPaneMaximized"); this._maximized = false; } }, _dock: function(){ if(!this._isDocked && this.dockable){ this._dockNode = this.dockTo.addNode(this); this._isDocked = true; } }, resize: function(/* Object */dim){ // summary: // Size the FloatingPane and place accordingly dim = dim || this._naturalState; this._currentState = dim; // From the ResizeHandle we only get width and height information var dns = this.domNode.style; if("t" in dim){ dns.top = dim.t + "px"; } else if("y" in dim){ dns.top = dim.y + "px"; } if("l" in dim){ dns.left = dim.l + "px"; } else if("x" in dim){ dns.left = dim.x + "px"; } dns.width = dim.w + "px"; dns.height = dim.h + "px"; // Now resize canvas var mbCanvas = { l: 0, t: 0, w: dim.w, h: (dim.h - this.focusNode.offsetHeight) }; domGeom.setMarginBox(this.canvas, mbCanvas); // If the single child can resize, forward resize event to it so it can // fit itself properly into the content area this._checkIfSingleChild(); if(this._singleChild && this._singleChild.resize){ this._singleChild.resize(mbCanvas); } }, bringToTop: function(){ // summary: // bring this FloatingPane above all other panes var windows = arrayUtil.filter( this._allFPs, function(i){ return i !== this; }, this); windows.sort(function(a, b){ return a.domNode.style.zIndex - b.domNode.style.zIndex; }); windows.push(this); arrayUtil.forEach(windows, function(w, x){ w.domNode.style.zIndex = this._startZ + (x * 2); domClass.remove(w.domNode, "dojoxFloatingPaneFg"); }, this); domClass.add(this.domNode, "dojoxFloatingPaneFg"); }, destroy: function(){ // summary: // Destroy this FloatingPane completely this._allFPs.splice(arrayUtil.indexOf(this._allFPs, this), 1); if(this._resizeHandle){ this._resizeHandle.destroy(); } this.inherited(arguments); } }); return FloatingPane; });