New file |
0,0 → 1,120 |
/* |
Copyright (c) 2004-2006, The Dojo Foundation |
All Rights Reserved. |
|
Licensed under the Academic Free License version 2.1 or above OR the |
modified BSD license. For more information on Dojo licensing, see: |
|
http://dojotoolkit.org/community/licensing.shtml |
*/ |
|
dojo.provide("dojo.widget.RadioGroup"); |
dojo.require("dojo.lang.common"); |
dojo.require("dojo.event.browser"); |
dojo.require("dojo.html.selection"); |
dojo.require("dojo.widget.*"); |
dojo.require("dojo.widget.HtmlWidget"); |
dojo.widget.defineWidget("dojo.widget.RadioGroup", dojo.widget.HtmlWidget, function () { |
this.selectedItem = null; |
this.items = []; |
this.selected = []; |
this.groupCssClass = "radioGroup"; |
this.selectedCssClass = "selected"; |
this.itemContentCssClass = "itemContent"; |
}, {isContainer:false, templatePath:null, templateCssPath:null, postCreate:function () { |
this._parseStructure(); |
dojo.html.addClass(this.domNode, this.groupCssClass); |
this._setupChildren(); |
dojo.event.browser.addListener(this.domNode, "onclick", dojo.lang.hitch(this, "onSelect")); |
if (this.selectedItem) { |
this._selectItem(this.selectedItem); |
} |
}, _parseStructure:function () { |
if (this.domNode.tagName.toLowerCase() != "ul" && this.domNode.tagName.toLowerCase() != "ol") { |
dojo.raise("RadioGroup: Expected ul or ol content."); |
return; |
} |
this.items = []; |
var nl = this.domNode.getElementsByTagName("li"); |
for (var i = 0; i < nl.length; i++) { |
if (nl[i].parentNode == this.domNode) { |
this.items.push(nl[i]); |
} |
} |
}, add:function (node) { |
if (node.parentNode != this.domNode) { |
this.domNode.appendChild(node); |
} |
this.items.push(node); |
this._setup(node); |
}, remove:function (node) { |
var idx = -1; |
for (var i = 0; i < this.items.length; i++) { |
if (this.items[i] == node) { |
idx = i; |
break; |
} |
} |
if (idx < 0) { |
return; |
} |
this.items.splice(idx, 1); |
node.parentNode.removeChild(node); |
}, clear:function () { |
for (var i = 0; i < this.items.length; i++) { |
this.domNode.removeChild(this.items[i]); |
} |
this.items = []; |
}, clearSelections:function () { |
for (var i = 0; i < this.items.length; i++) { |
dojo.html.removeClass(this.items[i], this.selectedCssClass); |
} |
this.selectedItem = null; |
}, _setup:function (node) { |
var span = document.createElement("span"); |
dojo.html.disableSelection(span); |
dojo.html.addClass(span, this.itemContentCssClass); |
dojo.dom.moveChildren(node, span); |
node.appendChild(span); |
if (this.selected.length > 0) { |
var uid = dojo.html.getAttribute(node, "id"); |
if (uid && uid == this.selected) { |
this.selectedItem = node; |
} |
} |
dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, "onItemSelect")); |
if (dojo.html.hasAttribute(node, "onitemselect")) { |
var tn = dojo.lang.nameAnonFunc(new Function(dojo.html.getAttribute(node, "onitemselect")), this); |
dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, tn)); |
} |
}, _setupChildren:function () { |
for (var i = 0; i < this.items.length; i++) { |
this._setup(this.items[i]); |
} |
}, _selectItem:function (node, event, nofire) { |
if (this.selectedItem) { |
dojo.html.removeClass(this.selectedItem, this.selectedCssClass); |
} |
this.selectedItem = node; |
dojo.html.addClass(this.selectedItem, this.selectedCssClass); |
if (!dj_undef("currentTarget", event)) { |
return; |
} |
if (!nofire) { |
if (dojo.render.html.ie) { |
this.selectedItem.fireEvent("onclick"); |
} else { |
var e = document.createEvent("MouseEvents"); |
e.initEvent("click", true, false); |
this.selectedItem.dispatchEvent(e); |
} |
} |
}, getValue:function () { |
return this.selectedItem; |
}, onSelect:function (e) { |
}, onItemSelect:function (e) { |
if (!dj_undef("currentTarget", e)) { |
this._selectItem(e.currentTarget, e); |
} |
}}); |
|