+ }\r
+ else\r
+ {\r
+ // Handle the following special cases: (#6217)\r
+ // 1. Del/Backspace key before/after table;\r
+ // 2. Backspace Key after start of table.\r
+ if ( ( block = path.block ) &&\r
+ range[ rtl ? 'checkStartOfBlock' : 'checkEndOfBlock' ]() &&\r
+ ( next = block[ rtl ? 'getPrevious' : 'getNext' ]( notWhitespaceEval ) ) &&\r
+ next.is( 'table' ) )\r
+ {\r
+ editor.fire( 'saveSnapshot' );\r
+\r
+ // Remove the current empty block.\r
+ if ( range[ rtl ? 'checkEndOfBlock' : 'checkStartOfBlock' ]() )\r
+ block.remove();\r
+\r
+ // Move cursor to the beginning/end of table cell.\r
+ range[ 'moveToElementEdit' + ( rtl ? 'End' : 'Start' ) ]( next );\r
+ range.select();\r
+\r
+ editor.fire( 'saveSnapshot' );\r
+\r
+ evt.data.preventDefault();\r
+ }\r
+ else if ( path.blockLimit.is( 'td' ) &&\r
+ ( parent = path.blockLimit.getAscendant( 'table' ) ) &&\r
+ range.checkBoundaryOfElement( parent, rtl ? CKEDITOR.START : CKEDITOR.END ) &&\r
+ ( next = parent[ rtl ? 'getPrevious' : 'getNext' ]( notWhitespaceEval ) ) )\r
+ {\r
+ editor.fire( 'saveSnapshot' );\r
+\r
+ // Move cursor to the end of previous block.\r
+ range[ 'moveToElementEdit' + ( rtl ? 'End' : 'Start' ) ]( next );\r
+\r
+ // Remove any previous empty block.\r
+ if ( range.checkStartOfBlock() && range.checkEndOfBlock() )\r
+ next.remove();\r
+ else\r
+ range.select();\r
+\r
+ editor.fire( 'saveSnapshot' );\r
+\r
+ evt.data.preventDefault();\r
+ }\r
+\r