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