/**
  * EditPage::showEditForm:initial hook
  * Adds the modules to the edit form
  */
 public static function addModules(&$toolbar)
 {
     global $wgOut, $wgUser, $wgJsMimeType;
     global $wgWikiEditorModules, $wgUsabilityInitiativeResourceMode;
     // Modules
     $preferences = array();
     $enabledModules = array();
     $modules = $wgWikiEditorModules;
     $modules['global'] = true;
     foreach ($modules as $module => $enable) {
         if ($enable['global'] || $enable['user'] && isset(self::$modules[$module]['preferences']['enable']) && $wgUser->getOption(self::$modules[$module]['preferences']['enable']['key']) || $module == 'global') {
             if ($module !== 'global') {
                 UsabilityInitiativeHooks::initialize();
             }
             $enabledModules[$module] = true;
             // Messages
             if (isset(self::$modules[$module]['i18n'], self::$modules[$module]['messages'])) {
                 wfLoadExtensionMessages(self::$modules[$module]['i18n']);
                 UsabilityInitiativeHooks::addMessages(self::$modules[$module]['messages']);
             }
             // Variables
             if (isset(self::$modules[$module]['variables'])) {
                 $variables = array();
                 foreach (self::$modules[$module]['variables'] as $variable) {
                     global ${$variable};
                     $variables[$variable] = ${$variable};
                 }
                 UsabilityInitiativeHooks::addVariables($variables);
             }
             // Preferences
             if (isset(self::$modules[$module]['preferences'])) {
                 foreach (self::$modules[$module]['preferences'] as $name => $preference) {
                     if (!isset($preferences[$module])) {
                         $preferences[$module] = array();
                     }
                     $preferences[$module][$name] = $wgUser->getOption($preference['key']);
                 }
             }
         } else {
             $enabledModules[$module] = false;
         }
     }
     // Load global messages
     wfLoadExtensionMessages('WikiEditor');
     UsabilityInitiativeHooks::addMessages(self::$messages);
     // Add all scripts
     foreach (self::$scripts[$wgUsabilityInitiativeResourceMode] as $script) {
         UsabilityInitiativeHooks::addScript(basename(dirname(__FILE__)) . '/' . $script['src'], $script['version']);
     }
     // Preferences (maybe the UsabilityInitiative class could do most of this for us?)
     $wgOut->addScript(Xml::tags('script', array('type' => $wgJsMimeType), 'var wgWikiEditorPreferences = ' . FormatJson::encode($preferences, true) . ";\n" . 'var wgWikiEditorEnabledModules = ' . FormatJson::encode($enabledModules, true) . ';'));
     return true;
 }
 /**
  * BeforePageDisplay hook
  * Adds the modules to the edit form
  */
 public static function addModules()
 {
     global $wgUser, $wgJsMimeType, $wgOut;
     global $wgVectorModules, $wgUsabilityInitiativeResourceMode;
     // Don't load Vector modules for non-Vector skins
     // They won't work but will throw unused JS in the client's face
     // Using instanceof to catch any skins subclassing Vector
     if (!$wgUser->getSkin() instanceof SkinVector) {
         return true;
     }
     // Modules
     $preferences = array();
     $enabledModules = array();
     foreach ($wgVectorModules as $module => $enable) {
         if ($enable['global'] || $enable['user'] && isset(self::$modules[$module]['preferences']['enable']) && $wgUser->getOption(self::$modules[$module]['preferences']['enable']['key'])) {
             UsabilityInitiativeHooks::initialize();
             $enabledModules[$module] = true;
             // Messages
             if (isset(self::$modules[$module]['i18n'], self::$modules[$module]['messages'])) {
                 wfLoadExtensionMessages(self::$modules[$module]['i18n']);
                 UsabilityInitiativeHooks::addMessages(self::$modules[$module]['messages']);
             }
             // Variables
             if (isset(self::$modules[$module]['variables'])) {
                 $variables = array();
                 foreach (self::$modules[$module]['variables'] as $variable) {
                     global ${$variable};
                     $variables[$variable] = ${$variable};
                 }
                 UsabilityInitiativeHooks::addVariables($variables);
             }
             // Preferences
             if (isset(self::$modules[$module]['preferences'])) {
                 foreach (self::$modules[$module]['preferences'] as $name => $preference) {
                     if (!isset($preferences[$module])) {
                         $preferences[$module] = array();
                     }
                     $preferences[$module][$name] = $wgUser->getOption($preference['key']);
                 }
             }
         } else {
             $enabledModules[$module] = false;
         }
     }
     // Add all scripts
     foreach (self::$scripts[$wgUsabilityInitiativeResourceMode] as $script) {
         UsabilityInitiativeHooks::addScript(basename(dirname(__FILE__)) . '/' . $script['src'], $script['version']);
     }
     // Preferences (maybe the UsabilityInitiative class could do most of this for us?)
     $wgOut->addScript(Xml::tags('script', array('type' => $wgJsMimeType), 'var wgVectorPreferences = ' . FormatJson::encode($preferences, true) . ";\n" . 'var wgVectorEnabledModules = ' . FormatJson::encode($enabledModules, true) . ';'));
     return true;
 }