123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- define("dojox/mobile/TabBarButton", [
- "dojo/_base/declare",
- "dojo/_base/lang",
- "dojo/_base/window",
- "dojo/dom-class",
- "dojo/dom-construct",
- "dijit/registry", // registry.byNode
- "./common",
- "./_ItemBase"
- ], function(declare, lang, win, domClass, domConstruct, registry, common, ItemBase){
- /*=====
- var ItemBase = dojox.mobile._ItemBase;
- =====*/
- // module:
- // dojox/mobile/TabBarButton
- // summary:
- // A button widget that is placed in the TabBar widget.
- return declare("dojox.mobile.TabBarButton", ItemBase,{
- // summary:
- // A button widget that is placed in the TabBar widget.
- // description:
- // TabBarButton is a button that is placed in the TabBar widget. It
- // is a subclass of dojox.mobile._ItemBase just like ListItem or
- // IconItem. So, unlike Button, it has similar capability as
- // ListItem or IconItem, such as icon support, transition, etc.
- // icon1: String
- // A path for the unselected (typically dark) icon. If icon is not
- // specified, the iconBase parameter of the parent widget is used.
- icon1: "",
- // icon2: String
- // A path for the selected (typically highlight) icon. If icon is
- // not specified, the iconBase parameter of the parent widget or
- // icon1 is used.
- icon2: "",
- // iconPos1: String
- // The position of an aggregated unselected (typically dark)
- // icon. IconPos1 is comma separated values like
- // top,left,width,height (ex. "0,0,29,29"). If iconPos1 is not
- // specified, the iconPos parameter of the parent widget is used.
- iconPos1: "",
- // iconPos2: String
- // The position of an aggregated selected (typically highlight)
- // icon. IconPos2 is comma separated values like
- // top,left,width,height (ex. "0,0,29,29"). If iconPos2 is not
- // specified, the iconPos parameter of the parent widget or
- // iconPos1 is used.
- iconPos2: "",
- // selected: Boolean
- // If true, the button is in the selected status.
- selected: false,
- // transition: String
- // A type of animated transition effect.
- transition: "none",
- // tag: String
- // A name of html tag to create as domNode.
- tag: "LI",
- /* internal properties */
- selectOne: true,
-
- inheritParams: function(){
- // summary:
- // Overrides dojox.mobile._ItemBase.inheritParams().
- if(this.icon && !this.icon1){ this.icon1 = this.icon; }
- var parent = this.getParent();
- if(parent){
- if(!this.transition){ this.transition = parent.transition; }
- if(this.icon1 && parent.iconBase &&
- parent.iconBase.charAt(parent.iconBase.length - 1) === '/'){
- this.icon1 = parent.iconBase + this.icon1;
- }
- if(!this.icon1){ this.icon1 = parent.iconBase; }
- if(!this.iconPos1){ this.iconPos1 = parent.iconPos; }
- if(this.icon2 && parent.iconBase &&
- parent.iconBase.charAt(parent.iconBase.length - 1) === '/'){
- this.icon2 = parent.iconBase + this.icon2;
- }
- if(!this.icon2){ this.icon2 = parent.iconBase || this.icon1; }
- if(!this.iconPos2){ this.iconPos2 = parent.iconPos || this.iconPos1; }
- }
- },
-
- buildRendering: function(){
- var a = this.anchorNode = domConstruct.create("A", {className:"mblTabBarButtonAnchor"});
- this.connect(a, "onclick", "onClick");
-
- this.box = domConstruct.create("DIV", {className:"mblTabBarButtonTextBox"}, a);
- var box = this.box;
- var label = "";
- var r = this.srcNodeRef;
- if(r){
- for(var i = 0, len = r.childNodes.length; i < len; i++){
- var n = r.firstChild;
- if(n.nodeType === 3){
- label += lang.trim(n.nodeValue);
- }
- box.appendChild(n);
- }
- }
- if(!this.label){
- this.label = label;
- }
-
- this.domNode = this.srcNodeRef || domConstruct.create(this.tag);
- this.containerNode = this.domNode;
- this.domNode.appendChild(a);
- if(this.domNode.className.indexOf("mblDomButton") != -1){
- // deprecated. TODO: remove this code in 1.8
- var domBtn = domConstruct.create("DIV", null, a);
- common.createDomButton(this.domNode, null, domBtn);
- domClass.add(this.domNode, "mblTabButtonDomButton");
- domClass.add(domBtn, "mblTabButtonDomButtonClass");
- }
- if((this.icon1 || this.icon).indexOf("mblDomButton") != -1){
- domClass.add(this.domNode, "mblTabButtonDomButton");
- }
- },
-
- startup: function(){
- if(this._started){ return; }
- this.inheritParams();
- var parent = this.getParent();
-
- var _clsName = parent ? parent._clsName : "mblTabBarButton";
- domClass.add(this.domNode, _clsName + (this.selected ? " mblTabButtonSelected" : ""));
-
- if(parent && parent.barType == "segmentedControl"){
- // proper className may not be set when created dynamically
- domClass.remove(this.domNode, "mblTabBarButton");
- domClass.add(this.domNode, parent._clsName);
- this.box.className = "";
- }
- this.set({icon1:this.icon1, icon2:this.icon2});
- this.inherited(arguments);
- },
-
- select: function(){
- // summary:
- // Makes this widget in the selected state.
- if(arguments[0]){ // deselect
- this.selected = false;
- domClass.remove(this.domNode, "mblTabButtonSelected");
- }else{ // select
- this.selected = true;
- domClass.add(this.domNode, "mblTabButtonSelected");
- for(var i = 0, c = this.domNode.parentNode.childNodes; i < c.length; i++){
- if(c[i].nodeType != 1){ continue; }
- var w = registry.byNode(c[i]); // sibling widget
- if(w && w != this){
- w.deselect();
- }
- }
- }
- if(this.iconNode1){
- this.iconNode1.style.visibility = this.selected ? "hidden" : "";
- }
- if(this.iconNode2){
- this.iconNode2.style.visibility = this.selected ? "" : "hidden";
- }
- },
-
- deselect: function(){
- // summary:
- // Makes this widget in the deselected state.
- this.select(true);
- },
-
- onClick: function(e){
- this.defaultClickAction();
- },
-
- _setIcon: function(icon, pos, num, sel){
- var i = "icon" + num, n = "iconNode" + num, p = "iconPos" + num;
- if(icon){ this[i] = icon; }
- if(pos){
- if(this[p] === pos){ return; }
- this[p] = pos;
- }
- if(icon && icon !== "none"){
- if(!this.iconDivNode){
- this.iconDivNode = domConstruct.create("DIV", {className:"mblTabBarButtonDiv"}, this.anchorNode, "first");
- }
- if(!this[n]){
- this[n] = domConstruct.create("div", {className:"mblTabBarButtonIcon"}, this.iconDivNode);
- }else{
- domConstruct.empty(this[n]);
- }
- common.createIcon(icon, this[p], null, this.alt, this[n]);
- if(this[p]){
- domClass.add(this[n].firstChild, "mblTabBarButtonSpriteIcon");
- }
- domClass.remove(this.iconDivNode, "mblTabBarButtonNoIcon");
- this[n].style.visibility = sel ? "hidden" : "";
- }else if(this.iconDivNode){
- domClass.add(this.iconDivNode, "mblTabBarButtonNoIcon");
- }
- },
-
- _setIcon1Attr: function(icon){
- this._setIcon(icon, null, 1, this.selected);
- },
-
- _setIcon2Attr: function(icon){
- this._setIcon(icon, null, 2, !this.selected);
- },
-
- _setIconPos1Attr: function(pos){
- this._setIcon(null, pos, 1, this.selected);
- },
-
- _setIconPos2Attr: function(pos){
- this._setIcon(null, pos, 2, !this.selected);
- },
- _setLabelAttr: function(/*String*/text){
- this.label = text;
- this.box.innerHTML = this._cv ? this._cv(text) : text;
- }
- });
- });
|