mediawiki.notification: Refactor $.ready handler and init()
authorTimo Tijhof <krinklemail@gmail.com>
Wed, 4 Oct 2017 20:10:57 +0000 (21:10 +0100)
committerJforrester <jforrester@wikimedia.org>
Wed, 4 Oct 2017 21:38:16 +0000 (21:38 +0000)
* Merge code from $.ready handler into init().
  This makes it more obvious in which order the code runs, and
  makes it easier to make perf fixes in the next commit.

* Move updateAreaMode() to the start of the init() function.

Change-Id: I088446e17c2dc8ed88742bfeae80352444126e88

resources/src/mediawiki/mediawiki.notification.js

index c213cd2..d5289bd 100644 (file)
         * @ignore
         */
        function init() {
-               var offset,
+               var offset, notif,
                        isFloating = false;
 
+               function updateAreaMode() {
+                       var shouldFloat = window.pageYOffset > offset.top;
+                       if ( isFloating === shouldFloat ) {
+                               return;
+                       }
+                       isFloating = shouldFloat;
+                       $area
+                               .toggleClass( 'mw-notification-area-floating', isFloating )
+                               .toggleClass( 'mw-notification-area-layout', !isFloating );
+               }
+
+               // Prepend the notification area to the content area and save its object.
                $area = $( '<div id="mw-notification-area" class="mw-notification-area mw-notification-area-layout"></div>' )
                        // Pause auto-hide timers when the mouse is in the notification area.
                        .on( {
                                e.stopPropagation();
                        } );
 
-               // Prepend the notification area to the content area and save it's object.
                mw.util.$content.prepend( $area );
                offset = $area.offset();
                $area.css( 'display', 'none' );
 
-               function updateAreaMode() {
-                       var shouldFloat = window.pageYOffset > offset.top;
-                       if ( isFloating === shouldFloat ) {
-                               return;
-                       }
-                       isFloating = shouldFloat;
-                       $area
-                               .toggleClass( 'mw-notification-area-floating', isFloating )
-                               .toggleClass( 'mw-notification-area-layout', !isFloating );
-               }
-
                $( window ).on( 'scroll', updateAreaMode );
 
                // Initial mode
                updateAreaMode();
+
+               // Handle pre-ready queue.
+               isPageReady = true;
+               while ( preReadyNotifQueue.length ) {
+                       notif = preReadyNotifQueue.shift();
+                       notif.start();
+               }
        }
 
        /**
                autoHideLimit: 3
        };
 
-       $( function () {
-               var notif;
-
-               init();
-
-               // Handle pre-ready queue.
-               isPageReady = true;
-               while ( preReadyNotifQueue.length ) {
-                       notif = preReadyNotifQueue.shift();
-                       notif.start();
-               }
-       } );
+       $( init );
 
        mw.notification = notification;