Bartosz Dziewoński has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/393948 )

Change subject: Handle 'config' parameters like in OOjs UI
......................................................................

Handle 'config' parameters like in OOjs UI

Previous code was perfectly correct, but I think it makes sense to change
it for consistency with OOjs UI and with code in MediaWiki and other
extensions where we use custom widgets.

* We never need to access the "original" config, so there's no need for
  a separate variable for config with the default options. (Also, I hate
  the prefix 'my' in variable names, it makes me think of poorly written
  tutorials.)
* `$.extend()` will ignore parameters that are undefined, so no need to
  pass `config || {}` to it.
* Use `!== undefined` instead of `hasOwnProperty` to check for options
  that are not given.

Change-Id: I8f549932d79b9bc5230984fdba8ff7e89b221dcf
---
M modules/ui/ext.advancedSearch.ArbitraryWordInput.js
M modules/ui/ext.advancedSearch.ExpandablePane.js
M modules/ui/ext.advancedSearch.FileTypeSelection.js
M modules/ui/ext.advancedSearch.NamespaceFilters.js
M modules/ui/ext.advancedSearch.NamespacePresets.js
M modules/ui/ext.advancedSearch.SearchPreview.js
M modules/ui/ext.advancedSearch.TemplateSearch.js
M modules/ui/ext.advancedSearch.TextInput.js
8 files changed, 32 insertions(+), 30 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/AdvancedSearch 
refs/changes/48/393948/1

diff --git a/modules/ui/ext.advancedSearch.ArbitraryWordInput.js 
b/modules/ui/ext.advancedSearch.ArbitraryWordInput.js
index c68fb4f..7062b29 100644
--- a/modules/ui/ext.advancedSearch.ArbitraryWordInput.js
+++ b/modules/ui/ext.advancedSearch.ArbitraryWordInput.js
@@ -14,6 +14,8 @@
         * @param  {Object} config
         */
        mw.libs.advancedSearch.ui.ArbitraryWordInput = function ( store, config 
) {
+               config = $.extend( {}, config );
+
                this.store = store;
                this.optionId = config.optionId;
                this.placeholderText = config.placeholder || '';
@@ -22,7 +24,7 @@
 
                mw.libs.advancedSearch.ui.ArbitraryWordInput.parent.call(
                        this,
-                       $.extend( { allowArbitrary: true }, config || {} )
+                       $.extend( { allowArbitrary: true }, config )
                );
 
                this.input.$input.on( 'input', this.buildTagsFromInput.bind( 
this ) );
diff --git a/modules/ui/ext.advancedSearch.ExpandablePane.js 
b/modules/ui/ext.advancedSearch.ExpandablePane.js
index c895320..48cd50e 100644
--- a/modules/ui/ext.advancedSearch.ExpandablePane.js
+++ b/modules/ui/ext.advancedSearch.ExpandablePane.js
@@ -26,10 +26,10 @@
         * @param  {Object} config
         */
        mw.libs.advancedSearch.ui.ExpandablePane = function ( config ) {
-               var myConfig = $.extend( { data: this.STATE_CLOSED }, config );
+               config = $.extend( { data: this.STATE_CLOSED }, config );
 
-               mw.libs.advancedSearch.ui.ExpandablePane.parent.call( this, 
myConfig );
-               OO.ui.mixin.IndicatorElement.call( this, { indicator: 
getIndicatorNameForState( myConfig.data ) } );
+               mw.libs.advancedSearch.ui.ExpandablePane.parent.call( this, 
config );
+               OO.ui.mixin.IndicatorElement.call( this, { indicator: 
getIndicatorNameForState( config.data ) } );
 
                var self = this;
                this.$btn = $( '<div>' )
@@ -56,8 +56,8 @@
                this.$dependentPane = $( '<div>' )
                        .addClass( 'mw-advancedSearch-expandablePane-pane' );
 
-               if ( config.hasOwnProperty( 'tabIndex' ) ) {
-                       this.$btn.prop( 'tabindex', parseInt( config.tabIndex ) 
);
+               if ( config.tabIndex !== undefined ) {
+                       this.$btn.prop( 'tabindex', Number( config.tabIndex ) );
                }
 
                if ( config.$buttonLabel ) {
@@ -74,7 +74,7 @@
                this.$element.addClass( 'mw-advancedSearch-expandablePane' );
                this.$element.append( this.$btn, this.$dependentPane );
 
-               this.notifyChildInputVisibility( myConfig.data === 
this.STATE_OPEN );
+               this.notifyChildInputVisibility( config.data === 
this.STATE_OPEN );
        };
 
        OO.inheritClass( mw.libs.advancedSearch.ui.ExpandablePane, OO.ui.Widget 
);
diff --git a/modules/ui/ext.advancedSearch.FileTypeSelection.js 
b/modules/ui/ext.advancedSearch.FileTypeSelection.js
index 404b4ec..e3d2b10 100644
--- a/modules/ui/ext.advancedSearch.FileTypeSelection.js
+++ b/modules/ui/ext.advancedSearch.FileTypeSelection.js
@@ -21,12 +21,12 @@
         * @param  {Object} config
         */
        mw.libs.advancedSearch.ui.FileTypeSelection = function ( store, 
optionProvider, config ) {
-               var myConfig = $.extend( { options: getOptions( optionProvider 
) }, config );
+               config = $.extend( { options: getOptions( optionProvider ) }, 
config );
                this.store = store;
                this.optionId = config.optionId;
 
                // Parent constructor
-               mw.libs.advancedSearch.ui.FileTypeSelection.parent.call( this, 
myConfig );
+               mw.libs.advancedSearch.ui.FileTypeSelection.parent.call( this, 
config );
 
                store.connect( this, { update: 'onStoreUpdate' } );
 
diff --git a/modules/ui/ext.advancedSearch.NamespaceFilters.js 
b/modules/ui/ext.advancedSearch.NamespaceFilters.js
index 1842632..adcf5b6 100644
--- a/modules/ui/ext.advancedSearch.NamespaceFilters.js
+++ b/modules/ui/ext.advancedSearch.NamespaceFilters.js
@@ -16,7 +16,7 @@
         * @cfg {Object} [namespaces] Namespace id => Namespace label (similar 
to mw.config.get( 'wgFormattedNamespaces' ) )
         */
        mw.libs.advancedSearch.ui.NamespaceFilters = function ( store, config ) 
{
-               var myConfig = $.extend( {
+               config = $.extend( {
                        namespaces: {},
                        namespaceIcons: {
                                2: 'userAvatar',
@@ -29,14 +29,14 @@
                        },
                        options: [],
                        classes: []
-               }, config || {} );
+               }, config );
 
-               this.namespaces = myConfig.namespaces;
-               myConfig.options = myConfig.options.concat( 
this.createNamespaceOptions( this.namespaces ) );
-               myConfig.classes.push( 'mw-advancedSearch-namespaceFilter' );
-               this.setNamespaceIcons( myConfig.namespaceIcons );
+               this.namespaces = config.namespaces;
+               config.options = config.options.concat( 
this.createNamespaceOptions( this.namespaces ) );
+               config.classes.push( 'mw-advancedSearch-namespaceFilter' );
+               this.setNamespaceIcons( config.namespaceIcons );
 
-               mw.libs.advancedSearch.ui.NamespaceFilters.parent.call( this, 
myConfig );
+               mw.libs.advancedSearch.ui.NamespaceFilters.parent.call( this, 
config );
 
                this.$namespaceContainer = $( '<span>' ).addClass( 
'mw-advancedSearch-namespaceContainer' );
                this.$element.append( this.$namespaceContainer );
diff --git a/modules/ui/ext.advancedSearch.NamespacePresets.js 
b/modules/ui/ext.advancedSearch.NamespacePresets.js
index 8492d45..b83cfb3 100644
--- a/modules/ui/ext.advancedSearch.NamespacePresets.js
+++ b/modules/ui/ext.advancedSearch.NamespacePresets.js
@@ -34,17 +34,17 @@
         * @param  {Object} config
         */
        mw.libs.advancedSearch.ui.NamespacePresets = function ( store, config ) 
{
-               var myConfig = $.extend( {
+               config = $.extend( {
                        presets: {}
-               }, config || {} );
+               }, config );
                config.presets = groomPresets( config.presets );
 
-               myConfig.options = prepareOptions( config.presets );
+               config.options = prepareOptions( config.presets );
                this.store = store;
 
-               this.presets = myConfig.presets;
+               this.presets = config.presets;
 
-               mw.libs.advancedSearch.ui.NamespacePresets.parent.call( this, 
myConfig );
+               mw.libs.advancedSearch.ui.NamespacePresets.parent.call( this, 
config );
 
                // Using undocumented internals because this.on does not work, 
see https://phabricator.wikimedia.org/T168735
                this.checkboxMultiselectWidget.on( 'change', 
this.updateStoreFromPresets, [], this );
diff --git a/modules/ui/ext.advancedSearch.SearchPreview.js 
b/modules/ui/ext.advancedSearch.SearchPreview.js
index e54a55f..ec7e94a 100644
--- a/modules/ui/ext.advancedSearch.SearchPreview.js
+++ b/modules/ui/ext.advancedSearch.SearchPreview.js
@@ -33,16 +33,16 @@
         * @param  {Object} config
         */
        mw.libs.advancedSearch.ui.SearchPreview = function ( store, config ) {
-               var myConfig = $.extend( {
+               config = $.extend( {
                        previewOptions: [],
                        data: true
-               }, config || {} );
+               }, config );
                this.store = store;
-               this.previewOptions = myConfig.previewOptions;
+               this.previewOptions = config.previewOptions;
 
                store.connect( this, { update: 'onStoreUpdate' } );
 
-               mw.libs.advancedSearch.ui.SearchPreview.parent.call( this, 
myConfig );
+               mw.libs.advancedSearch.ui.SearchPreview.parent.call( this, 
config );
 
                this.label = new OO.ui.LabelWidget( {
                        label: config.label,
diff --git a/modules/ui/ext.advancedSearch.TemplateSearch.js 
b/modules/ui/ext.advancedSearch.TemplateSearch.js
index dba7f90..07cdd32 100644
--- a/modules/ui/ext.advancedSearch.TemplateSearch.js
+++ b/modules/ui/ext.advancedSearch.TemplateSearch.js
@@ -14,7 +14,7 @@
         * @param  {Object} config
         */
        mw.libs.advancedSearch.ui.TemplateSearch = function ( store, config ) {
-               var myConfig = $.extend( {}, config || {}, {
+               config = $.extend( {}, config, {
                        allowArbitrary: true,
                        input: {
                                autocomplete: false
@@ -26,14 +26,14 @@
 
                this.store.connect( this, { update: 'onStoreUpdate' } );
 
-               mw.libs.advancedSearch.ui.TemplateSearch.parent.call( this, 
myConfig );
+               mw.libs.advancedSearch.ui.TemplateSearch.parent.call( this, 
config );
 
                this.$input = this.input.$input;
 
                this.input.connect( this, { change: 'onLookupInputChange' } );
 
                // Mixin constructor
-               OO.ui.mixin.LookupElement.call( this, myConfig );
+               OO.ui.mixin.LookupElement.call( this, config );
 
                this.populateFromStore();
 
diff --git a/modules/ui/ext.advancedSearch.TextInput.js 
b/modules/ui/ext.advancedSearch.TextInput.js
index e935076..3cdeff1 100644
--- a/modules/ui/ext.advancedSearch.TextInput.js
+++ b/modules/ui/ext.advancedSearch.TextInput.js
@@ -14,13 +14,13 @@
         * @param  {Object} config
         */
        mw.libs.advancedSearch.ui.TextInput = function ( store, config ) {
-               var myConfig = $.extend( {}, config || {} );
+               config = $.extend( {}, config );
                this.store = store;
                this.optionId = config.optionId;
 
                this.store.connect( this, { update: 'onStoreUpdate' } );
 
-               mw.libs.advancedSearch.ui.TextInput.parent.call( this, myConfig 
);
+               mw.libs.advancedSearch.ui.TextInput.parent.call( this, config );
 
                this.populateFromStore();
        };

-- 
To view, visit https://gerrit.wikimedia.org/r/393948
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8f549932d79b9bc5230984fdba8ff7e89b221dcf
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/AdvancedSearch
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to