TinyMCE: fix the More and Next Page tags behavior:

- Append them inside top level <p> tags.
- If the caret is not in a top level <p>, create new paragraph after the current top level tag.
- Do not change placement when edited in the Text editor.
See #27378

git-svn-id: https://develop.svn.wordpress.org/trunk@27729 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Andrew Ozz 2014-03-26 02:07:23 +00:00
parent f2c1fcbb65
commit 2dcbd7d3ca
2 changed files with 9 additions and 33 deletions

View File

@ -643,7 +643,7 @@ function edButton(id, display, tagStart, tagEnd, access) {
edButtons[90] = new qt.TagButton('ol','ol','<ol>\n','</ol>\n\n','o'),
edButtons[100] = new qt.TagButton('li','li','\t<li>','</li>\n','l'),
edButtons[110] = new qt.TagButton('code','code','<code>','</code>','c'),
edButtons[120] = new qt.TagButton('more','more','\n\n<!--more-->\n\n','','t'),
edButtons[120] = new qt.TagButton('more','more','<!--more-->\n\n','','t'),
edButtons[140] = new qt.CloseButton();
})();

View File

@ -130,32 +130,10 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
}
});
// Make sure the "more" tag is in a separate paragraph
editor.on( 'PreProcess', function( event ) {
var more;
if ( event.save ) {
more = editor.dom.select( 'img.wp-more-tag', event.node );
if ( more.length ) {
tinymce.each( more, function( node ) {
var parent = node.parentNode, p;
if ( parent.nodeName === 'P' && parent.childNodes.length > 1 ) {
p = editor.dom.create('p');
parent.parentNode.insertBefore( p, parent );
p.appendChild( node );
}
});
}
}
});
// Register commands
editor.addCommand( 'WP_More', function( tag ) {
var parent, html, title, p1, p2,
var parent, html, title,
classname = 'wp-more-tag',
spacer = tinymce.Env.ie ? '' : '<br data-mce-bogus="1" />',
dom = editor.dom,
node = editor.selection.getNode();
@ -165,8 +143,9 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
html = '<img src="' + tinymce.Env.transparentSrc + '" title="' + title + '" class="' + classname + '" ' +
'data-mce-resize="false" data-mce-placeholder="1" />';
if ( node.nodeName === 'BODY' ) {
editor.insertContent( '<p>' + html + '</p><p></p>' );
// Most common case
if ( node.nodeName === 'BODY' || ( node.nodeName === 'P' && node.parentNode.nodeName === 'BODY' ) ) {
editor.insertContent( html );
return;
}
@ -180,16 +159,13 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
}, editor.getBody() );
if ( parent ) {
p1 = dom.create( 'p', null, html );
dom.insertAfter( p1, parent );
if ( ! ( p2 = p1.nextSibling ) ) {
p2 = dom.create( 'p', null, spacer );
dom.insertAfter( p2, p1 );
if ( parent.nodeName === 'P' ) {
parent.appendChild( dom.create( 'p', null, html ).firstChild );
} else {
dom.insertAfter( dom.create( 'p', null, html ), parent );
}
editor.nodeChanged();
editor.selection.setCursorLocation( p2, 0 );
}
});