123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- 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");
- }
- }
- });
- });
|