Jdlrobson has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/349252 )

Change subject: Please don't abuse global events on M object when you dont need 
to
......................................................................

Please don't abuse global events on M object when you dont need to

The SearchOverlay makes use of the global event emitter, apparently
just so it can log events. This is completely unnecessary as the
search logger is created at the same time as the search overlay.
Instead of doing this use the fact that a SearchOverlay has an
EventEmitter mixin and use those events instead.

If we want to use global events we should probably be using
mw.track instead as it is supported by core.

Change-Id: I862114e59e1b7816bfc5b1bfd31e703bda463d91
---
M resources/mobile.search/MobileWebSearchLogger.js
M resources/mobile.search/SearchOverlay.js
M resources/skins.minerva.scripts/search.js
3 files changed, 19 insertions(+), 16 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend 
refs/changes/52/349252/1

diff --git a/resources/mobile.search/MobileWebSearchLogger.js 
b/resources/mobile.search/MobileWebSearchLogger.js
index 38d364e..ea8e533 100644
--- a/resources/mobile.search/MobileWebSearchLogger.js
+++ b/resources/mobile.search/MobileWebSearchLogger.js
@@ -99,14 +99,15 @@
         * Convenience function that wires up an instance of the
         * MobileWebSearchLogger class to the search-* events emitted by the
         * search overlay.
+        * @param {SearchOverlay} searchOverlay
         */
-       MobileWebSearchLogger.register = function () {
+       MobileWebSearchLogger.register = function ( searchOverlay ) {
                var logger = new MobileWebSearchLogger();
 
-               M.on( 'search-show', logger.onSearchShow.bind( logger ) );
-               M.on( 'search-start', logger.onSearchStart.bind( logger ) );
-               M.on( 'search-results', logger.onSearchResults.bind( logger ) );
-               M.on( 'search-result-click', logger.onSearchResultClick.bind( 
logger ) );
+               searchOverlay.on( 'search-show', logger.onSearchShow.bind( 
logger ) );
+               searchOverlay.on( 'search-start', logger.onSearchStart.bind( 
logger ) );
+               searchOverlay.on( 'search-results', 
logger.onSearchResults.bind( logger ) );
+               searchOverlay.on( 'search-result-click', 
logger.onSearchResultClick.bind( logger ) );
        };
 
        M.define( 'mobile.search/MobileWebSearchLogger', MobileWebSearchLogger 
);
diff --git a/resources/mobile.search/SearchOverlay.js 
b/resources/mobile.search/SearchOverlay.js
index 5830e93..120f160 100644
--- a/resources/mobile.search/SearchOverlay.js
+++ b/resources/mobile.search/SearchOverlay.js
@@ -225,7 +225,7 @@
                         *  result in the set of results
                         * @property {jQuery.Event} originalEvent The original 
event
                         */
-                       M.emit( 'search-result-click', {
+                       this.emit( 'search-result-click', {
                                result: $result,
                                resultIndex: this.$results.index( $result ),
                                originalEvent: ev
@@ -262,7 +262,7 @@
 
                        // Show a spinner on top of search results
                        this.$spinner = this.$( '.spinner-container' );
-                       M.on( 'search-start', function ( searchData ) {
+                       this.on( 'search-start', function ( searchData ) {
                                if ( timer ) {
                                        clearSearch();
                                }
@@ -270,7 +270,7 @@
                                        self.$spinner.show();
                                }, SEARCH_SPINNER_DELAY );
                        } );
-                       M.on( 'search-results', clearSearch );
+                       this.on( 'search-results', clearSearch );
 
                        // Hide the clear button if the search input is empty
                        if ( self.$input.val() === '' ) {
@@ -291,7 +291,7 @@
                        /**
                         * @event search-show Fired after the search overlay is 
shown
                         */
-                       M.emit( 'search-show' );
+                       this.emit( 'search-show' );
                },
 
                /**
@@ -340,7 +340,7 @@
                                                 *  sent
                                                 * @property {Object} data 
related to the current search
                                                 */
-                                               M.emit( 'search-start', {
+                                               self.emit( 'search-start', {
                                                        query: query,
                                                        delay: delay
                                                } );
@@ -373,7 +373,7 @@
                                                                 * @property 
{Object[]} results The results returned by the search
                                                                 *  API
                                                                 */
-                                                               M.emit( 
'search-results', {
+                                                               self.emit( 
'search-results', {
                                                                        
results: data.results
                                                                } );
                                                        }
diff --git a/resources/skins.minerva.scripts/search.js 
b/resources/skins.minerva.scripts/search.js
index 9f0ebdc..10d73ee 100644
--- a/resources/skins.minerva.scripts/search.js
+++ b/resources/skins.minerva.scripts/search.js
@@ -2,6 +2,7 @@
        var SearchOverlay = M.require( 'mobile.search/SearchOverlay' ),
                SearchGateway = M.require( 'mobile.search.api/SearchGateway' ),
                router = require( 'mediawiki.router' ),
+               searchLogger = M.require( 'mobile.search/MobileWebSearchLogger' 
),
                browser = M.require( 'mobile.startup/Browser' ).getSingleton();
 
        /**
@@ -11,7 +12,8 @@
         * @ignore
         */
        function openSearchOverlay( ev ) {
-               var $this = $( this ),
+               var overlay,
+                       $this = $( this ),
                        searchTerm = $this.val(),
                        placeholder = $this.attr( 'placeholder' );
 
@@ -19,13 +21,15 @@
                // The loading of SearchOverlay should never be done inside a 
callback
                // as this will result in issues with input focus
                // see https://phabricator.wikimedia.org/T156508#2977463
-               new SearchOverlay( {
+               overlay = new SearchOverlay( {
                        router: router,
                        gatewayClass: SearchGateway,
                        api: new mw.Api(),
                        searchTerm: searchTerm,
                        placeholderMsg: placeholder
-               } ).show();
+               } );
+               searchLogger.register( overlay );
+               overlay.show();
                router.navigate( '/search' );
        }
 
@@ -48,7 +52,5 @@
                        // Apparently needed for main menu to work correctly.
                        .prop( 'readonly', true );
        }
-
-       M.require( 'mobile.search/MobileWebSearchLogger' ).register();
 
 }( mw.mobileFrontend, jQuery ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/349252
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I862114e59e1b7816bfc5b1bfd31e703bda463d91
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to