summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/mobile/ListItem.js
diff options
context:
space:
mode:
authorTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
committerTristan Zur <tzur@web.web.ccwn.org>2014-03-27 22:27:47 +0100
commitb62676ca5d3d6f6ba3f019ea3f99722e165a98d8 (patch)
tree86722cb80f07d4569f90088eeaea2fc2f6e2ef94 /js/dojo-1.7.2/dojox/mobile/ListItem.js
Initial commit of intern.ccwn.org contentsHEADmaster
Diffstat (limited to 'js/dojo-1.7.2/dojox/mobile/ListItem.js')
-rw-r--r--js/dojo-1.7.2/dojox/mobile/ListItem.js376
1 files changed, 376 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/mobile/ListItem.js b/js/dojo-1.7.2/dojox/mobile/ListItem.js
new file mode 100644
index 0000000..f7244b1
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/mobile/ListItem.js
@@ -0,0 +1,376 @@
+//>>built
+define("dojox/mobile/ListItem", [
+ "dojo/_base/array",
+ "dojo/_base/connect",
+ "dojo/_base/declare",
+ "dojo/_base/lang",
+ "dojo/dom-class",
+ "dojo/dom-construct",
+ "dojo/has",
+ "./common",
+ "./_ItemBase",
+ "./TransitionEvent"
+], function(array, connect, declare, lang, domClass, domConstruct, has, common, ItemBase, TransitionEvent){
+
+/*=====
+ var ItemBase = dojox.mobile._ItemBase;
+=====*/
+
+ // module:
+ // dojox/mobile/ListItem
+ // summary:
+ // An item of either RoundRectList or EdgeToEdgeList.
+
+ return declare("dojox.mobile.ListItem", ItemBase, {
+ // summary:
+ // An item of either RoundRectList or EdgeToEdgeList.
+ // description:
+ // ListItem represents an item of either RoundRectList or
+ // EdgeToEdgeList. There are three ways to move to a different
+ // view, moveTo, href, and url. You can choose only one of them.
+
+ // rightText: String
+ // A right-aligned text to display on the item.
+ rightText: "",
+
+ // rightIcon: String
+ // An icon to display at the right hand side of the item. The value
+ // can be either a path for an image file or a class name of a DOM
+ // button.
+ rightIcon: "",
+
+ // rightIcon2: String
+ // An icon to display at the left of the rightIcon. The value can
+ // be either a path for an image file or a class name of a DOM
+ // button.
+ rightIcon2: "",
+
+
+ // anchorLabel: Boolean
+ // If true, the label text becomes a clickable anchor text. When
+ // the user clicks on the text, the onAnchorLabelClicked handler is
+ // called. You can override or connect to the handler and implement
+ // any action. The handler has no default action.
+ anchorLabel: false,
+
+ // noArrow: Boolean
+ // If true, the right hand side arrow is not displayed.
+ noArrow: false,
+
+ // selected: Boolean
+ // If true, the item is highlighted to indicate it is selected.
+ selected: false,
+
+ // checked: Boolean
+ // If true, a check mark is displayed at the right of the item.
+ checked: false,
+
+ // arrowClass: String
+ // An icon to display as an arrow. The value can be either a path
+ // for an image file or a class name of a DOM button.
+ arrowClass: "mblDomButtonArrow",
+
+ // checkClass: String
+ // An icon to display as a check mark. The value can be either a
+ // path for an image file or a class name of a DOM button.
+ checkClass: "mblDomButtonCheck",
+
+ // variableHeight: Boolean
+ // If true, the height of the item varies according to its
+ // content. In dojo 1.6 or older, the "mblVariableHeight" class was
+ // used for this purpose. In dojo 1.7, adding the mblVariableHeight
+ // class still works for backward compatibility.
+ variableHeight: false,
+
+
+ // rightIconTitle: String
+ // An alt text for the right icon.
+ rightIconTitle: "",
+
+ // rightIcon2Title: String
+ // An alt text for the right icon2.
+ rightIcon2Title: "",
+
+
+ // btnClass: String
+ // Deprecated. For backward compatibility.
+ btnClass: "",
+
+ // btnClass2: String
+ // Deprecated. For backward compatibility.
+ btnClass2: "",
+
+ // tag: String
+ // A name of html tag to create as domNode.
+ tag: "li",
+
+ postMixInProperties: function(){
+ // for backward compatibility
+ if(this.btnClass){
+ this.rightIcon = this.btnClass;
+ }
+ this._setBtnClassAttr = this._setRightIconAttr;
+ this._setBtnClass2Attr = this._setRightIcon2Attr;
+ },
+
+ buildRendering: function(){
+ this.domNode = this.srcNodeRef || domConstruct.create(this.tag);
+ this.inherited(arguments);
+ this.domNode.className = "mblListItem" + (this.selected ? " mblItemSelected" : "");
+
+ // label
+ var box = this.box = domConstruct.create("DIV");
+ box.className = "mblListItemTextBox";
+ if(this.anchorLabel){
+ box.style.cursor = "pointer";
+ }
+ var r = this.srcNodeRef;
+ if(r && !this.label){
+ this.label = "";
+ for(var i = 0, len = r.childNodes.length; i < len; i++){
+ var n = r.firstChild;
+ if(n.nodeType === 3 && lang.trim(n.nodeValue) !== ""){
+ n.nodeValue = this._cv ? this._cv(n.nodeValue) : n.nodeValue;
+ this.labelNode = domConstruct.create("SPAN", {className:"mblListItemLabel"});
+ this.labelNode.appendChild(n);
+ n = this.labelNode;
+ }
+ box.appendChild(n);
+ }
+ }
+ if(!this.labelNode){
+ this.labelNode = domConstruct.create("SPAN", {className:"mblListItemLabel"}, box);
+ }
+ if(this.anchorLabel){
+ box.style.display = "inline"; // to narrow the text region
+ }
+
+ var a = this.anchorNode = domConstruct.create("A");
+ a.className = "mblListItemAnchor";
+ this.domNode.appendChild(a);
+ a.appendChild(box);
+ },
+
+ startup: function(){
+ if(this._started){ return; }
+ this.inheritParams();
+ var parent = this.getParent();
+ if(this.moveTo || this.href || this.url || this.clickable || (parent && parent.select)){
+ this._onClickHandle = this.connect(this.anchorNode, "onclick", "onClick");
+ }
+ this.setArrow();
+
+ if(domClass.contains(this.domNode, "mblVariableHeight")){
+ this.variableHeight = true;
+ }
+ if(this.variableHeight){
+ domClass.add(this.domNode, "mblVariableHeight");
+ setTimeout(lang.hitch(this, "layoutVariableHeight"));
+ }
+
+ this.set("icon", this.icon); // _setIconAttr may be called twice but this is necessary for offline instantiation
+ if(!this.checked && this.checkClass.indexOf(',') !== -1){
+ this.set("checked", this.checked);
+ }
+ this.inherited(arguments);
+ },
+
+ resize: function(){
+ if(this.variableHeight){
+ this.layoutVariableHeight();
+ }
+ },
+
+ onClick: function(e){
+ var a = e.currentTarget;
+ var li = a.parentNode;
+ if(domClass.contains(li, "mblItemSelected")){ return; } // already selected
+ if(this.anchorLabel){
+ for(var p = e.target; p.tagName !== this.tag.toUpperCase(); p = p.parentNode){
+ if(p.className == "mblListItemTextBox"){
+ domClass.add(p, "mblListItemTextBoxSelected");
+ setTimeout(function(){
+ domClass.remove(p, "mblListItemTextBoxSelected");
+ }, has("android") ? 300 : 1000);
+ this.onAnchorLabelClicked(e);
+ return;
+ }
+ }
+ }
+ var parent = this.getParent();
+ if(parent.select){
+ if(parent.select === "single"){
+ if(!this.checked){
+ this.set("checked", true);
+ }
+ }else if(parent.select === "multiple"){
+ this.set("checked", !this.checked);
+ }
+ }
+ this.select();
+
+ if (this.href && this.hrefTarget) {
+ common.openWindow(this.href, this.hrefTarget);
+ return;
+ }
+ var transOpts;
+ if(this.moveTo || this.href || this.url || this.scene){
+ transOpts = {moveTo: this.moveTo, href: this.href, url: this.url, scene: this.scene, transition: this.transition, transitionDir: this.transitionDir};
+ }else if(this.transitionOptions){
+ transOpts = this.transitionOptions;
+ }
+
+ if(transOpts){
+ this.setTransitionPos(e);
+ return new TransitionEvent(this.domNode,transOpts,e).dispatch();
+ }
+ },
+
+ select: function(){
+ // summary:
+ // Makes this widget in the selected state.
+ var parent = this.getParent();
+ if(parent.stateful){
+ parent.deselectAll();
+ }else{
+ var _this = this;
+ setTimeout(function(){
+ _this.deselect();
+ }, has("android") ? 300 : 1000);
+ }
+ domClass.add(this.domNode, "mblItemSelected");
+ },
+
+ deselect: function(){
+ // summary:
+ // Makes this widget in the deselected state.
+ domClass.remove(this.domNode, "mblItemSelected");
+ },
+
+ onAnchorLabelClicked: function(e){
+ // summary:
+ // Stub function to connect to from your application.
+ },
+
+ layoutVariableHeight: function(){
+ var h = this.anchorNode.offsetHeight;
+ if(h === this.anchorNodeHeight){ return; }
+ this.anchorNodeHeight = h;
+ array.forEach([
+ this.rightTextNode,
+ this.rightIcon2Node,
+ this.rightIconNode,
+ this.iconNode
+ ], function(n){
+ if(n){
+ var t = Math.round((h - n.offsetHeight) / 2);
+ n.style.marginTop = t + "px";
+ }
+ });
+ },
+
+ setArrow: function(){
+ // summary:
+ // Sets the arrow icon if necessary.
+ if(this.checked){ return; }
+ var c = "";
+ var parent = this.getParent();
+ if(this.moveTo || this.href || this.url || this.clickable){
+ if(!this.noArrow && !(parent && parent.stateful)){
+ c = this.arrowClass;
+ }
+ }
+ if(c){
+ this._setRightIconAttr(c);
+ }
+ },
+
+ _setIconAttr: function(icon){
+ if(!this.getParent()){ return; } // icon may be invalid because inheritParams is not called yet
+ this.icon = icon;
+ var a = this.anchorNode;
+ if(!this.iconNode){
+ if(icon){
+ var ref = this.rightIconNode || this.rightIcon2Node || this.rightTextNode || this.box;
+ this.iconNode = domConstruct.create("DIV", {className:"mblListItemIcon"}, ref, "before");
+ }
+ }else{
+ domConstruct.empty(this.iconNode);
+ }
+ if(icon && icon !== "none"){
+ common.createIcon(icon, this.iconPos, null, this.alt, this.iconNode);
+ if(this.iconPos){
+ domClass.add(this.iconNode.firstChild, "mblListItemSpriteIcon");
+ }
+ domClass.remove(a, "mblListItemAnchorNoIcon");
+ }else{
+ domClass.add(a, "mblListItemAnchorNoIcon");
+ }
+ },
+
+ _setCheckedAttr: function(/*Boolean*/checked){
+ var parent = this.getParent();
+ if(parent && parent.select === "single" && checked){
+ array.forEach(parent.getChildren(), function(child){
+ child.set("checked", false);
+ });
+ }
+ this._setRightIconAttr(this.checkClass);
+
+ var icons = this.rightIconNode.childNodes;
+ if(icons.length === 1){
+ this.rightIconNode.style.display = checked ? "" : "none";
+ }else{
+ icons[0].style.display = checked ? "" : "none";
+ icons[1].style.display = !checked ? "" : "none";
+ }
+
+ domClass.toggle(this.domNode, "mblListItemChecked", checked);
+ if(parent && this.checked !== checked){
+ parent.onCheckStateChanged(this, checked);
+ }
+ this.checked = checked;
+ },
+
+ _setRightTextAttr: function(/*String*/text){
+ if(!this.rightTextNode){
+ this.rightTextNode = domConstruct.create("DIV", {className:"mblListItemRightText"}, this.box, "before");
+ }
+ this.rightText = text;
+ this.rightTextNode.innerHTML = this._cv ? this._cv(text) : text;
+ },
+
+ _setRightIconAttr: function(/*String*/icon){
+ if(!this.rightIconNode){
+ var ref = this.rightIcon2Node || this.rightTextNode || this.box;
+ this.rightIconNode = domConstruct.create("DIV", {className:"mblListItemRightIcon"}, ref, "before");
+ }else{
+ domConstruct.empty(this.rightIconNode);
+ }
+ this.rightIcon = icon;
+ var arr = (icon || "").split(/,/);
+ if(arr.length === 1){
+ common.createIcon(icon, null, null, this.rightIconTitle, this.rightIconNode);
+ }else{
+ common.createIcon(arr[0], null, null, this.rightIconTitle, this.rightIconNode);
+ common.createIcon(arr[1], null, null, this.rightIconTitle, this.rightIconNode);
+ }
+ },
+
+ _setRightIcon2Attr: function(/*String*/icon){
+ if(!this.rightIcon2Node){
+ var ref = this.rightTextNode || this.box;
+ this.rightIcon2Node = domConstruct.create("DIV", {className:"mblListItemRightIcon2"}, ref, "before");
+ }else{
+ domConstruct.empty(this.rightIcon2Node);
+ }
+ this.rightIcon2 = icon;
+ common.createIcon(icon, null, null, this.rightIcon2Title, this.rightIcon2Node);
+ },
+
+ _setLabelAttr: function(/*String*/text){
+ this.label = text;
+ this.labelNode.innerHTML = this._cv ? this._cv(text) : text;
+ }
+ });
+});