Merge "(bug 36329) Fix accesskey tooltip for Firefox 14 on Mac"
[lhc/web/wiklou.git] / includes / resourceloader / ResourceLoaderContext.php
index f81f7ca..0e96c6c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Context for resource loader modules.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -21,7 +23,7 @@
  */
 
 /**
- * Object passed around to modules which contains information about the state 
+ * Object passed around to modules which contains information about the state
  * of a specific loader request
  */
 class ResourceLoaderContext {
@@ -39,10 +41,15 @@ class ResourceLoaderContext {
        protected $only;
        protected $version;
        protected $hash;
+       protected $raw;
 
        /* Methods */
 
-       public function __construct( ResourceLoader $resourceLoader, WebRequest $request ) {
+       /**
+        * @param $resourceLoader ResourceLoader
+        * @param $request WebRequest
+        */
+       public function __construct( $resourceLoader, WebRequest $request ) {
                global $wgDefaultSkin, $wgResourceLoaderDebug;
 
                $this->resourceLoader = $resourceLoader;
@@ -58,22 +65,26 @@ class ResourceLoaderContext {
                $this->debug     = $request->getFuzzyBool( 'debug', $wgResourceLoaderDebug );
                $this->only      = $request->getVal( 'only' );
                $this->version   = $request->getVal( 'version' );
+               $this->raw       = $request->getFuzzyBool( 'raw' );
 
-               if ( !$this->skin ) {
+               $skinnames = Skin::getSkinNames();
+               // If no skin is specified, or we don't recognize the skin, use the default skin
+               if ( !$this->skin || !isset( $skinnames[$this->skin] ) ) {
                        $this->skin = $wgDefaultSkin;
                }
        }
-       
+
        /**
         * Expand a string of the form jquery.foo,bar|jquery.ui.baz,quux to
         * an array of module names like array( 'jquery.foo', 'jquery.bar',
-        * 'jquery.ui.baz', 'jquery.ui.quux' ) Also translating ! to .
+        * 'jquery.ui.baz', 'jquery.ui.quux' )
         * @param $modules String Packed module name list
         * @return array of module names
         */
        public static function expandModuleNames( $modules ) {
                $retval = array();
-               $modules = str_replace( "!", ".", $modules ); # bug 28840 - IE is stupid.
+               // For backwards compatibility with an earlier hack, replace ! with .
+               $modules = str_replace( '!', '.', $modules );
                $exploded = explode( '|', $modules );
                foreach ( $exploded as $group ) {
                        if ( strpos( $group, ',' ) === false ) {
@@ -99,18 +110,38 @@ class ResourceLoaderContext {
                return $retval;
        }
 
+       /**
+        * Return a dummy ResourceLoaderContext object suitable for passing into things that don't "really" need a context
+        * @return ResourceLoaderContext
+        */
+       public static function newDummyContext() {
+               return new self( null, new FauxRequest( array() ) );
+       }
+
+       /**
+        * @return ResourceLoader
+        */
        public function getResourceLoader() {
                return $this->resourceLoader;
        }
-       
+
+       /**
+        * @return WebRequest
+        */
        public function getRequest() {
                return $this->request;
        }
 
+       /**
+        * @return array
+        */
        public function getModules() {
                return $this->modules;
        }
 
+       /**
+        * @return string
+        */
        public function getLanguage() {
                if ( $this->language === null ) {
                        global $wgLang;
@@ -122,53 +153,90 @@ class ResourceLoaderContext {
                return $this->language;
        }
 
+       /**
+        * @return string
+        */
        public function getDirection() {
                if ( $this->direction === null ) {
                        $this->direction = $this->request->getVal( 'dir' );
                        if ( !$this->direction ) {
-                               global $wgContLang;
-                               $this->direction = $wgContLang->getDir();
+                               # directionality based on user language (see bug 6100)
+                               $this->direction = Language::factory( $this->getLanguage() )->getDir();
                        }
                }
                return $this->direction;
        }
 
+       /**
+        * @return string|null
+        */
        public function getSkin() {
                return $this->skin;
        }
 
+       /**
+        * @return string|null
+        */
        public function getUser() {
                return $this->user;
        }
 
+       /**
+        * @return bool
+        */
        public function getDebug() {
                return $this->debug;
        }
 
+       /**
+        * @return String|null
+        */
        public function getOnly() {
                return $this->only;
        }
 
+       /**
+        * @return String|null
+        */
        public function getVersion() {
                return $this->version;
        }
 
+       /**
+        * @return bool
+        */
+       public function getRaw() {
+               return $this->raw;
+       }
+
+       /**
+        * @return bool
+        */
        public function shouldIncludeScripts() {
                return is_null( $this->only ) || $this->only === 'scripts';
        }
 
+       /**
+        * @return bool
+        */
        public function shouldIncludeStyles() {
                return is_null( $this->only ) || $this->only === 'styles';
        }
 
+       /**
+        * @return bool
+        */
        public function shouldIncludeMessages() {
                return is_null( $this->only ) || $this->only === 'messages';
        }
 
+       /**
+        * @return string
+        */
        public function getHash() {
                if ( !isset( $this->hash ) ) {
                        $this->hash = implode( '|', array(
-                               $this->getLanguage(), $this->getDirection(), $this->skin, $this->user, 
+                               $this->getLanguage(), $this->getDirection(), $this->skin, $this->user,
                                $this->debug, $this->only, $this->version
                        ) );
                }