1 | define([ |
---|
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 | }); |
---|