ResourceLoaderSiteModule now supports CSS too!
authorTrevor Parscal <tparscal@users.mediawiki.org>
Fri, 10 Sep 2010 20:18:24 +0000 (20:18 +0000)
committerTrevor Parscal <tparscal@users.mediawiki.org>
Fri, 10 Sep 2010 20:18:24 +0000 (20:18 +0000)
includes/ResourceLoader.php
includes/ResourceLoaderModule.php
includes/Skin.php

index ede4341..3ca408c 100644 (file)
@@ -307,8 +307,17 @@ class ResourceLoader {
 
                        // Output
                        if ( $context->getOnly() === 'styles' ) {
-                               foreach ( $styles as $media => $style ) {
-                                       echo "@media $media {\n$style\n}\n";
+                               if ( $context->getDebug() ) {
+                                       echo "/* $name */\n";
+                                       foreach ( $styles as $media => $style ) {
+                                               echo "@media $media {\n" . str_replace( "\n", "\n\t", "\t" . $style ) . "\n}\n";
+                                       }
+                               } else {
+                                       foreach ( $styles as $media => $style ) {
+                                               if ( strlen( $style ) ) {
+                                                       echo "@media $media{" . $style . "}";
+                                               }
+                                       }
                                }
                        } else if ( $context->getOnly() === 'scripts' ) {
                                echo $scripts;
index cb1977a..5d5c013 100644 (file)
@@ -691,6 +691,8 @@ class ResourceLoaderSiteModule extends ResourceLoaderModule {
        }
 
        public function getModifiedTime( ResourceLoaderContext $context ) {
+               global $wgHandheldStyle;
+               
                if ( isset( $this->modifiedTime[$context->getHash()] ) ) {
                        return $this->modifiedTime[$context->getHash()];
                }
@@ -698,20 +700,28 @@ class ResourceLoaderSiteModule extends ResourceLoaderModule {
                // HACK: We duplicate the message names from generateUserJs()
                // here and weird things (i.e. mtime moving backwards) can happen
                // when a MediaWiki:Something.js page is deleted
-               $jsPages = array( Title::makeTitle( NS_MEDIAWIKI, 'Common.js' ),
-                       Title::makeTitle( NS_MEDIAWIKI, ucfirst( $context->getSkin() ) . '.js' )
+               $pages = array(
+                       Title::makeTitle( NS_MEDIAWIKI, 'Common.js' ),
+                       Title::makeTitle( NS_MEDIAWIKI, 'Common.css' ),
+                       Title::makeTitle( NS_MEDIAWIKI, ucfirst( $context->getSkin() ) . '.js' ),
+                       Title::makeTitle( NS_MEDIAWIKI, ucfirst( $context->getSkin() ) . '.css' ),
+                       Title::makeTitle( NS_MEDIAWIKI, 'Print.css' ),
+                       
                );
+               if ( $wgHandheldStyle ) {
+                       $pages[] = Title::makeTitle( NS_MEDIAWIKI, 'Handheld.css' );
+               }
 
                // Do batch existence check
                // TODO: This would work better if page_touched were loaded by this as well
-               $lb = new LinkBatch( $jsPages );
+               $lb = new LinkBatch( $pages );
                $lb->execute();
 
                $this->modifiedTime = 1; // wfTimestamp() interprets 0 as "now"
 
-               foreach ( $jsPages as $jsPage ) {
-                       if ( $jsPage->exists() ) {
-                               $this->modifiedTime = max( $this->modifiedTime, wfTimestamp( TS_UNIX, $jsPage->getTouched() ) );
+               foreach ( $pages as $page ) {
+                       if ( $page->exists() ) {
+                               $this->modifiedTime = max( $this->modifiedTime, wfTimestamp( TS_UNIX, $page->getTouched() ) );
                        }
                }
 
@@ -719,7 +729,26 @@ class ResourceLoaderSiteModule extends ResourceLoaderModule {
        }
 
        public function getStyles( ResourceLoaderContext $context ) {
-               return array();
+               global $wgHandheldStyle;
+               $styles = array(
+                       'all' => array( 'Common.css', $context->getSkin() . '.css' ),
+                       'print' => array( 'Print.css' ),
+               );
+               if ( $wgHandheldStyle ) {
+                       $sources['handheld'] = array( 'Handheld.css' );
+               }
+               foreach ( $styles as $media => $messages ) {
+                       foreach ( $messages as $i => $message ) {
+                               $style = wfMsgExt( $message, 'content' );
+                               if ( !wfEmptyMsg( $message, $style ) ) {
+                                       $styles[$media][$i] = $style;
+                               }
+                       }
+               }
+               foreach ( $styles as $media => $messages ) {
+                       $styles[$media] = implode( "\n", $messages );
+               }
+               return $styles;
        }
        public function getMessages() { return array(); }
        public function getLoaderScript() { return ''; }
index a57cc18..0f0fae5 100644 (file)
@@ -646,17 +646,7 @@ CSS;
                // If we use the site's dynamic CSS, throw that in, too
                // Per-site custom styles
                if ( $wgUseSiteCss ) {
-                       global $wgHandheldStyle;
-
-                       $query = wfArrayToCGI( self::getDynamicStylesheetQuery() );
-                       # Site settings must override extension css! (bug 15025)
-                       $out->addStyle( self::makeNSUrl( 'Common.css', $query, NS_MEDIAWIKI ) );
-                       $out->addStyle( self::makeNSUrl( 'Print.css', $query, NS_MEDIAWIKI ), 'print' );
-
-                       if ( $wgHandheldStyle ) {
-                               $out->addStyle( self::makeNSUrl( 'Handheld.css', $query, NS_MEDIAWIKI ), 'handheld' );
-                       }
-                       $out->addStyle( self::makeNSUrl( $this->getSkinName() . '.css', $query, NS_MEDIAWIKI ) );
+                       $out->addModuleStyles( 'site' );
                }
 
                global $wgAllowUserCssPrefs;
@@ -727,6 +717,7 @@ CSS;
                $out->addModuleStyles( 'mediawiki.legacy.oldshared' );
                // TODO: Figure out how to best integrate this stuff into ResourceLoader
                $out->addStyle( $this->getStylesheet() );
+               // TODO: When converting old skins to use ResourceLoader (or removing them) this needs to be reconsidered
                $out->addStyle( 'common/common_rtl.css', '', '', 'rtl' );
        }