ResourceLoaderFileModule: Support fallback in 'languageScripts'
authorKunal Mehta <legoktm@gmail.com>
Fri, 29 Aug 2014 17:13:21 +0000 (10:13 -0700)
committerKunal Mehta <legoktm@gmail.com>
Thu, 25 Sep 2014 17:51:16 +0000 (10:51 -0700)
Bug: 58139
Change-Id: Idd7657aa48a9eb2b075a85f77e066b425f330890

RELEASE-NOTES-1.25
includes/resourceloader/ResourceLoaderFileModule.php

index 9dbf896..03009bc 100644 (file)
@@ -11,6 +11,8 @@ production.
 === Configuration changes in 1.25 ===
 
 === New features in 1.25 ===
+* (bug 58139) ResourceLoaderFileModule now supports language fallback
+  for 'languageScripts'.
 
 === Bug fixes in 1.25 ===
 
index a77e8f7..7bbc9bb 100644 (file)
@@ -536,7 +536,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        $files,
                        $this->scripts,
                        $context->getDebug() ? $this->debugScripts : array(),
-                       self::tryForKey( $this->languageScripts, $context->getLanguage() ),
+                       $this->getLanguageScripts( $context->getLanguage() ),
                        self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' ),
                        $this->loaderScripts
                );
@@ -700,7 +700,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        protected function getScriptFiles( ResourceLoaderContext $context ) {
                $files = array_merge(
                        $this->scripts,
-                       self::tryForKey( $this->languageScripts, $context->getLanguage() ),
+                       $this->getLanguageScripts( $context->getLanguage() ),
                        self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' )
                );
                if ( $context->getDebug() ) {
@@ -710,6 +710,29 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return array_unique( $files, SORT_REGULAR );
        }
 
+       /**
+        * Get the set of language scripts for the given language,
+        * possibly using a fallback language.
+        *
+        * @param string $lang
+        * @return array
+        */
+       private function getLanguageScripts( $lang ) {
+               $scripts = self::tryForKey( $this->languageScripts, $lang );
+               if ( $scripts ) {
+                       return $scripts;
+               }
+               $fallbacks = Language::getFallbacksFor( $lang );
+               foreach ( $fallbacks as $lang ) {
+                       $scripts = self::tryForKey( $this->languageScripts, $lang );
+                       if ( $scripts ) {
+                               return $scripts;
+                       }
+               }
+
+               return array();
+       }
+
        /**
         * Get a list of file paths for all styles in this module, in order of proper inclusion.
         *