* @return string JavaScript code
*/
public static function makeMessageSetScript( $messages ) {
- return Xml::encodeJsCall(
- 'mw.messages.set',
- [ (object)$messages ],
- self::inDebugMode()
- );
+ return 'mw.messages.set('
+ . self::encodeJsonForScript( (object)$messages )
+ . ');';
}
/**
if ( !is_array( $states ) ) {
$states = [ $states => $state ];
}
- return Xml::encodeJsCall(
- 'mw.loader.state',
- [ $states ],
- self::inDebugMode()
- );
+ return 'mw.loader.state('
+ . self::encodeJsonForScript( $states )
+ . ');';
}
private static function isEmptyObject( stdClass $obj ) {
array_walk( $modules, [ self::class, 'trimArray' ] );
- return Xml::encodeJsCall(
- 'mw.loader.register',
- [ $modules ],
- self::inDebugMode()
- );
+ return 'mw.loader.register('
+ . self::encodeJsonForScript( $modules )
+ . ');';
}
/**
if ( !is_array( $sources ) ) {
$sources = [ $sources => $loadUrl ];
}
- return Xml::encodeJsCall(
- 'mw.loader.addSource',
- [ $sources ],
- self::inDebugMode()
- );
+ return 'mw.loader.addSource('
+ . self::encodeJsonForScript( $sources )
+ . ');';
}
/**
'msg' => 'Empty registry',
'modules' => [],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [] );'
+});
+mw.loader.register([]);'
] ],
[ [
'msg' => 'Basic registry',
'test.blank' => [ 'class' => ResourceLoaderTestModule::class ],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.blank",
"{blankVer}"
]
-] );',
+]);',
] ],
[ [
'msg' => 'Optimise the dependency tree (basic case)',
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"a",
"{blankVer}",
"d",
"{blankVer}"
]
-] );',
+]);',
] ],
[ [
'msg' => 'Optimise the dependency tree (tolerate unknown deps)',
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"a",
"{blankVer}",
"c",
"{blankVer}"
]
-] );',
+]);',
] ],
[ [
// Regression test for T223402.
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"top",
"{blankVer}",
"util",
"{blankVer}"
]
-] );',
+]);',
] ],
[ [
// Regression test for T223402.
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"top",
"{blankVer}",
"util",
"{blankVer}"
]
-] );',
+]);',
] ],
[ [
'msg' => 'Version falls back gracefully if getVersionHash throws',
]
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.fail",
""
]
-] );
-mw.loader.state( {
+]);
+mw.loader.state({
"test.fail": "error"
-} );',
+});',
] ],
[ [
'msg' => 'Use version from getVersionHash',
]
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.version",
"1234567"
]
-] );',
+]);',
] ],
[ [
'msg' => 'Re-hash version from getVersionHash if too long',
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.version",
"016es8l"
]
-] );',
+]);',
] ],
[ [
'msg' => 'Group signature',
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.blank",
"{blankVer}"
[],
"x-bar"
]
-] );'
+]);'
] ],
[ [
'msg' => 'Different target (non-test should not be registered)',
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.blank",
"{blankVer}"
]
-] );'
+]);'
] ],
[ [
'msg' => 'Safemode disabled (default; register all modules)',
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.blank",
"{blankVer}"
"test.user",
"{blankVer}"
]
-] );'
+]);'
] ],
[ [
'msg' => 'Safemode enabled (filter modules with user/site origin)',
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.blank",
"{blankVer}"
"test.core-generated",
"{blankVer}"
]
-] );'
+]);'
] ],
[ [
'msg' => 'Foreign source',
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php",
"example": "http://example.org/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.blank",
"{blankVer}",
null,
"example"
]
-] );'
+]);'
] ],
[ [
'msg' => 'Conditional dependency function',
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.x.core",
"{blankVer}"
2
]
]
-] );',
+]);',
] ],
[ [
// This may seem like an edge case, but a plain MediaWiki core install
],
],
'out' => '
-mw.loader.addSource( {
+mw.loader.addSource({
"local": "/w/load.php",
"example": "http://example.org/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.blank",
"{blankVer}"
"x-bar",
"example"
]
-] );'
+]);'
] ],
];
}
$rl->register( $modules );
$module = new ResourceLoaderStartUpModule();
$out =
-'mw.loader.addSource( {
+'mw.loader.addSource({
"local": "/w/load.php"
-} );
-mw.loader.register( [
+});
+mw.loader.register([
[
"test.blank",
"{blankVer}"
null,
"return !!( window.JSON \u0026\u0026 JSON.parse \u0026\u0026 JSON.stringify);"
]
-] );';
+]);';
$this->assertEquals(
self::expandPlaceholders( $out ),
*/
public function testMakeLoaderRegisterScript() {
$this->assertEquals(
- 'mw.loader.register( [
+ 'mw.loader.register([
[
"test.name",
"1234567"
]
-] );',
+]);',
ResourceLoader::makeLoaderRegisterScript( [
[ 'test.name', '1234567' ],
] ),
);
$this->assertEquals(
- 'mw.loader.register( [
+ 'mw.loader.register([
[
"test.foo",
"100"
null,
"return true;"
]
-] );',
+]);',
ResourceLoader::makeLoaderRegisterScript( [
[ 'test.foo', '100' , [], null, null ],
[ 'test.bar', '200', [ 'test.unknown' ], null ],
*/
public function testMakeLoaderSourcesScript() {
$this->assertEquals(
- 'mw.loader.addSource( {
+ 'mw.loader.addSource({
"local": "/w/load.php"
-} );',
+});',
ResourceLoader::makeLoaderSourcesScript( 'local', '/w/load.php' )
);
$this->assertEquals(
- 'mw.loader.addSource( {
+ 'mw.loader.addSource({
"local": "/w/load.php"
-} );',
+});',
ResourceLoader::makeLoaderSourcesScript( [ 'local' => '/w/load.php' ] )
);
$this->assertEquals(
- 'mw.loader.addSource( {
+ 'mw.loader.addSource({
"local": "/w/load.php",
"example": "https://example.org/w/load.php"
-} );',
+});',
ResourceLoader::makeLoaderSourcesScript( [
'local' => '/w/load.php',
'example' => 'https://example.org/w/load.php'
] )
);
$this->assertEquals(
- 'mw.loader.addSource( [] );',
+ 'mw.loader.addSource([]);',
ResourceLoader::makeLoaderSourcesScript( [] )
);
}
'modules' => [
'foo' => 'foo()',
],
- 'expected' => "foo()\n" . 'mw.loader.state( {
+ 'expected' => "foo()\n" . 'mw.loader.state({
"foo": "ready"
-} );',
+});',
'minified' => "foo()\n" . 'mw.loader.state({"foo":"ready"});',
'message' => 'Script without semi-colon',
],
'foo' => 'foo()',
'bar' => 'bar()',
],
- 'expected' => "foo()\nbar()\n" . 'mw.loader.state( {
+ 'expected' => "foo()\nbar()\n" . 'mw.loader.state({
"foo": "ready",
"bar": "ready"
-} );',
+});',
'minified' => "foo()\nbar()\n" . 'mw.loader.state({"foo":"ready","bar":"ready"});',
'message' => 'Two scripts without semi-colon',
],
'modules' => [
'foo' => "foo()\n// bar();"
],
- 'expected' => "foo()\n// bar();\n" . 'mw.loader.state( {
+ 'expected' => "foo()\n// bar();\n" . 'mw.loader.state({
"foo": "ready"
-} );',
+});',
'minified' => "foo()\n" . 'mw.loader.state({"foo":"ready"});',
'message' => 'Script with semi-colon in comment (T162719)',
],
$this->assertCount( 1, $errors );
$this->assertRegExp( '/Ferry not found/', $errors[0] );
$this->assertEquals(
- "foo();\nbar();\n" . 'mw.loader.state( {
+ "foo();\nbar();\n" . 'mw.loader.state({
"ferry": "error",
"foo": "ready",
"bar": "ready"
-} );',
+});',
$response
);
}