sync
[roojs1] / docs / src / Roo_htmleditor_TidySerializer.js.html
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
6  * @constructor
7  * @method Serializer
8  * @param {Object} settings Name/value settings object.
9  */
10
11
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">)
13 {
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">);
15
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">);
17
18
19
20 };
21 </span><span class="jsdoc-var">Roo.htmleditor.TidySerializer.prototype </span><span class="jsdoc-syntax">= {
22
23     </span><span class="jsdoc-comment">/**
24      * @param {boolean} inner do the inner of the node.
25      */
26     </span><span class="jsdoc-var">inner </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
27
28     </span><span class="jsdoc-var">writer </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
29
30     </span><span class="jsdoc-comment">/**
31     * Serializes the specified node into a string.
32     *
33     * @example
34     * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('&lt;p&gt;text&lt;/p&gt;'));
35     * @method serialize
36     * @param {DomElement} node Node instance to serialize.
37     * @return {String} String with HTML based on DOM tree.
38     */
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">) {
40
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">) {
47
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">);
49             },
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">);
53             },
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">);
57             },
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">);
61             },
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">);
65             },
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">;
71                 }
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">}
76             }
77         };
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">();
81     },
82
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">)
84     {
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">];
87
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">;
91         }
92
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">&lt; 1;
95
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
99
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">;
103         }
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">;
108         }
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">;
112         }
113         </span><span class="jsdoc-var">writer.end</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">);
114
115
116     }
117     </span><span class="jsdoc-comment">// Serialize element and treat all non elements as fragments
118
119 </span><span class="jsdoc-syntax">};
120
121 </span></code></body></html>