| /* |
| 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); |
| } |
| }}); |
| |