jenkins-bot has submitted this change and it was merged. Change subject: [BREAKING CHANGE] Convert ToggleWidget from a mixin to an abstract class ......................................................................
[BREAKING CHANGE] Convert ToggleWidget from a mixin to an abstract class Only technically breaking. Interface and behavior of widgets built on top of ToggleWidget is unchanged. Bug: T96674 Change-Id: I8176fd7f2267dd232b2a2a65b3f2952702644446 --- M src/widgets/ToggleButtonWidget.js M src/widgets/ToggleSwitchWidget.js M src/widgets/ToggleWidget.js 3 files changed, 56 insertions(+), 16 deletions(-) Approvals: Jforrester: Looks good to me, approved Esanders: Looks good to me, but someone else must approve jenkins-bot: Verified diff --git a/src/widgets/ToggleButtonWidget.js b/src/widgets/ToggleButtonWidget.js index 0500f2a..bb36f08 100644 --- a/src/widgets/ToggleButtonWidget.js +++ b/src/widgets/ToggleButtonWidget.js @@ -21,8 +21,14 @@ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Toggle_buttons * * @class - * @extends OO.ui.ButtonWidget - * @mixins OO.ui.ToggleWidget + * @extends OO.ui.ToggleWidget + * @mixins OO.ui.ButtonElement + * @mixins OO.ui.IconElement + * @mixins OO.ui.IndicatorElement + * @mixins OO.ui.LabelElement + * @mixins OO.ui.TitledElement + * @mixins OO.ui.FlaggedElement + * @mixins OO.ui.TabIndexedElement * * @constructor * @param {Object} [config] Configuration options @@ -37,26 +43,41 @@ OO.ui.ToggleButtonWidget.super.call( this, config ); // Mixin constructors - OO.ui.ToggleWidget.call( this, config ); + OO.ui.ButtonElement.call( this, config ); + OO.ui.IconElement.call( this, config ); + OO.ui.IndicatorElement.call( this, config ); + OO.ui.LabelElement.call( this, config ); + OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) ); + OO.ui.FlaggedElement.call( this, config ); + OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) ); // Events this.connect( this, { click: 'onAction' } ); // Initialization - this.$element.addClass( 'oo-ui-toggleButtonWidget' ); + this.$button.append( this.$icon, this.$label, this.$indicator ); + this.$element + .addClass( 'oo-ui-toggleButtonWidget' ) + .append( this.$button ); }; /* Setup */ -OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonWidget ); -OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget ); +OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget ); +OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonElement ); +OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IconElement ); +OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IndicatorElement ); +OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.LabelElement ); +OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TitledElement ); +OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.FlaggedElement ); +OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TabIndexedElement ); /* Methods */ /** + * Handle the button action being triggered. * * @private - * Handle the button action being triggered. */ OO.ui.ToggleButtonWidget.prototype.onAction = function () { this.setValue( !this.value ); @@ -68,12 +89,26 @@ OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) { value = !!value; if ( value !== this.value ) { - this.$button.attr( 'aria-pressed', value.toString() ); + // Might be called from parent constructor before ButtonElement constructor + if ( this.$button ) { + this.$button.attr( 'aria-pressed', value.toString() ); + } this.setActive( value ); } - // Parent method (from mixin) - OO.ui.ToggleWidget.prototype.setValue.call( this, value ); + // Parent method + OO.ui.ToggleButtonWidget.super.prototype.setValue.call( this, value ); return this; }; + +/** + * @inheritdoc + */ +OO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) { + if ( this.$button ) { + this.$button.removeAttr( 'aria-pressed' ); + } + OO.ui.ButtonElement.prototype.setButtonElement.call( this, $button ); + this.$button.attr( 'aria-pressed', this.value.toString() ); +}; diff --git a/src/widgets/ToggleSwitchWidget.js b/src/widgets/ToggleSwitchWidget.js index ab0f5c0..94f0f99 100644 --- a/src/widgets/ToggleSwitchWidget.js +++ b/src/widgets/ToggleSwitchWidget.js @@ -21,8 +21,7 @@ * $( 'body' ).append( fieldset.$element ); * * @class - * @extends OO.ui.Widget - * @mixins OO.ui.ToggleWidget + * @extends OO.ui.ToggleWidget * @mixins OO.ui.TabIndexedElement * * @constructor @@ -35,7 +34,6 @@ OO.ui.ToggleSwitchWidget.super.call( this, config ); // Mixin constructors - OO.ui.ToggleWidget.call( this, config ); OO.ui.TabIndexedElement.call( this, config ); // Properties @@ -62,8 +60,7 @@ /* Setup */ -OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.Widget ); -OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget ); +OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget ); OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.TabIndexedElement ); /* Methods */ diff --git a/src/widgets/ToggleWidget.js b/src/widgets/ToggleWidget.js index 96ace53..16d6ba5 100644 --- a/src/widgets/ToggleWidget.js +++ b/src/widgets/ToggleWidget.js @@ -1,9 +1,10 @@ /** - * ToggleWidget is mixed into other classes to create widgets with an on/off state. + * 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 @@ -14,6 +15,9 @@ // Configuration initialization config = config || {}; + // Parent constructor + OO.ui.ToggleWidget.super.call( this, config ); + // Properties this.value = null; @@ -22,6 +26,10 @@ this.setValue( !!config.value ); }; +/* Setup */ + +OO.inheritClass( OO.ui.ToggleWidget, OO.ui.Widget ); + /* Events */ /** -- To view, visit https://gerrit.wikimedia.org/r/205601 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I8176fd7f2267dd232b2a2a65b3f2952702644446 Gerrit-PatchSet: 1 Gerrit-Project: oojs/ui Gerrit-Branch: master Gerrit-Owner: Bartosz DziewoĆski <[email protected]> Gerrit-Reviewer: Cscott <[email protected]> Gerrit-Reviewer: Esanders <[email protected]> Gerrit-Reviewer: Jforrester <[email protected]> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
