Ticket #3707: 3707.patch

File 3707.patch, 4.5 KB (added by Garry Yao, 10 years ago)
  • _source/plugins/wysiwygarea/plugin.js

     
    2222                if ( this.mode == 'wysiwyg' )
    2323                {
    2424                        this.focus();
     25                        var data = evt.data;
    2526
    26                         var selection = this.getSelection(),
    27                                 data = evt.data;
    28 
    2927                        if ( this.dataProcessor )
    3028                                data = this.dataProcessor.toHtml( data );
    3129
    32                         if ( CKEDITOR.env.ie )
     30                        // Translate html string into a serial of elements insertion.
     31                        var temp = new CKEDITOR.dom.element( 'body' );
     32                        temp.setHtml( data );
     33                        var children = temp.getChildren();
     34                        while ( children.count() )
    3335                        {
    34                                 var selIsLocked = selection.isLocked;
    35 
    36                                 if ( selIsLocked )
    37                                         selection.unlock();
    38 
    39                                 var $sel = selection.getNative();
    40                                 if ( $sel.type == 'Control' )
    41                                         $sel.clear();
    42                                 $sel.createRange().pasteHTML( data );
    43 
    44                                 if ( selIsLocked )
    45                                         this.getSelection().lock();
     36                                // Mock up the 'insertElement' event.
     37                                onInsertElement.call( this, { data : children.getItem( 0 ) } );
    4638                        }
    47                         else
    48                                 this.document.$.execCommand( 'inserthtml', false, data );
    4939                }
    5040        }
    5141
     
    5444                if ( this.mode == 'wysiwyg' )
    5545                {
    5646                        this.focus();
    57                         this.fire( 'saveSnapshot' );
    58 
    5947                        var element = evt.data,
    60                                 elementName = element.getName(),
    61                                 isBlock = CKEDITOR.dtd.$block[ elementName ];
    62 
     48                                elementName = element.getName && element.getName() || '#';
    6349                        var selection = this.getSelection(),
    6450                                ranges = selection.getRanges();
    6551
     
    7965
    8066                                clone = !i && element || element.clone( true );
    8167
    82                                 // If we're inserting a block at dtd-violated positoin, split
    83                                 // the parent blocks until we reach blockLimit.
     68                                // If we're inserting a node at dtd-violated positoin, split
     69                                // the parent elements until we find a corrent position.
    8470                                var parent, dtd;
    85                                 if ( this.config.enterMode != CKEDITOR.ENTER_BR && isBlock )
    86                                         while( ( parent = range.getCommonAncestor( false, true ) )
    87                                                         && ( dtd = CKEDITOR.dtd[ parent.getName() ] )
    88                                                         && !( dtd && dtd [ elementName ] ) )
    89                                                 range.splitBlock();
     71                                while( ( parent = range.getCommonAncestor( false, true ) )
     72                                                && ( dtd = CKEDITOR.dtd[ parent.getName() ] )
     73                                                && !( dtd && dtd [ elementName ] ) )
     74                                        range.splitBlock();
    9075
    9176                                // Insert the new node.
    9277                                range.insertNode( clone );
     
    10893                        if ( selIsLocked )
    10994                                this.getSelection().lock();
    11095
    111                         // Save snaps after the whole execution completed.
    112                         // This's a workaround for make DOM modification's happened after
    113                         // 'insertElement' to be included either, e.g. Form-based dialogs' 'commitContents'
    114                         // call.
    115                         CKEDITOR.tools.setTimeout( function(){
    116                                 this.fire( 'saveSnapshot' );
    117                         }, 0, this );
    11896                }
    11997        }
    12098       
  • _source/plugins/selection/plugin.js

     
    582582                                        if ( !sel )
    583583                                                return [];
    584584
    585                                         for ( var i = 0 ; i < sel.rangeCount ; i++ )
     585                                        var count = sel.rangeCount;
     586
     587                                        // When a fresh loaded document gain focus, it doesn't contain
     588                                        // any ranges, we force a range at the beginning of document.
     589                                        if ( !count )
     590                                           sel.addRange( this.document.$.createRange() );
     591
     592                                        for ( var i = 0 ; i < count ; i++ )
    586593                                        {
    587594                                                var nativeRange = sel.getRangeAt( i );
    588595                                                var range = new CKEDITOR.dom.range( this.document );
  • _source/core/editor.js

     
    577577                 */
    578578                insertHtml : function( data )
    579579                {
     580                        this.fire( 'saveSnapshot' );
    580581                        this.fire( 'insertHtml', data );
     582                        // Save snaps after the whole execution completed.
     583                        CKEDITOR.tools.setTimeout( function(){
     584                                this.fire( 'saveSnapshot' );
     585                        }, 0, this );
    581586                },
    582587
    583588                /**
     
    591596                 */
    592597                insertElement : function( element )
    593598                {
     599                        this.fire( 'saveSnapshot' );
    594600                        this.fire( 'insertElement', element );
     601                        // Save snaps after the whole execution completed.
     602                        CKEDITOR.tools.setTimeout( function(){
     603                                this.fire( 'saveSnapshot' );
     604                        }, 0, this );
    595605                },
    596606
    597607                checkDirty : function()
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy