Revert [25202] and enforce that wp_add_inline_style() does not want <style> tags.

Prior to 3.7, these tags were not printed (and thus needed to be provided), but only in the admin and when concatenation was enabled. They should never be required. Strip them when we find them and issue a notice for incorrect usage.

props atimmer, georgestephanis.
fixes #24813.


git-svn-id: https://develop.svn.wordpress.org/trunk@25786 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Andrew Nacin 2013-10-15 14:34:33 +00:00
parent 5ceab9b1e3
commit 5e119ca3b4
3 changed files with 129 additions and 3 deletions

View File

@ -87,10 +87,11 @@ class WP_Styles extends WP_Dependencies {
if ( $this->do_concat ) {
$this->print_html .= $tag;
$this->print_html .= $this->print_inline_style( $handle, false );
if ( $inline_style = $this->print_inline_style( $handle, false ) )
$this->print_html .= sprintf( "<style type='text/css'>\n%s\n</style>\n", $inline_style );
} else {
echo $tag;
echo $this->print_inline_style( $handle, false );
$this->print_inline_style( $handle );
}
return true;

View File

@ -14,7 +14,7 @@
* Passing an empty array to $handles prints the queue,
* passing an array with one string prints that style,
* and passing an array of strings prints those styles.
*
*
* @see do_action() Calls 'wp_print_styles' hook.
* @global WP_Styles $wp_styles The WP_Styles object for printing styles.
*
@ -71,6 +71,11 @@ function wp_add_inline_style( $handle, $data ) {
$wp_styles = new WP_Styles();
}
if ( false !== stripos( $data, '</style>' ) ) {
_doing_it_wrong( __FUNCTION__, 'Do not pass <style> tags to wp_add_inline_style()', '3.7' );
$data = trim( preg_replace( '#<style[^>]*>(.*)</style>#is', '$1', $data ) );
}
return $wp_styles->add_inline_style( $handle, $data );
}

View File

@ -86,4 +86,124 @@ class Tests_Dependencies_Styles extends WP_UnitTestCase {
// Cleanup
$wp_styles->base_url = $base_url_backup;
}
/**
* Test if inline styles work
* @ticket 24813
*/
public function test_inline_styles() {
$style = ".thing {\n";
$style .= "\tbackground: red;\n";
$style .= "}";
$expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
$expected .= "<style type='text/css'>\n";
$expected .= "$style\n";
$expected .= "</style>\n";
wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
wp_add_inline_style( 'handle', $style );
// No styles left to print
$this->assertEquals( $expected, get_echo( 'wp_print_styles' ) );
}
/**
* Test if inline styles work with concatination
* @global WP_Styles $wp_styles
* @ticket 24813
*/
public function test_inline_styles_concat() {
global $wp_styles;
$wp_styles->do_concat = true;
$wp_styles->default_dirs = array( '/wp-admin/', '/wp-includes/css/' ); // Default dirs as in wp-includes/script-loader.php
$style = ".thing {\n";
$style .= "\tbackground: red;\n";
$style .= "}";
$expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
$expected .= "<style type='text/css'>\n";
$expected .= "$style\n";
$expected .= "</style>\n";
wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
wp_add_inline_style( 'handle', $style );
wp_print_styles();
$this->assertEquals( $expected, $wp_styles->print_html );
}
/**
* Test if multiple inline styles work
* @ticket 24813
*/
public function test_multiple_inline_styles() {
$style1 = ".thing1 {\n";
$style1 .= "\tbackground: red;\n";
$style1 .= "}";
$style2 = ".thing2 {\n";
$style2 .= "\tbackground: blue;\n";
$style2 .= "}";
$expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
$expected .= "<style type='text/css'>\n";
$expected .= "$style1\n";
$expected .= "$style2\n";
$expected .= "</style>\n";
wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
wp_add_inline_style( 'handle', $style1 );
wp_add_inline_style( 'handle', $style2 );
// No styles left to print
$this->assertEquals( $expected, get_echo( 'wp_print_styles' ) );
}
/**
* Test if a plugin doing it the wrong way still works
*
* @expectedIncorrectUsage wp_add_inline_style
* @ticket 24813
*/
public function test_plugin_doing_inline_styles_wrong() {
$style = "<style type='text/css'>\n";
$style .= ".thing {\n";
$style .= "\tbackground: red;\n";
$style .= "}\n";
$style .= "</style>";
$expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
$expected .= "$style\n";
wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
wp_add_inline_style( 'handle', $style );
$this->assertEquals( $expected, get_echo( 'wp_print_styles' ) );
}
/**
* Test to make sure <style> tags aren't output if there are no inline styles.
* @ticket 24813
*/
public function test_unnecessary_style_tags() {
$expected = "<link rel='stylesheet' id='handle-css' href='http://example.com?ver=1' type='text/css' media='all' />\n";
wp_enqueue_style( 'handle', 'http://example.com', array(), 1 );
$this->assertEquals( $expected, get_echo( 'wp_print_styles' ) );
}
}