Ticket #5535: ckeditor-htmlparser-recursion.patch
File ckeditor-htmlparser-recursion.patch, 2.6 KB (added by , 14 years ago) |
---|
-
_source/core/htmlparser/element.js
92 92 return new CKEDITOR.htmlParser.element( this.name, this.attributes ); 93 93 }, 94 94 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 ) 101 96 { 102 var attributes = this.attributes;103 97 104 98 // Ignore cke: prefixes when writing HTML. 105 var element = this,106 writeName = element.name,99 var writeName = element.name, 100 attributes = element.attributes, 107 101 a, newAttrName, value; 108 102 109 103 var isChildrenFiltered; … … 132 126 133 127 element.name = writeName; 134 128 129 var parent = element.parent; 135 130 if ( !( element = filter.onElement( element ) ) ) 136 131 return; 137 132 138 element.parent = this.parent;133 element.parent = parent; 139 134 140 135 if ( element.name == writeName ) 141 136 break; … … 154 149 // filter but not the children. 155 150 if ( !writeName ) 156 151 { 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]); 158 155 return; 159 156 } 160 157 } … … 224 221 225 222 if ( !element.isEmpty ) 226 223 { 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]); 230 228 } 231 229 }, 232 230 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 233 251 writeChildrenHtml : function( writer, filter ) 234 252 { 235 253 // Send children.