From 81bea17aefb26859f825b9293c7c99192874806e Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 8 Nov 2011 20:40:44 +0400 Subject: upgrade Dojo to 1.6.1 --- lib/dijit/layout/TabController.js | 216 ++++++++++++++++++++++++++------------ 1 file changed, 150 insertions(+), 66 deletions(-) (limited to 'lib/dijit/layout/TabController.js') diff --git a/lib/dijit/layout/TabController.js b/lib/dijit/layout/TabController.js index edb3930c5..0a2276aca 100644 --- a/lib/dijit/layout/TabController.js +++ b/lib/dijit/layout/TabController.js @@ -1,77 +1,161 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ -if(!dojo._hasResource["dijit.layout.TabController"]){ -dojo._hasResource["dijit.layout.TabController"]=true; +if(!dojo._hasResource["dijit.layout.TabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.TabController"] = true; dojo.provide("dijit.layout.TabController"); dojo.require("dijit.layout.StackController"); dojo.require("dijit.Menu"); dojo.require("dijit.MenuItem"); -dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw"); -dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"
",tabPosition:"top",buttonWidget:"dijit.layout._TabButton",_rectifyRtlTabList:function(){ -if(0>=this.tabPosition.indexOf("-h")){ -return; -} -if(!this.pane2button){ -return; -} -var _1=0; -for(var _2 in this.pane2button){ -var ow=this.pane2button[_2].innerDiv.scrollWidth; -_1=Math.max(_1,ow); -} -for(_2 in this.pane2button){ -this.pane2button[_2].innerDiv.style.width=_1+"px"; -} -}}); -dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",cssStateNodes:{closeNode:"dijitTabCloseButton"},templateString:dojo.cache("dijit.layout","templates/_TabButton.html","
\n
\n
\n \t
\n\t\t \"\"\n\t\t \n\t\t \n\t\t x\n\t\t\t
\n
\n
\n
\n"),scrollOnFocus:false,postMixInProperties:function(){ -if(!this.iconClass){ -this.iconClass="dijitTabButtonIcon"; -} -},postCreate:function(){ -this.inherited(arguments); -dojo.setSelectable(this.containerNode,false); -if(this.iconNode.className=="dijitTabButtonIcon"){ -dojo.style(this.iconNode,"width","1px"); -} -},startup:function(){ -this.inherited(arguments); -var n=this.domNode; -setTimeout(function(){ -n.className=n.className; -},1); -},_setCloseButtonAttr:function(_3){ -this.closeButton=_3; -dojo.toggleClass(this.innerDiv,"dijitClosable",_3); -this.closeNode.style.display=_3?"":"none"; -if(_3){ -var _4=dojo.i18n.getLocalization("dijit","common"); -if(this.closeNode){ -dojo.attr(this.closeNode,"title",_4.itemClose); -} -var _4=dojo.i18n.getLocalization("dijit","common"); -this._closeMenu=new dijit.Menu({id:this.id+"_Menu",dir:this.dir,lang:this.lang,targetNodeIds:[this.domNode]}); -this._closeMenu.addChild(new dijit.MenuItem({label:_4.itemClose,dir:this.dir,lang:this.lang,onClick:dojo.hitch(this,"onClickCloseButton")})); -}else{ -if(this._closeMenu){ -this._closeMenu.destroyRecursive(); -delete this._closeMenu; -} -} -},_setLabelAttr:function(_5){ -this.inherited(arguments); -if(this.showLabel==false&&!this.params.title){ -this.iconNode.alt=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||""); -} -},destroy:function(){ -if(this._closeMenu){ -this._closeMenu.destroyRecursive(); -delete this._closeMenu; -} -this.inherited(arguments); -}}); +dojo.requireLocalization("dijit", "common", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw"); + + +// Menu is used for an accessible close button, would be nice to have a lighter-weight solution + + +dojo.declare("dijit.layout.TabController", + dijit.layout.StackController, +{ + // summary: + // Set of tabs (the things with titles and a close button, that you click to show a tab panel). + // Used internally by `dijit.layout.TabContainer`. + // description: + // Lets the user select the currently shown pane in a TabContainer or StackContainer. + // TabController also monitors the TabContainer, and whenever a pane is + // added or deleted updates itself accordingly. + // tags: + // private + + templateString: "
", + + // tabPosition: String + // Defines where tabs go relative to the content. + // "top", "bottom", "left-h", "right-h" + tabPosition: "top", + + // buttonWidget: String + // The name of the tab widget to create to correspond to each page + buttonWidget: "dijit.layout._TabButton", + + _rectifyRtlTabList: function(){ + // summary: + // For left/right TabContainer when page is RTL mode, rectify the width of all tabs to be equal, otherwise the tab widths are different in IE + + if(0 >= this.tabPosition.indexOf('-h')){ return; } + if(!this.pane2button){ return; } + + var maxWidth = 0; + for(var pane in this.pane2button){ + var ow = this.pane2button[pane].innerDiv.scrollWidth; + maxWidth = Math.max(maxWidth, ow); + } + //unify the length of all the tabs + for(pane in this.pane2button){ + this.pane2button[pane].innerDiv.style.width = maxWidth + 'px'; + } + } +}); + +dojo.declare("dijit.layout._TabButton", + dijit.layout._StackButton, + { + // summary: + // A tab (the thing you click to select a pane). + // description: + // Contains the title of the pane, and optionally a close-button to destroy the pane. + // This is an internal widget and should not be instantiated directly. + // tags: + // private + + // baseClass: String + // The CSS class applied to the domNode. + baseClass: "dijitTab", + + // Apply dijitTabCloseButtonHover when close button is hovered + cssStateNodes: { + closeNode: "dijitTabCloseButton" + }, + + templateString: dojo.cache("dijit.layout", "templates/_TabButton.html", "
\n
\n
\n \t
\n\t\t \"\"\n\t\t \n\t\t \n\t\t [x]\n\t\t\t
\n
\n
\n
\n"), + + // Override _FormWidget.scrollOnFocus. + // Don't scroll the whole tab container into view when the button is focused. + scrollOnFocus: false, + + buildRendering: function(){ + this.inherited(arguments); + + dojo.setSelectable(this.containerNode, false); + }, + + startup: function(){ + this.inherited(arguments); + var n = this.domNode; + + // Required to give IE6 a kick, as it initially hides the + // tabs until they are focused on. + setTimeout(function(){ + n.className = n.className; + }, 1); + }, + + _setCloseButtonAttr: function(/*Boolean*/ disp){ + // summary: + // Hide/show close button + this._set("closeButton", disp); + dojo.toggleClass(this.innerDiv, "dijitClosable", disp); + this.closeNode.style.display = disp ? "" : "none"; + if(disp){ + var _nlsResources = dojo.i18n.getLocalization("dijit", "common"); + if(this.closeNode){ + dojo.attr(this.closeNode,"title", _nlsResources.itemClose); + } + // add context menu onto title button + var _nlsResources = dojo.i18n.getLocalization("dijit", "common"); + this._closeMenu = new dijit.Menu({ + id: this.id+"_Menu", + dir: this.dir, + lang: this.lang, + targetNodeIds: [this.domNode] + }); + + this._closeMenu.addChild(new dijit.MenuItem({ + label: _nlsResources.itemClose, + dir: this.dir, + lang: this.lang, + onClick: dojo.hitch(this, "onClickCloseButton") + })); + }else{ + if(this._closeMenu){ + this._closeMenu.destroyRecursive(); + delete this._closeMenu; + } + } + }, + _setLabelAttr: function(/*String*/ content){ + // summary: + // Hook for set('label', ...) to work. + // description: + // takes an HTML string. + // Inherited ToggleButton implementation will Set the label (text) of the button; + // Need to set the alt attribute of icon on tab buttons if no label displayed + this.inherited(arguments); + if(this.showLabel == false && !this.params.title){ + this.iconNode.alt = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || ''); + } + }, + + destroy: function(){ + if(this._closeMenu){ + this._closeMenu.destroyRecursive(); + delete this._closeMenu; + } + this.inherited(arguments); + } +}); + } -- cgit v1.2.3