__FILE__, 'name' => 'VisualEditor', 'author' => array( 'Trevor Parscal', 'Inez KorczyƄski', 'Roan Kattouw', 'Neil Kandalgaonkar', 'Gabriel Wicke', 'Brion Vibber', 'Christian Williams', 'Rob Moen', 'Subramanya Sastry', 'Timo Tijhof', ), 'version' => '0.1.0', 'url' => 'https://www.mediawiki.org/wiki/Extension:VisualEditor', 'descriptionmsg' => 'visualeditor-desc', ); $dir = dirname( __FILE__ ) . '/'; $wgExtensionMessagesFiles['VisualEditor'] = $dir . 'VisualEditor.i18n.php'; $wgVisualEditorResourceTemplate = array( 'localBasePath' => dirname( __FILE__ ) . '/modules', 'remoteExtPath' => 'VisualEditor/modules', 'group' => 'ext.visualEditor', ); $wgResourceModules += array( 'rangy' => $wgVisualEditorResourceTemplate + array( 'scripts' => array( 'rangy/rangy-core.js', 'rangy/rangy-position.js', ), ), // Alias for backwards compat, safe to remove after 'ext.visualEditor.editPageInit' => $wgVisualEditorResourceTemplate + array( 'dependencies' => array( 'ext.visualEditor.viewPageTarget', ) ), 'ext.visualEditor.viewPageTarget.icons-raster' => $wgVisualEditorResourceTemplate + array( 'styles' => array( 've/init/mw/styles/ve.init.mw.ViewPageTarget.Icons-raster.css', ), ), 'ext.visualEditor.viewPageTarget.icons-vector' => $wgVisualEditorResourceTemplate + array( 'styles' => array( 've/init/mw/styles/ve.init.mw.ViewPageTarget.Icons-vector.css', ), ), 'ext.visualEditor.viewPageTarget' => $wgVisualEditorResourceTemplate + array( 'scripts' => array( 've/init/mw/ve.init.mw.js', 've/init/mw/ve.init.mw.Platform.js', 've/init/mw/ve.init.mw.Target.js', 've/init/mw/targets/ve.init.mw.ViewPageTarget.js', ), 'styles' => array( 've/init/mw/styles/ve.init.mw.ViewPageTarget.css', ), 'skinStyles' => array( 'vector' => array( 've/init/mw/styles/ve.init.mw.ViewPageTarget-vector.css', 've/init/mw/styles/ve.init.mw.ViewPageTarget-vector-hd.css' => array( 'media' => 'screen and (min-width: 982px)' ), ), 'apex' => array( 've/init/mw/styles/ve.init.mw.ViewPageTarget-apex.css', ), 'monobook' => array( 've/init/mw/styles/ve.init.mw.ViewPageTarget-monobook.css', ) ), 'dependencies' => array( 'ext.visualEditor.base', 'mediawiki.util', 'mediawiki.feedback', 'mediawiki.Uri', 'mediawiki.Title', 'jquery.placeholder', 'jquery.client', 'jquery.byteLimit', 'jquery.byteLength' ), 'messages' => array( 'minoredit', 'savearticle', 'watchthis', 'tooltip-save', 'copyrightwarning', 'copyrightpage', 'edit', 'create', 'accesskey-ca-edit', 'tooltip-ca-edit', 'viewsource', 'visualeditor-notification-saved', 'visualeditor-notification-created', 'visualeditor-ca-editsource', 'visualeditor-loadwarning', 'visualeditor-feedback-prompt', 'visualeditor-feedback-dialog-title', 'visualeditor-editsummary', ), ), 'ext.visualEditor.base' => $wgVisualEditorResourceTemplate + array( 'scripts' => array( // ve 've/ve.js', 've/ve.EventEmitter.js', 've/init/ve.init.js', 've/init/ve.init.Platform.js', ), 'dependencies' => array( 'jquery.json', ), 'debugScripts' => array( 've/ve.debug.js', ), ), 'ext.visualEditor.specialMessages' => $wgVisualEditorResourceTemplate + array( 'class' => 'VisualEditorMessagesModule' ), 'ext.visualEditor.core' => $wgVisualEditorResourceTemplate + array( 'scripts' => array( // ve 've/ve.Factory.js', 've/ve.Position.js', 've/ve.Range.js', 've/ve.Node.js', 've/ve.BranchNode.js', 've/ve.LeafNode.js', 've/ve.Surface.js', 've/ve.Document.js', 've/ve.OrderedHashSet.js', 've/ve.AnnotationSet.js', // dm 've/dm/ve.dm.js', 've/dm/ve.dm.NodeFactory.js', 've/dm/ve.dm.AnnotationFactory.js', 've/dm/ve.dm.Node.js', 've/dm/ve.dm.BranchNode.js', 've/dm/ve.dm.LeafNode.js', 've/dm/ve.dm.Annotation.js', 've/dm/ve.dm.TransactionProcessor.js', 've/dm/ve.dm.Transaction.js', 've/dm/ve.dm.Surface.js', 've/dm/ve.dm.SurfaceFragment.js', 've/dm/ve.dm.Document.js', 've/dm/ve.dm.DocumentSynchronizer.js', 've/dm/ve.dm.Converter.js', 've/dm/nodes/ve.dm.AlienInlineNode.js', 've/dm/nodes/ve.dm.AlienBlockNode.js', 've/dm/nodes/ve.dm.BreakNode.js', 've/dm/nodes/ve.dm.DefinitionListItemNode.js', 've/dm/nodes/ve.dm.DefinitionListNode.js', 've/dm/nodes/ve.dm.DocumentNode.js', 've/dm/nodes/ve.dm.HeadingNode.js', 've/dm/nodes/ve.dm.ImageNode.js', 've/dm/nodes/ve.dm.ListItemNode.js', 've/dm/nodes/ve.dm.ListNode.js', 've/dm/nodes/ve.dm.MetaBlockNode.js', 've/dm/nodes/ve.dm.MetaInlineNode.js', 've/dm/nodes/ve.dm.ParagraphNode.js', 've/dm/nodes/ve.dm.PreformattedNode.js', 've/dm/nodes/ve.dm.TableCellNode.js', 've/dm/nodes/ve.dm.TableNode.js', 've/dm/nodes/ve.dm.TableRowNode.js', 've/dm/nodes/ve.dm.TableSectionNode.js', 've/dm/nodes/ve.dm.TextNode.js', 've/dm/annotations/ve.dm.LinkAnnotation.js', 've/dm/annotations/ve.dm.TextStyleAnnotation.js', // ce 've/ce/ve.ce.js', 've/ce/ve.ce.NodeFactory.js', 've/ce/ve.ce.Document.js', 've/ce/ve.ce.Node.js', 've/ce/ve.ce.BranchNode.js', 've/ce/ve.ce.LeafNode.js', 've/ce/ve.ce.Surface.js', 've/ce/nodes/ve.ce.AlienInlineNode.js', 've/ce/nodes/ve.ce.AlienBlockNode.js', 've/ce/nodes/ve.ce.BreakNode.js', 've/ce/nodes/ve.ce.DefinitionListItemNode.js', 've/ce/nodes/ve.ce.DefinitionListNode.js', 've/ce/nodes/ve.ce.DocumentNode.js', 've/ce/nodes/ve.ce.HeadingNode.js', 've/ce/nodes/ve.ce.ImageNode.js', 've/ce/nodes/ve.ce.ListItemNode.js', 've/ce/nodes/ve.ce.ListNode.js', 've/ce/nodes/ve.ce.MetaBlockNode.js', 've/ce/nodes/ve.ce.MetaInlineNode.js', 've/ce/nodes/ve.ce.ParagraphNode.js', 've/ce/nodes/ve.ce.PreformattedNode.js', 've/ce/nodes/ve.ce.TableCellNode.js', 've/ce/nodes/ve.ce.TableNode.js', 've/ce/nodes/ve.ce.TableRowNode.js', 've/ce/nodes/ve.ce.TableSectionNode.js', 've/ce/nodes/ve.ce.TextNode.js', // ui 've/ui/ve.ui.js', 've/ui/ve.ui.Inspector.js', 've/ui/ve.ui.Tool.js', 've/ui/ve.ui.Toolbar.js', 've/ui/ve.ui.Context.js', 've/ui/ve.ui.Menu.js', 'jquery/jquery.multiSuggest.js', 've/ui/inspectors/ve.ui.LinkInspector.js', 've/ui/tools/ve.ui.ButtonTool.js', 've/ui/tools/ve.ui.AnnotationButtonTool.js', 've/ui/tools/ve.ui.ClearButtonTool.js', 've/ui/tools/ve.ui.HistoryButtonTool.js', 've/ui/tools/ve.ui.ListButtonTool.js', 've/ui/tools/ve.ui.IndentationButtonTool.js', 've/ui/tools/ve.ui.DropdownTool.js', 've/ui/tools/ve.ui.FormatDropdownTool.js' ), 'styles' => array( // ce 've/ce/styles/ve.ce.DocumentNode.css', 've/ce/styles/ve.ce.Node.css', 've/ce/styles/ve.ce.Surface.css', // ui 've/ui/styles/ve.ui.Context.css', 've/ui/styles/ve.ui.Inspector.css', 've/ui/styles/ve.ui.Menu.css', 've/ui/styles/ve.ui.Surface.css', 've/ui/styles/ve.ui.Toolbar.css', ), 'dependencies' => array( 'jquery', 'rangy', 'ext.visualEditor.base', 'mediawiki.Title', 'jquery.autoEllipsis' ), 'messages' => array( 'visualeditor', 'visualeditor-linkinspector-title', 'visualeditor-linkinspector-label-pagetitle', 'visualeditor-linkinspector-suggest-existing-page', 'visualeditor-linkinspector-suggest-new-page', 'visualeditor-linkinspector-suggest-external-link', 'visualeditor-formatdropdown-title', 'visualeditor-formatdropdown-format-paragraph', 'visualeditor-formatdropdown-format-heading1', 'visualeditor-formatdropdown-format-heading2', 'visualeditor-formatdropdown-format-heading3', 'visualeditor-formatdropdown-format-heading4', 'visualeditor-formatdropdown-format-heading5', 'visualeditor-formatdropdown-format-heading6', 'visualeditor-formatdropdown-format-preformatted', 'visualeditor-annotationbutton-bold-tooltip', 'visualeditor-annotationbutton-italic-tooltip', 'visualeditor-annotationbutton-link-tooltip', 'visualeditor-indentationbutton-indent-tooltip', 'visualeditor-indentationbutton-outdent-tooltip', 'visualeditor-listbutton-number-tooltip', 'visualeditor-listbutton-bullet-tooltip', 'visualeditor-clearbutton-tooltip', 'visualeditor-historybutton-undo-tooltip', 'visualeditor-historybutton-redo-tooltip', 'visualeditor-viewpage-savewarning', 'visualeditor-saveerror', ), ), 'ext.visualEditor.icons-raster' => $wgVisualEditorResourceTemplate + array( 'styles' => array( 've/ui/styles/ve.ui.Icons-raster.css', ), ), 'ext.visualEditor.icons-vector' => $wgVisualEditorResourceTemplate + array( 'styles' => array( 've/ui/styles/ve.ui.Icons-vector.css', ), ), ); /* * VisualEditor Namespace * Using 2500 and 2501 as per registration on mediawiki.org. * * @todo FIXME: Move these demonstration settings out of the extension * (or commented out as example). * * @see https://www.mediawiki.org/wiki/Extension_default_namespaces */ define( 'NS_VISUALEDITOR', 2500 ); define( 'NS_VISUALEDITOR_TALK', 2501 ); $wgExtraNamespaces[NS_VISUALEDITOR] = 'VisualEditor'; $wgExtraNamespaces[NS_VISUALEDITOR_TALK] = 'VisualEditor_talk'; $wgContentNamespaces[] = NS_VISUALEDITOR; $wgContentNamespaces[] = NS_VISUALEDITOR_TALK; // VE Namespace protection $wgNamespaceProtection[NS_VISUALEDITOR] = array( 've-edit' ); $wgGroupPermissions['sysop']['ve-edit'] = true; // Parsoid Wrapper API $wgAutoloadClasses['ApiVisualEditor'] = $dir . 'ApiVisualEditor.php'; $wgAPIModules['ve-parsoid'] = 'ApiVisualEditor'; // Integration Hooks $wgAutoloadClasses['VisualEditorHooks'] = $dir . 'VisualEditor.hooks.php'; $wgHooks['BeforePageDisplay'][] = 'VisualEditorHooks::onBeforePageDisplay'; $wgHooks['MakeGlobalVariablesScript'][] = 'VisualEditorHooks::onMakeGlobalVariablesScript'; $wgHooks['ResourceLoaderTestModules'][] = 'VisualEditorHooks::onResourceLoaderTestModules'; $wgAutoloadClasses['VisualEditorMessagesModule'] = $dir . 'VisualEditorMessagesModule.php';