56 lines
1.8 KiB
JavaScript
56 lines
1.8 KiB
JavaScript
define("dijit/form/_ToggleButtonMixin", [
|
|
"dojo/_base/declare", // declare
|
|
"dojo/dom-attr" // domAttr.set
|
|
], function(declare, domAttr){
|
|
|
|
// module:
|
|
// dijit/form/_ToggleButtonMixin
|
|
|
|
return declare("dijit.form._ToggleButtonMixin", null, {
|
|
// summary:
|
|
// A mixin to provide functionality to allow a button that can be in two states (checked or not).
|
|
|
|
// checked: Boolean
|
|
// Corresponds to the native HTML `<input>` element's attribute.
|
|
// In markup, specified as "checked='checked'" or just "checked".
|
|
// True if the button is depressed, or the checkbox is checked,
|
|
// or the radio button is selected, etc.
|
|
checked: false,
|
|
|
|
// aria-pressed for toggle buttons, and aria-checked for checkboxes
|
|
_aria_attr: "aria-pressed",
|
|
|
|
_onClick: function(/*Event*/ evt){
|
|
var original = this.checked;
|
|
this._set('checked', !original); // partially set the toggled value, assuming the toggle will work, so it can be overridden in the onclick handler
|
|
var ret = this.inherited(arguments); // the user could reset the value here
|
|
this.set('checked', ret ? this.checked : original); // officially set the toggled or user value, or reset it back
|
|
return ret;
|
|
},
|
|
|
|
_setCheckedAttr: function(/*Boolean*/ value, /*Boolean?*/ priorityChange){
|
|
this._set("checked", value);
|
|
var node = this.focusNode || this.domNode;
|
|
domAttr.set(node, "checked", !!value); // "mixed" -> true
|
|
if(value){
|
|
node.setAttribute("checked", "");
|
|
}else{
|
|
node.removeAttribute("checked");
|
|
}
|
|
node.setAttribute(this._aria_attr, String(value)); // aria values should be strings
|
|
this._handleOnChange(value, priorityChange);
|
|
},
|
|
|
|
reset: function(){
|
|
// summary:
|
|
// Reset the widget's value to what it was at initialization time
|
|
|
|
this._hasBeenBlurred = false;
|
|
|
|
// set checked state to original setting
|
|
this.set('checked', this.params.checked || false);
|
|
}
|
|
});
|
|
|
|
});
|