Ticket #3591: 3591_4.patch

File 3591_4.patch, 5.7 KB (added by garry.yao, 5 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 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy