blob: a8348e4b88bed7d1351e43fb80c455c9630cb64e [file] [log] [blame]
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(_3){
if(_3.parentNode!=this.domNode){
this.domNode.appendChild(_3);
}
this.items.push(_3);
this._setup(_3);
},remove:function(_4){
var _5=-1;
for(var i=0;i<this.items.length;i++){
if(this.items[i]==_4){
_5=i;
break;
}
}
if(_5<0){
return;
}
this.items.splice(_5,1);
_4.parentNode.removeChild(_4);
},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(_9){
var _a=document.createElement("span");
dojo.html.disableSelection(_a);
dojo.html.addClass(_a,this.itemContentCssClass);
dojo.dom.moveChildren(_9,_a);
_9.appendChild(_a);
if(this.selected.length>0){
var _b=dojo.html.getAttribute(_9,"id");
if(_b&&_b==this.selected){
this.selectedItem=_9;
}
}
dojo.event.browser.addListener(_9,"onclick",dojo.lang.hitch(this,"onItemSelect"));
if(dojo.html.hasAttribute(_9,"onitemselect")){
var tn=dojo.lang.nameAnonFunc(new Function(dojo.html.getAttribute(_9,"onitemselect")),this);
dojo.event.browser.addListener(_9,"onclick",dojo.lang.hitch(this,tn));
}
},_setupChildren:function(){
for(var i=0;i<this.items.length;i++){
this._setup(this.items[i]);
}
},_selectItem:function(_e,_f,_10){
if(this.selectedItem){
dojo.html.removeClass(this.selectedItem,this.selectedCssClass);
}
this.selectedItem=_e;
dojo.html.addClass(this.selectedItem,this.selectedCssClass);
if(!dj_undef("currentTarget",_f)){
return;
}
if(!_10){
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);
}
}});