<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[25786] trunk: Revert [25202] and enforce that wp_add_inline_style() does not want <style> tags.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://core.trac.wordpress.org/changeset/25786">25786</a></dd>
<dt>Author</dt> <dd>nacin</dd>
<dt>Date</dt> <dd>2013-10-15 14:34:33 +0000 (Tue, 15 Oct 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>Revert <a href="http://core.trac.wordpress.org/changeset/25202">[25202]</a> 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 <a href="http://core.trac.wordpress.org/ticket/24813">#24813</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesclasswpstylesphp">trunk/src/wp-includes/class.wp-styles.php</a></li>
<li><a href="#trunksrcwpincludesfunctionswpstylesphp">trunk/src/wp-includes/functions.wp-styles.php</a></li>
<li><a href="#trunktestsphpunittestsdependenciesstylesphp">trunk/tests/phpunit/tests/dependencies/styles.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesclasswpstylesphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/class.wp-styles.php (25785 => 25786)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/class.wp-styles.php        2013-10-15 14:30:02 UTC (rev 25785)
+++ trunk/src/wp-includes/class.wp-styles.php   2013-10-15 14:34:33 UTC (rev 25786)
</span><span class="lines">@@ -87,10 +87,11 @@
</span><span class="cx"> 
</span><span class="cx">          if ( $this->do_concat ) {
</span><span class="cx">                  $this->print_html .= $tag;
</span><del>-                       $this->print_html .= $this->print_inline_style( $handle, false );
</del><ins>+                        if ( $inline_style = $this->print_inline_style( $handle, false ) )
+                               $this->print_html .= sprintf( "<style type='text/css'>\n%s\n</style>\n", $inline_style );
</ins><span class="cx">           } else {
</span><span class="cx">                  echo $tag;
</span><del>-                       echo $this->print_inline_style( $handle, false );
</del><ins>+                        $this->print_inline_style( $handle );
</ins><span class="cx">           }
</span><span class="cx"> 
</span><span class="cx">          return true;
</span></span></pre></div>
<a id="trunksrcwpincludesfunctionswpstylesphp"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/functions.wp-styles.php (25785 => 25786)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/functions.wp-styles.php    2013-10-15 14:30:02 UTC (rev 25785)
+++ trunk/src/wp-includes/functions.wp-styles.php       2013-10-15 14:34:33 UTC (rev 25786)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx">  * Passing an empty array to $handles prints the queue,
</span><span class="cx">  * passing an array with one string prints that style,
</span><span class="cx">  * and passing an array of strings prints those styles.
</span><del>- * 
</del><ins>+ *
</ins><span class="cx">  * @see do_action() Calls 'wp_print_styles' hook.
</span><span class="cx">  * @global WP_Styles $wp_styles The WP_Styles object for printing styles.
</span><span class="cx">  *
</span><span class="lines">@@ -71,6 +71,11 @@
</span><span class="cx">          $wp_styles = new WP_Styles();
</span><span class="cx">  }
</span><span class="cx"> 
</span><ins>+       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 ) );
+       }
+
</ins><span class="cx">   return $wp_styles->add_inline_style( $handle, $data );
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunktestsphpunittestsdependenciesstylesphp"></a>
<div class="modfile"><h4>Modified: trunk/tests/phpunit/tests/dependencies/styles.php (25785 => 25786)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/tests/phpunit/tests/dependencies/styles.php        2013-10-15 14:30:02 UTC (rev 25785)
+++ trunk/tests/phpunit/tests/dependencies/styles.php   2013-10-15 14:34:33 UTC (rev 25786)
</span><span class="lines">@@ -86,4 +86,124 @@
</span><span class="cx">          // Cleanup
</span><span class="cx">          $wp_styles->base_url = $base_url_backup;
</span><span class="cx">  }
</span><ins>+
+       /**
+        * 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' ) );
+
+       }
+
</ins><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>