RCFilters: Hide saved queries from anonymous users
authorMoriel Schottlender <moriel@gmail.com>
Wed, 23 Aug 2017 23:35:10 +0000 (16:35 -0700)
committerMoriel Schottlender <moriel@gmail.com>
Wed, 23 Aug 2017 23:35:10 +0000 (16:35 -0700)
Bug: T173992
Change-Id: I5acb9ca4dd20de83da5db42c7c9053fccb091da0

resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js

index 209e7c8..9906119 100644 (file)
                        this.filtersModel
                );
 
                        this.filtersModel
                );
 
-               try {
-                       parsedSavedQueries = JSON.parse( mw.user.options.get( this.savedQueriesPreferenceName ) || '{}' );
-               } catch ( err ) {
-                       parsedSavedQueries = {};
-               }
+               if ( !mw.user.isAnon() ) {
+                       try {
+                               parsedSavedQueries = JSON.parse( mw.user.options.get( this.savedQueriesPreferenceName ) || '{}' );
+                       } catch ( err ) {
+                               parsedSavedQueries = {};
+                       }
 
 
-               // The queries are saved in a minimized state, so we need
-               // to send over the base state so the saved queries model
-               // can normalize them per each query item
-               this.savedQueriesModel.initialize(
-                       parsedSavedQueries,
-                       this._getBaseFilterState(),
-                       // This is for backwards compatibility - delete all excluded filter states
-                       Object.keys( this.filtersModel.getExcludedFiltersState() )
-               );
+                       // The queries are saved in a minimized state, so we need
+                       // to send over the base state so the saved queries model
+                       // can normalize them per each query item
+                       this.savedQueriesModel.initialize(
+                               parsedSavedQueries,
+                               this._getBaseFilterState(),
+                               // This is for backwards compatibility - delete all excluded filter states
+                               Object.keys( this.filtersModel.getExcludedFiltersState() )
+                       );
+               }
 
                // Check whether we need to load defaults.
                // We do this by checking whether the current URI query
 
                // Check whether we need to load defaults.
                // We do this by checking whether the current URI query
                // or on request
                this.initializing = true;
                if (
                // or on request
                this.initializing = true;
                if (
-                       this.savedQueriesModel.getDefault() &&
+                       !mw.user.isAnon() && this.savedQueriesModel.getDefault() &&
                        !this.uriProcessor.doesQueryContainRecognizedParams( uri.query )
                ) {
                        // We have defaults from a saved query.
                        !this.uriProcessor.doesQueryContainRecognizedParams( uri.query )
                ) {
                        // We have defaults from a saved query.
                var data, queryHighlights,
                        savedParams = {},
                        savedHighlights = {},
                var data, queryHighlights,
                        savedParams = {},
                        savedHighlights = {},
-                       defaultSavedQueryItem = this.savedQueriesModel.getItemByID( this.savedQueriesModel.getDefault() );
+                       defaultSavedQueryItem = !mw.user.isAnon() && this.savedQueriesModel.getItemByID( this.savedQueriesModel.getDefault() );
 
                if ( defaultSavedQueryItem ) {
                        data = defaultSavedQueryItem.getData();
 
                if ( defaultSavedQueryItem ) {
                        data = defaultSavedQueryItem.getData();
index 3aa7161..b15b034 100644 (file)
                        classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-resetButton' ]
                } );
 
                        classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-resetButton' ]
                } );
 
-               this.saveQueryButton = new mw.rcfilters.ui.SaveFiltersPopupButtonWidget(
-                       this.controller,
-                       this.queriesModel
-               );
+               if ( !mw.user.isAnon() ) {
+                       this.saveQueryButton = new mw.rcfilters.ui.SaveFiltersPopupButtonWidget(
+                               this.controller,
+                               this.queriesModel
+                       );
 
 
-               this.saveQueryButton.$element.on( 'mousedown', function ( e ) { e.stopPropagation(); } );
+                       this.saveQueryButton.$element.on( 'mousedown', function ( e ) { e.stopPropagation(); } );
 
 
-               this.saveQueryButton.connect( this, {
-                       click: 'onSaveQueryButtonClick',
-                       saveCurrent: 'setSavedQueryVisibility'
-               } );
+                       this.saveQueryButton.connect( this, {
+                               click: 'onSaveQueryButtonClick',
+                               saveCurrent: 'setSavedQueryVisibility'
+                       } );
+                       this.queriesModel.connect( this, { itemUpdate: 'onSavedQueriesItemUpdate' } );
+               }
 
                this.emptyFilterMessage = new OO.ui.LabelWidget( {
                        label: mw.msg( 'rcfilters-empty-filter' ),
 
                this.emptyFilterMessage = new OO.ui.LabelWidget( {
                        label: mw.msg( 'rcfilters-empty-filter' ),
                        highlightChange: 'onModelHighlightChange'
                } );
                this.input.connect( this, { change: 'onInputChange' } );
                        highlightChange: 'onModelHighlightChange'
                } );
                this.input.connect( this, { change: 'onInputChange' } );
-               this.queriesModel.connect( this, { itemUpdate: 'onSavedQueriesItemUpdate' } );
 
                // The filter list and button should appear side by side regardless of how
                // wide the button is; the button also changes its width depending
 
                // The filter list and button should appear side by side regardless of how
                // wide the button is; the button also changes its width depending
                                        .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-cell-filters' )
                        );
 
                                        .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-cell-filters' )
                        );
 
-               rcFiltersRow.append(
-                       $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-cell' )
-                               .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-cell-save' )
-                               .append( this.saveQueryButton.$element )
-               );
+               if ( !mw.user.isAnon() ) {
+                       rcFiltersRow.append(
+                               $( '<div>' )
+                                       .addClass( 'mw-rcfilters-ui-cell' )
+                                       .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-cell-save' )
+                                       .append( this.saveQueryButton.$element )
+                       );
+               }
 
                // Add a selector at the right of the input
                this.viewsSelectWidget = new OO.ui.ButtonSelectWidget( {
 
                // Add a selector at the right of the input
                this.viewsSelectWidget = new OO.ui.ButtonSelectWidget( {
         * Set the visibility of the saved query button
         */
        mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.setSavedQueryVisibility = function () {
         * Set the visibility of the saved query button
         */
        mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.setSavedQueryVisibility = function () {
+               if ( mw.user.isAnon() ) {
+                       return;
+               }
+
                this.matchingQuery = this.controller.findQueryMatchingCurrentState();
 
                this.savedQueryTitle.setLabel(
                this.matchingQuery = this.controller.findQueryMatchingCurrentState();
 
                this.savedQueryTitle.setLabel(
index c3af7c5..b57f5d7 100644 (file)
                                this.dateWidget.$element
                        );
 
                                this.dateWidget.$element
                        );
 
-               this.savedLinksListWidget = new mw.rcfilters.ui.SavedLinksListWidget(
-                       this.controller,
-                       this.queriesModel,
-                       { $overlay: this.$overlay }
-               );
+               if ( !mw.user.isAnon() ) {
+                       this.savedLinksListWidget = new mw.rcfilters.ui.SavedLinksListWidget(
+                               this.controller,
+                               this.queriesModel,
+                               { $overlay: this.$overlay }
+                       );
 
 
-               this.$topRow.append(
-                       $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-cell' )
-                               .addClass( 'mw-rcfilters-ui-filterWrapperWidget-top-savedLinks' )
-                               .append( this.savedLinksListWidget.$element )
-               );
+                       this.$topRow.append(
+                               $( '<div>' )
+                                       .addClass( 'mw-rcfilters-ui-cell' )
+                                       .addClass( 'mw-rcfilters-ui-filterWrapperWidget-top-savedLinks' )
+                                       .append( this.savedLinksListWidget.$element )
+                       );
+               }
 
                if ( mw.rcfilters.featureFlags.liveUpdate ) {
                        $bottom.append( this.liveUpdateButton.$element );
 
                if ( mw.rcfilters.featureFlags.liveUpdate ) {
                        $bottom.append( this.liveUpdateButton.$element );