Ticket #5535: ckeditor-htmlparser-recursion.patch

File ckeditor-htmlparser-recursion.patch, 2.6 KB (added by Ivan Shvedunov, 12 years ago)

fixed a typo in the patch

  • _source/core/htmlparser/element.js

     
    9292                        return new CKEDITOR.htmlParser.element( this.name, this.attributes );
    9393                },
    9494
    95                 /**
    96                  * Writes the element HTML to a CKEDITOR.htmlWriter.
    97                  * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.
    98                  * @example
    99                  */
    100                 writeHtml : function( writer, filter )
     95                _writeHtml : function( element, writer, filter, stack )
    10196                {
    102                         var attributes = this.attributes;
    10397
    10498                        // Ignore cke: prefixes when writing HTML.
    105                         var element = this,
    106                                 writeName = element.name,
     99                        var writeName = element.name,
     100                                attributes = element.attributes,
    107101                                a, newAttrName, value;
    108102
    109103                        var isChildrenFiltered;
     
    132126
    133127                                        element.name = writeName;
    134128
     129                                        var parent = element.parent;
    135130                                        if ( !( element = filter.onElement( element ) ) )
    136131                                                return;
    137132
    138                                         element.parent = this.parent;
     133                                        element.parent = parent;
    139134
    140135                                        if ( element.name == writeName )
    141136                                                break;
     
    154149                                        // filter but not the children.
    155150                                        if ( !writeName )
    156151                                        {
    157                                                 this.writeChildrenHtml.call( element, writer, isChildrenFiltered ? null : filter );
     152                                                var childFilter = isChildrenFiltered ? null : filter;
     153                                                for ( var i = element.children.length - 1 ; i >= 0 ; i-- )
     154                                                        stack.push([element.children[i], childFilter]);
    158155                                                return;
    159156                                        }
    160157                                }
     
    224221
    225222                        if ( !element.isEmpty )
    226223                        {
    227                                 this.writeChildrenHtml.call( element, writer, isChildrenFiltered ? null : filter );
    228                                 // Close the element.
    229                                 writer.closeTag( writeName );
     224                                stack.push(writeName);
     225                                var childFilter = isChildrenFiltered ? null : filter;
     226                                for ( i = element.children.length - 1 ; i >= 0 ; i-- )
     227                                        stack.push([element.children[i], childFilter]);
    230228                        }
    231229                },
    232230
     231                /**
     232                 * Writes the element HTML to a CKEDITOR.htmlWriter.
     233                 * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.
     234                 * @example
     235                 */
     236                writeHtml : function( writer, filter )
     237                {
     238                        var stack = [];
     239                        stack.push([this, filter]);
     240                        while (stack.length > 0) {
     241                                var item = stack.pop();
     242                                if (typeof(item) == "string")
     243                                        writer.closeTag( item );
     244                                else if (item[0].type == CKEDITOR.NODE_ELEMENT)
     245                                        this._writeHtml( item[0], writer, item[1], stack);
     246                                else
     247                                        item[0].writeHtml(writer, item[1]);
     248                        }
     249                },
     250
    233251                writeChildrenHtml : function( writer, filter )
    234252                {
    235253                        // Send children.
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy