webui-aria2/js/libs/dijit/form/_RadioButtonMixin.js.uncompressed.js
2012-05-01 19:52:07 +08:00

72 lines
2.2 KiB
JavaScript

//>>built
define("dijit/form/_RadioButtonMixin", [
"dojo/_base/array", // array.forEach
"dojo/_base/declare", // declare
"dojo/dom-attr", // domAttr.set
"dojo/_base/event", // event.stop
"dojo/_base/lang", // lang.hitch
"dojo/query", // query
"dojo/_base/window", // win.doc
"../registry" // registry.getEnclosingWidget
], function(array, declare, domAttr, event, lang, query, win, registry){
// module:
// dijit/form/_RadioButtonMixin
// summary:
// Mixin to provide widget functionality for an HTML radio button
return declare("dijit.form._RadioButtonMixin", null, {
// summary:
// Mixin to provide widget functionality for an HTML radio button
// type: [private] String
// type attribute on <input> node.
// Users should not change this value.
type: "radio",
_getRelatedWidgets: function(){
// Private function needed to help iterate over all radio buttons in a group.
var ary = [];
query("input[type=radio]", this.focusNode.form || win.doc).forEach( // can't use name= since query doesn't support [] in the name
lang.hitch(this, function(inputNode){
if(inputNode.name == this.name && inputNode.form == this.focusNode.form){
var widget = registry.getEnclosingWidget(inputNode);
if(widget){
ary.push(widget);
}
}
})
);
return ary;
},
_setCheckedAttr: function(/*Boolean*/ value){
// If I am being checked then have to deselect currently checked radio button
this.inherited(arguments);
if(!this._created){ return; }
if(value){
array.forEach(this._getRelatedWidgets(), lang.hitch(this, function(widget){
if(widget != this && widget.checked){
widget.set('checked', false);
}
}));
}
},
_onClick: function(/*Event*/ e){
if(this.checked || this.disabled){ // nothing to do
event.stop(e);
return false;
}
if(this.readOnly){ // ignored by some browsers so we have to resync the DOM elements with widget values
event.stop(e);
array.forEach(this._getRelatedWidgets(), lang.hitch(this, function(widget){
domAttr.set(this.focusNode || this.domNode, 'checked', widget.checked);
}));
return false;
}
return this.inherited(arguments);
}
});
});