Gabriel Birke has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/364201 )
Change subject: Make presets react to namespace selection ...................................................................... Make presets react to namespace selection Bug: https://phabricator.wikimedia.org/T169648 Change-Id: I73c089a3b579f29c44556f6e16622d84607a91e8 --- M modules/ext.advancedSearch.init.js M modules/ui/ext.advancedSearch.NamespacePresets.js M tests/qunit/ui/NamespacePresets.test.js 3 files changed, 40 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/AdvancedSearch refs/changes/01/364201/1 diff --git a/modules/ext.advancedSearch.init.js b/modules/ext.advancedSearch.init.js index 6de74a4..a70d9be 100644 --- a/modules/ext.advancedSearch.init.js +++ b/modules/ext.advancedSearch.init.js @@ -123,6 +123,11 @@ var namespaces = mw.config.get( 'wgFormattedNamespaces' ); // Article namespace has no name by default namespaces[ '0' ] = mw.msg( 'advancedSearch-namespaces-articles' ); + $.each( Object.keys( namespaces ), function ( _, key ) { + if ( parseInt( key, 10 ) < 0 ) { + delete namespaces[ key ]; + } + } ); return namespaces; } diff --git a/modules/ui/ext.advancedSearch.NamespacePresets.js b/modules/ui/ext.advancedSearch.NamespacePresets.js index a9a2cc0..193b54d 100644 --- a/modules/ui/ext.advancedSearch.NamespacePresets.js +++ b/modules/ui/ext.advancedSearch.NamespacePresets.js @@ -33,6 +33,7 @@ // Using undocumented internals because this.on does not work, see https://phabricator.wikimedia.org/T168735 this.checkboxMultiselectWidget.on( 'change', this.updateStoreFromPresets, [], this ); this.$element.addClass( 'mw-advancedSearch-namespacePresets' ); + store.connect( this, { update: 'updatePresetsFromStore' } ); }; OO.inheritClass( mw.libs.advancedSearch.ui.NamespacePresets, OO.ui.CheckboxMultiselectInputWidget ); @@ -48,4 +49,21 @@ } }; + mw.libs.advancedSearch.ui.NamespacePresets.prototype.updatePresetsFromStore = function () { + var selectedPresets = {}, + self = this; + $.each( this.presets, function ( key, nsconfig ) { + selectedPresets[ key ] = mw.libs.advancedSearch.util.arrayEquals( nsconfig.namespaces, self.store.getNamespaces() ); + } ); + this.checkboxMultiselectWidget.off( 'change', this.updateStoreFromPresets, this ); + $.each( selectedPresets, function ( key, isSelected ) { + var presetWidget = self.checkboxMultiselectWidget.getItemFromData( key ); + if ( presetWidget.isSelected() !== isSelected ) { + presetWidget.setSelected( isSelected ); + } + } ); + this.checkboxMultiselectWidget.on( 'change', this.updateStoreFromPresets, [], this ); + + }; + }( mediaWiki, jQuery ) ); diff --git a/tests/qunit/ui/NamespacePresets.test.js b/tests/qunit/ui/NamespacePresets.test.js index 12f6258..2326131 100644 --- a/tests/qunit/ui/NamespacePresets.test.js +++ b/tests/qunit/ui/NamespacePresets.test.js @@ -40,4 +40,21 @@ assert.deepEqual( [ '3' ], model.getNamespaces() ); } ); + QUnit.test( 'Changing the store to exactly the namespaces in namespaces in preset, selects preset', function ( assert ) { + var model = new Model(), + presets = new NamespacePresets( model, { + presets: { + all: { + label: 'All', + namespaces: [ '0', '1', '2' ] + } + } + } ); + assert.deepEqual( presets.getValue(), [] ); + model.setNamespaces( [ '0', '1', '2' ] ); + assert.deepEqual( presets.getValue(), [ 'all' ] ); + model.setNamespaces( [ '0', '1' ] ); + assert.deepEqual( presets.getValue(), [] ); + } ); + }( mediaWiki ) ); -- To view, visit https://gerrit.wikimedia.org/r/364201 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I73c089a3b579f29c44556f6e16622d84607a91e8 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/AdvancedSearch Gerrit-Branch: master Gerrit-Owner: Gabriel Birke <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
