| 770 | |
| 771 | // [IE8] Fix backspace right after the list. (#8248) |
| 772 | if ( CKEDITOR.env.ie8Compat ) |
| 773 | { |
| 774 | editor.on( 'key', function( evt ) |
| 775 | { |
| 776 | if ( editor.mode == 'wysiwyg' && evt.data.keyCode == 8 ) |
| 777 | { |
| 778 | var sel = editor.getSelection(), |
| 779 | range = sel.getRanges()[ 0 ]; |
| 780 | |
| 781 | var walkerRange = new CKEDITOR.dom.range( editor.document ); |
| 782 | var body = editor.document.getBody(); |
| 783 | walkerRange.setStartAt( body, |
| 784 | CKEDITOR.POSITION_AFTER_START ); |
| 785 | walkerRange.setEnd( range.startContainer, |
| 786 | range.startOffset ); |
| 787 | |
| 788 | var walker = new CKEDITOR.dom.walker( walkerRange ); |
| 789 | walker.evaluator = nonEmpty; |
| 790 | |
| 791 | var previous = walker.previous(); |
| 792 | |
| 793 | // Check if cursor collapsed right behind of a list. |
| 794 | if ( range.collapsed && |
| 795 | previous && |
| 796 | previous.type == CKEDITOR.NODE_ELEMENT && |
| 797 | previous.getName() in listNodeNames ) |
| 798 | { |
| 799 | walkerRange.selectNodeContents( previous ); |
| 800 | walker.reset(); |
| 801 | walker.evaluator = isTextBlock; |
| 802 | var previousBlock = walker.lastForward(); |
| 803 | |
| 804 | // Place cursor at the end of previous block. |
| 805 | var cursor = new CKEDITOR.dom.range( editor.document ); |
| 806 | cursor.moveToElementEditEnd( previousBlock ); |
| 807 | |
| 808 | // Merge with previous block's content. |
| 809 | range.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ); |
| 810 | var frag = range.extractContents(); |
| 811 | |
| 812 | // Kill the tail br in extracted. |
| 813 | var last = frag.getLast(); |
| 814 | if ( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( 'br' ) ) |
| 815 | last.remove(); |
| 816 | |
| 817 | // Kill original bogus; |
| 818 | var bogus = previousBlock.getBogus(); |
| 819 | bogus && bogus.remove(); |
| 820 | |
| 821 | previousBlock.append( frag ); |
| 822 | |
| 823 | // Remove the original path block if needed. |
| 824 | if ( range.checkStartOfBlock() && |
| 825 | range.checkEndOfBlock() ) |
| 826 | { |
| 827 | var path = new CKEDITOR.dom.elementPath( range.startContainer ); |
| 828 | path.block.remove(); |
| 829 | } |
| 830 | |
| 831 | // Make fresh selection. |
| 832 | cursor.select(); |
| 833 | evt.cancel(); |
| 834 | } |
| 835 | } |
| 836 | } ); |
| 837 | } |