Improving extendibility of the sidebar improvements, css adding, and also JS variables.
[lhc/web/wiklou.git] / includes / SkinTemplate.php
index c60cfb4..ae894cc 100644 (file)
@@ -964,54 +964,62 @@ class SkinTemplate extends Skin {
 
                global $wgRequest, $wgAllowUserCss, $wgUseSiteCss, $wgContLang, $wgSquidMaxage, $wgStylePath, $wgUser;
 
-               $sitecss = '';
-               $usercss = '';
+               $stylesheets = array();
+               $rawcss = '';
                $siteargs = '&maxage=' . $wgSquidMaxage;
+               $userPreview = false;
                if( $this->loggedin ) {
                        // Ensure that logged-in users' generated CSS isn't clobbered
                        // by anons' publicly cacheable generated CSS.
                        $siteargs .= '&smaxage=0';
-               }
-
-               # Add user-specific code if this is a user and we allow that kind of thing
-
-               if ( $wgAllowUserCss && $this->loggedin ) {
-                       $action = $wgRequest->getText('action');
-
-                       # if we're previewing the CSS page, use it
-                       if( $this->mTitle->isCssSubpage() and $this->userCanPreview( $action ) ) {
-                               $siteargs = "&smaxage=0&maxage=0";
-                               $usercss = $wgRequest->getText('wpTextbox1');
-                       } else {
-                               $usercss = '@import "' .
-                                 self::makeUrl($this->userpage . '/'.$this->skinname.'.css',
-                                                                'action=raw&ctype=text/css') . '";' ."\n";
+                       
+                       // If we allow user-specific code append some arguments for it
+                       if( $wgAllowUserCss ) {
+                               $action = $wgRequest->getText('action');
+                               $userPreview = $this->mTitle->isCssSubpage() && $this->userCanPreview( $action );
+                               $siteargs .= '&ts=' . $wgUser->mTouched;
+                               if( $userPreview ) $siteargs = "&smaxage=0&maxage=0";
                        }
-
-                       $siteargs .= '&ts=' . $wgUser->mTouched;
                }
-
+               
                if( $wgContLang->isRTL() && in_array( 'rtl', $this->cssfiles ) ) {
                        global $wgStyleVersion;
-                       $sitecss .= "@import \"$wgStylePath/$this->stylename/rtl.css?$wgStyleVersion\";\n";
+                       $stylesheets['skinrtl'] = "$wgStylePath/$this->stylename/rtl.css?$wgStyleVersion";
                }
-
+               
                # If we use the site's dynamic CSS, throw that in, too
-               if ( $wgUseSiteCss ) {
+               if( $wgUseSiteCss ) {
                        $query = "usemsgcache=yes&action=raw&ctype=text/css&smaxage=$wgSquidMaxage";
                        $skinquery = '';
                        if (($us = $wgRequest->getVal('useskin', '')) !== '')
                                $skinquery = "&useskin=$us";
-                       $sitecss .= '@import "' . self::makeNSUrl( 'Common.css', $query, NS_MEDIAWIKI) . '";' . "\n";
-                       $sitecss .= '@import "' . self::makeNSUrl( ucfirst( $this->skinname ) . '.css', $query, NS_MEDIAWIKI ) . '";' . "\n";
-                       $sitecss .= '@import "' . self::makeUrl( '-', "action=raw&gen=css$siteargs$skinquery" ) . '";' . "\n";
+                       $stylesheets['sitecommon'] = self::makeNSUrl( 'Common.css', $query, NS_MEDIAWIKI);
+                       $stylesheets['siteskin']   = self::makeNSUrl( ucfirst( $this->skinname ) . '.css', $query, NS_MEDIAWIKI );
+                       $stylesheets['gen']        = self::makeUrl( '-', "action=raw&gen=css$siteargs$skinquery" );
                }
-
+               
+               # Add user-specific code if this is a user and we allow that kind of thing
+               if( $wgAllowUserCss && $this->loggedin ) {
+                       # if we're previewing the CSS page, use it
+                       if( $userPreview ) {
+                               $rawcss .= $wgRequest->getText('wpTextbox1');
+                       } else {
+                               $stylesheets['userskin'] = self::makeUrl(
+                                       $this->userpage . '/'.$this->skinname.'.css',
+                                       'action=raw&ctype=text/css');
+                       }
+               }
+               
+               wfRunHooks( 'SkinSetupSiteCss', array( &$stylesheets, &$rawcss, $query ) );
+               
                # If we use any dynamic CSS, make a little CDATA block out of it.
-
-               if ( !empty($sitecss) || !empty($usercss) ) {
-                       $this->usercss = "/*<![CDATA[*/\n" . $sitecss . $usercss . '/*]]>*/';
+               $s = '';
+               foreach( $stylesheets as $link ) {
+                       $s .= "@import \"$link\";\n";
                }
+               $s .= $rawcss;
+               if( $s != '' ) $this->usercss = "/*<![CDATA[*/\n{$s}/*]]>*/";
+               
                wfProfileOut( __METHOD__ );
        }