X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;ds=sidebyside;f=resources%2Fsrc%2Fmediawiki.rcfilters%2Fmw.rcfilters.Controller.js;h=7b5e11528c47b611f68ebf7094d89fb8791f91da;hb=0ae591b0bb2add60801be1e21228fff050abb520;hp=d5196480dcb35a53f19da55c8f641f1bad6542fc;hpb=1a07d2aa819c2d89f67d53997fdf6c473c5dc94b;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js index d5196480dc..7b5e11528c 100644 --- a/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js +++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js @@ -10,12 +10,16 @@ * @param {mw.rcfilters.dm.SavedQueriesModel} savedQueriesModel Saved queries model * @param {Object} config Additional configuration * @cfg {string} savedQueriesPreferenceName Where to save the saved queries + * @cfg {string} daysPreferenceName Preference name for the days filter + * @cfg {string} limitPreferenceName Preference name for the limit filter */ mw.rcfilters.Controller = function MwRcfiltersController( filtersModel, changesListModel, savedQueriesModel, config ) { this.filtersModel = filtersModel; this.changesListModel = changesListModel; this.savedQueriesModel = savedQueriesModel; this.savedQueriesPreferenceName = config.savedQueriesPreferenceName; + this.daysPreferenceName = config.daysPreferenceName; + this.limitPreferenceName = config.limitPreferenceName; this.requestCounter = {}; this.baseFilterState = {}; @@ -39,13 +43,14 @@ * @param {Array} filterStructure Filter definition and structure for the model * @param {Object} [namespaceStructure] Namespace definition * @param {Object} [tagList] Tag definition + * @param {Object} [conditionalViews] Conditional view definition */ - mw.rcfilters.Controller.prototype.initialize = function ( filterStructure, namespaceStructure, tagList ) { + mw.rcfilters.Controller.prototype.initialize = function ( filterStructure, namespaceStructure, tagList, conditionalViews ) { var parsedSavedQueries, pieces, displayConfig = mw.config.get( 'StructuredChangeFiltersDisplayConfig' ), defaultSavedQueryExists = mw.config.get( 'wgStructuredChangeFiltersDefaultSavedQueryExists' ), controller = this, - views = {}, + views = $.extend( true, {}, conditionalViews ), items = [], uri = new mw.Uri(); @@ -78,17 +83,20 @@ separator: ';', fullCoverage: true, filters: items - }, - { - name: 'invertGroup', - type: 'boolean', - hidden: true, - filters: [ { - name: 'invert', - 'default': '0' - } ] } ] }; + views.invert = { + groups: [ + { + name: 'invertGroup', + type: 'boolean', + hidden: true, + filters: [ { + name: 'invert', + 'default': '0' + } ] + } ] + }; } if ( tagList ) { views.tags = { @@ -122,13 +130,8 @@ max: 1000 }, sortFunc: function ( a, b ) { return Number( a.name ) - Number( b.name ); }, - 'default': displayConfig.limitDefault, - // Temporarily making this not sticky until we resolve the problem - // with the misleading preference. Note that if this is to be permanent - // we should remove all sticky behavior methods completely - // See T172156 - // isSticky: true, - excludedFromSavedQueries: true, + 'default': mw.user.options.get( this.limitPreferenceName, displayConfig.limitDefault ), + sticky: true, filters: displayConfig.limitArray.map( function ( num ) { return controller._createFilterDataFromNumber( num, num ); } ) @@ -150,10 +153,8 @@ ( Number( i ) * 24 ).toFixed( 2 ) : Number( i ); }, - 'default': displayConfig.daysDefault, - // Temporarily making this not sticky while limit is not sticky, see above - // isSticky: true, - excludedFromSavedQueries: true, + 'default': mw.user.options.get( this.daysPreferenceName, displayConfig.daysDefault ), + sticky: true, filters: [ // Hours (1, 2, 6, 12) 0.04166, 0.0833, 0.25, 0.5 @@ -177,7 +178,7 @@ type: 'boolean', title: '', // Because it's a hidden group, this title actually appears nowhere hidden: true, - isSticky: true, + sticky: true, filters: [ { name: 'enhanced', @@ -262,7 +263,7 @@ this.changesListModel.update( pieces.changes, pieces.fieldset, - pieces.noResultsDetails === 'NO_RESULTS_TIMEOUT', + pieces.noResultsDetails, true // We're using existing DOM elements ); } @@ -288,7 +289,7 @@ * @return {jQuery} return.fieldset Fieldset */ mw.rcfilters.Controller.prototype._extractChangesListInfo = function ( $root ) { - var info, isTimeout, + var info, $changesListContents = $root.find( '.mw-changeslist' ).first().contents(), areResults = !!$changesListContents.length; @@ -298,8 +299,13 @@ }; if ( !areResults ) { - isTimeout = !!$root.find( '.mw-changeslist-timeout' ).length; - info.noResultsDetails = isTimeout ? 'NO_RESULTS_TIMEOUT' : 'NO_RESULTS_NORMAL'; + if ( $root.find( '.mw-changeslist-timeout' ).length ) { + info.noResultsDetails = 'NO_RESULTS_TIMEOUT'; + } else if ( $root.find( '.mw-changeslist-notargetpage' ).length ) { + info.noResultsDetails = 'NO_RESULTS_NO_TARGET_PAGE'; + } else { + info.noResultsDetails = 'NO_RESULTS_NORMAL'; + } } return info; @@ -400,9 +406,12 @@ * Reset to default filters */ mw.rcfilters.Controller.prototype.resetToDefaults = function () { - if ( this.applyParamChange( this._getDefaultParams() ) ) { + var params = this._getDefaultParams(); + if ( this.applyParamChange( params ) ) { // Only update the changes list if there was a change to actual filters this.updateChangesList(); + } else { + this.uriProcessor.updateURL( params ); } }; @@ -412,7 +421,7 @@ * @return {boolean} Defaults are all false */ mw.rcfilters.Controller.prototype.areDefaultsEmpty = function () { - return $.isEmptyObject( this._getDefaultParams( true ) ); + return $.isEmptyObject( this._getDefaultParams() ); }; /** @@ -425,6 +434,8 @@ if ( this.applyParamChange( {} ) ) { // Only update the changes list if there was a change to actual filters this.updateChangesList(); + } else { + this.uriProcessor.updateURL(); } if ( highlightedFilterNames ) { @@ -507,7 +518,6 @@ */ mw.rcfilters.Controller.prototype.toggleInvertedNamespaces = function () { this.filtersModel.toggleInvertedNamespaces(); - if ( this.filtersModel.getFiltersByView( 'namespaces' ).filter( function ( filterItem ) { return filterItem.isSelected(); } @@ -515,9 +525,38 @@ ) { // Only re-fetch results if there are namespace items that are actually selected this.updateChangesList(); + } else { + this.uriProcessor.updateURL(); + } + }; + + /** + * Set the value of the 'showlinkedto' parameter + * @param {boolean} value + */ + mw.rcfilters.Controller.prototype.setShowLinkedTo = function ( value ) { + var targetItem = this.filtersModel.getGroup( 'page' ).getItemByParamName( 'target' ), + showLinkedToItem = this.filtersModel.getGroup( 'toOrFrom' ).getItemByParamName( 'showlinkedto' ); + + this.filtersModel.toggleFilterSelected( showLinkedToItem.getName(), value ); + this.uriProcessor.updateURL(); + // reload the results only when target is set + if ( targetItem.getValue() ) { + this.updateChangesList(); } }; + /** + * Set the target page + * @param {string} page + */ + mw.rcfilters.Controller.prototype.setTargetPage = function ( page ) { + var targetItem = this.filtersModel.getGroup( 'page' ).getItemByParamName( 'target' ); + targetItem.setValue( page ); + this.uriProcessor.updateURL(); + this.updateChangesList(); + }; + /** * Set the highlight color for a filter item * @@ -712,6 +751,8 @@ if ( this.applyParamChange( params ) ) { // Update changes list only if there was a difference in filter selection this.updateChangesList(); + } else { + this.uriProcessor.updateURL( params ); } // Log filter grouping @@ -783,72 +824,48 @@ /** * Update the limit default value * - * param {number} newValue New value + * @param {number} newValue New value */ - mw.rcfilters.Controller.prototype.updateLimitDefault = function ( /* newValue */ ) { - // HACK: Temporarily remove this from being sticky - // See T172156 - - /* - if ( !$.isNumeric( newValue ) ) { - return; - } - - newValue = Number( newValue ); - - if ( mw.user.options.get( 'rcfilters-rclimit' ) !== newValue ) { - // Save the preference - new mw.Api().saveOption( 'rcfilters-rclimit', newValue ); - // Update the preference for this session - mw.user.options.set( 'rcfilters-rclimit', newValue ); - } - */ - return; + mw.rcfilters.Controller.prototype.updateLimitDefault = function ( newValue ) { + this.updateNumericPreference( this.limitPreferenceName, newValue ); }; /** * Update the days default value * - * param {number} newValue New value + * @param {number} newValue New value */ - mw.rcfilters.Controller.prototype.updateDaysDefault = function ( /* newValue */ ) { - // HACK: Temporarily remove this from being sticky - // See T172156 - - /* - if ( !$.isNumeric( newValue ) ) { - return; - } - - newValue = Number( newValue ); - - if ( mw.user.options.get( 'rcdays' ) !== newValue ) { - // Save the preference - new mw.Api().saveOption( 'rcdays', newValue ); - // Update the preference for this session - mw.user.options.set( 'rcdays', newValue ); - } - */ - return; + mw.rcfilters.Controller.prototype.updateDaysDefault = function ( newValue ) { + this.updateNumericPreference( this.daysPreferenceName, newValue ); }; /** * Update the group by page default value * - * @param {number} newValue New value + * @param {boolean} newValue New value */ mw.rcfilters.Controller.prototype.updateGroupByPageDefault = function ( newValue ) { + this.updateNumericPreference( 'usenewrc', Number( newValue ) ); + }; + + /** + * Update a numeric preference with a new value + * + * @param {string} prefName Preference name + * @param {number|string} newValue New value + */ + mw.rcfilters.Controller.prototype.updateNumericPreference = function ( prefName, newValue ) { if ( !$.isNumeric( newValue ) ) { return; } newValue = Number( newValue ); - if ( mw.user.options.get( 'usenewrc' ) !== newValue ) { + if ( mw.user.options.get( prefName ) !== newValue ) { // Save the preference - new mw.Api().saveOption( 'usenewrc', newValue ); + new mw.Api().saveOption( prefName, newValue ); // Update the preference for this session - mw.user.options.set( 'usenewrc', newValue ); + mw.user.options.set( prefName, newValue ); } }; @@ -870,7 +887,7 @@ mw.rcfilters.Controller.prototype.updateStateFromUrl = function ( fetchChangesList ) { fetchChangesList = fetchChangesList === undefined ? true : !!fetchChangesList; - this.uriProcessor.updateModelBasedOnQuery( new mw.Uri().query ); + this.uriProcessor.updateModelBasedOnQuery(); // Update the sticky preferences, in case we received a value // from the URL @@ -926,14 +943,13 @@ * Get an object representing the default parameter state, whether * it is from the model defaults or from the saved queries. * - * @param {boolean} [excludeHiddenParams] Exclude hidden and sticky params * @return {Object} Default parameters */ - mw.rcfilters.Controller.prototype._getDefaultParams = function ( excludeHiddenParams ) { + mw.rcfilters.Controller.prototype._getDefaultParams = function () { if ( this.savedQueriesModel.getDefault() ) { - return this.savedQueriesModel.getDefaultParams( excludeHiddenParams ); + return this.savedQueriesModel.getDefaultParams(); } else { - return this.filtersModel.getDefaultParams( excludeHiddenParams ); + return this.filtersModel.getDefaultParams(); } }; @@ -1021,10 +1037,11 @@ }; } - $parsed = $( '
' ).append( $( $.parseHTML( data.content ) ) ); + $parsed = $( '
' ).append( $( $.parseHTML( + data ? data.content : '' + ) ) ); return this._extractChangesListInfo( $parsed ); - }.bind( this ) ); };