123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- require({cache:{
- 'url:dojox/layout/resources/FloatingPane.html':"<div class=\"dojoxFloatingPane\" id=\"${id}\">\n\t<div tabindex=\"0\" role=\"button\" class=\"dojoxFloatingPaneTitle\" dojoAttachPoint=\"focusNode\">\n\t\t<span dojoAttachPoint=\"closeNode\" dojoAttachEvent=\"onclick: close\" class=\"dojoxFloatingCloseIcon\"></span>\n\t\t<span dojoAttachPoint=\"maxNode\" dojoAttachEvent=\"onclick: maximize\" class=\"dojoxFloatingMaximizeIcon\"> </span>\n\t\t<span dojoAttachPoint=\"restoreNode\" dojoAttachEvent=\"onclick: _restore\" class=\"dojoxFloatingRestoreIcon\"> </span>\t\n\t\t<span dojoAttachPoint=\"dockNode\" dojoAttachEvent=\"onclick: minimize\" class=\"dojoxFloatingMinimizeIcon\"> </span>\n\t\t<span dojoAttachPoint=\"titleNode\" class=\"dijitInline dijitTitleNode\"></span>\n\t</div>\n\t<div dojoAttachPoint=\"canvas\" class=\"dojoxFloatingPaneCanvas\">\n\t\t<div dojoAttachPoint=\"containerNode\" role=\"region\" tabindex=\"-1\" class=\"${contentClass}\">\n\t\t</div>\n\t\t<span dojoAttachPoint=\"resizeHandle\" class=\"dojoxFloatingResizeHandle\"></span>\n\t</div>\n</div>\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"], function(
- kernel, lang, winUtil, declare, baseFx, connectUtil, arrayUtil,
- has, windowLib, dom, domClass, domGeom, domConstruct, TemplatedMixin, Widget, BackgroundIframe,
- Moveable, ContentPane, ResizeHandle, template){
- /*=====
- var Widget = dijit._Widget;
- var TemplatedMixin = dijit._TemplatedMixin;
- var ContentPane = dojox.layout.ContentPane;
- =====*/
- 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._naturalState = 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);
- }
- });
- var Dock = declare("dojox.layout.Dock",[Widget, TemplatedMixin],{
- // summary:
- // A widget that attaches to a node and keeps track of incoming / outgoing FloatingPanes
- // and handles layout
- templateString: '<div class="dojoxDock"><ul dojoAttachPoint="containerNode" class="dojoxDockList"></ul></div>',
- // private _docked: array of panes currently in our dock
- _docked: [],
-
- _inPositioning: false,
-
- autoPosition: false,
-
- addNode: function(refNode){
- // summary: Instert a dockNode refernce into the dock
-
- var div = domConstruct.create('li', null, this.containerNode),
- node = new DockNode({
- title: refNode.title,
- paneRef: refNode
- }, div)
- ;
- node.startup();
- return node;
- },
- startup: function(){
-
- if (this.id == "dojoxGlobalFloatingDock" || this.isFixedDock) {
- // attach window.onScroll, and a position like in presentation/dialog
- this.connect(window, 'onresize', "_positionDock");
- this.connect(window, 'onscroll', "_positionDock");
- if(has("ie")){
- this.connect(this.domNode, "onresize", "_positionDock");
- }
- }
- this._positionDock(null);
- this.inherited(arguments);
- },
-
- _positionDock: function(/* Event? */e){
- if(!this._inPositioning){
- if(this.autoPosition == "south"){
- // Give some time for scrollbars to appear/disappear
- setTimeout(lang.hitch(this, function() {
- this._inPositiononing = true;
- var viewport = windowLib.getBox();
- var s = this.domNode.style;
- s.left = viewport.l + "px";
- s.width = (viewport.w-2) + "px";
- s.top = (viewport.h + viewport.t) - this.domNode.offsetHeight + "px";
- this._inPositioning = false;
- }), 125);
- }
- }
- }
- });
- var DockNode = declare("dojox.layout._DockNode",[Widget, TemplatedMixin],{
- // summary:
- // dojox.layout._DockNode is a private widget used to keep track of
- // which pane is docked.
- //
- // title: String
- // Shown in dock icon. should read parent iconSrc?
- title: "",
- // paneRef: Widget
- // reference to the FloatingPane we reprasent in any given dock
- paneRef: null,
- templateString:
- '<li dojoAttachEvent="onclick: restore" class="dojoxDockNode">'+
- '<span dojoAttachPoint="restoreNode" class="dojoxDockRestoreButton" dojoAttachEvent="onclick: restore"></span>'+
- '<span class="dojoxDockTitleNode" dojoAttachPoint="titleNode">${title}</span>'+
- '</li>',
- restore: function(){
- // summary: remove this dock item from parent dock, and call show() on reffed floatingpane
- this.paneRef.show();
- this.paneRef.bringToTop();
- this.destroy();
- }
- });
- return FloatingPane;
- });
|