Beispiel #1
0
 /**
  * Load information stored in the database about modules.
  *
  * This method grabs modules dependencies from the database and updates modules
  * objects.
  *
  * This is not inside the module code because it is much faster to
  * request all of the information at once than it is to have each module
  * requests its own information. This sacrifice of modularity yields a substantial
  * performance improvement.
  *
  * @param array $moduleNames List of module names to preload information for
  * @param ResourceLoaderContext $context Context to load the information within
  */
 public function preloadModuleInfo(array $moduleNames, ResourceLoaderContext $context)
 {
     if (!$moduleNames) {
         // Or else Database*::select() will explode, plus it's cheaper!
         return;
     }
     $dbr = wfGetDB(DB_SLAVE);
     $skin = $context->getSkin();
     $lang = $context->getLanguage();
     // Batched version of ResourceLoaderModule::getFileDependencies
     $vary = "{$skin}|{$lang}";
     $res = $dbr->select('module_deps', array('md_module', 'md_deps'), array('md_module' => $moduleNames, 'md_skin' => $vary), __METHOD__);
     // Prime in-object cache for file dependencies
     $modulesWithDeps = array();
     foreach ($res as $row) {
         $module = $this->getModule($row->md_module);
         if ($module) {
             $module->setFileDependencies($context, ResourceLoaderModule::expandRelativePaths(FormatJson::decode($row->md_deps, true)));
             $modulesWithDeps[] = $row->md_module;
         }
     }
     // Register the absence of a dependency row too
     foreach (array_diff($moduleNames, $modulesWithDeps) as $name) {
         $module = $this->getModule($name);
         if ($module) {
             $this->getModule($name)->setFileDependencies($context, array());
         }
     }
     // Prime in-object cache for message blobs for modules with messages
     $modules = array();
     foreach ($moduleNames as $name) {
         $module = $this->getModule($name);
         if ($module && $module->getMessages()) {
             $modules[$name] = $module;
         }
     }
     $store = $this->getMessageBlobStore();
     $blobs = $store->getBlobs($modules, $lang);
     foreach ($blobs as $name => $blob) {
         $modules[$name]->setMessageBlob($blob, $lang);
     }
 }
 /**
  * Get the definition summary for this module.
  *
  * @param ResourceLoaderContext $context
  * @return array
  */
 public function getDefinitionSummary(ResourceLoaderContext $context)
 {
     global $IP;
     $summary = parent::getDefinitionSummary($context);
     $summary[] = ['vars' => $this->getConfigSettings($context), 'wgLegacyJavaScriptGlobals' => $this->getConfig()->get('LegacyJavaScriptGlobals'), 'moduleHashes' => $this->getAllModuleHashes($context), 'fileMtimes' => [filemtime("{$IP}/resources/src/startup.js")]];
     return $summary;
 }
 /**
  * Get the definition summary for this module.
  *
  * @param ResourceLoaderContext $context
  * @return array
  */
 public function getDefinitionSummary(ResourceLoaderContext $context)
 {
     $summary = parent::getDefinitionSummary($context);
     $options = array();
     foreach (array('scripts', 'debugScripts', 'loaderScripts', 'styles', 'languageScripts', 'skinScripts', 'skinStyles', 'messages', 'templates', 'skipFunction', 'debugRaw', 'raw') as $member) {
         $options[$member] = $this->{$member};
     }
     $summary[] = array('options' => $options, 'fileHashes' => $this->getFileHashes($context), 'msgBlobMtime' => $this->getMsgBlobMtime($context->getLanguage()));
     return $summary;
 }
 /**
  * @param ResourceLoaderContext $context
  * @return array
  */
 public function getScriptURLsForDebug(ResourceLoaderContext $context)
 {
     // Bypass file module urls
     return ResourceLoaderModule::getScriptURLsForDebug($context);
 }
 /**
  * Generate the message blob for a given module in a given language.
  *
  * @param ResourceLoaderModule $module
  * @param string $lang Language code
  * @return string JSON object
  */
 private function generateMessageBlob(ResourceLoaderModule $module, $lang)
 {
     $messages = array();
     foreach ($module->getMessages() as $key) {
         $messages[$key] = wfMessage($key)->inLanguage($lang)->plain();
     }
     return FormatJson::encode((object) $messages);
 }
 /**
  * Generate the message blob for a given module in a given language.
  *
  * @param ResourceLoaderModule $module
  * @param string $lang Language code
  * @return string JSON blob
  */
 private function generateMessageBlob(ResourceLoaderModule $module, $lang)
 {
     $messages = [];
     foreach ($module->getMessages() as $key) {
         $messages[$key] = $this->fetchMessage($key, $lang);
     }
     $json = FormatJson::encode((object) $messages);
     if ($json === false) {
         $this->logger->warning('Failed to encode message blob for {module} ({lang})', ['module' => $module->getName(), 'lang' => $lang]);
         $json = '{}';
     }
     return $json;
 }
 /**
  * @return JSParser
  */
 protected static function javaScriptParser()
 {
     if (!self::$jsParser) {
         self::$jsParser = new JSParser();
     }
     return self::$jsParser;
 }
 /**
  * Generate the message blob for a given module in a given language.
  *
  * @param ResourceLoaderModule $module
  * @param string $lang Language code
  * @return string JSON blob
  */
 private function generateMessageBlob(ResourceLoaderModule $module, $lang)
 {
     $messages = array();
     foreach ($module->getMessages() as $key) {
         $messages[$key] = $this->fetchMessage($key, $lang);
     }
     return FormatJson::encode((object) $messages);
 }
Beispiel #9
0
 /**
  * Generate the message blob for a given module in a given language.
  *
  * @param $module ResourceLoaderModule object
  * @param $lang String: language code
  * @return String: JSON object
  */
 private static function generateMessageBlob(ResourceLoaderModule $module, $lang)
 {
     $messages = array();
     foreach ($module->getMessages() as $key) {
         $messages[$key] = wfMsgExt($key, array('language' => $lang));
     }
     return FormatJson::encode((object) $messages);
 }
 public function getModifiedTime(ResourceLoaderContext $context)
 {
     return max($this->getGitHeadModifiedTime($context), $this->getMsgBlobMtime($context->getLanguage()), ResourceLoaderModule::safeFilemtime(__FILE__));
 }
 public function isPositionDefault()
 {
     $this->loadFromDefinition();
     return parent::isPositionDefault();
 }
 /**
  * Get the definition summary for this module.
  *
  * @param ResourceLoaderContext $context
  * @return array
  */
 public function getDefinitionSummary(ResourceLoaderContext $context)
 {
     $this->loadFromDefinition();
     $summary = parent::getDefinitionSummary($context);
     $options = [];
     foreach (['localBasePath', 'images', 'variants', 'prefix', 'selectorWithoutVariant', 'selectorWithVariant'] as $member) {
         $options[$member] = $this->{$member};
     }
     $summary[] = ['options' => $options, 'fileHashes' => $this->getFileHashes($context)];
     return $summary;
 }
 /**
  * @param $context ResourceLoaderContext
  * @return array
  */
 public function getDefinitionSummary(ResourceLoaderContext $context)
 {
     $r = parent::getDefinitionSummary($context);
     return $r + array('class' => get_class($this), 'lang' => $this->lang, 'geshi' => GESHI_VERSION);
 }
 /**
  * Get the definition summary for this module.
  *
  * @param ResourceLoaderContext $context
  * @return array
  */
 public function getDefinitionSummary(ResourceLoaderContext $context)
 {
     $summary = parent::getDefinitionSummary($context);
     foreach (array('scripts', 'debugScripts', 'loaderScripts', 'styles', 'languageScripts', 'skinScripts', 'skinStyles', 'dependencies', 'messages', 'targets', 'templates', 'group', 'position', 'skipFunction', 'localBasePath', 'remoteBasePath', 'debugRaw', 'raw') as $member) {
         $summary[$member] = $this->{$member};
     }
     return $summary;
 }
 /**
  * Get flag value
  *
  * @param $name string Parameter name
  */
 protected function reallyGetFlag($name)
 {
     if ($name == 'sass') {
         $styles = array();
         if (!empty($this->styles)) {
             $styles = array_merge($styles, (array) $this->styles);
         }
         if (!empty($this->skinStyles)) {
             foreach ($this->skinStyles as $skin => $skinStyles) {
                 if (!empty($skinStyles)) {
                     $styles = array_merge($styles, (array) $skinStyles);
                 }
             }
         }
         $requireSass = false;
         foreach ($styles as $k => $style) {
             if (is_array($style)) {
                 $style = $k;
             }
             if (self::getFileType($style) == self::FILE_TYPE_SASS) {
                 $requireSass = true;
             }
         }
         return $requireSass;
     }
     return parent::reallyGetFlag($name);
 }
 /**
  * Get the definition summary for this module.
  *
  * @param ResourceLoaderContext $context
  * @return array
  */
 public function getDefinitionSummary(ResourceLoaderContext $context)
 {
     $this->loadFromDefinition();
     $summary = parent::getDefinitionSummary($context);
     foreach (['localBasePath', 'images', 'variants', 'prefix', 'selectorWithoutVariant', 'selectorWithVariant'] as $member) {
         $summary[$member] = $this->{$member};
     }
     return $summary;
 }
 /**
  * Get the definition summary for this module.
  *
  * @param ResourceLoaderContext $context
  * @return array
  */
 public function getDefinitionSummary(ResourceLoaderContext $context)
 {
     $summary = parent::getDefinitionSummary($context);
     $options = [];
     foreach (['scripts', 'debugScripts', 'styles', 'languageScripts', 'skinScripts', 'skinStyles', 'messages', 'templates', 'skipFunction', 'debugRaw', 'raw'] as $member) {
         $options[$member] = $this->{$member};
     }
     $summary[] = ['options' => $options, 'fileHashes' => $this->getFileHashes($context), 'messageBlob' => $this->getMessageBlob($context)];
     return $summary;
 }
 /**
  * @param ResourceLoaderContext $context
  * @return array
  */
 public function getDefinitionSummary(ResourceLoaderContext $context)
 {
     $summary = parent::getDefinitionSummary($context);
     $summary[] = array('pages' => $this->getPages($context), 'titleInfo' => $this->getTitleInfo($context));
     return $summary;
 }
Beispiel #19
0
 /**
  * Load information stored in the database about modules.
  *
  * This method grabs modules dependencies from the database and updates modules
  * objects.
  *
  * This is not inside the module code because it is much faster to
  * request all of the information at once than it is to have each module
  * requests its own information. This sacrifice of modularity yields a substantial
  * performance improvement.
  *
  * @param array $modules List of module names to preload information for
  * @param ResourceLoaderContext $context Context to load the information within
  */
 public function preloadModuleInfo(array $modules, ResourceLoaderContext $context)
 {
     if (!count($modules)) {
         // Or else Database*::select() will explode, plus it's cheaper!
         return;
     }
     $dbr = wfGetDB(DB_SLAVE);
     $skin = $context->getSkin();
     $lang = $context->getLanguage();
     // Batched version of ResourceLoaderModule::getFileDependencies
     $vary = "{$skin}|{$lang}";
     $res = $dbr->select('module_deps', array('md_module', 'md_deps'), array('md_module' => $modules, 'md_skin' => $vary), __METHOD__);
     // Prime in-object cache values for each module
     $modulesWithDeps = array();
     foreach ($res as $row) {
         $module = $this->getModule($row->md_module);
         if ($module) {
             $module->setFileDependencies($context, ResourceLoaderModule::expandRelativePaths(FormatJson::decode($row->md_deps, true)));
             $modulesWithDeps[] = $row->md_module;
         }
     }
     // Register the absence of a dependency row too
     foreach (array_diff($modules, $modulesWithDeps) as $name) {
         $module = $this->getModule($name);
         if ($module) {
             $this->getModule($name)->setFileDependencies($context, array());
         }
     }
     // Get message blob mtimes. Only do this for modules with messages
     $modulesWithMessages = array();
     foreach ($modules as $name) {
         $module = $this->getModule($name);
         if ($module && count($module->getMessages())) {
             $modulesWithMessages[] = $name;
         }
     }
     $modulesWithoutMessages = array_flip($modules);
     // Will be trimmed down by the loop below
     if (count($modulesWithMessages)) {
         $res = $dbr->select('msg_resource', array('mr_resource', 'mr_timestamp'), array('mr_resource' => $modulesWithMessages, 'mr_lang' => $lang), __METHOD__);
         foreach ($res as $row) {
             $module = $this->getModule($row->mr_resource);
             if ($module) {
                 $module->setMsgBlobMtime($lang, wfTimestamp(TS_UNIX, $row->mr_timestamp));
                 unset($modulesWithoutMessages[$row->mr_resource]);
             }
         }
     }
     foreach (array_keys($modulesWithoutMessages) as $name) {
         $module = $this->getModule($name);
         if ($module) {
             $module->setMsgBlobMtime($lang, 1);
         }
     }
 }
 /**
  * @param ResourceLoaderContext $context
  * @return array
  */
 public function getStyleURLsForDebug(ResourceLoaderContext $context)
 {
     if ($this->hasGeneratedStyles) {
         // Do the default behaviour of returning a url back to load.php
         // but with only=styles.
         return parent::getStyleURLsForDebug($context);
     }
     // Our module consists entirely of real css files,
     // in debug mode we can load those directly.
     $urls = array();
     foreach ($this->getStyleFiles($context) as $mediaType => $list) {
         $urls[$mediaType] = array();
         foreach ($list as $file) {
             $urls[$mediaType][] = $this->getRemotePath($file);
         }
     }
     return $urls;
 }
 public function getDefinitionSummary(ResourceLoaderContext $context)
 {
     $summary = parent::getDefinitionSummary($context);
     $summary[] = array('script' => $this->getScript($context));
     return $summary;
 }
 /**
  * Don't break debug mode by only showing file URLs
  */
 public function getScriptURLsForDebug(ResourceLoaderContext $context)
 {
     return ResourceLoaderModule::getScriptURLsForDebug($context);
 }