MediaWiki-Docker/Extension/VisualEditor

From mediawiki.org

This page instructs you to install Extension:VisualEditor inside MediaWiki-Docker. All commands should be run in the directory where you installed MediaWiki. All mentioned files are also located there.

Install MediaWiki-Docker[edit]

Follow the Quickstart instructions at MediaWiki-Docker page. Once MediaWiki is running and available at http://localhost:8080, then continue with instructions on this page.

Clone the repository and its dependencies[edit]

git clone "https://gerrit.wikimedia.org/r/mediawiki/skins/Vector" skins/Vector
git clone "https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor" extensions/VisualEditor

cd extensions/VisualEditor
git submodule update --init

Modify LocalSettings.php[edit]

If not already there, add this to the end of LocalSettings.php.

wfLoadSkin( 'Vector' );
wfLoadExtension( 'VisualEditor' );

$PARSOID_INSTALL_DIR = 'vendor/wikimedia/parsoid'; # bundled copy
#$PARSOID_INSTALL_DIR = '/my/path/to/git/checkout/of/Parsoid';

// For developers: ensure Parsoid is executed from $PARSOID_INSTALL_DIR,
// (not the version included in mediawiki-core by default)
// Must occur *before* wfLoadExtension()
if ( $PARSOID_INSTALL_DIR !== 'vendor/wikimedia/parsoid' ) {
    // AutoLoader::registerNamespaces was added in MW 1.39
    AutoLoader::registerNamespaces( [
        // Keep this in sync with the "autoload" clause in
        // $PARSOID_INSTALL_DIR/composer.json
        'Wikimedia\\Parsoid\\' => "$PARSOID_INSTALL_DIR/src",
    ] );
}

wfLoadExtension( 'Parsoid', "$PARSOID_INSTALL_DIR/extension.json" );

# Manually configure Parsoid
$wgVisualEditorParsoidAutoConfig = false;
$wgParsoidSettings = [
    'useSelser' => true,
    'rtTestMode' => false,
    'linting' => false,
];
$wgVirtualRestConfig['modules']['parsoid'] = [
    'url' => 'http://host.docker.internal:8080' . $wgScriptPath . '/rest.php',
];

Run maintenance scripts[edit]

docker compose exec mediawiki php maintenance/run.php update.php

Troubleshooting[edit]

If you receive one of the following errors in the browser, try the remedies prescribed below.

"Uncaught ExtensionDependencyError"[edit]

If you receive an error message in the browser similar to the following

Fatal error: Uncaught ExtensionDependencyError: VisualEditor is not compatible with the current MediaWiki core (version 1.39.4), it requires: >= 1.41. in /var/www/html/w/includes/registration/ExtensionRegistry.php:432 Stack trace: #0 /var/www/html/w/includes/registration/ExtensionRegistry.php(276): ExtensionRegistry->readFromQueue() #1 /var/www/html/w/includes/Setup.php(278): ExtensionRegistry->loadFromQueue() #2 /var/www/html/w/includes/WebStart.php(86): require_once('...') #3 /var/www/html/w/index.php(44): require('...') #4 {main} thrown in /var/www/html/w/includes/registration/ExtensionRegistry.php on line 432

perform these steps to check out a compatible branch of the extension (in this example, REL1_39)

cd extensions/VisualEditor
git checkout -tb REL1_39 origin/REL1_39

and refresh the page to try again.

"Error contacting the Parsoid/RESTBase server"[edit]

If you receive the following error when attempting to use VisualEditor for the first time

Error contacting the Parsoid/RESTBase server: (curl error: 7) Couldn't connect to server

you will most likely need to replace the Parsoid config setting 'url' => 'http://host.docker.internal:8080' in your LocalSettings.php with the internal IP of the container running the web server. For example:

$wgVirtualRestConfig['modules']['parsoid'] = [
    'url' => 'http://172.17.0.1:8080' . $wgScriptPath . '/rest.php',
];

If you have jq installed, this command will return the appropriate information:

docker network inspect mediawiki_default | jq '.[].Containers[] | select(.Name | test("web"))'
The network name mediawiki_default comes from the output of docker network inspect. (I think) it is inferred from the docker-compose.yml, and may be subject to change.

Example output:

{
  "Name": "mediawiki_mediawiki-web_1",
  "EndpointID": "29155dfdac8e4194d4100bdaf5ddbe91ee0e66f52842145985ce6aa6e894c563",
  "MacAddress": "e0:e0:e0:e0:e0:e0",
  "IPv4Address": "172.17.0.1/16",
  "IPv6Address": ""
}