diff options
Diffstat (limited to 'vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js')
-rw-r--r-- | vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js b/vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js new file mode 100644 index 00000000..16d6ba50 --- /dev/null +++ b/vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js @@ -0,0 +1,71 @@ +/** + * ToggleWidget implements basic behavior of widgets with an on/off state. + * Please see OO.ui.ToggleButtonWidget and OO.ui.ToggleSwitchWidget for examples. + * + * @abstract + * @class + * @extends OO.ui.Widget + * + * @constructor + * @param {Object} [config] Configuration options + * @cfg {boolean} [value=false] The toggle’s initial on/off state. + * By default, the toggle is in the 'off' state. + */ +OO.ui.ToggleWidget = function OoUiToggleWidget( config ) { + // Configuration initialization + config = config || {}; + + // Parent constructor + OO.ui.ToggleWidget.super.call( this, config ); + + // Properties + this.value = null; + + // Initialization + this.$element.addClass( 'oo-ui-toggleWidget' ); + this.setValue( !!config.value ); +}; + +/* Setup */ + +OO.inheritClass( OO.ui.ToggleWidget, OO.ui.Widget ); + +/* Events */ + +/** + * @event change + * + * A change event is emitted when the on/off state of the toggle changes. + * + * @param {boolean} value Value representing the new state of the toggle + */ + +/* Methods */ + +/** + * Get the value representing the toggle’s state. + * + * @return {boolean} The on/off state of the toggle + */ +OO.ui.ToggleWidget.prototype.getValue = function () { + return this.value; +}; + +/** + * Set the state of the toggle: `true` for 'on', `false' for 'off'. + * + * @param {boolean} value The state of the toggle + * @fires change + * @chainable + */ +OO.ui.ToggleWidget.prototype.setValue = function ( value ) { + value = !!value; + if ( this.value !== value ) { + this.value = value; + this.emit( 'change', value ); + this.$element.toggleClass( 'oo-ui-toggleWidget-on', value ); + this.$element.toggleClass( 'oo-ui-toggleWidget-off', !value ); + this.$element.attr( 'aria-checked', value.toString() ); + } + return this; +}; |