Ticket #8617: 8617_2.patch

File 8617_2.patch, 1.7 KB (added by Garry Yao, 13 years ago)
  • _source/plugins/selection/plugin.js

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    162162                var fillingChar = doc && doc.removeCustomData( 'cke-fillingChar' );
    163163                if ( fillingChar )
    164164                {
     165                        var bm, sel = doc.getSelection().getNative();
     166
     167                        // Text selection position might get mangled by
     168                        // subsequent dom modification, save it now for restoring. (#8617)
     169                        if ( fillingChar.getLength() > 1
     170                                 && sel.containsNode( fillingChar.$ ) )
     171                        {
     172                                bm = [ sel.anchorOffset, sel.focusOffset ];
     173
     174                                var startAffected = sel.anchorNode == fillingChar.$,
     175                                        endAffected = sel.focusNode == fillingChar.$;
     176
     177                                // Anticipate the offset change brought by removed char.
     178                                startAffected && bm[ 0 ]--;
     179                                endAffected && bm[ 1 ]--;
     180                        }
     181
    165182                        // We can't simply remove the filling node because the user
    166183                        // will actually enlarge it when typing, so we just remove the
    167184                        // invisible char from it.
    168185                        fillingChar.setText( fillingChar.getText().replace( /\u200B/g, '' ) );
    169                         fillingChar = 0;
    170                 }
    171         }
     186
     187                        // Restore the bookmark.
     188                        if ( bm )
     189                        {
     190                                var rng = sel.getRangeAt( 0 );
     191                                rng.setStart( rng.startContainer, bm[ 0 ] );
     192                                rng.setEnd( rng.startContainer, bm[ 1 ] );
     193                                sel.removeAllRanges();
     194                                sel.addRange( rng );
     195                        }
     196                }
     197        }
    172198
    173199        CKEDITOR.plugins.add( 'selection',
    174200        {
     
    191217                                                        case 37 :       // LEFT-ARROW
    192218                                                        case 39 :       // RIGHT-ARROW
    193219                                                        case 8 :        // BACKSPACE
     220                                                        case 46 :       // DEl
    194221                                                                removeFillingChar( editor.document );
    195222                                                }
    196223                                        }, null, null, 10 );
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy