Add the ability to print data *after* a script, whether it is concatenated or not:

* Add a third argument to `WP_Scripts->print_extra_script()`, `$key`, which will be passed to `->get_data()` (no longer passes hardcoded `'data'`)
* When `$key` is set to `'data-after'`, the inline script will be printed after the `<script>` tag. If the scripts are being concatenated, all scripts' `'data-after'` data will be printed after the concatenated `<script>` has been rendered.

Props hakre, wonderboymusic.
Fixes #25277.

Built from https://develop.svn.wordpress.org/trunk@31032


git-svn-id: http://core.svn.wordpress.org/trunk@31013 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Scott Taylor 2015-01-03 05:08:24 +00:00
parent f7aef5b69a
commit 650a6d1062
3 changed files with 25 additions and 5 deletions

View File

@ -27,6 +27,7 @@ class WP_Scripts extends WP_Dependencies {
public $print_html = ''; public $print_html = '';
public $print_code = ''; public $print_code = '';
public $ext_handles = ''; public $ext_handles = '';
public $print_after_html = '';
public $ext_version = ''; public $ext_version = '';
public $default_dirs; public $default_dirs;
@ -67,12 +68,14 @@ class WP_Scripts extends WP_Dependencies {
return $this->print_extra_script( $handle, $echo ); return $this->print_extra_script( $handle, $echo );
} }
public function print_extra_script( $handle, $echo = true ) { public function print_extra_script( $handle, $echo = true, $key = 'data' ) {
if ( !$output = $this->get_data( $handle, 'data' ) ) if ( ! $output = $this->get_data( $handle, $key ) ) {
return; return;
}
if ( !$echo ) if ( ! $echo ) {
return $output; return $output;
}
echo "<script type='text/javascript'>\n"; // CDATA and type='text/javascript' is not needed for HTML 5 echo "<script type='text/javascript'>\n"; // CDATA and type='text/javascript' is not needed for HTML 5
echo "/* <![CDATA[ */\n"; echo "/* <![CDATA[ */\n";
@ -117,6 +120,7 @@ class WP_Scripts extends WP_Dependencies {
$srce = apply_filters( 'script_loader_src', $src, $handle ); $srce = apply_filters( 'script_loader_src', $src, $handle );
if ( $this->in_default_dir($srce) ) { if ( $this->in_default_dir($srce) ) {
$this->print_code .= $this->print_extra_script( $handle, false ); $this->print_code .= $this->print_extra_script( $handle, false );
$this->print_after_html .= "\n" . $this->print_extra_script( $handle, false, 'data-after' );
$this->concat .= "$handle,"; $this->concat .= "$handle,";
$this->concat_version .= "$handle$ver"; $this->concat_version .= "$handle$ver";
return true; return true;
@ -155,8 +159,10 @@ class WP_Scripts extends WP_Dependencies {
if ( $this->do_concat ) { if ( $this->do_concat ) {
$this->print_html .= $tag; $this->print_html .= $tag;
$this->print_after_html .= $this->print_extra_script( $handle, false, 'data-after' ) . "\n";
} else { } else {
echo $tag; echo $tag;
$this->print_extra_script( $handle, true, 'data-after' );
} }
return true; return true;
@ -261,6 +267,7 @@ class WP_Scripts extends WP_Dependencies {
$this->concat = ''; $this->concat = '';
$this->concat_version = ''; $this->concat_version = '';
$this->print_html = ''; $this->print_html = '';
$this->print_after_html = '';
$this->ext_version = ''; $this->ext_version = '';
$this->ext_handles = ''; $this->ext_handles = '';
} }

View File

@ -857,8 +857,21 @@ function _print_scripts() {
echo "<script type='text/javascript' src='" . esc_attr($src) . "'></script>\n"; echo "<script type='text/javascript' src='" . esc_attr($src) . "'></script>\n";
} }
if ( !empty($wp_scripts->print_html) ) if ( ! empty( $wp_scripts->print_html ) ) {
echo $wp_scripts->print_html; echo $wp_scripts->print_html;
}
if ( ! empty( $wp_scripts->print_after_html ) ) {
if ( $wp_scripts->do_concat ) {
echo "<script type='text/javascript'>\n";
echo "/* <![CDATA[ */\n"; // not needed in HTML 5
echo trim( $wp_scripts->print_after_html ) . "\n";
echo "/* ]]> */\n";
echo "</script>\n";
} else {
echo $wp_scripts->print_after_html;
}
}
} }
/** /**

View File

@ -4,7 +4,7 @@
* *
* @global string $wp_version * @global string $wp_version
*/ */
$wp_version = '4.2-alpha-31031'; $wp_version = '4.2-alpha-31032';
/** /**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.