array ( 'src' => 'mw.loader.implement("test.use_missing", function () {start(); ok(false, "Module test.use_missing should not run.");}, {}, {});', 'deps' => array ( 'test.missing' ) ), 'test.use_missing2' => array ( 'src' => 'mw.loader.implement("test.use_missing2", function () {start(); ok(false, "Module test.use_missing2 should not run.");}, {}, {});', 'deps' => array ( 'test.missing2' ) ) ); // Copied from ResourceLoaderContext function expandModuleNames( $modules ) { $retval = array(); // For backwards compatibility with an earlier hack, replace ! with . $modules = str_replace( '!', '.', $modules ); $exploded = explode( '|', $modules ); foreach ( $exploded as $group ) { if ( strpos( $group, ',' ) === false ) { // This is not a set of modules in foo.bar,baz notation // but a single module $retval[] = $group; } else { // This is a set of modules in foo.bar,baz notation $pos = strrpos( $group, '.' ); if ( $pos === false ) { // Prefixless modules, i.e. without dots $retval = explode( ',', $group ); } else { // We have a prefix and a bunch of suffixes $prefix = substr( $group, 0, $pos ); // 'foo' $suffixes = explode( ',', substr( $group, $pos + 1 ) ); // array( 'bar', 'baz' ) foreach ( $suffixes as $suffix ) { $retval[] = "$prefix.$suffix"; } } } } return $retval; } function addModule ( $moduleName, &$gotten ) { global $modules; $result = ""; if ( isset( $gotten[$moduleName] ) ) { return $result; } $gotten[$moduleName] = true; if ( isset( $modules[$moduleName] ) ) { $deps = $modules[$moduleName]['deps']; foreach ( $deps as $depName ) { $result .= addModule( $depName, $gotten ) . "\n"; } $result .= $modules[$moduleName]['src'] . "\n"; } else { $result .= 'mw.loader.state( ' . Xml::encodeJsVar( $moduleName ) . ', "missing" );' . "\n"; } return $result . "\n"; } $result = ""; if ( isset( $_GET['modules'] ) ) { $toGet = expandModuleNames( $_GET['modules'] ); $gotten = array(); foreach ( $toGet as $moduleName ) { $result .= addModule( $moduleName, $gotten ); } } echo $result;