Ticket #3710: 3710_2.patch

File 3710_2.patch, 1.9 KB (added by Martin Kou, 15 years ago)
  • _source/plugins/htmldataprocessor/plugin.js

     
    191191                return html.replace( protectAttributeRegex, '$& _cke_saved_$1' );
    192192        }
    193193
     194        var protectStyleTagsRegex = /<(style)(?=[ >])[^>]*>[^<]*<\/\1>/gi;
     195        var encodedTagsRegex = /<cke:encoded>([^<]*)<\/cke:encoded>/gi;
     196
     197        function protectStyleTagsMatch( match )
     198        {
     199                return '<cke:encoded>' + encodeURIComponent( match ) + '</cke:encoded>';
     200        }
     201
     202        function protectStyleTags( html )
     203        {
     204                return html.replace( protectStyleTagsRegex, protectStyleTagsMatch );
     205        }
     206
     207        function unprotectEncodedTagsMatch( match, encoded )
     208        {
     209                return decodeURIComponent( encoded );
     210        }
     211
     212        function unprotectEncodedTags( html )
     213        {
     214                return html.replace( encodedTagsRegex, unprotectEncodedTagsMatch );
     215        }
     216
    194217        CKEDITOR.plugins.add( 'htmldataprocessor',
    195218        {
    196219                requires : [ 'htmlwriter' ],
     
    227250                        // the code.
    228251                        data = protectAttributes( data );
    229252
     253                        // IE remvoes style tags from innerHTML. (#3710).
     254                        if ( CKEDITOR.env.ie )
     255                                data = protectStyleTags( data );
     256
    230257                        // Call the browser to help us fixing a possibly invalid HTML
    231258                        // structure.
    232259                        var div = document.createElement( 'div' );
    233260                        div.innerHTML = data;
     261                        data = div.innerHTML;
    234262
     263                        if ( CKEDITOR.env.ie )
     264                                data = unprotectEncodedTags( data );
     265
    235266                        // Now use our parser to make further fixes to the structure, as
    236267                        // well as apply the filter.
    237                         var fragment = CKEDITOR.htmlParser.fragment.fromHtml( div.innerHTML, fixForBody ),
     268                        var fragment = CKEDITOR.htmlParser.fragment.fromHtml( data, fixForBody ),
    238269                                writer = new CKEDITOR.htmlParser.basicWriter();
    239270
    240271                        fragment.writeHtml( writer, this.dataFilter );
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy