From 19c92ea75c6f5912ad91235b1703c2c757bb71f1 Mon Sep 17 00:00:00 2001 From: Krinkle Date: Sun, 15 May 2011 10:33:07 +0000 Subject: [PATCH] (bug 27073) Lazy init the style marker and insert if not available (ie. when using resourceloader js on a non-mediawiki domain); fixing typo (r88074 CR) --- resources/mediawiki/mediawiki.js | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/resources/mediawiki/mediawiki.js b/resources/mediawiki/mediawiki.js index 7474a47300..f4411143c5 100644 --- a/resources/mediawiki/mediawiki.js +++ b/resources/mediawiki/mediawiki.js @@ -584,11 +584,26 @@ window.mediaWiki = new ( function( $ ) { var jobs = []; // Flag inidicating that document ready has occured var ready = false; - // Marker element for adding dynamic styles - var $marker = $( 'head meta[name=ResourceLoaderDynamicStyles]' ); + // Selector cache for the marker element. Use getMarker() to get/use the marker! + var $marker = null; /* Private Methods */ + function getMarker(){ + // Cached ? + if ( $marker ) { + return $marker; + } else { + //mw.log( 'getMarker> Caching marker' ); + $marker = $( 'meta[name="ResourceLoaderDynamicStyles"]' ); + if ( $marker.length ) { + return $marker; + } + mw.log( 'getMarker> No found, inserting dynamically.' ); + return $marker = $( '' ).attr( 'name', 'ResourceLoaderDynamicStyles' ).appendTo( 'head' ); + } + } + function compare( a, b ) { if ( a.length != b.length ) { return false; @@ -748,14 +763,14 @@ window.mediaWiki = new ( function( $ ) { var style = registry[module].style[media]; if ( $.isArray( style ) ) { for ( var i = 0; i < style.length; i++ ) { - $marker.before( mw.html.element( 'link', { + getMarker().before( mw.html.element( 'link', { 'type': 'text/css', 'rel': 'stylesheet', 'href': style[i] } ) ); } } else if ( typeof style === 'string' ) { - $marker.before( mw.html.element( + getMarker().before( mw.html.element( 'style', { 'type': 'text/css', 'media': media }, new mw.html.Cdata( style ) @@ -1134,7 +1149,7 @@ window.mediaWiki = new ( function( $ ) { throw new Error( 'script must be a function or an array, not a ' + typeof script ); } if ( !$.isPlainObject( style ) ) { - throw new Error( 'style must be an object or a string, not a ' + typeof style ); + throw new Error( 'style must be an object, not a ' + typeof style ); } if ( !$.isPlainObject( msgs ) ) { throw new Error( 'msgs must be an object, not a ' + typeof msgs ); -- 2.20.1