/***
* This is based loosely on tinymce
* @class Roo.htmleditor.TidySerializer
* https://github.com/thorn0/tinymce.html/blob/master/tinymce.html.js
* @constructor
* @method Serializer
* @param {Object} settings Name/value settings object.
*/
Roo.htmleditor.TidySerializer = function(settings)
{
Roo.apply(this, settings);
this.writer = new Roo.htmleditor.TidyWriter(settings);
};
Roo.htmleditor.TidySerializer.prototype = {
/**
* @param {boolean} inner do the inner of the node.
*/
inner : false,
writer : false,
/**
* Serializes the specified node into a string.
*
* @example
* new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('<p>text</p>'));
* @method serialize
* @param {DomElement} node Node instance to serialize.
* @return {String} String with HTML based on DOM tree.
*/
serialize : function(node) {
// = settings.validate;
var writer = this.writer;
var self = this;
this.handlers = {
// #text
3: function(node) {
writer.text(node.nodeValue, node);
},
// #comment
8: function(node) {
writer.comment(node.nodeValue);
},
// Processing instruction
7: function(node) {
writer.pi(node.name, node.nodeValue);
},
// Doctype
10: function(node) {
writer.doctype(node.nodeValue);
},
// CDATA
4: function(node) {
writer.cdata(node.nodeValue);
},
// Document fragment
11: function(node) {
node = node.firstChild;
if (!node) {
return;
}
while(node) {
self.walk(node);
node = node.nextSibling
}
}
};
writer.reset();
1 != node.nodeType || this.inner ? this.handlers[11](node) : this.walk(node);
return writer.getContent();
},
walk: function(node)
{
var attrName, attrValue, sortedAttrs, i, l, elementRule,
handler = this.handlers[node.nodeType];
if (handler) {
handler(node);
return;
}
var name = node.nodeName;
var isEmpty = node.childNodes.length < 1;
var writer = this.writer;
var attrs = node.attributes;
// Sort attributes
writer.start(node.nodeName, attrs, isEmpty, node);
if (isEmpty) {
return;
}
node = node.firstChild;
if (!node) {
writer.end(name);
return;
}
while (node) {
this.walk(node);
node = node.nextSibling;
}
writer.end(name);
}
// Serialize element and treat all non elements as fragments
};