diff --git a/src/wp-includes/class-wp-scripts.php b/src/wp-includes/class-wp-scripts.php
index b1e4c76c73d43..c19efd9790393 100644
--- a/src/wp-includes/class-wp-scripts.php
+++ b/src/wp-includes/class-wp-scripts.php
@@ -222,6 +222,11 @@ public function print_extra_script( $handle, $display = true ) {
return;
}
+ $output .= sprintf(
+ "\n//# sourceURL=inline:%s",
+ rawurlencode( "{$handle}-js-extra" )
+ );
+
if ( ! $display ) {
return $output;
}
@@ -521,6 +526,11 @@ public function get_inline_script_data( $handle, $position = 'after' ) {
return '';
}
+ $data[] = sprintf(
+ '//# sourceURL=inline:%s',
+ rawurlencode( "{$handle}-js-{$position}" )
+ );
+
return trim( implode( "\n", $data ), "\n" );
}
diff --git a/src/wp-includes/class-wp-styles.php b/src/wp-includes/class-wp-styles.php
index e64378be5fc8d..de498cc9814c7 100644
--- a/src/wp-includes/class-wp-styles.php
+++ b/src/wp-includes/class-wp-styles.php
@@ -337,6 +337,11 @@ public function print_inline_style( $handle, $display = true ) {
return false;
}
+ $output[] = sprintf(
+ '/*# sourceURL=inline:%s */',
+ rawurlencode( "{$handle}-inline-css" )
+ );
+
$output = implode( "\n", $output );
if ( ! $display ) {
diff --git a/tests/phpunit/tests/blocks/editor.php b/tests/phpunit/tests/blocks/editor.php
index 97d18d89529e3..f962a175b617b 100644
--- a/tests/phpunit/tests/blocks/editor.php
+++ b/tests/phpunit/tests/blocks/editor.php
@@ -762,6 +762,7 @@ public function test_ensure_preload_data_script_tag_closes() {
HTML;
diff --git a/tests/phpunit/tests/dependencies/scripts.php b/tests/phpunit/tests/dependencies/scripts.php
index 2cd51aad6ab70..c40c922ffa99d 100644
--- a/tests/phpunit/tests/dependencies/scripts.php
+++ b/tests/phpunit/tests/dependencies/scripts.php
@@ -116,11 +116,11 @@ public function data_provider_delayed_strategies() {
*/
public function test_after_inline_script_with_delayed_main_script( $strategy ) {
wp_enqueue_script( 'ms-isa-1', 'http://example.org/ms-isa-1.js', array(), null, compact( 'strategy' ) );
- wp_add_inline_script( 'ms-isa-1', 'console.log("after one");', 'after' );
+ wp_add_inline_script( 'ms-isa-1', 'console.log(\'after one\');', 'after' );
$output = get_echo( 'wp_print_scripts' );
$expected = "\n";
$expected .= wp_get_inline_script_tag(
- 'console.log("after one");',
+ "console.log('after one');\n//# sourceURL=inline:ms-isa-1-js-after",
array(
'id' => 'ms-isa-1-js-after',
)
@@ -143,12 +143,12 @@ public function test_after_inline_script_with_delayed_main_script( $strategy ) {
*/
public function test_after_inline_script_with_blocking_main_script() {
wp_enqueue_script( 'ms-insa-3', 'http://example.org/ms-insa-3.js', array(), null );
- wp_add_inline_script( 'ms-insa-3', 'console.log("after one");', 'after' );
+ wp_add_inline_script( 'ms-insa-3', 'console.log(\'after one\');', 'after' );
$output = get_echo( 'wp_print_scripts' );
$expected = "\n";
$expected .= wp_get_inline_script_tag(
- 'console.log("after one");',
+ "console.log('after one');\n//# sourceURL=inline:ms-insa-3-js-after",
array(
'id' => 'ms-insa-3-js-after',
)
@@ -174,15 +174,15 @@ public function test_after_inline_script_with_blocking_main_script() {
*/
public function test_before_inline_scripts_with_delayed_main_script( $strategy ) {
wp_enqueue_script( 'ds-i1-1', 'http://example.org/ds-i1-1.js', array(), null, compact( 'strategy' ) );
- wp_add_inline_script( 'ds-i1-1', 'console.log("before first");', 'before' );
+ wp_add_inline_script( 'ds-i1-1', 'console.log(\'before first\');', 'before' );
wp_enqueue_script( 'ds-i1-2', 'http://example.org/ds-i1-2.js', array(), null, compact( 'strategy' ) );
wp_enqueue_script( 'ds-i1-3', 'http://example.org/ds-i1-3.js', array(), null, compact( 'strategy' ) );
wp_enqueue_script( 'ms-i1-1', 'http://example.org/ms-i1-1.js', array( 'ds-i1-1', 'ds-i1-2', 'ds-i1-3' ), null, compact( 'strategy' ) );
- wp_add_inline_script( 'ms-i1-1', 'console.log("before last");', 'before' );
+ wp_add_inline_script( 'ms-i1-1', 'console.log(\'before last\');', 'before' );
$output = get_echo( 'wp_print_scripts' );
$expected = wp_get_inline_script_tag(
- 'console.log("before first");',
+ "console.log('before first');\n//# sourceURL=inline:ds-i1-1-js-before",
array(
'id' => 'ds-i1-1-js-before',
)
@@ -191,7 +191,7 @@ public function test_before_inline_scripts_with_delayed_main_script( $strategy )
$expected .= "\n";
$expected .= "\n";
$expected .= wp_get_inline_script_tag(
- 'console.log("before last");',
+ "console.log('before last');\n//# sourceURL=inline:ms-i1-1-js-before",
array(
'id' => 'ms-i1-1-js-before',
'type' => 'text/javascript',
@@ -513,23 +513,27 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -558,34 +562,40 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -606,23 +616,27 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -643,23 +657,27 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -683,22 +701,26 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -725,34 +747,40 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -778,22 +806,26 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -817,34 +849,40 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -868,34 +906,40 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -916,23 +960,27 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -949,6 +997,7 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
@@ -967,6 +1016,7 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -1014,12 +1064,14 @@ public function data_provider_to_test_various_strategy_dependency_chains() {
HTML
@@ -1618,7 +1670,7 @@ public function test_wp_script_add_data_with_data_key() {
// Enqueue and add data.
wp_enqueue_script( 'test-only-data', 'example.com', array(), null );
wp_script_add_data( 'test-only-data', 'data', 'testing' );
- $expected = "\n";
+ $expected = "\n";
$expected .= "\n";
// Go!
@@ -1656,7 +1708,7 @@ public function test_wp_script_add_data_with_data_and_conditional_keys() {
wp_enqueue_script( 'test-conditional-with-data', 'example.com', array(), null );
wp_script_add_data( 'test-conditional-with-data', 'data', 'testing' );
wp_script_add_data( 'test-conditional-with-data', 'conditional', 'lt IE 9' );
- $expected = "\n";
+ $expected = "\n";
$expected .= "\n";
$expected = str_replace( "'", '"', $expected );
@@ -1880,6 +1932,7 @@ public function test_wp_add_inline_script_before() {
HTML;
@@ -1900,6 +1953,7 @@ public function test_wp_add_inline_script_after() {
HTML;
@@ -1915,9 +1969,9 @@ public function test_wp_add_inline_script_before_and_after() {
wp_add_inline_script( 'test-example', 'console.log("before");', 'before' );
wp_add_inline_script( 'test-example', 'console.log("after");' );
- $expected = "\n";
+ $expected = "\n";
$expected .= "\n";
- $expected .= "\n";
+ $expected .= "\n";
$this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
}
@@ -1930,7 +1984,7 @@ public function test_wp_add_inline_script_before_for_handle_without_source() {
wp_enqueue_script( 'test-example' );
wp_add_inline_script( 'test-example', 'console.log("before");', 'before' );
- $expected = "\n";
+ $expected = "\n";
$this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
}
@@ -1943,7 +1997,7 @@ public function test_wp_add_inline_script_after_for_handle_without_source() {
wp_enqueue_script( 'test-example' );
wp_add_inline_script( 'test-example', 'console.log("after");' );
- $expected = "\n";
+ $expected = "\n";
$this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
}
@@ -1957,8 +2011,8 @@ public function test_wp_add_inline_script_before_and_after_for_handle_without_so
wp_add_inline_script( 'test-example', 'console.log("before");', 'before' );
wp_add_inline_script( 'test-example', 'console.log("after");' );
- $expected = "\n";
- $expected .= "\n";
+ $expected = "\n";
+ $expected .= "\n";
$this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
}
@@ -1973,9 +2027,9 @@ public function test_wp_add_inline_script_multiple() {
wp_add_inline_script( 'test-example', 'console.log("after");' );
wp_add_inline_script( 'test-example', 'console.log("after");' );
- $expected = "\n";
+ $expected = "\n";
$expected .= "\n";
- $expected .= "\n";
+ $expected .= "\n";
$this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
}
@@ -1989,10 +2043,10 @@ public function test_wp_add_inline_script_localized_data_is_added_first() {
wp_add_inline_script( 'test-example', 'console.log("before");', 'before' );
wp_add_inline_script( 'test-example', 'console.log("after");' );
- $expected = "\n";
- $expected .= "\n";
+ $expected = "\n";
+ $expected .= "\n";
$expected .= "\n";
- $expected .= "\n";
+ $expected .= "\n";
$this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
}
@@ -2013,9 +2067,9 @@ public function test_wp_add_inline_script_before_with_concat() {
wp_add_inline_script( 'one', 'console.log("before one");', 'before' );
wp_add_inline_script( 'two', 'console.log("before two");', 'before' );
- $expected = "\n";
+ $expected = "\n";
$expected .= "\n";
- $expected .= "\n";
+ $expected .= "\n";
$expected .= "\n";
$expected .= "\n";
@@ -2037,7 +2091,7 @@ public function test_wp_add_inline_script_before_with_concat2() {
wp_add_inline_script( 'one', 'console.log("before one");', 'before' );
- $expected = "\n";
+ $expected = "\n";
$expected .= "\n";
$expected .= "\n";
$expected .= "\n";
@@ -2064,9 +2118,9 @@ public function test_wp_add_inline_script_after_with_concat() {
$expected = "\n";
$expected .= "\n";
- $expected .= "\n";
+ $expected .= "\n";
$expected .= "\n";
- $expected .= "\n";
+ $expected .= "\n";
$expected .= "\n";
$this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
@@ -2082,14 +2136,14 @@ public function test_wp_add_inline_script_after_and_before_with_concat_and_condi
$wp_scripts->default_dirs = array( '/wp-admin/js/', '/wp-includes/js/' ); // Default dirs as in wp-includes/script-loader.php.
$expected_localized = "\n";
$expected_localized = str_replace( "'", '"', $expected_localized );
$expected = "\n";
$expected = str_replace( "'", '"', $expected );
@@ -2117,7 +2171,7 @@ public function test_wp_add_inline_script_after_with_concat_and_core_dependency(
$expected = "\n";
$expected .= "\n";
- $expected .= "\n";
+ $expected .= "\n";
wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null );
wp_add_inline_script( 'test-example', 'console.log("after");' );
@@ -2142,7 +2196,7 @@ public function test_wp_add_inline_script_after_with_concat_and_conditional_and_
$expected = "\n";
$expected .= "\n";
wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null );
@@ -2168,7 +2222,7 @@ public function test_wp_add_inline_script_before_with_concat_and_core_dependency
$wp_scripts->do_concat = true;
$expected = "\n";
- $expected .= "\n";
+ $expected .= "\n";
$expected .= "\n";
wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null );
@@ -2193,18 +2247,18 @@ public function test_wp_add_inline_script_before_after_concat_with_core_dependen
$wp_scripts->do_concat = true;
$expected = "\n";
- $expected .= "\n";
+ $expected .= "\n";
$expected .= "\n";
$expected .= "\n";
$expected .= "\n";
$expected .= "\n";
$expected .= "\n";
- $expected .= "\n";
-
+ $expected .= "\n";
wp_enqueue_script( 'test-example', 'http://example.com', array( 'jquery' ), null );
wp_add_inline_script( 'test-example', 'console.log("before");', 'before' );
wp_enqueue_script( 'test-example2', 'http://example2.com', array( 'wp-a11y' ), null );
@@ -2248,6 +2302,7 @@ public function test_wp_add_inline_script_customize_dependency() {
$expected_tail .= "\n";
@@ -2283,7 +2338,7 @@ public function test_wp_add_inline_script_after_for_core_scripts_with_concat_is_
wp_enqueue_script( 'four', '/wp-includes/js/script4.js' );
$expected = "\n";
- $expected .= "\n";
+ $expected .= "\n";
$expected .= "\n";
$expected .= "\n";
$expected .= "\n";
@@ -2307,7 +2362,7 @@ public function test_wp_add_inline_script_before_third_core_script_prints_two_co
wp_enqueue_script( 'four', '/wp-includes/js/script4.js' );
$expected = "\n";
- $expected .= "\n";
+ $expected .= "\n";
$expected .= "\n";
$expected .= "\n";
@@ -2327,8 +2382,8 @@ public function data_provider_to_test_get_inline_script() {
'/*before foo 1*/',
),
'delayed' => false,
- 'expected_data' => '/*before foo 1*/',
- 'expected_tag' => "\n",
+ 'expected_data' => "/*before foo 1*/\n//# sourceURL=inline:foo-js-before",
+ 'expected_tag' => "\n",
),
'after-blocking' => array(
'position' => 'after',
@@ -2337,8 +2392,8 @@ public function data_provider_to_test_get_inline_script() {
'/*after foo 2*/',
),
'delayed' => false,
- 'expected_data' => "/*after foo 1*/\n/*after foo 2*/",
- 'expected_tag' => "\n",
+ 'expected_data' => "/*after foo 1*/\n/*after foo 2*/\n//# sourceURL=inline:foo-js-after",
+ 'expected_tag' => "\n",
),
'before-delayed' => array(
'position' => 'before',
@@ -2346,8 +2401,8 @@ public function data_provider_to_test_get_inline_script() {
'/*before foo 1*/',
),
'delayed' => true,
- 'expected_data' => '/*before foo 1*/',
- 'expected_tag' => "\n",
+ 'expected_data' => "/*before foo 1*/\n//# sourceURL=inline:foo-js-before",
+ 'expected_tag' => "\n",
),
'after-delayed' => array(
'position' => 'after',
@@ -2356,8 +2411,8 @@ public function data_provider_to_test_get_inline_script() {
'/*after foo 2*/',
),
'delayed' => true,
- 'expected_data' => "/*after foo 1*/\n/*after foo 2*/",
- 'expected_tag' => "\n",
+ 'expected_data' => "/*after foo 1*/\n/*after foo 2*/\n//# sourceURL=inline:foo-js-after",
+ 'expected_tag' => "\n",
),
);
}
@@ -2999,7 +3054,7 @@ public function test_wp_localize_script_data_formats( $l10n_data, $expected ) {
wp_enqueue_script( 'test-example', 'example.com', array(), null );
wp_localize_script( 'test-example', 'testExample', $l10n_data );
- $expected = "\n";
+ $expected = "\n";
$expected .= "\n";
$this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
@@ -3568,4 +3623,26 @@ private function _scripts_from_package_json() {
$provider = array();
return $data['dependencies'];
}
+
+ /**
+ * @ticket 63887
+ */
+ public function test_source_url_encoding() {
+ $this->add_html5_script_theme_support();
+
+ $handle = '# test/ #';
+ wp_enqueue_script( $handle, '/example.js', array(), '0.0' );
+ wp_add_inline_script( $handle, '"ok";' );
+
+ $expected = <<
+
+
+HTML;
+
+ $this->assertEqualHTML( $expected, get_echo( 'wp_print_scripts' ) );
+ }
}
diff --git a/tests/phpunit/tests/dependencies/styles.php b/tests/phpunit/tests/dependencies/styles.php
index 9cb6283c488d5..bb00ced62e3e9 100644
--- a/tests/phpunit/tests/dependencies/styles.php
+++ b/tests/phpunit/tests/dependencies/styles.php
@@ -150,6 +150,7 @@ public function test_inline_styles() {
$expected = "\n";
$expected .= "\n";
wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
@@ -179,6 +180,7 @@ public function test_inline_styles_concat() {
$expected = "\n";
$expected .= "\n";
wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
@@ -274,6 +276,7 @@ public function test_multiple_inline_styles() {
$expected .= "\n";
wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
@@ -292,18 +295,19 @@ public function test_multiple_inline_styles() {
*/
public function test_plugin_doing_inline_styles_wrong() {
- $style = "';
+ $style .= '}';
$expected = "\n";
+ $expected .= "\n";
wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
- wp_add_inline_style( 'handle', $style );
+ wp_add_inline_style( 'handle', "" );
$this->assertSame( $expected, get_echo( 'wp_print_styles' ) );
}
@@ -332,6 +336,7 @@ public function test_conditional_inline_styles_are_also_conditional() {
@@ -363,6 +368,7 @@ public function test_wp_add_inline_style_for_handle_without_source() {
$expected .= "\n";
$expected .= "\n";
wp_register_style( 'handle-one', 'http://example.com', array(), 1 );
@@ -632,4 +638,24 @@ public function test_wp_maybe_inline_styles_no_path() {
$this->assertSame( $GLOBALS['wp_styles']->registered['test-handle']->src, $url );
}
+
+ /**
+ * @ticket 63887
+ */
+ public function test_source_url_encoding() {
+ $handle = '# test/ #';
+ wp_enqueue_style( $handle, '/example.css', array(), '0.0' );
+ wp_add_inline_style( $handle, 'custom-el { content: "ok"; }' );
+
+ $expected = <<
+
+
+HTML;
+
+ $this->assertEqualHTML( $expected, get_echo( 'wp_print_styles' ) );
+ }
}
diff --git a/tests/phpunit/tests/dependencies/wpLocalizeScript.php b/tests/phpunit/tests/dependencies/wpLocalizeScript.php
index a57754973cf40..a6477ee8f4f9b 100644
--- a/tests/phpunit/tests/dependencies/wpLocalizeScript.php
+++ b/tests/phpunit/tests/dependencies/wpLocalizeScript.php
@@ -56,7 +56,7 @@ public function test_wp_localize_script_outputs_safe_json() {
$output = get_echo( 'wp_print_scripts' );
- $expected = "\n";
+ $expected = "\n";
$expected .= "\n";
$this->assertEqualHTML( $expected, $output );