Ejegg has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/238629

Change subject: Break out sendBeacon implementations
......................................................................

Break out sendBeacon implementations

Attempt to tame a giant ternary.

Change-Id: Iaa0335a01f3b3ed03800baa97eb1f0e2bcc7f9a9
---
M modules/ext.eventLogging.core.js
1 file changed, 49 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/EventLogging 
refs/changes/29/238629/1

diff --git a/modules/ext.eventLogging.core.js b/modules/ext.eventLogging.core.js
index e39abef..d8b72cd 100644
--- a/modules/ext.eventLogging.core.js
+++ b/modules/ext.eventLogging.core.js
@@ -20,7 +20,52 @@
        // `baseUrl` corresponds to $wgEventLoggingBaseUri, as declared
        // in EventLogging.php. If the default value of 'false' has not
        // been overridden, events will not be sent to the server.
-       baseUrl = mw.config.get( 'wgEventLoggingBaseUri' );
+       baseUrl = mw.config.get( 'wgEventLoggingBaseUri' ),
+
+       /**
+        * No-op implementation of sendBeacon.
+        *
+        * @param {string} url URL to request from the server.
+        * @param {jQuery.Deferred} deferred Deferred object, resolved 
immediately.
+        * @param {Object} event Event with which to resolve the Deferred 
object.
+        * @return undefined
+        */
+       nullSend = function ( url, deferred, event ) {
+               deferred.resolveWith( event, [ event ] );
+       },
+
+       /**
+        * Transmit event data via navigator.sendBeacon.
+        *
+        * @param {string} url URL to request from the server.
+        * @param {jQuery.Deferred} deferred Deferred object, resolved 
immediately.
+        * @param {Object} event Event with which to resolve the Deferred 
object.
+        * @return undefined
+        */
+       nativeSend = function ( url, deferred, event ) {
+               try {
+                       navigator.sendBeacon( url );
+                       deferred.resolveWith( event, [ event ] );
+               } catch ( e ) {
+                       deferred.rejectWith( event, [ event, e.message ] );
+               }
+       },
+
+       /**
+        * Fallback implementation of sendBeacon using an image load.
+        *
+        * @param {string} url URL to request from the server.
+        * @param {jQuery.Deferred} deferred Deferred object to resolve when 
loaded.
+        * @param {Object} event Event with which to resolve the Deferred 
object.
+        * @return undefined
+        */
+       imgSend = function ( url, deferred, event ) {
+               var img = document.createElement( 'img' );
+               img.addEventListener( 'load', function() {
+                       deferred.resolveWith( event, [ event ] );
+               } );
+               img.src = url;
+       },
 
        /**
         * Client-side EventLogging API.
@@ -245,25 +290,10 @@
                 * @return undefined
                 */
                sendBeacon: /1|yes/.test( navigator.doNotTrack ) || !baseUrl
-                       ? function ( url, deferred, event ) {
-                               deferred.resolveWith( event, [ event ] );
-                       }
+                       ? nullSend
                        : navigator.sendBeacon
-                               ? function ( url, deferred, event ) {
-                                       try {
-                                               navigator.sendBeacon( url );
-                                               deferred.resolveWith( event, [ 
event ] );
-                                       } catch ( e ) {
-                                               deferred.rejectWith( event, [ 
event, e.message ] );
-                                       }
-                               }
-                               : function ( url, deferred, event ) {
-                                       var img = document.createElement( 'img' 
);
-                                       img.addEventListener( 'load', function 
() {
-                                               deferred.resolveWith( event, [ 
event ] );
-                                       } );
-                                       img.src = url;
-                               },
+                               ? nativeSend
+                               : imgSend,
 
                /**
                 * Construct and transmit to a remote server a record of some 
event

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iaa0335a01f3b3ed03800baa97eb1f0e2bcc7f9a9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/EventLogging
Gerrit-Branch: master
Gerrit-Owner: Ejegg <eeggles...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to