WordPress.org

Make WordPress Core

Ticket #26864: 26864.2.patch

File 26864.2.patch, 11.9 KB (added by azaozz, 8 years ago)
  • src/wp-includes/formatting.php

     
    238238        $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
    239239        $pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
    240240        $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
    241         if ( strpos($pee, '<object') !== false ) {
    242                 $pee = preg_replace('|\s*<param([^>]*)>\s*|', "<param$1>", $pee); // no pee inside object/embed
    243                 $pee = preg_replace('|\s*</embed>\s*|', '</embed>', $pee);
     241
     242        if ( strpos( $pee, '<object' ) !== false ) {
     243                // no P/BR around param and embed
     244                $pee = preg_replace( '|(<object[^>]*>)\s*|', '$1', $pee );
     245                $pee = preg_replace( '|\s*</object>|', '</object>', $pee );
     246                $pee = preg_replace( '%\s*(</?(?:param|embed)[^>]*>)\s*%', '$1', $pee );
    244247        }
     248
     249        if ( strpos( $pee, '<audio' ) !== false || strpos( $pee, '<video' ) !== false ) {
     250                // no P/BR around source and track
     251                $pee = preg_replace( '%(<(?:audio|video)[^>]*>)\s*%', '$1', $pee );
     252                $pee = preg_replace( '%\s*(</(?:audio|video)>)%', '$1', $pee );
     253                $pee = preg_replace( '%\s*(<(?:source|track)[^>]*>)\s*%', '$1', $pee );
     254        }
     255
    245256        $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
    246257        // make paragraphs, including one at the end
    247258        $pees = preg_split('/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY);
  • tests/phpunit/tests/formatting/Autop.php

     
    9898                $str = 'Username: <input type="text" id="username" name="username" /><br />Password: <input type="password" id="password1" name="password1" />';
    9999                $this->assertEquals( "<p>$str</p>", trim( wpautop( $str ) ) );
    100100        }
     101
     102        /**
     103         * wpautop() Should not add <p> and <br/> around <source> and <track>
     104         *
     105         * @ticket 26864
     106         */
     107        public function test_source_track_elements() {
     108                $content = "Paragraph one.\n\n" .
     109                        '<video class="wp-video-shortcode" id="video-0-1" width="640" height="360" preload="metadata" controls="controls">
     110                        <source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />
     111                        <!-- WebM/VP8 for Firefox4, Opera, and Chrome -->
     112                        <source type="video/webm" src="myvideo.webm" />
     113                        <!-- Ogg/Vorbis for older Firefox and Opera versions -->
     114                        <source type="video/ogg" src="myvideo.ogv" />
     115                        <!-- Optional: Add subtitles for each language -->
     116                        <track kind="subtitles" src="subtitles.srt" srclang="en" />
     117                        <!-- Optional: Add chapters -->
     118                        <track kind="chapters" src="chapters.srt" srclang="en" />
     119                        <a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a>
     120                        </video>' .
     121                        "\n\nParagraph two.";
     122
     123                $content2 = "Paragraph one.\n\n" .
     124                        '<video class="wp-video-shortcode" id="video-0-1" width="640" height="360" preload="metadata" controls="controls">
     125
     126                        <source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />
     127
     128                        <!-- WebM/VP8 for Firefox4, Opera, and Chrome -->
     129                        <source type="video/webm" src="myvideo.webm" />
     130
     131                        <!-- Ogg/Vorbis for older Firefox and Opera versions -->
     132                        <source type="video/ogg" src="myvideo.ogv" />
     133
     134                        <!-- Optional: Add subtitles for each language -->
     135                        <track kind="subtitles" src="subtitles.srt" srclang="en" />
     136
     137                        <!-- Optional: Add chapters -->
     138                        <track kind="chapters" src="chapters.srt" srclang="en" />
     139
     140                        <a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a>
     141
     142                        </video>' .
     143                        "\n\nParagraph two.";
     144
     145                $content3 = "Paragraph one.\n\n" .
     146                        '<video class="wp-video-shortcode" id="video-0-1" width="640" height="360" preload="metadata" controls="controls">
     147                                <source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />
     148
     149                                <!-- WebM/VP8 for Firefox4, Opera, and Chrome --><source type="video/webm" src="myvideo.webm" />
     150                                <!-- Ogg/Vorbis for older Firefox and Opera versions --><source type="video/ogg" src="myvideo.ogv" />
     151                                <!-- Optional: Add subtitles for each language --><track kind="subtitles" src="subtitles.srt" srclang="en" />
     152                                <!-- Optional: Add chapters --><track kind="chapters" src="chapters.srt" srclang="en" />
     153
     154                                <a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a>
     155                        </video>' .
     156                        "\n\nParagraph two.";
     157
     158                $expected = "<p>Paragraph one.</p>\n" . // line breaks only after <p>
     159                        '<p><video class="wp-video-shortcode" id="video-0-1" width="640" height="360" preload="metadata" controls="controls">' .
     160                        '<source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />' .
     161                        '<!-- WebM/VP8 for Firefox4, Opera, and Chrome -->' .
     162                        '<source type="video/webm" src="myvideo.webm" />' .
     163                        '<!-- Ogg/Vorbis for older Firefox and Opera versions -->' .
     164                        '<source type="video/ogg" src="myvideo.ogv" />' .
     165                        '<!-- Optional: Add subtitles for each language -->' .
     166                        '<track kind="subtitles" src="subtitles.srt" srclang="en" />' .
     167                        '<!-- Optional: Add chapters -->' .
     168                        '<track kind="chapters" src="chapters.srt" srclang="en" />' .
     169                        '<a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">' .
     170                        "http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a></video></p>\n" .
     171                        '<p>Paragraph two.</p>';
     172
     173                $this->assertEquals( $expected, trim( wpautop( $content ) ) );
     174                $this->assertEquals( $expected, trim( wpautop( $content2 ) ) );
     175                $this->assertEquals( $expected, trim( wpautop( $content3 ) ) );
     176        }
     177
     178        /**
     179         * wpautop() Should not add <p> and <br/> around <param> and <embed>
     180         *
     181         * @ticket 26864
     182         */
     183        public function test_param_embed_elements() {
     184                $content1 = '
     185Paragraph one.
     186
     187<object width="400" height="224" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
     188        <param name="src" value="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" />
     189        <param name="allowfullscreen" value="true" />
     190        <param name="allowscriptaccess" value="always" />
     191        <param name="overstretch" value="true" />
     192        <param name="flashvars" value="isDynamicSeeking=true" />
     193
     194        <embed width="400" height="224" type="application/x-shockwave-flash" src="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" wmode="direct" seamlesstabbing="true" allowfullscreen="true" overstretch="true" flashvars="isDynamicSeeking=true" />
     195</object>
     196
     197Paragraph two.';
     198
     199                $expected1 = "<p>Paragraph one.</p>\n" . // line breaks only after <p>
     200                        '<p><object width="400" height="224" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">' .
     201                        '<param name="src" value="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" />' .
     202                        '<param name="allowfullscreen" value="true" />' .
     203                        '<param name="allowscriptaccess" value="always" />' .
     204                        '<param name="overstretch" value="true" />' .
     205                        '<param name="flashvars" value="isDynamicSeeking=true" />' .
     206                        '<embed width="400" height="224" type="application/x-shockwave-flash" src="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" wmode="direct" seamlesstabbing="true" allowfullscreen="true" overstretch="true" flashvars="isDynamicSeeking=true" />' .
     207                        "</object></p>\n" .
     208                        '<p>Paragraph two.</p>';
     209
     210                $content2 = '
     211Paragraph one.
     212
     213<div class="video-player" id="x-video-0">
     214<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="360" id="video-0" standby="Standby text">
     215  <param name="movie" value="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" />
     216  <param name="quality" value="best" />
     217
     218  <param name="seamlesstabbing" value="true" />
     219  <param name="allowfullscreen" value="true" />
     220  <param name="allowscriptaccess" value="always" />
     221  <param name="overstretch" value="true" />
     222
     223  <!--[if !IE]--><object type="application/x-shockwave-flash" data="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" width="640" height="360" standby="Standby text">
     224    <param name="quality" value="best" />
     225
     226    <param name="seamlesstabbing" value="true" />
     227    <param name="allowfullscreen" value="true" />
     228    <param name="allowscriptaccess" value="always" />
     229    <param name="overstretch" value="true" />
     230  </object><!--<![endif]-->
     231</object></div>
     232
     233Paragraph two.';
     234
     235                $expected2 = "<p>Paragraph one.</p>\n" . // line breaks only after block tags
     236                        '<div class="video-player" id="x-video-0">' . "\n" .
     237                        '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="360" id="video-0" standby="Standby text">' .
     238                        '<param name="movie" value="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" />' .
     239                        '<param name="quality" value="best" />' .
     240                        '<param name="seamlesstabbing" value="true" />' .
     241                        '<param name="allowfullscreen" value="true" />' .
     242                        '<param name="allowscriptaccess" value="always" />' .
     243                        '<param name="overstretch" value="true" />' .
     244                        '<!--[if !IE]--><object type="application/x-shockwave-flash" data="http://domain.tld/wp-content/uploads/2013/12/xyz.swf" width="640" height="360" standby="Standby text">' .
     245                        '<param name="quality" value="best" />' .
     246                        '<param name="seamlesstabbing" value="true" />' .
     247                        '<param name="allowfullscreen" value="true" />' .
     248                        '<param name="allowscriptaccess" value="always" />' .
     249                        '<param name="overstretch" value="true" /></object><!--<![endif]-->' .
     250                        "</object></div>\n" .
     251                        '<p>Paragraph two.</p>';
     252
     253                $this->assertEquals( $expected1, trim( wpautop( $content1 ) ) );
     254                $this->assertEquals( $expected2, trim( wpautop( $content2 ) ) );
     255        }
    101256}
  • tests/phpunit/tests/media.php

     
    364364                $matches = get_media_embedded_in_content( $content, $types );
    365365                $this->assertEquals( $contents, $matches );
    366366        }
     367
     368        /**
     369         * Test [video] shortcode processing
     370         *
     371         * @ticket 26864
     372         */
     373        function test_video_shortcode_body() {
     374                $width = 720;
     375                $height = 480;
     376
     377                $video =<<<VIDEO
     378[video width="720" height="480" mp4="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4"]
     379<!-- WebM/VP8 for Firefox4, Opera, and Chrome -->
     380<source type="video/webm" src="myvideo.webm" />
     381<!-- Ogg/Vorbis for older Firefox and Opera versions -->
     382<source type="video/ogg" src="myvideo.ogv" />
     383<!-- Optional: Add subtitles for each language -->
     384<track kind="subtitles" src="subtitles.srt" srclang="en" />
     385<!-- Optional: Add chapters -->
     386<track kind="chapters" src="chapters.srt" srclang="en" />
     387[/video]
     388VIDEO;
     389
     390                $w = $GLOBALS['content_width'];
     391                $h = ceil( ( $height * $w ) / $width );
     392
     393                $content = apply_filters( 'the_content', $video );
     394
     395                $expected = '<div style="width: ' . $w . 'px; max-width: 100%;" class="wp-video">' .
     396                        "<!--[if lt IE 9]><script>document.createElement(\'video\');</script><![endif]-->\n" .
     397                        '<video class="wp-video-shortcode" id="video-0-1" width="' . $w . '" height="' . $h . '" preload="metadata" controls="controls">' .
     398                        '<source type="video/mp4" src="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4" />' .
     399                        '<!-- WebM/VP8 for Firefox4, Opera, and Chrome --><source type="video/webm" src="myvideo.webm" />' .
     400                        '<!-- Ogg/Vorbis for older Firefox and Opera versions --><source type="video/ogg" src="myvideo.ogv" />' .
     401                        '<!-- Optional: Add subtitles for each language --><track kind="subtitles" src="subtitles.srt" srclang="en" />' .
     402                        '<!-- Optional: Add chapters --><track kind="chapters" src="chapters.srt" srclang="en" />' .
     403                        '<a href="http://domain.tld/wp-content/uploads/2013/12/xyz.mp4">' .
     404                        "http://domain.tld/wp-content/uploads/2013/12/xyz.mp4</a></video></div>\n";
     405
     406                $this->assertEquals( $expected, $content );
     407        }
    367408}