Changeset 4207


Ignore:
Timestamp:
09/09/09 07:55:10 (6 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 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy