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.
9 * @param {tinymce.html.Schema} schema Schema instance to use.
13 Roo.htmleditor.TidySerializer = function(settings)
15 Roo.apply(this, settings);
17 this.writer = new Roo.htmleditor.TidyWriter(settings);
19 //settings.validate = !('validate' in settings) || settings.validate;
20 // self.schema = schema = schema || new Schema();
23 Roo.htmleditor.TidySerializer.prototype = {
26 * @param {boolean} inner do the inner of the node.
33 * Serializes the specified node into a string.
36 * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('<p>text</p>'));
38 * @param {DomElement} node Node instance to serialize.
39 * @return {String} String with HTML based on DOM tree.
41 serialize : function(node) {
43 // = settings.validate;
44 var writer = this.writer;
50 writer.text(node.nodeValue, node);
54 writer.comment(node.nodeValue);
56 // Processing instruction
58 writer.pi(node.name, node.nodeValue);
62 writer.doctype(node.nodeValue);
66 writer.cdata(node.nodeValue);
70 node = node.firstChild;
76 node = node.nextSibling
81 1 != node.nodeType || this.inner ? this.handlers[11](node) : this.walk(node);
82 return writer.getContent();
87 var attrName, attrValue, sortedAttrs, i, l, elementRule,
88 handler = this.handlers[node.nodeType];
95 var name = node.nodeName;
96 var isEmpty = node.childNodes.length < 1;
98 var writer = this.writer;
99 var attrs = node.attributes;
102 if (validate && attrs && attrs.length > 1) {
104 sortedAttrs.map = {};
105 elementRule = schema.getElementRule(node.name);
107 for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {
108 attrName = elementRule.attributesOrder[i];
109 if (attrName in attrs.map) {
110 attrValue = attrs.map[attrName];
111 sortedAttrs.map[attrName] = attrValue;
118 for (i = 0, l = attrs.length; i < l; i++) {
119 attrName = attrs[i].name;
120 if (!(attrName in sortedAttrs.map)) {
121 attrValue = attrs.map[attrName];
122 sortedAttrs.map[attrName] = attrValue;
133 writer.start(node.nodeName, attrs, isEmpty, node);
137 node = node.firstChild;
144 node = node.nextSibling;
150 // Serialize element and treat all non elements as fragments