TinyMCE: improve the previews for embedded WordPress posts:
- Add option to force a sandbox iframe in wpview. - Use it to show the embedded post preview. - Remove the deprecated `wpembed` plugin.js Fixes #39513. git-svn-id: https://develop.svn.wordpress.org/trunk@40019 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
a2ac38016d
commit
1a068f2a61
|
@ -3004,7 +3004,6 @@ function wp_ajax_parse_embed() {
|
||||||
$parsed = $styles . $html . $scripts;
|
$parsed = $styles . $html . $scripts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ( ! empty( $no_ssl_support ) || ( is_ssl() && ( preg_match( '%<(iframe|script|embed) [^>]*src="http://%', $parsed ) ||
|
if ( ! empty( $no_ssl_support ) || ( is_ssl() && ( preg_match( '%<(iframe|script|embed) [^>]*src="http://%', $parsed ) ||
|
||||||
preg_match( '%<link [^>]*href="http://%', $parsed ) ) ) ) {
|
preg_match( '%<link [^>]*href="http://%', $parsed ) ) ) ) {
|
||||||
// Admin is ssl and the embed is not. Iframes, scripts, and other "active content" will be blocked.
|
// Admin is ssl and the embed is not. Iframes, scripts, and other "active content" will be blocked.
|
||||||
|
@ -3014,10 +3013,23 @@ function wp_ajax_parse_embed() {
|
||||||
) );
|
) );
|
||||||
}
|
}
|
||||||
|
|
||||||
wp_send_json_success( array(
|
$return = array(
|
||||||
'body' => $parsed,
|
'body' => $parsed,
|
||||||
'attr' => $wp_embed->last_attr
|
'attr' => $wp_embed->last_attr
|
||||||
) );
|
);
|
||||||
|
|
||||||
|
if ( strpos( $parsed, 'class="wp-embedded-content' ) ) {
|
||||||
|
if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
|
||||||
|
$script_src = includes_url( 'js/wp-embed.js' );
|
||||||
|
} else {
|
||||||
|
$script_src = includes_url( 'js/wp-embed.min.js' );
|
||||||
|
}
|
||||||
|
|
||||||
|
$return['head'] = '<script src="' . $script_src . '"></script>';
|
||||||
|
$return['sandbox'] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wp_send_json_success( $return );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -417,7 +417,6 @@ final class _WP_Editors {
|
||||||
'wpdialogs',
|
'wpdialogs',
|
||||||
'wptextpattern',
|
'wptextpattern',
|
||||||
'wpview',
|
'wpview',
|
||||||
'wpembed',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( ! self::$has_medialib ) {
|
if ( ! self::$has_medialib ) {
|
||||||
|
|
|
@ -468,7 +468,7 @@
|
||||||
* @param {Boolean} rendered Only set for (un)rendered nodes. Optional.
|
* @param {Boolean} rendered Only set for (un)rendered nodes. Optional.
|
||||||
*/
|
*/
|
||||||
setContent: function( content, callback, rendered ) {
|
setContent: function( content, callback, rendered ) {
|
||||||
if ( _.isObject( content ) && content.body.indexOf( '<script' ) !== -1 ) {
|
if ( _.isObject( content ) && ( content.sandbox || content.head || content.body.indexOf( '<script' ) !== -1 ) ) {
|
||||||
this.setIframes( content.head || '', content.body, callback, rendered );
|
this.setIframes( content.head || '', content.body, callback, rendered );
|
||||||
} else if ( _.isString( content ) && content.indexOf( '<script' ) !== -1 ) {
|
} else if ( _.isString( content ) && content.indexOf( '<script' ) !== -1 ) {
|
||||||
this.setIframes( '', content, callback, rendered );
|
this.setIframes( '', content, callback, rendered );
|
||||||
|
@ -584,6 +584,9 @@
|
||||||
'display: none;' +
|
'display: none;' +
|
||||||
'content: "";' +
|
'content: "";' +
|
||||||
'}' +
|
'}' +
|
||||||
|
'iframe {' +
|
||||||
|
'max-width: 100%;' +
|
||||||
|
'}' +
|
||||||
'</style>' +
|
'</style>' +
|
||||||
'</head>' +
|
'</head>' +
|
||||||
'<body id="wpview-iframe-sandbox" class="' + bodyClasses + '">' +
|
'<body id="wpview-iframe-sandbox" class="' + bodyClasses + '">' +
|
||||||
|
@ -623,10 +626,22 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function reload() {
|
function reload() {
|
||||||
$( node ).data( 'rendered', null );
|
if ( ! editor.isHidden() ) {
|
||||||
|
$( node ).data( 'rendered', null );
|
||||||
|
|
||||||
setTimeout( function() {
|
setTimeout( function() {
|
||||||
wp.mce.views.render();
|
wp.mce.views.render();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addObserver() {
|
||||||
|
observer = new MutationObserver( _.debounce( resize, 100 ) );
|
||||||
|
|
||||||
|
observer.observe( iframeDoc.body, {
|
||||||
|
attributes: true,
|
||||||
|
childList: true,
|
||||||
|
subtree: true
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -635,13 +650,11 @@
|
||||||
MutationObserver = iframeWin.MutationObserver || iframeWin.WebKitMutationObserver || iframeWin.MozMutationObserver;
|
MutationObserver = iframeWin.MutationObserver || iframeWin.WebKitMutationObserver || iframeWin.MozMutationObserver;
|
||||||
|
|
||||||
if ( MutationObserver ) {
|
if ( MutationObserver ) {
|
||||||
observer = new MutationObserver( _.debounce( resize, 100 ) );
|
if ( ! iframeDoc.body ) {
|
||||||
|
iframeDoc.addEventListener( 'DOMContentLoaded', addObserver, false );
|
||||||
observer.observe( iframeDoc.body, {
|
} else {
|
||||||
attributes: true,
|
addObserver();
|
||||||
childList: true,
|
}
|
||||||
subtree: true
|
|
||||||
} );
|
|
||||||
} else {
|
} else {
|
||||||
for ( i = 1; i < 6; i++ ) {
|
for ( i = 1; i < 6; i++ ) {
|
||||||
setTimeout( resize, i * 700 );
|
setTimeout( resize, i * 700 );
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
(function ( tinymce ) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
tinymce.PluginManager.add( 'wpembed', function ( editor, url ) {
|
|
||||||
editor.on( 'init', function () {
|
|
||||||
var scriptId = editor.dom.uniqueId();
|
|
||||||
|
|
||||||
var scriptElm = editor.dom.create( 'script', {
|
|
||||||
id: scriptId,
|
|
||||||
type: 'text/javascript',
|
|
||||||
src: url + '/../../../wp-embed.js'
|
|
||||||
} );
|
|
||||||
|
|
||||||
editor.getDoc().getElementsByTagName( 'head' )[ 0 ].appendChild( scriptElm );
|
|
||||||
} );
|
|
||||||
} );
|
|
||||||
})( window.tinymce );
|
|
Loading…
Reference in New Issue