118 lines
3.3 KiB
JavaScript
118 lines
3.3 KiB
JavaScript
define("dojox/mobile/IconMenuItem", [
|
|
"dojo/_base/declare",
|
|
"dojo/_base/lang",
|
|
"dojo/dom-class",
|
|
"dojo/dom-construct",
|
|
"./iconUtils",
|
|
"./_ItemBase"
|
|
], function(declare, lang, domClass, domConstruct, iconUtils, ItemBase){
|
|
// module:
|
|
// dojox/mobile/IconMenuItem
|
|
|
|
return declare("dojox.mobile.IconMenuItem", ItemBase, {
|
|
// summary:
|
|
// An item of IconMenu.
|
|
// description:
|
|
// IconMenuItem represents a menu item of
|
|
// dojox/mobile/MenuItem. This widget inherits from
|
|
// dojox/mobile/_ItemBase. Basic usage is same as the other
|
|
// subclasses such as dojox/mobile/ListItem.
|
|
|
|
// closeOnAction: Boolean
|
|
// Calls the hide() method of the parent widget, which is typically
|
|
// a SimpleDialog.
|
|
closeOnAction: false,
|
|
|
|
// tag: String
|
|
// A name of html tag to create as domNode.
|
|
tag: "li",
|
|
|
|
/* internal properties */
|
|
// Note these are overrides for similar properties defined in _ItemBase.
|
|
baseClass: "mblIconMenuItem",
|
|
selColor: "mblIconMenuItemSel",
|
|
_selStartMethod: "touch",
|
|
_selEndMethod: "touch",
|
|
|
|
buildRendering: function(){
|
|
this.domNode = this.srcNodeRef || domConstruct.create(this.tag);
|
|
this.inherited(arguments);
|
|
if(this.selected){
|
|
domClass.add(this.domNode, this.selColor);
|
|
}
|
|
|
|
if(this.srcNodeRef){
|
|
if(!this.label){
|
|
this.label = lang.trim(this.srcNodeRef.innerHTML);
|
|
}
|
|
this.srcNodeRef.innerHTML = "";
|
|
}
|
|
|
|
var a = this.anchorNode = this.containerNode = domConstruct.create("a", {
|
|
className: "mblIconMenuItemAnchor",
|
|
href: "javascript:void(0)"
|
|
});
|
|
var tbl = domConstruct.create("table", {
|
|
className: "mblIconMenuItemTable"
|
|
}, a);
|
|
var cell = this.iconParentNode = tbl.insertRow(-1).insertCell(-1);
|
|
this.iconNode = domConstruct.create("div", {
|
|
className: "mblIconMenuItemIcon"
|
|
}, cell);
|
|
this.labelNode = this.refNode = domConstruct.create("div", {
|
|
className: "mblIconMenuItemLabel"
|
|
}, cell);
|
|
this.position = "before";
|
|
this.domNode.appendChild(a);
|
|
},
|
|
|
|
startup: function(){
|
|
if(this._started){ return; }
|
|
|
|
this._keydownHandle = this.connect(this.domNode, "onkeydown", "_onClick"); // for desktop browsers
|
|
|
|
this.inherited(arguments);
|
|
if(!this._isOnLine){
|
|
this._isOnLine = true;
|
|
// retry applying the attribute for which the custom setter delays the actual
|
|
// work until _isOnLine is true.
|
|
this.set("icon", this._pendingIcon !== undefined ? this._pendingIcon : this.icon);
|
|
// Not needed anymore (this code executes only once per life cycle):
|
|
delete this._pendingIcon;
|
|
}
|
|
},
|
|
|
|
_onClick: function(e){
|
|
// summary:
|
|
// Internal handler for click events.
|
|
// tags:
|
|
// private
|
|
if(e && e.type === "keydown" && e.keyCode !== 13){ return; }
|
|
if(this.onClick(e) === false){ return; } // user's click action
|
|
if(this.closeOnAction){
|
|
var p = this.getParent(); // maybe SimpleDialog
|
|
if(p && p.hide){
|
|
p.hide();
|
|
}
|
|
}
|
|
this.defaultClickAction(e);
|
|
},
|
|
|
|
onClick: function(/*Event*/ /*===== e =====*/){
|
|
// summary:
|
|
// User-defined function to handle clicks.
|
|
// tags:
|
|
// callback
|
|
},
|
|
|
|
_setSelectedAttr: function(/*Boolean*/selected){
|
|
// summary:
|
|
// Makes this widget in the selected or unselected state.
|
|
// tags:
|
|
// private
|
|
this.inherited(arguments);
|
|
domClass.toggle(this.domNode, this.selColor, selected);
|
|
}
|
|
});
|
|
});
|