summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/mobile/TabBar.js
diff options
context:
space:
mode:
authorTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
committerTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
commitb62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch)
tree86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /js/dojo-1.7.2/dojox/mobile/TabBar.js
Initial commit of intern.ccwn.org contentsHEADmaster
Diffstat (limited to 'js/dojo-1.7.2/dojox/mobile/TabBar.js')
-rw-r--r--js/dojo-1.7.2/dojox/mobile/TabBar.js154
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");
+ }
+ }
+ });
+
+});