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