From e2cf4b81dbe9bac6382cffae38e3db3c2dcfb090 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Fri, 5 Nov 2010 06:53:14 +0000 Subject: [PATCH] * Break long lines * For readability, rewrote ResourceLoaderFileModule::readScriptFiles() to use a loop instead of an excessively cute nested array_map() construction. * In ResourceLoaderFileModule, check file_get_contents() result for errors. Golden rule of error checking: always check fopen(). Every call to fopen will fail some day for some user. * In mediaWiki.loader.filter(): broke up a complex multi-line conditional into multiple commented if statements, for readability. * Possessive "its" has no apostrophe. --- .../ResourceLoaderFileModule.php | 79 ++++++--- .../ResourceLoaderWikiModule.php | 5 +- resources/Resources.php | 13 +- .../mediawiki.advanced.rightclickedit.js | 11 +- .../mediawiki.language/mediawiki.language.js | 5 +- resources/mediawiki/mediawiki.js | 155 ++++++++++++------ resources/startup.js | 12 +- 7 files changed, 197 insertions(+), 83 deletions(-) diff --git a/includes/resourceloader/ResourceLoaderFileModule.php b/includes/resourceloader/ResourceLoaderFileModule.php index 9decac6cd3..ae87a48713 100644 --- a/includes/resourceloader/ResourceLoaderFileModule.php +++ b/includes/resourceloader/ResourceLoaderFileModule.php @@ -96,9 +96,12 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { /** * Constructs a new module from an options array. * - * @param {array} $options Options array. If not given or empty, an empty module will be constructed - * @param {string} $localBasePath base path to prepend to all local paths in $options. Defaults to $IP - * @param {string} $remoteBasePath base path to prepend to all remote paths in $options. Defaults to $wgScriptPath + * @param {array} $options Options array. If not given or empty, an empty + * module will be constructed + * @param {string} $localBasePath base path to prepend to all local paths + * in $options. Defaults to $IP + * @param {string} $remoteBasePath base path to prepend to all remote paths + * in $options. Defaults to $wgScriptPath * * @format $options * array( @@ -130,7 +133,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { * 'group' => [group name string], * ) */ - public function __construct( $options = array(), $localBasePath = null, $remoteBasePath = null ) { + public function __construct( $options = array(), $localBasePath = null, + $remoteBasePath = null ) + { global $IP, $wgScriptPath; $this->localBasePath = $localBasePath === null ? $IP : $localBasePath; $this->remoteBasePath = $remoteBasePath === null ? $wgScriptPath : $remoteBasePath; @@ -149,13 +154,15 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { case 'skinStyles': if ( !is_array( $option ) ) { throw new MWException( - "Invalid collated file path list error. '$option' given, array expected." + "Invalid collated file path list error. " . + "'$option' given, array expected." ); } foreach ( $option as $key => $value ) { if ( !is_string( $key ) ) { throw new MWException( - "Invalid collated file path list key error. '$key' given, string expected." + "Invalid collated file path list key error. " . + "'$key' given, string expected." ); } $this->{$member}[$key] = (array) $value; @@ -227,7 +234,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { public function getStyles( ResourceLoaderContext $context ) { // Merge general styles and skin specific styles, retaining media type collation $styles = $this->readStyleFiles( $this->styles ); - $skinStyles = $this->readStyleFiles( self::tryForKey( $this->skinStyles, $context->getSkin(), 'default' ) ); + $skinStyles = $this->readStyleFiles( + self::tryForKey( $this->skinStyles, $context->getSkin(), 'default' ) ); foreach ( $skinStyles as $media => $style ) { if ( isset( $styles[$media] ) ) { @@ -282,11 +290,14 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { /** * Get the last modified timestamp of this module. * - * Last modified timestamps are calculated from the highest last modified timestamp of this module's constituent - * files as well as the files it depends on. This function is context-sensitive, only performing calculations on - * files relevant to the given language, skin and debug mode. + * Last modified timestamps are calculated from the highest last modified + * timestamp of this module's constituent files as well as the files it + * depends on. This function is context-sensitive, only performing + * calculations on files relevant to the given language, skin and debug + * mode. * - * @param {ResourceLoaderContext} $context Context in which to calculate the modified time + * @param {ResourceLoaderContext} $context Context in which to calculate + * the modified time * @return {integer} UNIX timestamp * @see {ResourceLoaderModule::getFileDependencies} */ @@ -304,7 +315,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { $files = array_merge( $files, $styleFiles ); } $skinFiles = self::tryForKey( - self::collateFilePathListByOption( $this->skinStyles, 'media', 'all' ), $context->getSkin(), 'default' + self::collateFilePathListByOption( $this->skinStyles, 'media', 'all' ), + $context->getSkin(), + 'default' ); foreach ( $skinFiles as $styleFiles ) { $files = array_merge( $files, $styleFiles ); @@ -323,7 +336,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { // File deps need to be treated separately because they're already prefixed $files = array_merge( $files, $this->getFileDependencies( $context->getSkin() ) ); - // If a module is nothing but a list of dependencies, we need to avoid giving max() an empty array + // If a module is nothing but a list of dependencies, we need to avoid + // giving max() an empty array if ( count( $files ) === 0 ) { return $this->modifiedTime[$context->getHash()] = 1; } @@ -331,7 +345,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { wfProfileIn( __METHOD__.'-filemtime' ); $filesMtime = max( array_map( 'filemtime', $files ) ); wfProfileOut( __METHOD__.'-filemtime' ); - $this->modifiedTime[$context->getHash()] = max( $filesMtime, $this->getMsgBlobMtime( $context->getLanguage() ) ); + $this->modifiedTime[$context->getHash()] = max( + $filesMtime, + $this->getMsgBlobMtime( $context->getLanguage() ) ); wfProfileOut( __METHOD__ ); return $this->modifiedTime[$context->getHash()]; } @@ -349,7 +365,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { /** * Collates file paths by option (where provided). * - * @param {array} $list List of file paths in any combination of index/path or path/options pairs + * @param {array} $list List of file paths in any combination of index/path + * or path/options pairs * @return {array} List of file paths, collated by $option */ protected static function collateFilePathListByOption( array $list, $option, $default ) { @@ -379,12 +396,16 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { * @param {array} $list List of lists to select from * @param {string} $key Key to look for in $map * @param {string} $fallback Key to look for in $list if $key doesn't exist - * @return {array} List of elements from $map which matched $key or $fallback, or an empty list in case of no match + * @return {array} List of elements from $map which matched $key or $fallback, + * or an empty list in case of no match */ protected static function tryForKey( array $list, $key, $fallback = null ) { if ( isset( $list[$key] ) && is_array( $list[$key] ) ) { return $list[$key]; - } else if ( is_string( $fallback ) && isset( $list[$fallback] ) && is_array( $list[$fallback] ) ) { + } else if ( is_string( $fallback ) + && isset( $list[$fallback] ) + && is_array( $list[$fallback] ) ) + { return $list[$fallback]; } return array(); @@ -400,14 +421,24 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { if ( empty( $scripts ) ) { return ''; } - return implode( "\n", array_map( 'file_get_contents', array_map( array( $this, 'getLocalPath' ), array_unique( $scripts ) ) ) ); + $js = ''; + foreach ( array_unique( $scripts ) as $fileName ) { + $localPath = $this->getLocalPath( $fileName ); + $contents = file_get_contents( $localPath ); + if ( $contents === false ) { + throw new MWException( __METHOD__.": script file not found: \"$localPath\"" ); + } + $js .= $contents . "\n"; + } + return $js; } /** * Gets the contents of a list of CSS files. * * @param {array} $styles List of file paths to styles to read, remap and concetenate - * @return {array} List of concatenated and remapped CSS data from $styles, keyed by media type + * @return {array} List of concatenated and remapped CSS data from $styles, + * keyed by media type */ protected function readStyleFiles( array $styles ) { if ( empty( $styles ) ) { @@ -431,11 +462,17 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { * @return {string} CSS data in script file */ protected function readStyleFile( $path ) { - $style = file_get_contents( $this->getLocalPath( $path ) ); + $localPath = $this->getLocalPath( $path ); + $style = file_get_contents( $localPath ); + if ( $style === false ) { + throw new MWException( __METHOD__.": style file not found: \"$localPath\"" ); + } $dir = $this->getLocalPath( dirname( $path ) ); $remoteDir = $this->getRemotePath( dirname( $path ) ); // Get and register local file references - $this->localFileRefs = array_merge( $this->localFileRefs, CSSMin::getLocalFileReferences( $style, $dir ) ); + $this->localFileRefs = array_merge( + $this->localFileRefs, + CSSMin::getLocalFileReferences( $style, $dir ) ); return CSSMin::remap( $style, $dir, $remoteDir, true ); diff --git a/includes/resourceloader/ResourceLoaderWikiModule.php b/includes/resourceloader/ResourceLoaderWikiModule.php index 92c8779a98..bf129df37d 100644 --- a/includes/resourceloader/ResourceLoaderWikiModule.php +++ b/includes/resourceloader/ResourceLoaderWikiModule.php @@ -25,8 +25,9 @@ defined( 'MEDIAWIKI' ) || die( 1 ); /** * Abstraction for resource loader modules which pull from wiki pages * - * This can only be used for wiki pages in the MediaWiki and User namespaces, because of it's dependence on the - * functionality of Title::isValidCssJsSubpage. + * This can only be used for wiki pages in the MediaWiki and User namespaces, + * because of it's dependence on the functionality of + * Title::isValidCssJsSubpage. */ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { diff --git a/resources/Resources.php b/resources/Resources.php index 081633dfa5..d7173abcc8 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -25,7 +25,9 @@ return array( /* jQuery */ - 'jquery' => new ResourceLoaderFileModule( array( 'scripts' => 'resources/jquery/jquery.js', 'debugRaw' => false ) ), + 'jquery' => new ResourceLoaderFileModule( + array( 'scripts' => 'resources/jquery/jquery.js', 'debugRaw' => false ) + ), /* jQuery Plugins */ @@ -109,7 +111,9 @@ return array( ) ), 'jquery.ui.droppable' => new ResourceLoaderFileModule( array( 'scripts' => 'resources/jquery.ui/jquery.ui.droppable.js', - 'dependencies' => array( 'jquery.ui.core', 'jquery.ui.mouse', 'jquery.ui.widget', 'jquery.ui.draggable' ), + 'dependencies' => array( + 'jquery.ui.core', 'jquery.ui.mouse', 'jquery.ui.widget', 'jquery.ui.draggable' + ), ) ), 'jquery.ui.resizable' => new ResourceLoaderFileModule( array( 'scripts' => 'resources/jquery.ui/jquery.ui.resizable.js', @@ -393,7 +397,10 @@ return array( 'mediawiki.legacy.ajax' => new ResourceLoaderFileModule( array( 'scripts' => 'skins/common/ajax.js', - 'messages' => array( 'watch', 'unwatch', 'watching', 'unwatching', 'tooltip-ca-watch', 'tooltip-ca-unwatch' ), + 'messages' => array( + 'watch', 'unwatch', 'watching', 'unwatching', 'tooltip-ca-watch', + 'tooltip-ca-unwatch' + ), 'dependencies' => 'mediawiki.legacy.wikibits', ) ), 'mediawiki.legacy.ajaxwatch' => new ResourceLoaderFileModule( array( diff --git a/resources/mediawiki.advanced/mediawiki.advanced.rightclickedit.js b/resources/mediawiki.advanced/mediawiki.advanced.rightclickedit.js index e492c77a3f..29de20845b 100644 --- a/resources/mediawiki.advanced/mediawiki.advanced.rightclickedit.js +++ b/resources/mediawiki.advanced/mediawiki.advanced.rightclickedit.js @@ -4,8 +4,13 @@ $( function() { // Select all h1-h6 elements that contain editsection links - $('h1:has(.editsection a), h2:has(.editsection a), h3:has(.editsection a), h4:has(.editsection a), h5:has(.editsection a), h6:has(.editsection a)').live( 'contextmenu', function( e ) { - + $('h1:has(.editsection a), ' + + 'h2:has(.editsection a), ' + + 'h3:has(.editsection a), ' + + 'h4:has(.editsection a), ' + + 'h5:has(.editsection a), ' + + 'h6:has(.editsection a)' + ).live( 'contextmenu', function( e ) { // Get href of the [edit] link var href = $(this).find( '.editsection a' ).attr( 'href' ); @@ -19,4 +24,4 @@ $( function() { }); -}); \ No newline at end of file +}); diff --git a/resources/mediawiki.language/mediawiki.language.js b/resources/mediawiki.language/mediawiki.language.js index e2ec8559b9..aa4183b5f0 100644 --- a/resources/mediawiki.language/mediawiki.language.js +++ b/resources/mediawiki.language/mediawiki.language.js @@ -1,8 +1,9 @@ /** * Base language object * - * Localized Language support attempts to mirror some of the functionality of Language.php in MediaWiki. This object - * contains methods for loading and transforming message text. + * Localized Language support attempts to mirror some of the functionality of + * Language.php in MediaWiki. This object contains methods for loading and + * transforming message text. */ mediaWiki.language = { diff --git a/resources/mediawiki/mediawiki.js b/resources/mediawiki/mediawiki.js index 71daa00e6b..5caafc3d41 100644 --- a/resources/mediawiki/mediawiki.js +++ b/resources/mediawiki/mediawiki.js @@ -60,9 +60,11 @@ window.mediaWiki = new ( function( $ ) { /* Prototypes */ /** - * An object which allows single and multiple get/set/exists functionality on a list of key / value pairs. + * An object which allows single and multiple get/set/exists functionality + * on a list of key / value pairs. * - * @param {boolean} global Whether to get/set/exists values on the window object or a private object + * @param {boolean} global Whether to get/set/exists values on the window + * object or a private object */ function Map( global ) { this.values = ( global === true ) ? window : {}; @@ -216,7 +218,8 @@ window.mediaWiki = new ( function( $ ) { /* Public Members */ /* - * Dummy function which in debug mode can be replaced with a function that does something clever + * Dummy function which in debug mode can be replaced with a function that + * does something clever */ this.log = function() { }; @@ -278,9 +281,11 @@ window.mediaWiki = new ( function( $ ) { /** * Mapping of registered modules * - * The jquery module is pre-registered, because it must have already been provided for this object to have - * been built, and in debug mode jquery would have been provided through a unique loader request, making it - * impossible to hold back registration of jquery until after mediawiki. + * The jquery module is pre-registered, because it must have already + * been provided for this object to have been built, and in debug mode + * jquery would have been provided through a unique loader request, + * making it impossible to hold back registration of jquery until after + * mediawiki. * * Format: * { @@ -347,7 +352,7 @@ window.mediaWiki = new ( function( $ ) { if ( typeof registry[module] === 'undefined' ) { throw new Error( 'Unknown dependency: ' + module ); } - // Resolves dynamic loader function and replaces it with it's own results + // Resolves dynamic loader function and replaces it with its own results if ( typeof registry[module].dependencies === 'function' ) { registry[module].dependencies = registry[module].dependencies(); // Ensures the module's dependencies are always in an array @@ -360,7 +365,8 @@ window.mediaWiki = new ( function( $ ) { if ( $.inArray( registry[module].dependencies[n], resolved ) === -1 ) { if ( $.inArray( registry[module].dependencies[n], unresolved ) !== -1 ) { throw new Error( - 'Circular reference detected: ' + module + ' -> ' + registry[module].dependencies[n] + 'Circular reference detected: ' + module + + ' -> ' + registry[module].dependencies[n] ); } recurse( registry[module].dependencies[n], resolved, unresolved ); @@ -371,7 +377,7 @@ window.mediaWiki = new ( function( $ ) { } /** - * Gets a list of modules names that a module dependencies in their proper dependency order + * Gets a list of module names that a module depends on in their proper dependency order * * @param mixed string module name or array of string module names * @return list of dependencies @@ -401,11 +407,13 @@ window.mediaWiki = new ( function( $ ) { }; /** - * Narrows a list of module names down to those matching a specific state. Possible states are 'undefined', - * 'registered', 'loading', 'loaded', or 'ready' + * Narrows a list of module names down to those matching a specific + * state. Possible states are 'undefined', 'registered', 'loading', + * 'loaded', or 'ready' * * @param mixed string or array of strings of module states to filter by - * @param array list of module names to filter (optional, all modules will be used by default) + * @param array list of module names to filter (optional, all modules + * will be used by default) * @return array list of filtered module names */ function filter( states, modules ) { @@ -424,17 +432,26 @@ window.mediaWiki = new ( function( $ ) { // Build a list of modules which are in one of the specified states for ( var s = 0; s < states.length; s++ ) { for ( var m = 0; m < modules.length; m++ ) { - if ( - ( states[s] == 'undefined' && typeof registry[modules[m]] === 'undefined' ) || - ( typeof registry[modules[m]] === 'object' && registry[modules[m]].state === states[s] ) - ) { - list[list.length] = modules[m]; + if ( typeof registry[modules[m]] === 'undefined' ) { + // Module does not exist + if ( states[s] == 'undefined' ) { + // OK, undefined + list[list.length] = modules[m]; + } + } else { + // Module exists, check state + if ( registry[modules[m]].state === states[s] ) { + // OK, correct state + list[list.length] = modules[m]; + } } } } return list; } + this.filter_ = filter; + /** * Executes a loaded module, making it ready to use * @@ -452,11 +469,16 @@ window.mediaWiki = new ( function( $ ) { } // Add style sheet to document if ( typeof registry[module].style === 'string' && registry[module].style.length ) { - $( 'head' ).append( '' ); - } else if ( typeof registry[module].style === 'object' && !( registry[module].style instanceof Array ) ) { + $( 'head' ) + .append( '' ); + } else if ( typeof registry[module].style === 'object' + && !( registry[module].style instanceof Array ) ) + { for ( var media in registry[module].style ) { $( 'head' ).append( - '' + '' ); } } @@ -470,7 +492,10 @@ window.mediaWiki = new ( function( $ ) { registry[module].state = 'ready'; // Run jobs who's dependencies have just been met for ( var j = 0; j < jobs.length; j++ ) { - if ( compare( filter( 'ready', jobs[j].dependencies ), jobs[j].dependencies ) ) { + if ( compare( + filter( 'ready', jobs[j].dependencies ), + jobs[j].dependencies ) ) + { if ( typeof jobs[j].ready === 'function' ) { jobs[j].ready(); } @@ -481,7 +506,10 @@ window.mediaWiki = new ( function( $ ) { // Execute modules who's dependencies have just been met for ( r in registry ) { if ( registry[r].state == 'loaded' ) { - if ( compare( filter( ['ready'], registry[r].dependencies ), registry[r].dependencies ) ) { + if ( compare( + filter( ['ready'], registry[r].dependencies ), + registry[r].dependencies ) ) + { execute( r ); } } @@ -504,7 +532,8 @@ window.mediaWiki = new ( function( $ ) { } /** - * Adds a dependencies to the queue with optional callbacks to be run when the dependencies are ready or fail + * Adds a dependencies to the queue with optional callbacks to be run + * when the dependencies are ready or fail * * @param mixed string moulde name or array of string module names * @param function ready callback to execute when all dependencies are ready @@ -516,14 +545,17 @@ window.mediaWiki = new ( function( $ ) { dependencies = [dependencies]; if ( dependencies[0] in registry ) { for ( var n = 0; n < registry[dependencies[0]].dependencies.length; n++ ) { - dependencies[dependencies.length] = registry[dependencies[0]].dependencies[n]; + dependencies[dependencies.length] = + registry[dependencies[0]].dependencies[n]; } } } // Add ready and error callbacks if they were given if ( arguments.length > 1 ) { jobs[jobs.length] = { - 'dependencies': filter( ['undefined', 'registered', 'loading', 'loaded'], dependencies ), + 'dependencies': filter( + ['undefined', 'registered', 'loading', 'loaded'], + dependencies ), 'ready': ready, 'error': error }; @@ -577,7 +609,8 @@ window.mediaWiki = new ( function( $ ) { queue = []; // After document ready, handle the batch if ( !suspended && batch.length ) { - // Always order modules alphabetically to help reduce cache misses for otherwise identical content + // Always order modules alphabetically to help reduce cache + // misses for otherwise identical content batch.sort(); // Build a list of request parameters var base = { @@ -608,9 +641,11 @@ window.mediaWiki = new ( function( $ ) { { 'modules': groups[group].join( '|' ), 'version': formatVersionNumber( version ) }, base ); } - // Clear the batch - this MUST happen before we append the script element to the body or it's - // possible that the script will be locally cached, instantly load, and work the batch again, - // all before we've cleared it causing each request to include modules which are already loaded + // Clear the batch - this MUST happen before we append the + // script element to the body or it's possible that the script + // will be locally cached, instantly load, and work the batch + // again, all before we've cleared it causing each request to + // include modules which are already loaded batch = []; // Asynchronously append a script tag to the end of the body function request() { @@ -633,8 +668,8 @@ window.mediaWiki = new ( function( $ ) { }; /** - * Registers a module, letting the system know about it and it's dependencies. loader.js files contain calls - * to this function. + * Registers a module, letting the system know about it and its + * dependencies. loader.js files contain calls to this function. */ this.register = function( module, version, dependencies, group ) { // Allow multiple registration @@ -666,14 +701,16 @@ window.mediaWiki = new ( function( $ ) { // Allow dependencies to be given as a single module name registry[module].dependencies = [dependencies]; } else if ( typeof dependencies === 'object' || typeof dependencies === 'function' ) { - // Allow dependencies to be given as an array of module names or a function which returns an array + // Allow dependencies to be given as an array of module names + // or a function which returns an array registry[module].dependencies = dependencies; } }; /** - * Implements a module, giving the system a course of action to take upon loading. Results of a request for - * one or more modules contain calls to this function. + * Implements a module, giving the system a course of action to take + * upon loading. Results of a request for one or more modules contain + * calls to this function. */ this.implement = function( module, script, style, localization ) { // Automaically register module @@ -684,27 +721,39 @@ window.mediaWiki = new ( function( $ ) { if ( typeof script !== 'function' ) { throw new Error( 'script must be a function, not a ' + typeof script ); } - if ( typeof style !== 'undefined' && typeof style !== 'string' && typeof style !== 'object' ) { + if ( typeof style !== 'undefined' + && typeof style !== 'string' + && typeof style !== 'object' ) + { throw new Error( 'style must be a string or object, not a ' + typeof style ); } - if ( typeof localization !== 'undefined' && typeof localization !== 'object' ) { + if ( typeof localization !== 'undefined' + && typeof localization !== 'object' ) + { throw new Error( 'localization must be an object, not a ' + typeof localization ); } - if ( typeof registry[module] !== 'undefined' && typeof registry[module].script !== 'undefined' ) { + if ( typeof registry[module] !== 'undefined' + && typeof registry[module].script !== 'undefined' ) + { throw new Error( 'module already implemeneted: ' + module ); } // Mark module as loaded registry[module].state = 'loaded'; // Attach components registry[module].script = script; - if ( typeof style === 'string' || typeof style === 'object' && !( style instanceof Array ) ) { + if ( typeof style === 'string' + || typeof style === 'object' && !( style instanceof Array ) ) + { registry[module].style = style; } if ( typeof localization === 'object' ) { registry[module].messages = localization; } // Execute or queue callback - if ( compare( filter( ['ready'], registry[module].dependencies ), registry[module].dependencies ) ) { + if ( compare( + filter( ['ready'], registry[module].dependencies ), + registry[module].dependencies ) ) + { execute( module ); } else { request( module ); @@ -714,7 +763,8 @@ window.mediaWiki = new ( function( $ ) { /** * Executes a function as soon as one or more required modules are ready * - * @param mixed string or array of strings of modules names the callback dependencies to be ready before + * @param mixed string or array of strings of modules names the callback + * dependencies to be ready before * executing * @param function callback to execute when all dependencies are ready (optional) * @param function callback to execute when if dependencies have a errors (optional) @@ -722,7 +772,8 @@ window.mediaWiki = new ( function( $ ) { this.using = function( dependencies, ready, error ) { // Validate input if ( typeof dependencies !== 'object' && typeof dependencies !== 'string' ) { - throw new Error( 'dependencies must be a string or an array, not a ' + typeof dependencies ) + throw new Error( 'dependencies must be a string or an array, not a ' + + typeof dependencies ) } // Allow calling with a single dependency as a string if ( typeof dependencies === 'string' ) { @@ -751,21 +802,29 @@ window.mediaWiki = new ( function( $ ) { /** * Loads an external script or one or more modules for future use * - * @param {mixed} modules either the name of a module, array of modules, or a URL of an external script or style - * @param {string} type mime-type to use if calling with a URL of an external script or style; acceptable values - * are "text/css" and "text/javascript"; if no type is provided, text/javascript is assumed + * @param {mixed} modules either the name of a module, array of modules, + * or a URL of an external script or style + * @param {string} type mime-type to use if calling with a URL of an + * external script or style; acceptable values are "text/css" and + * "text/javascript"; if no type is provided, text/javascript is + * assumed */ this.load = function( modules, type ) { // Validate input if ( typeof modules !== 'object' && typeof modules !== 'string' ) { - throw new Error( 'dependencies must be a string or an array, not a ' + typeof dependencies ) + throw new Error( 'dependencies must be a string or an array, not a ' + + typeof dependencies ) } // Allow calling with an external script or single dependency as a string if ( typeof modules === 'string' ) { // Support adding arbitrary external scripts - if ( modules.substr( 0, 7 ) == 'http://' || modules.substr( 0, 8 ) == 'https://' ) { + if ( modules.substr( 0, 7 ) == 'http://' + || modules.substr( 0, 8 ) == 'https://' ) + { if ( type === 'text/css' ) { - $( 'head' ).append( $( '' ).attr( 'href', modules ) ); + $( 'head' ) + .append( $( '' ) + .attr( 'href', modules ) ); return true; } else if ( type === 'text/javascript' || typeof type === 'undefined' ) { var script = ''; @@ -858,4 +917,4 @@ if ( typeof startUp === 'function' ) { // Alias $j to jQuery for backwards compatibility window.$j = jQuery; -window.mw = mediaWiki; \ No newline at end of file +window.mw = mediaWiki; diff --git a/resources/startup.js b/resources/startup.js index 4ae8791420..1e0ca035cf 100644 --- a/resources/startup.js +++ b/resources/startup.js @@ -1,11 +1,13 @@ /** - * This script provides a function which is run to evaluate whether or not to continue loading the jquery and mediawiki - * modules. This code should work on even the most ancient of browsers, so be very careful when editing. + * This script provides a function which is run to evaluate whether or not to + * continue loading the jquery and mediawiki modules. This code should work on + * even the most ancient of browsers, so be very careful when editing. */ /** * Returns false when run in a black-listed browser * - * This function will be deleted after it's used, so do not expand it to be generally useful beyond startup + * This function will be deleted after it's used, so do not expand it to be + * generally useful beyond startup * * jQuery has minimum requirements of: * * Firefox 2.0+ @@ -16,7 +18,9 @@ */ var isCompatible = function() { // IE < 6 - if ( navigator.appVersion.indexOf( 'MSIE' ) !== -1 && parseFloat( navigator.appVersion.split( 'MSIE' )[1] ) < 6 ) { + if ( navigator.appVersion.indexOf( 'MSIE' ) !== -1 + && parseFloat( navigator.appVersion.split( 'MSIE' )[1] ) < 6 ) + { return false; } // TODO: Firefox < 2 -- 2.20.1