diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/mobile/TabBar.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/mobile/TabBar.js | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/mobile/TabBar.js b/js/dojo-1.7.2/dojox/mobile/TabBar.js new file mode 100644 index 0000000..ce665a7 --- /dev/null +++ b/js/dojo-1.7.2/dojox/mobile/TabBar.js @@ -0,0 +1,154 @@ +//>>built +define("dojox/mobile/TabBar", [ + "dojo/_base/array", + "dojo/_base/declare", + "dojo/dom-class", + "dojo/dom-construct", + "dojo/dom-geometry", + "dojo/dom-style", + "dijit/_Contained", + "dijit/_Container", + "dijit/_WidgetBase", + "./Heading", + "./TabBarButton" +], function(array, declare, domClass, domConstruct, domGeometry, domStyle, Contained, Container, WidgetBase, Heading, TabBarButton){ + +/*===== + var Contained = dijit._Contained; + var Container = dijit._Container; + var WidgetBase = dijit._WidgetBase; +=====*/ + + // module: + // dojox/mobile/TabBar + // summary: + // A bar widget that has buttons to control visibility of views. + + return declare("dojox.mobile.TabBar", [WidgetBase, Container, Contained],{ + // summary: + // A bar widget that has buttons to control visibility of views. + // description: + // TabBar is a container widget that has typically multiple + // TabBarButtons which controls visibility of views. It can be used + // as a tab container. + + // iconBase: String + // The default icon path for child items. + iconBase: "", + + // iconPos: String + // The default icon position for child items. + iconPos: "", + + // barType: String + // "tabBar"(default) or "segmentedControl". + barType: "tabBar", + + // inHeading: Boolean + // A flag that indicates whether this widget is in a Heading + // widget. + inHeading: false, + + // tag: String + // A name of html tag to create as domNode. + tag: "UL", + + /* internal properties */ + _fixedButtonWidth: 76, + _fixedButtonMargin: 17, + _largeScreenWidth: 500, + + buildRendering: function(){ + this._clsName = this.barType == "segmentedControl" ? "mblTabButton" : "mblTabBarButton"; + this.domNode = this.containerNode = this.srcNodeRef || domConstruct.create(this.tag); + this.domNode.className = this.barType == "segmentedControl" ? "mblTabPanelHeader" : "mblTabBar"; + }, + + startup: function(){ + if(this._started){ return; } + this.inherited(arguments); + this.resize(); + }, + + resize: function(size){ + var i,w; + if(size && size.w){ + domGeometry.setMarginBox(this.domNode, size); + w = size.w; + }else{ + // Calculation of the bar width varies according to its "position" value. + // When the widget is used as a fixed bar, its position would be "absolute". + w = domStyle.get(this.domNode, "position") === "absolute" ? + domGeometry.getContentBox(this.domNode).w : domGeometry.getMarginBox(this.domNode).w; + } + var bw = this._fixedButtonWidth; + var bm = this._fixedButtonMargin; + + var children = this.containerNode.childNodes; + var arr = []; + for(i = 0; i < children.length; i++){ + var c = children[i]; + if(c.nodeType != 1){ continue; } + if(domClass.contains(c, this._clsName)){ + arr.push(c); + } + } + + var margin; + if(this.barType == "segmentedControl"){ + margin = w; + var totalW = 0; // total width of all the buttons + for(i = 0; i < arr.length; i++){ + margin -= domGeometry.getMarginBox(arr[i]).w; + totalW += arr[i].offsetWidth; + } + margin = Math.floor(margin/2); + var parent = this.getParent(); + var inHeading = this.inHeading || parent instanceof Heading; + this.containerNode.style.padding = (inHeading ? 0 : 3) + "px 0px 0px " + (inHeading ? 0 : margin) + "px"; + if(inHeading){ + domStyle.set(this.domNode, { + background: "none", + border: "none", + width: totalW + 2 + "px" + }); + } + domClass.add(this.domNode, "mblTabBar" + (inHeading ? "Head" : "Top")); + }else{ + margin = Math.floor((w - (bw + bm * 2) * arr.length) / 2); + if(w < this._largeScreenWidth || margin < 0){ + // If # of buttons is 4, for example, assign "25%" to each button. + // More precisely, 1%(left margin) + 98%(bar width) + 1%(right margin) + for(i = 0; i < arr.length; i++){ + arr[i].style.width = Math.round(98/arr.length) + "%"; + arr[i].style.margin = "0px"; + } + this.containerNode.style.padding = "0px 0px 0px 1%"; + }else{ + // Fixed width buttons. Mainly for larger screen such as iPad. + for(i = 0; i < arr.length; i++){ + arr[i].style.width = bw + "px"; + arr[i].style.margin = "0 " + bm + "px"; + } + if(arr.length > 0){ + arr[0].style.marginLeft = margin + bm + "px"; + } + this.containerNode.style.padding = "0px"; + } + } + + if(!array.some(this.getChildren(), function(child){ return child.iconNode1; })){ + domClass.add(this.domNode, "mblTabBarNoIcons"); + }else{ + domClass.remove(this.domNode, "mblTabBarNoIcons"); + } + + if(!array.some(this.getChildren(), function(child){ return child.label; })){ + domClass.add(this.domNode, "mblTabBarNoText"); + }else{ + domClass.remove(this.domNode, "mblTabBarNoText"); + } + } + }); + +}); |
