1 <html><head><title>Roo/htmleditor/TidySerializer.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty">
2 <span class="jsdoc-comment">/***
3 * This is based loosely on tinymce
4 * @class Roo.htmleditor.TidySerializer
5 * https://github.com/thorn0/tinymce.html/blob/master/tinymce.html.js
8 * @param {Object} settings Name/value settings object.
12 </span><span class="jsdoc-var">Roo.htmleditor.TidySerializer </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">settings</span><span class="jsdoc-syntax">)
14 </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">settings</span><span class="jsdoc-syntax">);
16 </span><span class="jsdoc-var">this.writer </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.TidyWriter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">settings</span><span class="jsdoc-syntax">);
21 </span><span class="jsdoc-var">Roo.htmleditor.TidySerializer.prototype </span><span class="jsdoc-syntax">= {
23 </span><span class="jsdoc-comment">/**
24 * @param {boolean} inner do the inner of the node.
26 </span><span class="jsdoc-var">inner </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
28 </span><span class="jsdoc-var">writer </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
30 </span><span class="jsdoc-comment">/**
31 * Serializes the specified node into a string.
34 * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('<p>text</p>'));
36 * @param {DomElement} node Node instance to serialize.
37 * @return {String} String with HTML based on DOM tree.
39 </span><span class="jsdoc-var">serialize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
41 </span><span class="jsdoc-comment">// = settings.validate;
42 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">writer </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.writer</span><span class="jsdoc-syntax">;
43 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">self </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
44 </span><span class="jsdoc-var">this.handlers </span><span class="jsdoc-syntax">= {
45 </span><span class="jsdoc-comment">// #text
46 </span><span class="jsdoc-syntax">3: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
48 </span><span class="jsdoc-var">writer.text</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeValue</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
50 </span><span class="jsdoc-comment">// #comment
51 </span><span class="jsdoc-syntax">8: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
52 </span><span class="jsdoc-var">writer.comment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeValue</span><span class="jsdoc-syntax">);
54 </span><span class="jsdoc-comment">// Processing instruction
55 </span><span class="jsdoc-syntax">7: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
56 </span><span class="jsdoc-var">writer.pi</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node.nodeValue</span><span class="jsdoc-syntax">);
58 </span><span class="jsdoc-comment">// Doctype
59 </span><span class="jsdoc-syntax">10: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
60 </span><span class="jsdoc-var">writer.doctype</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeValue</span><span class="jsdoc-syntax">);
62 </span><span class="jsdoc-comment">// CDATA
63 </span><span class="jsdoc-syntax">4: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
64 </span><span class="jsdoc-var">writer.cdata</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeValue</span><span class="jsdoc-syntax">);
66 </span><span class="jsdoc-comment">// Document fragment
67 </span><span class="jsdoc-syntax">11: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
68 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.firstChild</span><span class="jsdoc-syntax">;
69 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
70 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
72 </span><span class="jsdoc-keyword">while</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
73 </span><span class="jsdoc-var">self.walk</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
74 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.nextSibling
75 </span><span class="jsdoc-syntax">}
78 </span><span class="jsdoc-var">writer.reset</span><span class="jsdoc-syntax">();
79 1 != </span><span class="jsdoc-var">node.nodeType </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.inner </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.handlers</span><span class="jsdoc-syntax">[11](</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">this.walk</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
80 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">writer.getContent</span><span class="jsdoc-syntax">();
83 </span><span class="jsdoc-var">walk</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)
85 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">attrName</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">attrValue</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sortedAttrs</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">l</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">elementRule</span><span class="jsdoc-syntax">,
86 </span><span class="jsdoc-var">handler </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.handlers</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">node.nodeType</span><span class="jsdoc-syntax">];
88 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">handler</span><span class="jsdoc-syntax">) {
89 </span><span class="jsdoc-var">handler</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
90 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
93 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.nodeName</span><span class="jsdoc-syntax">;
94 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">isEmpty </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.childNodes.length </span><span class="jsdoc-syntax">< 1;
96 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">writer </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.writer</span><span class="jsdoc-syntax">;
97 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">attrs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.attributes</span><span class="jsdoc-syntax">;
98 </span><span class="jsdoc-comment">// Sort attributes
100 </span><span class="jsdoc-var">writer.start</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeName</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">attrs</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">isEmpty</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
101 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">isEmpty</span><span class="jsdoc-syntax">) {
102 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
104 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.firstChild</span><span class="jsdoc-syntax">;
105 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
106 </span><span class="jsdoc-var">writer.end</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">);
107 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
109 </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
110 </span><span class="jsdoc-var">this.walk</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
111 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.nextSibling</span><span class="jsdoc-syntax">;
113 </span><span class="jsdoc-var">writer.end</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">);
117 </span><span class="jsdoc-comment">// Serialize element and treat all non elements as fragments
119 </span><span class="jsdoc-syntax">};
121 </span></code></body></html>