Fix indentation of => added in r77366 to be in step with the rest
[lhc/web/wiklou.git] / includes / OutputPage.php
index 296ad96..a80d4eb 100644 (file)
@@ -563,11 +563,6 @@ class OutputPage {
                $nameWithTags = Sanitizer::normalizeCharReferences( Sanitizer::removeHTMLtags( $name ) );
                $this->mPagetitle = $nameWithTags;
 
-               $taction = $this->getPageTitleActionText();
-               if( !empty( $taction ) ) {
-                       $name .= ' - '.$taction;
-               }
-
                # change "<i>foo&amp;bar</i>" to "foo&bar"
                $this->setHTMLTitle( wfMsg( 'pagetitle', Sanitizer::stripAllTags( $nameWithTags ) ) );
        }
@@ -1430,7 +1425,17 @@ class OutputPage {
                                if( $variant === $wgContLang->getCode() ) {
                                        continue;
                                } else {
-                                       $aloption[] = "string-contains=$variant";
+                                       $aloption[] = 'string-contains=' . $variant;
+                                       
+                                       // IE and some other browsers use another form of language code
+                                       // in their Accept-Language header, like "zh-CN" or "zh-TW".
+                                       // We should handle these too.
+                                       $ievariant = explode( '-', $variant );
+                                       if ( count( $ievariant ) == 2 ) {
+                                               $ievariant[1] = strtoupper( $ievariant[1] );
+                                               $ievariant = implode( '-', $ievariant );
+                                               $aloption[] = 'string-contains=' . $ievariant;
+                                       }
                                }
                        }
                        $this->addVaryHeader( 'Accept-Language', $aloption );
@@ -1610,10 +1615,11 @@ class OutputPage {
                }
 
                $sk = $wgUser->getSkin();
-               
+
                // Add base resources
                $this->addModules( array( 'mediawiki.legacy.wikibits' ) );
-               
+               $this->addModules( array( 'mediawiki.util' ) );
+
                // Add various resources if required
                if ( $wgUseAjax ) {
                        $this->addModules( 'mediawiki.legacy.ajax' );
@@ -1630,7 +1636,7 @@ class OutputPage {
                }
 
                if( $wgUser->getBoolOption( 'editsectiononrightclick' ) ) {
-                       $this->addModules( 'mediawiki.legacy.rightclickedit' );
+                       $this->addModules( 'mediawiki.action.view.rightClickEdit' );
                }
 
                if( $wgUniversalEditButton ) {
@@ -2045,7 +2051,6 @@ class OutputPage {
         * @return none
         */
        public function addPasswordSecurity( $passwordId, $retypeId ) {
-               $this->includeJQuery();
                $data = array(
                        'password' => '#' . $passwordId,
                        'retype' => '#' . $retypeId,
@@ -2276,35 +2281,70 @@ class OutputPage {
                $bodyAttrs['class'] .= ' ' . Sanitizer::escapeClass( 'page-' . $this->getTitle()->getPrefixedText() );
                $bodyAttrs['class'] .= ' skin-' . Sanitizer::escapeClass( $wgUser->getSkin()->getSkinName() );
 
+               $sk->addToBodyAttributes( $this, $bodyAttrs ); // Allow skins to add body attributes they need
+               wfRunHooks( 'OutputPageBodyAttributes', array( $this, $sk, &$bodyAttrs ) );
+
                $ret .= Html::openElement( 'body', $bodyAttrs ) . "\n";
 
                return $ret;
        }
-       
-       // TODO: Document
-       protected function makeResourceLoaderLink( $skin, $modules, $only, $useESI = false ) {
-               global $wgUser, $wgLang, $wgRequest, $wgLoadScript, $wgResourceLoaderDebug, $wgResourceLoaderUseESI,
-                       $wgResourceLoaderInlinePrivateModules;
-               // Lazy-load ResourceLoader
+
+       /**
+        * Get a ResourceLoader object associated with this OutputPage
+        */
+       public function getResourceLoader() {
                if ( is_null( $this->mResourceLoader ) ) {
                        $this->mResourceLoader = new ResourceLoader();
                }
+               return $this->mResourceLoader;
+       }               
+
+       /**
+        * TODO: Document
+        * @param $skin Skin
+        * @param $modules Array/string with the module name
+        * @param $only string May be styles, messages or scripts
+        * @param $useESI boolean
+        * @return string html <script> and <style> tags
+        */
+       protected function makeResourceLoaderLink( Skin $skin, $modules, $only, $useESI = false ) {
+               global $wgUser, $wgLang, $wgLoadScript, $wgResourceLoaderUseESI,
+                       $wgResourceLoaderInlinePrivateModules;
+               // Lazy-load ResourceLoader
                // TODO: Should this be a static function of ResourceLoader instead?
                // TODO: Divide off modules starting with "user", and add the user parameter to them
                $query = array(
                        'lang' => $wgLang->getCode(),
-                       'debug' => $wgRequest->getFuzzyBool( 'debug', $wgResourceLoaderDebug ) ? 'true' : 'false',
-                       'skin' => $wgUser->getSkin()->getSkinName(),
+                       'debug' => ResourceLoader::inDebugMode() ? 'true' : 'false',
+                       'skin' => $skin->getSkinName(),
                        'only' => $only,
                );
-               // Remove duplicate module requests
-               $modules = array_unique( (array) $modules );
-               // Sort module names so requests are more uniform
-               sort( $modules );
+               
+               if ( !count( $modules ) ) {
+                       return '';
+               }
+               
+               if ( count( $modules ) > 1 ) {
+                       // Remove duplicate module requests
+                       $modules = array_unique( (array) $modules );
+                       // Sort module names so requests are more uniform
+                       sort( $modules );
+               
+                       if ( ResourceLoader::inDebugMode() ) {
+                               // Recursively call us for every item
+                               $links = '';
+                               foreach ( $modules as $name ) {
+                                       $links .= $this->makeResourceLoaderLink( $skin, $name, $only, $useESI );
+                               }
+                               return $links;
+                       }
+               }
+               
                // Create keyed-by-group list of module objects from modules list
                $groups = array();
+               $resourceLoader = $this->getResourceLoader();
                foreach ( (array) $modules as $name ) {
-                       $module = $this->mResourceLoader->getModule( $name );
+                       $module = $resourceLoader->getModule( $name );
                        $group = $module->getGroup();
                        if ( !isset( $groups[$group] ) ) {
                                $groups[$group] = array();
@@ -2320,15 +2360,15 @@ class OutputPage {
                        }
                        // Support inlining of private modules if configured as such
                        if ( $group === 'private' && $wgResourceLoaderInlinePrivateModules ) {
-                               $context = new ResourceLoaderContext( $this->mResourceLoader, new FauxRequest( $query ) );
+                               $context = new ResourceLoaderContext( $resourceLoader, new FauxRequest( $query ) );
                                if ( $only == 'styles' ) {
                                        $links .= Html::inlineStyle(
-                                               $this->mResourceLoader->makeModuleResponse( $context, $modules )
+                                               $resourceLoader->makeModuleResponse( $context, $modules )
                                        );
                                } else {
                                        $links .= Html::inlineScript(
                                                ResourceLoader::makeLoaderConditionalScript(
-                                                       $this->mResourceLoader->makeModuleResponse( $context, $modules )
+                                                       $resourceLoader->makeModuleResponse( $context, $modules )
                                                )
                                        );
                                }
@@ -2339,7 +2379,7 @@ class OutputPage {
                        // we can ensure cache misses on change
                        if ( $group === 'user' || $group === 'site' ) {
                                // Create a fake request based on the one we are about to make so modules return correct times
-                               $context = new ResourceLoaderContext( $this->mResourceLoader, new FauxRequest( $query ) );
+                               $context = new ResourceLoaderContext( $resourceLoader, new FauxRequest( $query ) );
                                // Get the maximum timestamp
                                $timestamp = 1;
                                foreach ( $modules as $module ) {
@@ -2350,7 +2390,7 @@ class OutputPage {
                        }
                        // Make queries uniform in order
                        ksort( $query );
-                       
+
                        $url = wfAppendQuery( $wgLoadScript, $query );
                        if ( $useESI && $wgResourceLoaderUseESI ) {
                                $esi = Xml::element( 'esi:include', array( 'src' => $url ) );
@@ -2370,7 +2410,7 @@ class OutputPage {
                }
                return $links;
        }
-       
+
        /**
         * Gets the global variables and mScripts; also adds userjs to the end if
         * enabled. Despite the name, these scripts are no longer put in the
@@ -2380,36 +2420,23 @@ class OutputPage {
         * @return String: HTML fragment
         */
        function getHeadScripts( Skin $sk ) {
-               global $wgUser, $wgRequest, $wgUseSiteJs, $wgResourceLoaderDebug;
-               
+               global $wgUser, $wgRequest, $wgUseSiteJs;
+
                // Startup - this will immediately load jquery and mediawiki modules
                $scripts = $this->makeResourceLoaderLink( $sk, 'startup', 'scripts', true );
-               
+
                // Configuration -- This could be merged together with the load and go, but makeGlobalVariablesScript returns a
                // whole script tag -- grumble grumble...
                $scripts .= Skin::makeGlobalVariablesScript( $sk->getSkinName() ) . "\n";
-               
+
                // Script and Messages "only"
-               if ( $wgRequest->getFuzzyBool( 'debug', $wgResourceLoaderDebug ) ) {
-                       // Scripts
-                       foreach ( $this->getModuleScripts() as $name ) {
-                               $scripts .= $this->makeResourceLoaderLink( $sk, $name, 'scripts' );
-                       }
-                       // Messages
-                       foreach ( $this->getModuleMessages() as $name ) {
-                               $scripts .= $this->makeResourceLoaderLink( $sk, $name, 'messages' );
-                       }
-               } else {
-                       // Scripts
-                       if ( count( $this->getModuleScripts() ) ) {
-                               $scripts .= $this->makeResourceLoaderLink( $sk, $this->getModuleScripts(), 'scripts' );
-                       }
-                       // Messages
-                       if ( count( $this->getModuleMessages() ) ) {
-                               $scripts .= $this->makeResourceLoaderLink( $sk, $this->getModuleMessages(), 'messages' );
-                       }
-               }
                
+               // Scripts
+               $scripts .= $this->makeResourceLoaderLink( $sk, $this->getModuleScripts(), 'scripts' );
+
+               // Messages
+               $scripts .= $this->makeResourceLoaderLink( $sk, $this->getModuleMessages(), 'messages' );
+
                // Modules - let the client calculate dependencies and batch requests as it likes
                if ( $this->getModules() ) {
                        $modules = FormatJson::encode( $this->getModules() );
@@ -2417,7 +2444,7 @@ class OutputPage {
                                "if ( window.mediaWiki ) { mediaWiki.loader.load( {$modules} ); mediaWiki.loader.go(); }"
                        ) . "\n";
                }
-               
+
                // Add user JS if enabled - trying to load user.options as a bundle if possible
                $userOptionsAdded = false;
                if ( $this->isUserJsAllowed() && $wgUser->isLoggedIn() ) {
@@ -2434,12 +2461,12 @@ class OutputPage {
                        $scripts .= $this->makeResourceLoaderLink( $sk, 'user.options', 'scripts' );
                }
                $scripts .= "\n" . $this->mScripts;
-               
+
                // Add site JS if enabled
                if ( $wgUseSiteJs ) {
                        $scripts .= $this->makeResourceLoaderLink( $sk, 'site', 'scripts' );
                }
-               
+
                return $scripts;
        }
 
@@ -2487,8 +2514,8 @@ class OutputPage {
        /**
         * @return string HTML tag links to be put in the header.
         */
-       public function getHeadLinks( $sk ) {
-               global $wgFeed, $wgRequest, $wgResourceLoaderDebug;
+       public function getHeadLinks( Skin $sk ) {
+               global $wgFeed;
 
                // Ideally this should happen earlier, somewhere. :P
                $this->addDefaultMeta();
@@ -2558,17 +2585,8 @@ class OutputPage {
                        }
                }
 
-               // Support individual script requests in debug mode
-               if ( $wgRequest->getFuzzyBool( 'debug', $wgResourceLoaderDebug ) ) {
-                       foreach ( $this->getModuleStyles() as $name ) {
-                               $tags[] = $this->makeResourceLoaderLink( $sk, $name, 'styles' );
-                       }
-               } else {
-                       if ( count( $this->getModuleStyles() ) ) {
-                               $tags[] = $this->makeResourceLoaderLink( $sk, $this->getModuleStyles(), 'styles' );
-                       }
-               }
-               
+               $tags[] = $this->makeResourceLoaderLink( $sk, $this->getModuleStyles(), 'styles' );
+
                return implode( "\n", $tags );
        }