From 04a1c912439c4658783989169e93a2d1bea7214f Mon Sep 17 00:00:00 2001 From: Ed Sanders Date: Mon, 1 May 2017 15:03:40 +0100 Subject: [PATCH] Avoid implicit globals Wrap in IIFE if variables is not intended to be global, otherwise explicitly assign to window for better readability, and avoiding problems if code were to get wrapped in IIFE later. Change-Id: I2313daeaf00f27b6ea9eb6b907c066844c5d3836 --- resources/src/jquery/jquery.getAttrs.js | 62 ++++++++++++------------- resources/src/mediawiki.router/index.js | 6 ++- resources/src/startup.js | 34 +++++++------- 3 files changed, 49 insertions(+), 53 deletions(-) diff --git a/resources/src/jquery/jquery.getAttrs.js b/resources/src/jquery/jquery.getAttrs.js index 3064b42341..e00298f406 100644 --- a/resources/src/jquery/jquery.getAttrs.js +++ b/resources/src/jquery/jquery.getAttrs.js @@ -1,41 +1,37 @@ /** * @class jQuery.plugin.getAttrs */ +( function ( $ ) { + function serializeControls( controls ) { + var i, + data = {}, + len = controls.length; -function serializeControls( controls ) { - var i, - data = {}, - len = controls.length; + for ( i = 0; i < len; i++ ) { + data[ controls[ i ].name ] = controls[ i ].value; + } - for ( i = 0; i < len; i++ ) { - data[ controls[ i ].name ] = controls[ i ].value; + return data; } - return data; -} + /** + * Get the attributes of an element directy as a plain object. + * + * If there is more than one element in the collection, similar to most other jQuery getter methods, + * this will use the first element in the collection. + * + * @return {Object} + */ + $.fn.getAttrs = function () { + return serializeControls( this[ 0 ].attributes ); + }; -/** - * Get the attributes of an element directy as a plain object. - * - * If there is more than one element in the collection, similar to most other jQuery getter methods, - * this will use the first element in the collection. - * - * @return {Object} - */ -jQuery.fn.getAttrs = function () { - return serializeControls( this[ 0 ].attributes ); -}; - -/** - * Get form data as a plain object mapping form control names to their values. - * - * @return {Object} - */ -jQuery.fn.serializeObject = function () { - return serializeControls( this.serializeArray() ); -}; - -/** - * @class jQuery - * @mixins jQuery.plugin.getAttrs - */ + /** + * Get form data as a plain object mapping form control names to their values. + * + * @return {Object} + */ + $.fn.serializeObject = function () { + return serializeControls( this.serializeArray() ); + }; +}( jQuery ) ); diff --git a/resources/src/mediawiki.router/index.js b/resources/src/mediawiki.router/index.js index a49cfeb866..737ef5f65c 100644 --- a/resources/src/mediawiki.router/index.js +++ b/resources/src/mediawiki.router/index.js @@ -1,2 +1,4 @@ -var Router = require( 'oojs-router' ); -module.exports = new Router(); +( function () { + var Router = require( 'oojs-router' ); + module.exports = new Router(); +}() ); diff --git a/resources/src/startup.js b/resources/src/startup.js index e0df772faf..d672d7697b 100644 --- a/resources/src/startup.js +++ b/resources/src/startup.js @@ -5,21 +5,19 @@ * - Beware: Do not call mwNow before the isCompatible() check. */ -/* global mw, $VARS, $CODE */ - -var mwPerformance = ( window.performance && performance.mark ) ? performance : { - mark: function () {} - }, - // Define now() here to ensure valid comparison with mediaWikiLoadEnd (T153819). - mwNow = ( function () { - var perf = window.performance, - navStart = perf && perf.timing && perf.timing.navigationStart; - return navStart && typeof perf.now === 'function' ? - function () { return navStart + perf.now(); } : - function () { return Date.now(); }; - }() ), - // eslint-disable-next-line no-unused-vars - mediaWikiLoadStart; +/* global mw, mwPerformance, mwNow, isCompatible, $VARS, $CODE */ + +window.mwPerformance = ( window.performance && performance.mark ) ? performance : { + mark: function () {} +}; +// Define now() here to ensure valid comparison with mediaWikiLoadEnd (T153819). +window.mwNow = ( function () { + var perf = window.performance, + navStart = perf && perf.timing && perf.timing.navigationStart; + return navStart && typeof perf.now === 'function' ? + function () { return navStart + perf.now(); } : + function () { return Date.now(); }; +}() ); /** * See @@ -62,7 +60,7 @@ var mwPerformance = ( window.performance && performance.mark ) ? performance : { * @param {string} [str] User agent, defaults to navigator.userAgent * @return {boolean} User agent is compatible with MediaWiki JS */ -function isCompatible( str ) { +window.isCompatible = function ( str ) { var ua = str || navigator.userAgent; return !!( // http://caniuse.com/#feat=es5 @@ -92,7 +90,7 @@ function isCompatible( str ) { ua.match( /PlayStation/i ) ) ); -} +}; // Conditional script injection ( function () { @@ -152,7 +150,7 @@ function isCompatible( str ) { }; } - mediaWikiLoadStart = mwNow(); + window.mediaWikiLoadStart = mwNow(); mwPerformance.mark( 'mwLoadStart' ); script = document.createElement( 'script' ); -- 2.20.1