134 lines
3.9 KiB
JavaScript
134 lines
3.9 KiB
JavaScript
|
if(!dojo._hasResource["dijit.form.CheckBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||
|
dojo._hasResource["dijit.form.CheckBox"] = true;
|
||
|
dojo.provide("dijit.form.CheckBox");
|
||
|
|
||
|
dojo.require("dijit.form.Button");
|
||
|
|
||
|
dojo.declare(
|
||
|
"dijit.form.CheckBox",
|
||
|
dijit.form.ToggleButton,
|
||
|
{
|
||
|
// summary:
|
||
|
// Same as an HTML checkbox, but with fancy styling.
|
||
|
//
|
||
|
// description:
|
||
|
// User interacts with real html inputs.
|
||
|
// On onclick (which occurs by mouse click, space-bar, or
|
||
|
// using the arrow keys to switch the selected radio button),
|
||
|
// we update the state of the checkbox/radio.
|
||
|
//
|
||
|
// There are two modes:
|
||
|
// 1. High contrast mode
|
||
|
// 2. Normal mode
|
||
|
// In case 1, the regular html inputs are shown and used by the user.
|
||
|
// In case 2, the regular html inputs are invisible but still used by
|
||
|
// the user. They are turned quasi-invisible and overlay the background-image.
|
||
|
|
||
|
templateString:"<div class=\"dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \ttype=\"${type}\" name=\"${name}\"\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick\"\n/></div>\n",
|
||
|
|
||
|
baseClass: "dijitCheckBox",
|
||
|
|
||
|
// Value of "type" attribute for <input>
|
||
|
type: "checkbox",
|
||
|
|
||
|
// value: Value
|
||
|
// equivalent to value field on normal checkbox (if checked, the value is passed as
|
||
|
// the value when form is submitted)
|
||
|
value: "on",
|
||
|
|
||
|
setValue: function(/*String or Boolean*/ newValue){
|
||
|
// summary:
|
||
|
// When passed a boolean, controls whether or not the CheckBox is checked.
|
||
|
// If passed a string, changes the value attribute of the CheckBox (the one
|
||
|
// specified as "value" when the CheckBox was constructed (ex: <input
|
||
|
// dojoType="dijit.CheckBox" value="chicken">)
|
||
|
if(typeof newValue == "string"){
|
||
|
this.setAttribute('value', newValue);
|
||
|
newValue = true;
|
||
|
}
|
||
|
this.setAttribute('checked', newValue);
|
||
|
},
|
||
|
|
||
|
_getValueDeprecated: false, // remove when _FormWidget:_getValueDeprecated is removed
|
||
|
getValue: function(){
|
||
|
// summary:
|
||
|
// If the CheckBox is checked, returns the value attribute.
|
||
|
// Otherwise returns false.
|
||
|
return (this.checked ? this.value : false);
|
||
|
},
|
||
|
|
||
|
reset: function(){
|
||
|
this.inherited(arguments);
|
||
|
this.setAttribute('value', this._resetValueAttr);
|
||
|
},
|
||
|
|
||
|
postCreate: function(){
|
||
|
this.inherited(arguments);
|
||
|
this._resetValueAttr = this.value;
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
|
||
|
dojo.declare(
|
||
|
"dijit.form.RadioButton",
|
||
|
dijit.form.CheckBox,
|
||
|
{
|
||
|
// summary:
|
||
|
// Same as an HTML radio, but with fancy styling.
|
||
|
//
|
||
|
// description:
|
||
|
// Implementation details
|
||
|
//
|
||
|
// Specialization:
|
||
|
// We keep track of dijit radio groups so that we can update the state
|
||
|
// of all the siblings (the "context") in a group based on input
|
||
|
// events. We don't rely on browser radio grouping.
|
||
|
|
||
|
type: "radio",
|
||
|
baseClass: "dijitRadio",
|
||
|
|
||
|
// This shared object keeps track of all widgets, grouped by name
|
||
|
_groups: {},
|
||
|
|
||
|
postCreate: function(){
|
||
|
// add this widget to _groups
|
||
|
(this._groups[this.name] = this._groups[this.name] || []).push(this);
|
||
|
|
||
|
this.inherited(arguments);
|
||
|
},
|
||
|
|
||
|
uninitialize: function(){
|
||
|
// remove this widget from _groups
|
||
|
dojo.forEach(this._groups[this.name], function(widget, i, arr){
|
||
|
if(widget === this){
|
||
|
arr.splice(i, 1);
|
||
|
return;
|
||
|
}
|
||
|
}, this);
|
||
|
},
|
||
|
|
||
|
setAttribute: function(/*String*/ attr, /*anything*/ value){
|
||
|
// If I am being checked then have to deselect currently checked radio button
|
||
|
this.inherited(arguments);
|
||
|
switch(attr){
|
||
|
case "checked":
|
||
|
if(this.checked){
|
||
|
dojo.forEach(this._groups[this.name], function(widget){
|
||
|
if(widget != this && widget.checked){
|
||
|
widget.setAttribute('checked', false);
|
||
|
}
|
||
|
}, this);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
_clicked: function(/*Event*/ e){
|
||
|
if(!this.checked){
|
||
|
this.setAttribute('checked', true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
|
||
|
}
|