RCFilters: Fix live update
authorStephane Bisson <sbisson@wikimedia.org>
Wed, 13 Dec 2017 15:10:41 +0000 (10:10 -0500)
committerStephane Bisson <sbisson@wikimedia.org>
Wed, 13 Dec 2017 15:10:41 +0000 (10:10 -0500)
When Id55702ecbe6b96ee57453d4f86f20bd94a401d7c
introduced the MainWrapperWidget, it changed
the order on initialization, which prevents
ChangesListViewModel from getting the initial
value of the 'from' parameter and thus
disables polling for new changes.

This patch ensures ChangesListViewModel is
given the initial form in its constructor
so it can extract what it needs from it
before the page DOM is being transformed.

Bug: T182788
Change-Id: I1b72790194877ff0f200c87e4f40a942f1ccac3b

resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.ChangesListViewModel.js
resources/src/mediawiki.rcfilters/mw.rcfilters.init.js

index 15fe334..96b4410 100644 (file)
@@ -4,17 +4,19 @@
         *
         * @mixins OO.EventEmitter
         *
+        * @param {jQuery} $initialFieldset The initial server-generated legacy form content
         * @constructor
         */
-       mw.rcfilters.dm.ChangesListViewModel = function MwRcfiltersDmChangesListViewModel() {
+       mw.rcfilters.dm.ChangesListViewModel = function MwRcfiltersDmChangesListViewModel( $initialFieldset ) {
                // Mixin constructor
                OO.EventEmitter.call( this );
 
                this.valid = true;
                this.newChangesExist = false;
-               this.nextFrom = null;
                this.liveUpdate = false;
                this.unseenWatchedChanges = false;
+
+               this.extractNextFrom( $initialFieldset );
        };
 
        /* Initialization */
@@ -74,7 +76,6 @@
         * @param {jQuery|string} changesListContent
         * @param {jQuery} $fieldset
         * @param {string} noResultsDetails Type of no result error
-        *   timeout.
         * @param {boolean} [isInitialDOM] Using the initial (already attached) DOM elements
         * @param {boolean} [separateOldAndNew] Whether a logical separation between old and new changes is needed
         * @fires update
         */
        mw.rcfilters.dm.ChangesListViewModel.prototype.extractNextFrom = function ( $fieldset ) {
                var data = $fieldset.find( '.rclistfrom > a, .wlinfo' ).data( 'params' );
-               this.nextFrom = data ? data.from : null;
+               if ( data && data.from ) {
+                       this.nextFrom = data.from;
+               }
        };
 
        /**
index 582d25f..565ac0a 100644 (file)
                        var $topSection,
                                mainWrapperWidget,
                                conditionalViews = {},
+                               $initialFieldset = $( 'fieldset.cloptions' ),
                                savedQueriesPreferenceName = mw.config.get( 'wgStructuredChangeFiltersSavedQueriesPreferenceName' ),
                                daysPreferenceName = mw.config.get( 'wgStructuredChangeFiltersDaysPreferenceName' ),
                                limitPreferenceName = mw.config.get( 'wgStructuredChangeFiltersLimitPreferenceName' ),
                                filtersModel = new mw.rcfilters.dm.FiltersViewModel(),
-                               changesListModel = new mw.rcfilters.dm.ChangesListViewModel(),
+                               changesListModel = new mw.rcfilters.dm.ChangesListViewModel( $initialFieldset ),
                                savedQueriesModel = new mw.rcfilters.dm.SavedQueriesModel( filtersModel ),
                                specialPage = mw.config.get( 'wgCanonicalSpecialPageName' ),
                                controller = new mw.rcfilters.Controller(
@@ -82,7 +83,7 @@
                                                '.mw-changeslist-timeout',
                                                '.mw-changeslist-notargetpage'
                                        ].join( ', ' ) ),
-                                       $formContainer: $( 'fieldset.cloptions' )
+                                       $formContainer: $initialFieldset
                                }
                        );