mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-25 14:56:20 +00:00
93b5e174f1
Depencency tree looked like this * ext.visualEditor.viewPageTarget - ve.init.platform - ve.init.target ** ext.visualEditor.core - (most ve.* classes) *** ext.visualEditor.base - ve.js Some of the ve classes are calling ve.msg from the global scope at load time (e.g. in the definition of static properties or in constructors of classes that were immediately instantiated in the same file). Platform needs to be initialised in the base module. ve.init.Platform.js was already there, but that's just an abstract base class. The the ve.init.platform property is set from the implementation classes' files. Updated makeStaticLoader.php and re-ran for test and demo html. The fake "Standalone Init" module is now gone, which shows that this was needed as test/ and demo/ already put their platform code in/after the 'ext.visualEditor.base' module in the html. Bug: 45175 Change-Id: I47d7d92495974572194700c98a219d22ecbfaf4b
148 lines
4.7 KiB
PHP
148 lines
4.7 KiB
PHP
<?php
|
|
$IP = getenv( 'MW_INSTALL_PATH' );
|
|
if ( $IP === false ) {
|
|
$IP = __DIR__ . '/../../..';
|
|
}
|
|
require_once( $IP . '/maintenance/Maintenance.php' );
|
|
|
|
class MakeStaticLoader extends Maintenance {
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
|
|
$this->addOption( 'target', 'Which target to use ("demo" or "test"). Default: false', false, true );
|
|
$this->addOption( 'indent', 'Indentation prefix to use (number of tabs or a string)', false, true );
|
|
$this->addOption( 've-path', 'Override path to "/modules/". Default by --target', false, true );
|
|
$this->addOption( 'section', 'head, body or both', false, true );
|
|
}
|
|
|
|
public function execute() {
|
|
global $wgResourceModules, $wgHtml5, $wgWellFormedXml;
|
|
|
|
$wgHtml5 = true;
|
|
$wgWellFormedXml = false;
|
|
|
|
$section = $this->getOption( 'section', 'both' );
|
|
$target = $this->getOption( 'target', 'demo' );
|
|
$indent = $this->getOption( 'indent', 2 );
|
|
if ( is_numeric( $indent ) ) {
|
|
$indent = str_repeat( "\t", $indent );
|
|
}
|
|
// Path to /modules/
|
|
$vePath = $this->getOption( 've-path',
|
|
$target === 'demo'
|
|
// From /demos/ve/index.php
|
|
? '../../modules/'
|
|
// From /modules/ve/test/index.html
|
|
: '../../'
|
|
);
|
|
|
|
$wgResourceModules['Dependencies'] = array(
|
|
'scripts' => array(
|
|
'jquery/jquery.js',
|
|
'rangy/rangy-core.js',
|
|
'rangy/rangy-position.js',
|
|
'unicodejs/unicodejs.js',
|
|
'unicodejs/unicodejs.textstring.js',
|
|
'unicodejs/unicodejs.wordbreak.groups.js',
|
|
'unicodejs/unicodejs.wordbreak.js',
|
|
),
|
|
);
|
|
|
|
// Customized version to init standalone instead of mediawiki platform.
|
|
$wgResourceModules['ext.visualEditor.base#standalone-init'] = array(
|
|
'styles' => array(
|
|
've/init/sa/styles/ve.init.sa.css',
|
|
),
|
|
'headAdd' => '<script>
|
|
if ( window.devicePixelRatio > 1 ) {
|
|
document.write( \'<link rel="stylesheet" href="' . $vePath . 've/ui/styles/ve.ui.Icons-vector.css">\' );
|
|
} else {
|
|
document.write( \'<link rel="stylesheet" href="' . $vePath . 've/ui/styles/ve.ui.Icons-raster.css">\' );
|
|
}
|
|
</script>',
|
|
'bodyAdd' => '<script>
|
|
<?php
|
|
require( ' . var_export( dirname( __DIR__ ) . '/VisualEditor.i18n.php', true ) . ' );
|
|
echo \'ve.init.platform.addMessages( \' . json_encode( $messages[\'en\'] ) . \');\' . "\n";
|
|
?>
|
|
ve.init.platform.setModulesUrl( \'' . $vePath . '\' );
|
|
</script>'
|
|
) + $wgResourceModules['ext.visualEditor.base'];
|
|
$baseScripts = &$wgResourceModules['ext.visualEditor.base#standalone-init']['scripts'];
|
|
$baseScripts = array_filter( $baseScripts, function ( $script ) {
|
|
return strpos( $script, 've/init/mw/ve.init.mw' ) === false;
|
|
} );
|
|
$baseScripts = array_merge( $baseScripts, array(
|
|
've/init/sa/ve.init.sa.js',
|
|
've/init/sa/ve.init.sa.Platform.js',
|
|
've/init/sa/ve.init.sa.Target.js',
|
|
) );
|
|
|
|
$self = isset( $_SERVER['PHP_SELF'] ) ? $_SERVER['PHP_SELF'] : ( lcfirst( __CLASS__ ) . '.php' );
|
|
|
|
$head = $body = "";
|
|
|
|
$modules = array(
|
|
'Dependencies',
|
|
'ext.visualEditor.base#standalone-init',
|
|
'ext.visualEditor.core',
|
|
);
|
|
foreach ( $modules as $module ) {
|
|
if ( !isset( $wgResourceModules[$module] ) ) {
|
|
echo "\nError: File group $module\n not found!\n";
|
|
exit( 1 );
|
|
}
|
|
$registry = $wgResourceModules[$module];
|
|
|
|
$headAdd = $bodyAdd = '';
|
|
|
|
if ( isset( $registry['styles'] ) && $target !== 'test' ){
|
|
foreach ($registry['styles'] as $style) {
|
|
$headAdd .= $indent . Html::element( 'link', array( 'rel' => 'stylesheet', 'href' => "$vePath$style" ) ) . "\n";
|
|
}
|
|
}
|
|
if ( isset( $registry['scripts'] ) ) {
|
|
foreach ($registry['scripts'] as $script) {
|
|
$bodyAdd .= $indent . Html::element( 'script', array( 'src' => "$vePath$script" ) ) . "\n";
|
|
}
|
|
}
|
|
if ( isset( $registry['debugScripts'] ) ) {
|
|
foreach ($registry['debugScripts'] as $script) {
|
|
$bodyAdd .= $indent . Html::element( 'script', array( 'src' => "$vePath$script" ) ) . "\n";
|
|
}
|
|
}
|
|
if ( isset( $registry['headAdd'] ) ) {
|
|
$headAdd .= $indent . implode( "\n$indent", explode( "\n", $registry['headAdd'] ) ) . "\n";
|
|
}
|
|
if ( isset( $registry['bodyAdd'] ) ) {
|
|
$bodyAdd .= $indent . implode( "\n$indent", explode( "\n", $registry['bodyAdd'] ) ) . "\n";
|
|
}
|
|
|
|
if ( $headAdd ) {
|
|
$head .= "$indent<!-- $module -->\n$headAdd";
|
|
}
|
|
if ( $bodyAdd ) {
|
|
$body .= "$indent<!-- $module -->\n$bodyAdd";
|
|
}
|
|
}
|
|
if ( $head ) {
|
|
if ( $section === 'both' ) {
|
|
echo "<head>\n\n$indent<!-- Generated by $self -->\n$head\n\n</head>";
|
|
} elseif ( $section === 'head' ) {
|
|
echo $head;
|
|
}
|
|
}
|
|
if ( $body ) {
|
|
if ( $section === 'both' ) {
|
|
echo "<body>\n\n$indent<!-- Generated by $self -->\n$body\n\n</body>\n";
|
|
} elseif ( $section === 'body' ) {
|
|
echo $body;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$maintClass = 'MakeStaticLoader';
|
|
require_once( RUN_MAINTENANCE_IF_MAIN );
|