Ticket #3591: 3591_4.patch

File 3591_4.patch, 5.7 KB (added by garry.yao, 6 years ago)
  • _source/plugins/flash/plugin.js

     
    77{
    88        var flashFilenameRegex = /\.swf(?:$|\?)/i,
    99                numberRegex = /^\d+(?:\.\d+)?$/;
     10        var flashTagNamesRegex = /(<[/]?)(object|embed|param)(.*?>)/gi;
     11        var flashParamTagRegex = /(<)(cke:param)(.*?)\/(>)/gi;
    1012
    1113        function cssifyLength( length )
    1214        {
     
    9092
    9193                afterInit : function( editor )
    9294                {
     95                        // 1. 'embeded' and 'object' elements has problem during native DOM operation,
     96                        //     we're transforming them here into custom tag names.
     97                        // 2. Self-closing custom elements will be treated as open tag,
     98                        //    so transform them into normal closing form.( With proper restore later )
     99                        editor.on( 'beforeToHtml', function( evt )
     100                        {
     101                                var html = evt.data.html;
     102                                evt.data.html = html.replace( flashTagNamesRegex, '$1cke:$2$3').replace(
     103                                                flashParamTagRegex, '$1$2$3$4 $1/$2$4' );
     104                        } );
     105
    93106                        var dataProcessor = editor.dataProcessor,
    94                                 dataFilter = dataProcessor && dataProcessor.dataFilter;
     107                                dataFilter = dataProcessor && dataProcessor.dataFilter,
     108                                htmlFilter = dataProcessor && dataProcessor.htmlFilter;
    95109
    96110                        if ( dataFilter )
    97111                        {
     
    134148                                        },
    135149                                        5);
    136150                        }
     151
     152                        if ( htmlFilter )
     153                        {
     154                                htmlFilter.addRules( {
     155                                        elements : {
     156                                                // Restoring 'param' tags into self-closing.
     157                                                param : function( param )
     158                                                {
     159                                                        param.children = [];
     160                                                        param.isEmpty = true;
     161                                                        return param;
     162                                                }
     163                                        }
     164                                } );
     165                        }
    137166                },
    138167
    139168                requires : [ 'fakeobjects' ]
  • _source/plugins/htmldataprocessor/plugin.js

     
    126126
    127127                init : function( editor )
    128128                {
    129                         var dataProcessor = editor.dataProcessor = new CKEDITOR.htmlDataProcessor();
    130 
    131                         dataProcessor.writer.forceSimpleAmpersand = editor.config.forceSimpleAmpersand;
    132 
    133                         dataProcessor.dataFilter.addRules( defaultDataFilterRules );
    134                         dataProcessor.htmlFilter.addRules( defaultHtmlFilterRules );
    135                 }
    136         });
    137 
    138         CKEDITOR.htmlDataProcessor = function()
    139         {
    140                 this.writer = new CKEDITOR.htmlWriter();
    141                 this.dataFilter = new CKEDITOR.htmlParser.filter();
    142                 this.htmlFilter = new CKEDITOR.htmlParser.filter();
    143         };
     129                        CKEDITOR.htmlDataProcessor = function()
     130                        {
     131                                this.writer = new CKEDITOR.htmlWriter();
     132                                this.dataFilter = new CKEDITOR.htmlParser.filter();
     133                                this.htmlFilter = new CKEDITOR.htmlParser.filter();
     134                        };
    144135
    145         CKEDITOR.htmlDataProcessor.prototype =
    146         {
    147                 toHtml : function( data, fixForBody )
    148                 {
    149                         // The source data is already HTML, but we need to clean
    150                         // it up and apply the filter.
     136                        CKEDITOR.htmlDataProcessor.prototype =
     137                        {
     138                                toHtml : function( data, fixForBody )
     139                                {
     140                                        // Distribute the pre-processing of the data foramt.
     141                                        var evt = { html : data };
     142                                        editor.fire( 'beforeToHtml', evt );
     143                                        data = evt.html;
     144
     145                                        // The source data is already HTML, but we need to clean
     146                                        // it up and apply the filter.
    151147
    152                         // Before anything, we must protect the URL attributes as the
    153                         // browser may changing them when setting the innerHTML later in
    154                         // the code.
    155                         data = protectAttributes( data );
     148                                        // Before anything, we must protect the URL attributes as the
     149                                        // browser may changing them when setting the innerHTML later in
     150                                        // the code.
     151                                        data = protectAttributes( data );
    156152
    157                         // Call the browser to help us fixing a possibly invalid HTML
    158                         // structure.
    159                         var div = document.createElement( 'div' );
    160                         div.innerHTML = data;
     153                                        // Call the browser to help us fixing a possibly invalid HTML
     154                                        // structure.
     155                                        var div = document.createElement( 'div' );
     156                                        div.innerHTML = data;
    161157
    162                         // Now use our parser to make further fixes to the structure, as
    163                         // well as apply the filter.
    164                         var fragment = CKEDITOR.htmlParser.fragment.fromHtml( div.innerHTML, fixForBody ),
    165                                 writer = new CKEDITOR.htmlParser.basicWriter();
     158                                        // Now use our parser to make further fixes to the structure, as
     159                                        // well as apply the filter.
     160                                        var fragment = CKEDITOR.htmlParser.fragment.fromHtml( div.innerHTML, fixForBody ),
     161                                                writer = new CKEDITOR.htmlParser.basicWriter();
    166162
    167                         fragment.writeHtml( writer, this.dataFilter );
     163                                        fragment.writeHtml( writer, this.dataFilter );
    168164
    169                         return writer.getHtml( true );
    170                 },
     165                                        return writer.getHtml( true );
     166                                },
    171167
    172                 toDataFormat : function( html, fixForBody )
    173                 {
    174                         var writer = this.writer,
    175                                 fragment = CKEDITOR.htmlParser.fragment.fromHtml( html, fixForBody );
     168                                toDataFormat : function( html, fixForBody )
     169                                {
     170                                        var writer = this.writer,
     171                                                fragment = CKEDITOR.htmlParser.fragment.fromHtml( html, fixForBody );
    176172
    177                         writer.reset();
     173                                        writer.reset();
    178174
    179                         fragment.writeHtml( writer, this.htmlFilter );
     175                                        fragment.writeHtml( writer, this.htmlFilter );
    180176
    181                         return writer.getHtml( true );
    182                 }
    183         };
     177                                        return writer.getHtml( true );
     178                                }
     179                        };
     180                       
     181                        var dataProcessor = editor.dataProcessor = new CKEDITOR.htmlDataProcessor();
     182
     183                        dataProcessor.writer.forceSimpleAmpersand = editor.config.forceSimpleAmpersand;
     184
     185                        dataProcessor.dataFilter.addRules( defaultDataFilterRules );
     186                        dataProcessor.htmlFilter.addRules( defaultHtmlFilterRules );
     187                }
     188        });
    184189})();
    185190
    186191CKEDITOR.config.forceSimpleAmpersand = false;
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy