Ticket #26628: 26628.2.diff
File 26628.2.diff, 9.1 KB (added by , 9 years ago) |
---|
-
src/wp-includes/class-wp-editor.php
222 222 * the TinyMCE instance. 223 223 */ 224 224 $plugins = array_unique( apply_filters( 'tiny_mce_plugins', array( 225 'audiovideo', 225 226 'charmap', 226 227 'link', 227 228 'media', … … 332 333 self::$first_init['spellchecker_language'] = self::$mce_locale; 333 334 } 334 335 336 $suffix = SCRIPT_DEBUG ? '' : '.min'; 337 $dashicons = "/wp-includes/css/dashicons$suffix.css"; 338 335 339 // WordPress default stylesheet 336 $mce_css = array( self::$baseurl . '/skins/wordpress/wp-content.css' );340 $mce_css = array( $dashicons, self::$baseurl . '/skins/wordpress/wp-content.css' ); 337 341 338 342 // load editor_style.css if the current theme supports it 339 343 if ( ! empty( $GLOBALS['editor_styles'] ) && is_array( $GLOBALS['editor_styles'] ) ) { -
src/wp-includes/formatting.php
242 242 $pee = preg_replace('|\s*<param([^>]*)>\s*|', "<param$1>", $pee); // no pee inside object/embed 243 243 $pee = preg_replace('|\s*</embed>\s*|', '</embed>', $pee); 244 244 } 245 if ( preg_match( '|[\[<]video|', $pee ) ) { 246 $pee = preg_replace( '#\s*<(track|source)([^>]*)>\s*#', '<$1$2>', $pee ); // no pee inside video tag/shortcode 247 } 245 248 $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates 246 249 // make paragraphs, including one at the end 247 250 $pees = preg_split('/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY); … … 258 261 $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee); 259 262 if ( $br ) { 260 263 $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee); 264 $pee = preg_replace_callback('/[\[<]video.*?[\[<]\/video[\]>]/s', '_autop_newline_preservation_helper', $pee); 261 265 $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks 262 266 $pee = str_replace('<WPPreserveNewline />', "\n", $pee); 263 267 } -
src/wp-includes/js/media-editor.js
480 480 } else if ( h.indexOf('[gallery') !== -1 ) { 481 481 if ( ed.plugins.wpgallery ) 482 482 h = ed.plugins.wpgallery._do_gallery(h); 483 } else if ( h.indexOf('[video') !== -1 || h.indexOf('[audio') !== -1 ) { 484 if ( ed.plugins.audiovideo ) 485 h = ed.plugins.audiovideo._do_media(h); 483 486 } else if ( h.indexOf('[embed') === 0 ) { 484 487 if ( ed.plugins.wordpress ) 485 488 h = ed.plugins.wordpress._setEmbed(h); -
src/wp-includes/js/tinymce/plugins/audiovideo/plugin.js
1 /* global tinymce */ 2 tinymce.PluginManager.add('audiovideo', function( editor ) { 3 4 function parseMedia( content ) { 5 return content 6 .replace( /(\[audio[^\]]*\][\s\S]*?\[\/audio\])/g, function( match, attr ) { 7 var data = tinymce.DOM.encode( attr ); 8 return '<div class="mceTemp media-shortcode-wrapper" draggable="true"><div class="dashicons dashicons-format-audio"></div><img src="' + tinymce.Env.transparentSrc + '" class="wp-media-shortcode wp-audio-shortcode mceItem" ' + 9 'title="' + data + '" data-mce-resize="false" data-mce-placeholder="1" /></div>'; 10 }) 11 .replace( /(\[video[^\]]*\][\s\S]*?\[\/video\])/g, function( match, attr ) { 12 var data = tinymce.DOM.encode( attr ); 13 console.log( data ); 14 return '<div class="mceTemp media-shortcode-wrapper" draggable="true"><div class="dashicons dashicons-format-video"></div><img src="' + tinymce.Env.transparentSrc + '" class="wp-media-shortcode wp-video-shortcode mceItem" ' + 15 'title="' + data + '" data-mce-resize="false" data-mce-placeholder="1" /></div>'; 16 }); 17 } 18 19 function getMedia( content ) { 20 function getAttr( str, name ) { 21 name = new RegExp( name + '=\"([^\"]+)\"', 'g' ).exec( str ); 22 return name ? tinymce.DOM.decode( name[1] ) : ''; 23 } 24 25 return content.replace( /(<img[^>]+>)<\/div>/g, function( match, image ) { 26 var cls = getAttr( image, 'class' ); 27 28 if ( cls.indexOf('wp-audio-shortcode') !== -1 ) { 29 return tinymce.trim( getAttr( image, 'title' ) ); 30 } 31 32 if ( cls.indexOf('wp-video-shortcode') !== -1 ) { 33 return tinymce.trim( getAttr( image, 'title' ) ); 34 } 35 36 return match; 37 }); 38 } 39 40 // Display 'media' instead of img in element path 41 editor.on( 'ResolveName', function( e ) { 42 var dom = editor.dom, 43 target = e.target; 44 45 if ( target.nodeName === 'IMG' && dom.hasClass( target, 'wp-audio-shortcode' ) ) { 46 e.name = 'audio'; 47 } 48 49 if ( target.nodeName === 'IMG' && dom.hasClass( target, 'wp-video-shortcode' ) ) { 50 e.name = 'video'; 51 } 52 }); 53 54 editor.on( 'BeforeSetContent', function( e ) { 55 e.content = parseMedia( e.content ); 56 }); 57 58 editor.on( 'PostProcess', function( e ) { 59 if ( e.get ) { 60 e.content = getMedia( e.content ); 61 } 62 }); 63 64 return { 65 _do_media: parseMedia, 66 _get_media: getMedia 67 }; 68 }); -
src/wp-includes/js/tinymce/skins/wordpress/wp-content.css
122 122 border-style: solid; 123 123 } 124 124 125 .mce-content-body .media-shortcode-wrapper { 126 position: relative; 127 margin-bottom: 20px; 128 } 129 130 .mce-content-body .media-shortcode-wrapper .dashicons { 131 position: absolute; 132 z-index: 2; 133 left: 50%; 134 top: 50%; 135 font-size: 48px; 136 width: 48px; 137 height: 48px; 138 margin: -24px 0 0 -24px; 139 } 140 141 .mce-content-body img.wp-media-shortcode { 142 border: 1px dashed #888; 143 background: #f2f2f2; 144 width: 99%; 145 height: 250px; 146 outline: 0; 147 cursor: pointer; 148 } 149 150 .mce-content-body img.wp-audio-shortcode { 151 height: 100px; 152 } 153 154 .mce-content-body img.wp-media-shortcode:hover { 155 background-color: #ededed; 156 border-style: solid; 157 } 158 125 159 .mce-content-body img.wp-gallery.wp-gallery-selected { 126 160 background-color: #d8d8d8; 127 161 border-style: solid; -
src/wp-includes/media.php
1223 1223 $html .= sprintf( $source, $type['type'], esc_url( $$fallback ) ); 1224 1224 } 1225 1225 } 1226 1227 if ( ! empty( $content ) ) { 1228 if ( false !== strpos( $content, "\n" ) ) 1229 $content = str_replace( array( "\r\n", "\n", "\t" ), '', $content ); 1230 1231 $html .= trim( $content ); 1232 } 1233 1226 1234 if ( 'mediaelement' === $library ) 1227 1235 $html .= wp_mediaelement_fallback( $fileurl ); 1228 1236 $html .= '</video>'; -
tests/phpunit/tests/media.php
346 346 $matches = get_media_embedded_in_content( $content, $types ); 347 347 $this->assertEquals( $contents, $matches ); 348 348 } 349 350 function test_video_shortcode_body() { 351 $width = 640; 352 $height = 360; 353 354 $video =<<<VIDEO 355 [video width="640" height="360" mp4="http://wordpress-core-develop/wp-content/uploads/2013/12/XVMwB.mp4"] 356 <!-- WebM/VP8 for Firefox4, Opera, and Chrome --> 357 <source type="video/webm" src="myvideo.webm" /> 358 <!-- Ogg/Vorbis for older Firefox and Opera versions --> 359 <source type="video/ogg" src="myvideo.ogv" /> 360 <!-- Optional: Add subtitles for each language --> 361 <track kind="subtitles" src="subtitles.srt" srclang="en" /> 362 <!-- Optional: Add chapters --> 363 <track kind="chapters" src="chapters.srt" srclang="en" /> 364 [/video] 365 VIDEO; 366 367 $w = $GLOBALS['content_width']; 368 $h = ceil( ( $height * $w ) / $width ); 369 370 $content = apply_filters( 'the_content', $video ); 371 372 $expected = '<div style="width: ' . $w . 'px; max-width: 100%;" class="wp-video">' . 373 '<!--[if lt IE 9]><script>document.createElement(\'video\');</script><![endif]--> 374 <video class="wp-video-shortcode" id="video-0-1" width="' . $w . '" height="' . $h . '" preload="metadata" controls="controls">' . 375 '<source type="video/mp4" src="http://wordpress-core-develop/wp-content/uploads/2013/12/XVMwB.mp4" />' . 376 '<!-- WebM/VP8 for Firefox4, Opera, and Chrome --><source type="video/webm" src="myvideo.webm" />' . 377 '<!-- Ogg/Vorbis for older Firefox and Opera versions --><source type="video/ogg" src="myvideo.ogv" />' . 378 '<!-- Optional: Add subtitles for each language --><track kind="subtitles" src="subtitles.srt" srclang="en" />' . 379 '<!-- Optional: Add chapters --><track kind="chapters" src="chapters.srt" srclang="en" />' . 380 '<a href="http://wordpress-core-develop/wp-content/uploads/2013/12/XVMwB.mp4">' . 381 'http://wordpress-core-develop/wp-content/uploads/2013/12/XVMwB.mp4</a></video></div> 382 '; 383 384 $this->assertEquals( $expected, $content ); 385 } 349 386 }