UNPKG

dijit

Version:

Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u

70 lines (58 loc) 2.53 kB
define([ "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; if(this._created){ // IE is not ready to handle checked attribute (affects tab order) // needlessly setting "checked" upsets IE's tab order if(domAttr.get(node, "checked") != !!value){ domAttr.set(node, "checked", !!value); // "mixed" -> true } } node.setAttribute(this._aria_attr, String(value)); // aria values should be strings this._handleOnChange(value, priorityChange); }, postCreate: function(){ // use postCreate instead of startup so users forgetting to call startup are OK this.inherited(arguments); var node = this.focusNode || this.domNode; if(this.checked){ // need this here instead of on the template so IE8 tab order works node.setAttribute('checked', 'checked'); } // Update our reset value if it hasn't yet been set (because this.set() // is only called when there *is* a value) if(this._resetValue === undefined){ this._lastValueReported = this._resetValue = this.checked; } }, 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); } }); });