getTitle()->isRedirect() && // User has the 'visualeditor-enable' preference set $skin->getUser()->getOption( 'visualeditor-enable' ) && in_array( $skin->getSkinName(), self::$supportedSkins ) && ( // Article in the VisualEditor namespace in_array( $skin->getTitle()->getNamespace(), $wgVisualEditorNamespaces ) || // Special page action for an article in the VisualEditor namespace in_array( $skin->getRelevantTitle()->getNamespace(), $wgVisualEditorNamespaces ) ) && // Only use VisualEditor if the page is wikitext, not CSS/JS $skin->getTitle()->getContentModel() === CONTENT_MODEL_WIKITEXT ) { $output->addModules( array( 'ext.visualEditor.viewPageTarget' ) ); } return true; } public static function onGetPreferences( $user, &$preferences ) { $preferences['visualeditor-enable'] = array( 'type' => 'toggle', 'label-message' => 'visualeditor-preference-enable', 'section' => 'editing/beta' ); return true; } public static function onListDefinedTags( &$tags ) { $tags[] = 'visualeditor'; return true; } /** * Adds extra variables to the page config. */ public static function onMakeGlobalVariablesScript( array &$vars, OutputPage $out ) { global $wgStylePath, $wgContLang; $vars['wgVisualEditor'] = array( 'isPageWatched' => $out->getUser()->isWatched( $out->getTitle() ), 'pageLanguageCode' => $out->getTitle()->getPageLanguage()->getHtmlCode(), 'pageLanguageDir' => $out->getTitle()->getPageLanguage()->getDir(), // Same as in Linker.php 'magnifyClipIconURL' => $wgStylePath . '/common/images/magnify-clip' . ( $wgContLang->isRTL() ? '-rtl' : '' ) . '.png' ); return true; } /** * Adds extra variables to the global config */ public static function onResourceLoaderGetConfigVars( array &$vars ) { global $wgVisualEditorEnableSectionEditLinks, $wgVisualEditorParsoidProblemReportURL, $wgVisualEditorParsoidURL, $wgVisualEditorEnableExperimentalCode, $wgVisualEditorTabLayout; $vars['wgVisualEditorConfig'] = array( 'enableSectionEditLinks' => $wgVisualEditorEnableSectionEditLinks, 'reportProblemURL' => $wgVisualEditorParsoidProblemReportURL !== null ? $wgVisualEditorParsoidProblemReportURL : "$wgVisualEditorParsoidURL/_bugs/", 'enableExperimentalCode' => $wgVisualEditorEnableExperimentalCode, 'tabLayout' => $wgVisualEditorTabLayout, ); return true; } public static function onResourceLoaderTestModules( array &$testModules, ResourceLoader &$resourceLoader ) { $testModules['qunit']['ext.visualEditor.test'] = array( 'scripts' => array( // QUnit plugin 've.qunit.js', // VisualEditor Tests 've.test.js', 've.example.js', 've.Document.test.js', 've.Element.test.js', 've.Node.test.js', 've.BranchNode.test.js', 've.LeafNode.test.js', 've.Factory.test.js', // VisualEditor DataModel Tests 'dm/ve.dm.example.js', 'dm/ve.dm.AnnotationSet.test.js', 'dm/ve.dm.NodeFactory.test.js', 'dm/ve.dm.Node.test.js', 'dm/ve.dm.Converter.test.js', 'dm/ve.dm.BranchNode.test.js', 'dm/ve.dm.LeafNode.test.js', 'dm/ve.dm.LinearData.test.js', 'dm/nodes/ve.dm.TextNode.test.js', 'dm/nodes/ve.dm.MWTemplateNode.test.js', 'dm/ve.dm.Document.test.js', 'dm/ve.dm.DocumentSynchronizer.test.js', 'dm/ve.dm.IndexValueStore.test.js', 'dm/ve.dm.InternalList.test.js', 'dm/ve.dm.Transaction.test.js', 'dm/ve.dm.TransactionProcessor.test.js', 'dm/ve.dm.Surface.test.js', 'dm/ve.dm.SurfaceFragment.test.js', 'dm/ve.dm.ModelRegistry.test.js', 'dm/ve.dm.MetaList.test.js', 'dm/ve.dm.Model.test.js', 'dm/lineardata/ve.dm.ElementLinearData.test.js', 'dm/lineardata/ve.dm.MetaLinearData.test.js', // VisualEditor ContentEditable Tests 'ce/ve.ce.test.js', 'ce/ve.ce.Document.test.js', 'ce/ve.ce.NodeFactory.test.js', 'ce/ve.ce.Node.test.js', 'ce/ve.ce.BranchNode.test.js', 'ce/ve.ce.ContentBranchNode.test.js', 'ce/ve.ce.LeafNode.test.js', 'ce/nodes/ve.ce.TextNode.test.js', // VisualEditor Actions Tests 'ui/actions/ve.ui.FormatAction.test.js', 'ui/actions/ve.ui.IndentationAction.test.js', 'ui/actions/ve.ui.ListAction.test.js', // VisualEditor initialization Tests 'init/ve.init.Platform.test.js', 'init/mw/targets/ve.init.mw.ViewPageTarget.test.js', ), 'dependencies' => array( 'ext.visualEditor.standalone', 'ext.visualEditor.core', 'ext.visualEditor.experimental', 'ext.visualEditor.viewPageTarget', ), 'localBasePath' => dirname( __FILE__ ) . '/modules/ve/test', 'remoteExtPath' => 'VisualEditor/modules/ve/test', ); return true; } }