Changeset 4207


Ignore:
Timestamp:
09/09/2009 07:55:10 AM (5 years ago)
Author:
garry.yao
Message:

Check in changes for #4395: reorganize paste cleanup logic to use pasrer and filter; introducing paste processor.

Location:
CKEditor/branches/features/pasting/_source
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/branches/features/pasting/_source/core/htmlparser/filter.js

    r3309 r4207  
    112112 
    113113                                return value; 
     114                        }, 
     115 
     116                        clone : function() 
     117                        { 
     118                                var clone = new CKEDITOR.htmlParser.filter(); 
     119                                // Shallow copy all the rules. 
     120                                clone._ = CKEDITOR.tools.clone( this._ ); 
     121                                return clone; 
    114122                        } 
    115123                } 
  • CKEditor/branches/features/pasting/_source/plugins/clipboard/dialogs/paste.js

    r4174 r4207  
    119119 
    120120                        setTimeout( function(){ 
    121                                 editor.insertHtml( html ); 
     121                                editor.fire( 'paste', { 'html' : html } ); 
    122122                        }, 0 ); 
    123123 
  • CKEditor/branches/features/pasting/_source/plugins/clipboard/plugin.js

    r4206 r4207  
    131131                                                 || CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) 
    132132                                        editor.document.getBody().fire( 'paste' ); 
    133                                          
    134                                 setTimeout( function() 
    135                                         { 
    136                                                 editor.fire( 'saveSnapshot' );          // Save after paste 
    137                                         }, 0 ); 
    138133                                return; 
    139134 
     
    223218        CKEDITOR.plugins.add( 'clipboard', 
    224219                { 
     220                        requires : [ 'htmldataprocessor' ], 
    225221                        init : function( editor ) 
    226222                        { 
    227                                 // Provide default 'html' paste handler.  
     223                                // The paste processor here is just a reduced copy of html data processor. 
     224                                CKEDITOR.pasteProcessor = function( editor ) 
     225                                { 
     226                                        this.editor = editor; 
     227                                        this.dataFilter = this.editor.dataProcessor.dataFilter.clone(); 
     228                                }; 
     229                                CKEDITOR.pasteProcessor.prototype = 
     230                                { 
     231                                        toHtml : CKEDITOR.htmlDataProcessor.prototype.toHtml 
     232                                }; 
     233 
     234                                // The very first handler which initialize the processor. 
    228235                                editor.on( 'paste', function( evt ) 
    229236                                { 
    230                                         editor.insertHtml( evt.data[ 'html' ] ); 
    231                                 } ); 
     237                                        // The processor is a transient instance life cycled to the 
     238                                        // 'paste' event since the processing rules will be added 
     239                                        // on demand accordingly to clipboard data flavor. 
     240                                        editor.pasteProcessor = new CKEDITOR.pasteProcessor( editor ); 
     241                                         
     242                                }, null, null, 1 ); 
     243 
     244                                // The very last handler which insert final data into the editor at the end of the chain. 
     245                                editor.on( 'paste', function( evt ) 
     246                                { 
     247                                        var data = evt.data; 
     248 
     249                                        if ( data[ 'html'] ) 
     250                                                editor.insertHtml(editor.pasteProcessor.toHtml(data[ 'html' ], false)); 
     251                                        else if ( data[ 'text'] ) 
     252                                                editor.insertText(data[ 'text' ]); 
     253 
     254                                        delete editor.pasteProcessor; 
     255 
     256                                        editor.fire( 'saveSnapshot' ); // Save after inserted. 
     257 
     258                                }, null, null, 1000 ); 
    232259 
    233260                                function addButtonCommand( buttonName, commandName, command, ctxMenuOrder ) 
     
    278305                                                                 
    279306                                                                editor.fire( 'paste', dataTransfer ); 
    280                                                                 editor.fire( 'saveSnapshot' );          // Save after paste 
    281307                                                        } ); 
    282308                                                } ); 
     
    305331                        } 
    306332                }); 
     333 
     334 
    307335})(); 
    308336 
  • CKEditor/branches/features/pasting/_source/plugins/pastefromword/dialogs/pastefromword.js

    r4206 r4207  
    103103                                iframe = container.getElementsByTag( 'iframe' ).getItem( 0 ), 
    104104                                editor = this.getParentEditor(), 
    105                                 html = this.definition.cleanWord( editor, iframe.$.contentWindow.document.body.innerHTML, 
    106                                                 this.getValueOf( 'general', 'ignoreFontFace' ), 
    107                                                 this.getValueOf( 'general', 'removeStyle' ) ); 
     105                                //TODO: Bring those dialog-based configs to the paste processor. 
     106                                html = iframe.$.contentWindow.document.body.innerHTML; 
    108107 
    109108                                // Insertion should happen after main document design mode turned on. 
    110109                                setTimeout( function(){ 
    111                                         editor.insertHtml( html ); 
     110                                        editor.fire( 'paste', { 'html' : html } ); 
    112111                                }, 0 ); 
    113112                }, 
  • CKEditor/branches/features/pasting/_source/plugins/pastefromword/plugin.js

    r4206 r4207  
    1919                                command : 'pastefromword' 
    2020                        } ); 
    21  
     21                 
    2222                var config = editor.config; 
    2323                editor.on( 'paste', function( evt ) 
     
    2828                                 && /(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test( mswordHtml ) ) 
    2929                        { 
    30                                 // Perform cleaning with default configuration. 
    31                                 editor.insertHtml( 
    32                                         CKEDITOR.plugins.pastefromword.cleanWord( 
    33                                                 editor, mswordHtml, 
    34                                                 config.pasteFromWordIgnoreFontFace, 
    35                                                 config.pasteFromWordRemoveStyle)); 
     30                                var filter = editor.pasteProcessor.dataFilter; 
     31                                // TODO: Migrate the 'CKEDITOR.plugins.pastefromword' to filter rules. 
     32                                filter.addRules( 
     33                                { 
    3634 
    37                                 // Cancel other html paste handlers. 
    38                                 evt.cancel(); 
     35                                } ); 
    3936                        } 
    40                 }, null, null, 9 ); 
     37                } ); 
    4138 
    4239        } 
  • CKEditor/branches/features/pasting/_source/plugins/pastetext/dialogs/pastetext.js

    r3622 r4207  
    2424                                        // Get the textarea value. 
    2525                                        var text = this.getContentElement( 'general', 'content' ).getInputElement().getValue(); 
    26  
    27                                         // Inserts the text. 
    28                                         this.getParentEditor().insertText( text ); 
     26                                        this.getParentEditor().fire( 'paste', { 'text' : text } ); 
    2927                                }, 
    3028 
  • CKEditor/branches/features/pasting/_source/plugins/pastetext/plugin.js

    r4036 r4207  
    2323                        } 
    2424 
    25                         editor.insertText( window.clipboardData.getData( 'Text' ) ); 
     25                        editor.fire( 'paste', { 'text' : window.clipboardData.getData( 'Text' ) } ); 
    2626                } 
    2727        }; 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy