source: Dev/trunk/src/client/dojox/mobile/IconMenuItem.js @ 529

Last change on this file since 529 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 3.6 KB
Line 
1define([
2        "dojo/_base/declare",
3        "dojo/_base/lang",
4        "dojo/dom-class",
5        "dojo/dom-construct",
6        "dojo/dom-attr",
7        "./iconUtils",
8        "./_ItemBase"
9], function(declare, lang, domClass, domConstruct, domAttr, iconUtils, ItemBase){
10        // module:
11        //              dojox/mobile/IconMenuItem
12
13        return declare("dojox.mobile.IconMenuItem", ItemBase, {
14                // summary:
15                //              An item of IconMenu.
16                // description:
17                //              IconMenuItem represents a menu item of dojox/mobile/MenuItem.
18                //              This widget inherits from dojox/mobile/_ItemBase. Its basic usage is
19                //              similar to other subclasses such as dojox/mobile/ListItem.
20
21                // closeOnAction: Boolean
22                //              If true, the internal handler of click events calls the hide() method
23                //              of the parent widget, which is typically a dojox/mobile/SimpleDialog.
24                //              The default value is false.
25                closeOnAction: false,
26
27                // tag: String
28                //              The name of the HTML tag to create as domNode.
29                tag: "li",
30
31                /* internal properties */
32                // Note these are overrides for similar properties defined in _ItemBase.
33                baseClass: "mblIconMenuItem",
34                selColor: "mblIconMenuItemSel",
35                _selStartMethod: "touch",
36                _selEndMethod: "touch",
37
38                buildRendering: function(){
39                        this.domNode = this.srcNodeRef || domConstruct.create(this.tag);
40                        domAttr.set(this.domNode, "role", "menuitemcheckbox");
41                        domAttr.set(this.domNode, "aria-checked", "false");
42                        this.inherited(arguments);
43                        if(this.selected){
44                                domClass.add(this.domNode, this.selColor);
45                        }
46
47                        if(this.srcNodeRef){
48                                if(!this.label){
49                                        this.label = lang.trim(this.srcNodeRef.innerHTML);
50                                }
51                                this.srcNodeRef.innerHTML = "";
52                        }
53
54                        var a = this.anchorNode = this.containerNode = domConstruct.create("a", {
55                                className: "mblIconMenuItemAnchor",
56                                role: "presentation"
57                        });
58                        var tbl = domConstruct.create("table", {
59                                className: "mblIconMenuItemTable",
60                                role: "presentation"
61                        }, a);
62                        var cell = this.iconParentNode = tbl.insertRow(-1).insertCell(-1);
63                        this.iconNode = domConstruct.create("div", {
64                                className: "mblIconMenuItemIcon"
65                        }, cell);
66                        this.labelNode = this.refNode = domConstruct.create("div", {
67                                className: "mblIconMenuItemLabel"
68                        }, cell);
69                        this.position = "before";
70                        this.domNode.appendChild(a);
71                },
72
73                startup: function(){
74                        if(this._started){ return; }
75
76                        this.connect(this.domNode, "onkeydown", "_onClick"); // for desktop browsers
77
78                        this.inherited(arguments);
79                        if(!this._isOnLine){
80                                this._isOnLine = true;
81                                // retry applying the attribute for which the custom setter delays the actual
82                                // work until _isOnLine is true.
83                                this.set("icon", this._pendingIcon !== undefined ? this._pendingIcon : this.icon);
84                                // Not needed anymore (this code executes only once per life cycle):
85                                delete this._pendingIcon;
86                        }
87                },
88
89                _onClick: function(e){
90                        // summary:
91                        //              Internal handler for click events.
92                        // tags:
93                        //              private
94                        if(e && e.type === "keydown" && e.keyCode !== 13){ return; }
95                        if(this.onClick(e) === false){ return; } // user's click action
96                        if(this.closeOnAction){
97                                var p = this.getParent(); // maybe SimpleDialog
98                                if(p && p.hide){
99                                        p.hide();
100                                }
101                        }
102                        this.defaultClickAction(e);
103                },
104
105                onClick: function(/*Event*/ /*===== e =====*/){
106                        // summary:
107                        //              User-defined function to handle clicks.
108                        // tags:
109                        //              callback
110                },
111
112                _setSelectedAttr: function(/*Boolean*/selected){
113                        // summary:
114                        //              Makes this widget in the selected or unselected state.
115                        // tags:
116                        //              private
117                        this.inherited(arguments);
118                        domClass.toggle(this.domNode, this.selColor, selected);
119                        domAttr.set(this.domNode, "aria-checked", selected ? "true" : "false");
120                }
121        });
122});
Note: See TracBrowser for help on using the repository browser.