+ else if ( range.collapsed )\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.cancel();\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.cancel();\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+ // PageUp OR PageDown\r
+ if ( keyCode == 33 || keyCode == 34 )\r
+ {\r
+ if ( CKEDITOR.env.gecko )\r
+ {\r
+ var body = domDocument.getBody();\r
+\r
+ // Page up/down cause editor selection to leak\r
+ // outside of editable thus we try to intercept\r
+ // the behavior, while it affects only happen\r
+ // when editor contents are not overflowed. (#7955)\r
+ if ( domWindow.$.innerHeight > body.$.offsetHeight )\r
+ {\r
+ range = new CKEDITOR.dom.range( domDocument );\r
+ range[ keyCode == 33 ? 'moveToElementEditStart' : 'moveToElementEditEnd']( body );\r
+ range.select();\r
+ evt.cancel();\r
+ }\r
+ }\r
+\r