diff --git a/wp-admin/js/editor.js b/wp-admin/js/editor.js index a9caaa1d5d..0e47b3e022 100644 --- a/wp-admin/js/editor.js +++ b/wp-admin/js/editor.js @@ -508,47 +508,26 @@ window.wp = window.wp || {}; scrollVisualModeToStartElement( editor, startNode ); - removeSelectionMarker( editor, startNode ); - removeSelectionMarker( editor, endNode ); + removeSelectionMarker( startNode ); + removeSelectionMarker( endNode ); } /** - * @summary Remove selection marker with optional `
` parent. + * @summary Remove selection marker and the parent node if it is an empty paragraph. * - * By default TinyMCE puts every inline node at the main level in a `
` wrapping tag. + * By default TinyMCE wraps loose inline tags in a `
`. + * When removing selection markers an empty `
` may be left behind, remove it. * - * In the case with selection markers, when removed they leave an empty `
` behind, - * which adds an empty paragraph line with ` ` when switched to Text mode. - * - * In order to prevent that the wrapping `
` needs to be removed when removing the - * selection marker. - * - * @param {object} editor The TinyMCE Editor instance - * @param {object} marker The marker to be removed from the editor DOM + * @param {object} $marker The marker to be removed from the editor DOM, wrapped in an instnce of `editor.$` */ - function removeSelectionMarker( editor, marker ) { - var markerParent = editor.$( marker ).parent(); + function removeSelectionMarker( $marker ) { + var $markerParent = $marker.parent(); - if ( - ! markerParent.length || - markerParent.prop('tagName').toLowerCase() !== 'p' || - markerParent[0].childNodes.length > 1 || - ! markerParent.prop('outerHTML').match(/^
/) - ) { - /** - * The selection marker is not self-contained in a
. - * In this case only the selection marker is removed, since - * it will affect the content. - */ - marker.remove(); - } - else { - /** - * The marker is self-contained in an blank `
` tag.
- *
- * This is usually inserted by TinyMCE
- */
- markerParent.remove();
+ $marker.remove();
+
+ //Remove empty paragraph left over after removing the marker.
+ if ( $markerParent.is( 'p' ) && ! $markerParent.children().length && ! $markerParent.text() ) {
+ $markerParent.remove();
}
}
diff --git a/wp-admin/js/editor.min.js b/wp-admin/js/editor.min.js
index 6baf937aae..2f38355d82 100644
--- a/wp-admin/js/editor.min.js
+++ b/wp-admin/js/editor.min.js
@@ -1 +1 @@
-window.wp=window.wp||{},function(a,b){function c(){function c(){!x&&window.tinymce&&(x=window.tinymce,y=x.$,y(document).on("click",function(a){var b,c,d=y(a.target);d.hasClass("wp-switch-editor")&&(b=d.attr("data-wp-editor-id"),c=d.hasClass("switch-tmce")?"tmce":"html",e(b,c))}))}function d(a){var b=y(".mce-toolbar-grp",a.getContainer())[0],c=b&&b.clientHeight;return c&&c>10&&c<200?parseInt(c,10):30}function e(b,c){b=b||"content",c=c||"toggle";var e,f,g,h=x.get(b),i=y("#wp-"+b+"-wrap"),j=y("#"+b),k=j[0];if("toggle"===c&&(c=h&&!h.isHidden()?"html":"tmce"),"tmce"===c||"tinymce"===c){if(h&&!h.isHidden())return!1;"undefined"!=typeof window.QTags&&window.QTags.closeAllTags(b),e=parseInt(k.style.height,10)||0,m(j,a),h?(h.show(),!x.Env.iOS&&e&&(f=d(h),e=e-f+14,e>50&&e<5e3&&h.theme.resizeTo(null,e)),n(h)):x.init(window.tinyMCEPreInit.mceInit[b]),i.removeClass("html-active").addClass("tmce-active"),j.attr("aria-hidden",!0),window.setUserSetting("editor","tinymce")}else if("html"===c){if(h&&h.isHidden())return!1;var l=null;h?(x.Env.iOS||(g=h.iframeElement,e=g?parseInt(g.style.height,10):0,e&&(f=d(h),e=e+f-14,e>50&&e<5e3&&(k.style.height=e+"px"))),l=r(h),h.hide(),l&&s(h,l)):j.css({display:"",visibility:""}),i.removeClass("tmce-active").addClass("html-active"),j.attr("aria-hidden",!1),window.setUserSetting("editor","html")}}function f(a,b){var c=a.lastIndexOf("<",b-1),d=a.lastIndexOf(">",b);if(c>d||">"===a.substr(b,1)){var e=a.substr(c),f=e.match(/<\s*(\/)?(\w+)/);if(!f)return null;var g=f[2],h=e.indexOf(">");return{ltPos:c,gtPos:c+h+1,tagType:g,isClosingTag:!!f[1]}}return null}function g(a,b){var c=j(a);return _.find(c,function(a){return b>=a.startIndex&&b<=a.endIndex})}function h(a){var b=a.match(/\[+([\w_-])+/g);return _.uniq(_.map(b,function(a){return a.replace(/^\[+/g,"")}))}function i(a){var c=["caption"];return c.indexOf(a)!==-1||void 0!==b.mce.views.get(a)}function j(a){var c=h(a);if(0===c.length)return[];for(var d,e=b.shortcode.regexp(c.join("|")),f=[];d=e.exec(a);){var g="["===d[1],j=!g&&i(d[2]),k={shortcodeName:d[2],showAsPlainText:g,startIndex:d.index,endIndex:d.index+d[0].length,length:d[0].length,isPreviewable:j};f.push(k)}return f}function k(a,b){return a("").css({display:"inline-block",width:0,overflow:"hidden","line-height":0}).html(b?b:"")}function l(a,b){var c=["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],d=b.cursorStart,e=b.cursorEnd,h=f(a,d);h&&(d=c.indexOf(h.tagType)!==-1?h.ltPos:h.gtPos);var i=f(a,e);i&&(e=i.gtPos);var j=g(a,d);j&&j.isPreviewable&&(d=j.startIndex);var k=g(a,e);return k&&k.isPreviewable&&(e=k.endIndex),{cursorStart:d,cursorEnd:e}}function m(a){if(a&&a.length){var b=a[0],c=b.value,d=l(c,{cursorStart:b.selectionStart,cursorEnd:b.selectionEnd}),e=d.cursorStart,f=d.cursorEnd,g=e!==f?"range":"single",h=null,i=k(y,"");if("range"===g){var j=b.value.slice(e,f),m=i.clone().addClass("mce_SELRES_end");h=[j,m[0].outerHTML].join("")}b.value=[b.value.slice(0,e),i.clone().addClass("mce_SELRES_start")[0].outerHTML,h,b.value.slice(f)].join("")}}function n(a){var b=a.$(".mce_SELRES_start"),c=a.$(".mce_SELRES_end");if(b.length)if(a.focus(),c.length){var d=a.getDoc().createRange();d.setStartAfter(b[0]),d.setEndBefore(c[0]),a.selection.setRng(d)}else a.selection.select(b[0]);p(a,b),o(a,b),o(a,c)}function o(a,b){var c=a.$(b).parent();!c.length||"p"!==c.prop("tagName").toLowerCase()||c[0].childNodes.length>1||!c.prop("outerHTML").match(/^ /)?b.remove():c.remove()}function p(b,c){var e=b.$(c).offset().top,f=b.$(b.getContentAreaContainer()).offset().top,g=a("#wp-content-editor-tools"),h=g.height(),i=g.offset().top,j=d(b),k=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,l=f+e,m=k-(h+j),n=Math.max(l-m/2,i-h);a("html,body").animate({scrollTop:parseInt(n,10)},100)}function q(a){a.content=a.content.replace(/ (?:
|\u00a0|\uFEFF| )*<\/p>/g,"