mediawiki-extensions-Visual.../includes/VEParsoid/ServiceWiring.php
C. Scott Ananian 4b04f413fa Zero-configuration VisualEditor + PHP for MediaWiki LTS
This copies the Parsoid extension code into includes/VEParsoid
to allow a "one extension, zero-configuration" install of
VisualEditor for MW's LTS release. The Parsoid code has been
re-namespaced (`VEParsoid` instead of `MWParsoid`) to avoid
autoloader conflicts if you actually install Parsoid as an
extension (as we do in Wikimedia production). Similarly, we
arrange that the ServiceWiring and RestRoutes configurations
are skipped unless running in zeroconf mode, to avoid
conflicts with the Parsoid extension.

This import matches Parsoid commit b30f223.

Bug: T248343
Change-Id: Ic63ce40f59c4be8f4fdc5f9ac17798353fc86866
2020-07-13 18:39:08 +00:00

94 lines
3.5 KiB
PHP

<?php
/**
* Copyright (C) 2011-2020 Wikimedia Foundation and others.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
use MediaWiki\MediaWikiServices;
use VEParsoid\Config\DataAccess as MWDataAccess;
use VEParsoid\Config\PageConfigFactory;
use VEParsoid\Config\SiteConfig as MWSiteConfig;
use Wikimedia\Parsoid\Config\Api\DataAccess as ApiDataAccess;
use Wikimedia\Parsoid\Config\Api\SiteConfig as ApiSiteConfig;
use Wikimedia\Parsoid\Config\DataAccess;
use Wikimedia\Parsoid\Config\SiteConfig;
global $wgVisualEditorParsoidAutoConfig;
if (
ExtensionRegistry::getInstance()->isLoaded( 'Parsoid' ) ||
!$wgVisualEditorParsoidAutoConfig
) {
return [];
}
return [
'ParsoidSettings' => function ( MediaWikiServices $services ): array {
# Unified location for default parsoid settings.
$veConfig = $services->getConfigFactory()
->makeConfig( 'visualeditor' );
$parsoidSettings = [
# Default parsoid settings, for 'no config' install.
'useSelser' => true,
];
try {
$parsoidSettings =
$veConfig->get( 'VisualEditorParsoidSettings' )
+ $parsoidSettings;
} catch ( ConfigException $e ) {
/* Config option isn't defined, use defaults */
}
return $parsoidSettings;
},
'ParsoidSiteConfig' => function ( MediaWikiServices $services ): SiteConfig {
$parsoidSettings = $services->get( 'ParsoidSettings' );
if ( !empty( $parsoidSettings['debugApi'] ) ) {
return ApiSiteConfig::fromSettings( $parsoidSettings );
}
return new MWSiteConfig();
},
'ParsoidPageConfigFactory' => function ( MediaWikiServices $services ): PageConfigFactory {
return new PageConfigFactory( $services->getRevisionStore(), $services->getParser(),
$services->get( '_ParsoidParserOptions' ), $services->getSlotRoleRegistry() );
},
'ParsoidDataAccess' => function ( MediaWikiServices $services ): DataAccess {
$parsoidSettings = $services->get( 'ParsoidSettings' );
if ( !empty( $parsoidSettings['debugApi'] ) ) {
return ApiDataAccess::fromSettings( $parsoidSettings );
}
return new MWDataAccess( $services->getRevisionStore(), $services->getParser(),
$services->get( '_ParsoidParserOptions' ) );
},
'_ParsoidParserOptions' => function ( MediaWikiServices $services ): ParserOptions {
// phpcs:ignore MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgUser
global $wgUser;
// Pass a dummy user: Parsoid's parses don't use the user context right now
// and all user state is expected to be introduced as a post-parse transformation
// It is unclear if wikitext supports this model. But, given that Parsoid/JS
// operated in this fashion, for now, Parsoid/PHP will as well with the caveat below.
// ParserOptions used to default to $wgUser if we passed in null here (and new User()
// if $wgUser was null as it would be in most background job parsing contexts).
return ParserOptions::newCanonical( $wgUser ?? new User() );
},
];