Ticket #8248: 8248_2.patch

File 8248_2.patch, 3.1 KB (added by Garry Yao, 8 years ago)
  • _source/plugins/list/plugin.js

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    736736        for ( i in dtd.$listItem )
    737737                defaultListHtmlFilterRules.elements[ i ] = getExtendNestedListFilter( true );
    738738
     739        function isTextBlock( node )
     740        {
     741                return node.type == CKEDITOR.NODE_ELEMENT &&
     742                           ( node.getName() in CKEDITOR.dtd.$block ||
     743                                 node.getName() in CKEDITOR.dtd.$listItem ) &&
     744                           CKEDITOR.dtd[ node.getName() ][ '#' ];
     745        }
     746
    739747        CKEDITOR.plugins.add( 'list',
    740748        {
    741749                init : function( editor )
     
    759767                        // Register the state changing handlers.
    760768                        editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, numberedListCommand ) );
    761769                        editor.on( 'selectionChange', CKEDITOR.tools.bind( onSelectionChange, bulletedListCommand ) );
     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                        }
    762838                },
    763839
    764840                afterInit : function ( editor )
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy