1 /* 2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 3 For licensing, see LICENSE.html or http://ckeditor.com/license 4 */ 5 6 CKEDITOR.htmlParser.basicWriter = CKEDITOR.tools.createClass( 7 { 8 $ : function() 9 { 10 this._ = 11 { 12 output : [] 13 }; 14 }, 15 16 proto : 17 { 18 /** 19 * Writes the tag opening part for a opener tag. 20 * @param {String} tagName The element name for this tag. 21 * @param {Object} attributes The attributes defined for this tag. The 22 * attributes could be used to inspect the tag. 23 * @example 24 * // Writes "<p". 25 * writer.openTag( 'p', { class : 'MyClass', id : 'MyId' } ); 26 */ 27 openTag : function( tagName, attributes ) 28 { 29 this._.output.push( '<', tagName ); 30 }, 31 32 /** 33 * Writes the tag closing part for a opener tag. 34 * @param {String} tagName The element name for this tag. 35 * @param {Boolean} isSelfClose Indicates that this is a self-closing tag, 36 * like "br" or "img". 37 * @example 38 * // Writes ">". 39 * writer.openTagClose( 'p', false ); 40 * @example 41 * // Writes " />". 42 * writer.openTagClose( 'br', true ); 43 */ 44 openTagClose : function( tagName, isSelfClose ) 45 { 46 if ( isSelfClose ) 47 this._.output.push( ' />' ); 48 else 49 this._.output.push( '>' ); 50 }, 51 52 /** 53 * Writes an attribute. This function should be called after opening the 54 * tag with {@link #openTagClose}. 55 * @param {String} attName The attribute name. 56 * @param {String} attValue The attribute value. 57 * @example 58 * // Writes ' class="MyClass"'. 59 * writer.attribute( 'class', 'MyClass' ); 60 */ 61 attribute : function( attName, attValue ) 62 { 63 this._.output.push( ' ', attName, '="', attValue, '"' ); 64 }, 65 66 /** 67 * Writes a closer tag. 68 * @param {String} tagName The element name for this tag. 69 * @example 70 * // Writes "</p>". 71 * writer.closeTag( 'p' ); 72 */ 73 closeTag : function( tagName ) 74 { 75 this._.output.push( '</', tagName, '>' ); 76 }, 77 78 /** 79 * Writes text. 80 * @param {String} text The text value 81 * @example 82 * // Writes "Hello Word". 83 * writer.text( 'Hello Word' ); 84 */ 85 text : function( text ) 86 { 87 this._.output.push( text ); 88 }, 89 90 /** 91 * Writes a comment. 92 * @param {String} comment The comment text. 93 * @example 94 * // Writes "<!-- My comment -->". 95 * writer.comment( ' My comment ' ); 96 */ 97 comment : function( comment ) 98 { 99 this._.output.push( '<!--', comment, '-->' ); 100 }, 101 102 /** 103 * Writes any kind of data to the ouput. 104 * @example 105 * writer.write( 'This is an <b>example</b>.' ); 106 */ 107 write : function( data ) 108 { 109 this._.output.push( data ); 110 }, 111 112 /** 113 * Empties the current output buffer. 114 * @example 115 * writer.reset(); 116 */ 117 reset : function() 118 { 119 this._.output = []; 120 }, 121 122 /** 123 * Empties the current output buffer. 124 * @param {Boolean} reset Indicates that the {@link reset} function is to 125 * be automatically called after retrieving the HTML. 126 * @returns {String} The HTML written to the writer so far. 127 * @example 128 * var html = writer.getHtml(); 129 */ 130 getHtml : function( reset ) 131 { 132 var html = this._.output.join( '' ); 133 134 if ( reset ) 135 this.reset(); 136 137 return html; 138 } 139 } 140 }); 141