Ticket #5549: 5549.patch

File 5549.patch, 2.5 KB (added by Garry Yao, 8 years ago)
  • _source/plugins/clipboard/plugin.js

     
    164164        // pasting content into a temporary bin and grab the content of it.
    165165        function getClipboardData( evt, mode, callback )
    166166        {
    167                 var doc = this.document;
     167                var doc = this.document, win = doc.getWindow();
    168168
    169169                // Avoid recursions on 'paste' event or consequent paste too fast. (#5730)
    170170                if ( doc.getById( 'cke_pastebin' ) )
     
    184184                }
    185185
    186186                var sel = this.getSelection(),
    187                         range = new CKEDITOR.dom.range( doc );
     187                        range = new CKEDITOR.dom.range( doc ),
     188                        savedScroll = win.getScrollPosition();
    188189
    189190                // Create container to paste into
    190191                var pastebin = new CKEDITOR.dom.element( mode == 'text' ? 'textarea' : CKEDITOR.env.webkit ? 'body' : 'div', doc );
     
    193194                CKEDITOR.env.webkit && pastebin.append( doc.createText( '\xa0' ) );
    194195                doc.getBody().append( pastebin );
    195196
     197
    196198                pastebin.setStyles(
    197199                        {
    198200                                position : 'absolute',
     
    241243                                                        bogusSpan : pastebin );
    242244
    243245                        sel.selectBookmarks( bms );
     246
     247                        // Restore scrolling position, for webkit particularly. (#5549)
     248                        win.$.scrollTo( savedScroll.x, savedScroll.y );
     249
    244250                        callback( pastebin[ 'get' + ( mode == 'text' ? 'Value' : 'Html' ) ]() );
    245251                }, 0 );
    246252        }
  • _source/plugins/selection/plugin.js

     
    15891589                 */
    15901590                scrollIntoView : function()
    15911591                {
    1592                         // If we have split the block, adds a temporary span at the
    1593                         // range position and scroll relatively to it.
    1594                         var start = this.getStartElement();
    1595                         start.scrollIntoView();
     1592                        // We have to create the bookmark, using it as the measuring node
     1593                        // but not the start element of selection in case the selection is anchored
     1594                        // off a text node whose parent element stays so far away from it's geometric position. (#5549)
     1595                        var bms = this.createBookmarks(),
     1596                                bookmark = bms[ bms.length -1 ];
     1597
     1598                        var marker = bookmark.endNode || bookmark.startNode;
     1599                        // Need to make the bookmark visible in order to have "scrollIntoView" working.
     1600                        marker.removeStyle( 'display' );
     1601                        marker.scrollIntoView();
     1602
     1603                        this.selectBookmarks( bms );
    15961604                }
    15971605        };
    15981606})();
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy