Really fix bug 26131: just putting the site+user <link> at the bottom of the <head...
authorRoan Kattouw <catrope@users.mediawiki.org>
Fri, 24 Dec 2010 01:22:11 +0000 (01:22 +0000)
committerRoan Kattouw <catrope@users.mediawiki.org>
Fri, 24 Dec 2010 01:22:11 +0000 (01:22 +0000)
includes/OutputPage.php
resources/mediawiki/mediawiki.js

index fa8d38d..e1038af 100644 (file)
@@ -2579,9 +2579,18 @@ class OutputPage {
                        // be placed in the "other" group
                        $styles[isset( $styles[$group] ) ? $group : 'other'][] = $name;
                }
-               // Add styles to tags, user modules last
+
+               // We want site and user styles to override dynamically added styles from modules, but we want
+               // dynamically added styles to override statically added styles from other modules. So the order
+               // has to be other, dynamic, site, user
+               // Add statically added styles for other modules
+               $tags[] = $this->makeResourceLoaderLink( $sk, $styles['other'], 'styles' );
+               // Add marker tag to mark the place where the client-side loader should inject dynamic styles
+               // We use a <meta> tag with a made-up name for this because that's valid HTML
+               $tags[] = Html::element( 'meta', array( 'name' => 'ResourceLoaderDynamicStyles', 'content' => '' ) );
+               // Add site and user styles
                $tags[] = $this->makeResourceLoaderLink(
-                       $sk, array_merge( $styles['other'], $styles['site'], $styles['user'] ), 'styles'
+                       $sk, array_merge( $styles['site'], $styles['user'] ), 'styles'
                );
                return implode( "\n", $tags );
        }
index 992aff8..8eab4ba 100644 (file)
@@ -482,6 +482,8 @@ window.mediaWiki = new ( function( $ ) {
                var suspended = true;
                // Flag inidicating that document ready has occured
                var ready = false;
+               // Marker element for adding dynamic styles
+               var $marker = $( 'head meta[name=ResourceLoaderDynamicStyles]' );
 
                /* Private Methods */
 
@@ -639,16 +641,15 @@ window.mediaWiki = new ( function( $ ) {
                        }
                        // Add style sheet to document
                        if ( typeof registry[module].style === 'string' && registry[module].style.length ) {
-                               $( 'head' )
-                                       .append( mediaWiki.html.element( 'style',
-                                               { type: "text/css" },
+                               $marker.before( mediaWiki.html.element( 'style',
+                                               { type: 'text/css' },
                                                new mediaWiki.html.Cdata( registry[module].style )
                                        ) );
                        } else if ( typeof registry[module].style === 'object'
                                && !( registry[module].style instanceof Array ) )
                        {
                                for ( var media in registry[module].style ) {
-                                       $( 'head' ).append( mediaWiki.html.element( 'style',
+                                       $marker.before( mediaWiki.html.element( 'style',
                                                { type: 'text/css', media: media },
                                                new mediaWiki.html.Cdata( registry[module].style[media] )
                                        ) );