X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.rcfilters%2Fui%2Fmw.rcfilters.ui.ChangesListWrapperWidget.js;h=429def4ec246f65215faa82340fa08ebd18f8de8;hb=be99787e5b216247ffbc26a7f90e27ac985fff4f;hp=7eab6cb01562bbf0704fd21a02a3361b134d5907;hpb=72e689e843b839a2eb5d5382301449c69c7e0587;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js index 7eab6cb015..429def4ec2 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js @@ -28,11 +28,14 @@ this.filtersViewModel = filtersViewModel; this.changesListViewModel = changesListViewModel; this.controller = controller; + this.highlightClasses = null; + this.filtersModelInitialized = false; // Events this.filtersViewModel.connect( this, { itemUpdate: 'onItemUpdate', - highlightChange: 'onHighlightChange' + highlightChange: 'onHighlightChange', + initialize: 'onFiltersModelInitialize' } ); this.changesListViewModel.connect( this, { invalidate: 'onModelInvalidate', @@ -45,9 +48,6 @@ // We handle our own display/hide of the empty results message .removeClass( 'mw-changeslist-empty' ); - // Set up highlight containers - this.setupHighlightContainers( this.$element ); - this.setupNewChangesButtonContainer( this.$element ); }; @@ -55,6 +55,33 @@ OO.inheritClass( mw.rcfilters.ui.ChangesListWrapperWidget, OO.ui.Widget ); + /** + * Respond to filters model initialize event + */ + mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onFiltersModelInitialize = function () { + this.filtersModelInitialized = true; + // Set up highlight containers. We need to wait for the filters model + // to be initialized, so we can make sure we have all the css class definitions + // we get from the server with our filters + this.setupHighlightContainers( this.$element ); + }; + + /** + * Get all available highlight classes + * + * @return {string[]} An array of available highlight class names + */ + mw.rcfilters.ui.ChangesListWrapperWidget.prototype.getHighlightClasses = function () { + if ( !this.highlightClasses || !this.highlightClasses.length ) { + this.highlightClasses = this.filtersViewModel.getItemsSupportingHighlights() + .map( function ( filterItem ) { + return filterItem.getCssClass(); + } ); + } + + return this.highlightClasses; + }; + /** * Respond to the highlight feature being toggled on and off * @@ -72,7 +99,7 @@ * Respond to a filter item model update */ mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onItemUpdate = function () { - if ( this.filtersViewModel.isHighlightEnabled() ) { + if ( this.filtersModelInitialized && this.filtersViewModel.isHighlightEnabled() ) { this.clearHighlight(); this.applyHighlight(); } @@ -82,8 +109,7 @@ * Respond to changes list model invalidate */ mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onModelInvalidate = function () { - $( '.rcfilters-spinner' ).removeClass( 'mw-rcfilters-ui-ready' ); - this.$element.removeClass( 'mw-rcfilters-ui-ready' ); + $( 'body' ).addClass( 'mw-rcfilters-ui-loading' ); }; /** @@ -157,8 +183,7 @@ mw.hook( 'wikipage.content' ).fire( widget.$element ); } - $( '.rcfilters-spinner' ).addClass( 'mw-rcfilters-ui-ready' ); - widget.$element.addClass( 'mw-rcfilters-ui-ready' ); + $( 'body' ).removeClass( 'mw-rcfilters-ui-loading' ); } ); }; @@ -167,7 +192,7 @@ * @param {string} from Anything newer than this is considered 'new' */ mw.rcfilters.ui.ChangesListWrapperWidget.prototype.emphasizeNewChanges = function ( from ) { - var $lastSeen, + var $firstNew, $indicator, $newChanges = $( [] ), selector = this.inEnhancedMode() ? @@ -182,25 +207,20 @@ if ( ts >= from ) { $newChanges = $newChanges.add( $this ); - $lastSeen = $this; + $firstNew = $this; // guards against putting the marker after the last element if ( index === ( length - 1 ) ) { - $lastSeen = null; + $firstNew = null; } } } ); - if ( $lastSeen ) { + if ( $firstNew ) { $indicator = $( '