path = new CKEDITOR.dom.elementPath( range.startContainer ),\r
block = path.block;\r
\r
- // Exit the list when we're inside an empty list item block. (#5376)\r
if ( atBlockStart && atBlockEnd )\r
{\r
+ // Exit the list when we're inside an empty list item block. (#5376)\r
if ( block && ( block.is( 'li' ) || block.getParent().is( 'li' ) ) )\r
{\r
editor.execCommand( 'outdent' );\r
return;\r
}\r
+\r
+ if ( block && block.getParent().is( 'blockquote' ) )\r
+ {\r
+ block.breakParent( block.getParent() );\r
+\r
+ // If we were at the start of <blockquote>, there will be an empty element before it now.\r
+ if ( !block.getPrevious().getFirst( CKEDITOR.dom.walker.invisible(1) ) )\r
+ block.getPrevious().remove();\r
+\r
+ // If we were at the end of <blockquote>, there will be an empty element after it now.\r
+ if ( !block.getNext().getFirst( CKEDITOR.dom.walker.invisible(1) ) )\r
+ block.getNext().remove();\r
+\r
+ range.moveToElementEditStart( block );\r
+ range.select();\r
+ return;\r
+ }\r
}\r
// Don't split <pre> if we're in the middle of it, act as shift enter key.\r
- else if ( !atBlockEnd && block && block.is( 'pre' ) )\r
+ else if ( block && block.is( 'pre' ) )\r
+ {\r
+ if ( !atBlockEnd )\r
+ {\r
+ enterBr( editor, mode, range, forceMode );\r
+ return;\r
+ }\r
+ }\r
+ // Don't split caption blocks. (#7944)\r
+ else if ( block && CKEDITOR.dtd.$captionBlock[ block.getName() ] )\r
+ {\r
enterBr( editor, mode, range, forceMode );\r
+ return;\r
+ }\r
\r
// Determine the block element to be used.\r
var blockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' );\r
{\r
// Otherwise, duplicate the previous block.\r
newBlock = previousBlock.clone();\r
- // Value attribute of list item should not be duplicated (#7330).\r
- newBlock.is( 'li' ) && newBlock.removeAttribute( 'value' );\r
}\r
}\r
else if ( nextBlock )\r
if ( !newBlock.getParent() )\r
range.insertNode( newBlock );\r
\r
+ // list item start number should not be duplicated (#7330), but we need\r
+ // to remove the attribute after it's onto the DOM tree because of old IEs (#7581).\r
+ newBlock.is( 'li' ) && newBlock.removeAttribute( 'value' );\r
+\r
// This is tricky, but to make the new block visible correctly\r
// we must select it.\r
// The previousBlock check has been included because it may be\r
setTimeout( function()\r
{\r
editor.fire( 'saveSnapshot' ); // Save undo step.\r
+\r
if ( mode == CKEDITOR.ENTER_BR )\r
enterBr( editor, mode, null, forceMode );\r
else\r
enterBlock( editor, mode, null, forceMode );\r
\r
+ editor.fire( 'saveSnapshot' );\r
+\r
}, 0 );\r
\r
return true;\r