00001 /* 00002 Copyright (c) 2004-2006, The Dojo Foundation 00003 All Rights Reserved. 00004 00005 Licensed under the Academic Free License version 2.1 or above OR the 00006 modified BSD license. For more information on Dojo licensing, see: 00007 00008 http://dojotoolkit.org/community/licensing.shtml 00009 */ 00010 00011 00012 00013 dojo.provide("dojo.widget.RadioGroup"); 00014 dojo.require("dojo.lang.common"); 00015 dojo.require("dojo.event.browser"); 00016 dojo.require("dojo.html.selection"); 00017 dojo.require("dojo.widget.*"); 00018 dojo.require("dojo.widget.HtmlWidget"); 00019 dojo.widget.defineWidget("dojo.widget.RadioGroup", dojo.widget.HtmlWidget, function () { 00020 this.selectedItem = null; 00021 this.items = []; 00022 this.selected = []; 00023 this.groupCssClass = "radioGroup"; 00024 this.selectedCssClass = "selected"; 00025 this.itemContentCssClass = "itemContent"; 00026 }, {isContainer:false, templatePath:null, templateCssPath:null, postCreate:function () { 00027 this._parseStructure(); 00028 dojo.html.addClass(this.domNode, this.groupCssClass); 00029 this._setupChildren(); 00030 dojo.event.browser.addListener(this.domNode, "onclick", dojo.lang.hitch(this, "onSelect")); 00031 if (this.selectedItem) { 00032 this._selectItem(this.selectedItem); 00033 } 00034 }, _parseStructure:function () { 00035 if (this.domNode.tagName.toLowerCase() != "ul" && this.domNode.tagName.toLowerCase() != "ol") { 00036 dojo.raise("RadioGroup: Expected ul or ol content."); 00037 return; 00038 } 00039 this.items = []; 00040 var nl = this.domNode.getElementsByTagName("li"); 00041 for (var i = 0; i < nl.length; i++) { 00042 if (nl[i].parentNode == this.domNode) { 00043 this.items.push(nl[i]); 00044 } 00045 } 00046 }, add:function (node) { 00047 if (node.parentNode != this.domNode) { 00048 this.domNode.appendChild(node); 00049 } 00050 this.items.push(node); 00051 this._setup(node); 00052 }, remove:function (node) { 00053 var idx = -1; 00054 for (var i = 0; i < this.items.length; i++) { 00055 if (this.items[i] == node) { 00056 idx = i; 00057 break; 00058 } 00059 } 00060 if (idx < 0) { 00061 return; 00062 } 00063 this.items.splice(idx, 1); 00064 node.parentNode.removeChild(node); 00065 }, clear:function () { 00066 for (var i = 0; i < this.items.length; i++) { 00067 this.domNode.removeChild(this.items[i]); 00068 } 00069 this.items = []; 00070 }, clearSelections:function () { 00071 for (var i = 0; i < this.items.length; i++) { 00072 dojo.html.removeClass(this.items[i], this.selectedCssClass); 00073 } 00074 this.selectedItem = null; 00075 }, _setup:function (node) { 00076 var span = document.createElement("span"); 00077 dojo.html.disableSelection(span); 00078 dojo.html.addClass(span, this.itemContentCssClass); 00079 dojo.dom.moveChildren(node, span); 00080 node.appendChild(span); 00081 if (this.selected.length > 0) { 00082 var uid = dojo.html.getAttribute(node, "id"); 00083 if (uid && uid == this.selected) { 00084 this.selectedItem = node; 00085 } 00086 } 00087 dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, "onItemSelect")); 00088 if (dojo.html.hasAttribute(node, "onitemselect")) { 00089 var tn = dojo.lang.nameAnonFunc(new Function(dojo.html.getAttribute(node, "onitemselect")), this); 00090 dojo.event.browser.addListener(node, "onclick", dojo.lang.hitch(this, tn)); 00091 } 00092 }, _setupChildren:function () { 00093 for (var i = 0; i < this.items.length; i++) { 00094 this._setup(this.items[i]); 00095 } 00096 }, _selectItem:function (node, event, nofire) { 00097 if (this.selectedItem) { 00098 dojo.html.removeClass(this.selectedItem, this.selectedCssClass); 00099 } 00100 this.selectedItem = node; 00101 dojo.html.addClass(this.selectedItem, this.selectedCssClass); 00102 if (!dj_undef("currentTarget", event)) { 00103 return; 00104 } 00105 if (!nofire) { 00106 if (dojo.render.html.ie) { 00107 this.selectedItem.fireEvent("onclick"); 00108 } else { 00109 var e = document.createEvent("MouseEvents"); 00110 e.initEvent("click", true, false); 00111 this.selectedItem.dispatchEvent(e); 00112 } 00113 } 00114 }, getValue:function () { 00115 return this.selectedItem; 00116 }, onSelect:function (e) { 00117 }, onItemSelect:function (e) { 00118 if (!dj_undef("currentTarget", e)) { 00119 this._selectItem(e.currentTarget, e); 00120 } 00121 }}); 00122
For more help developing with SiT! see http://sitracker.org/wiki/DevelopmentHowTo