blob: 3b87a5ac04e3eb63d3a9c8272e04b43b10b30d4e [file] [log] [blame]
/*
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);
}
}});