Roo.htmleditor.Tidy = function(cfg) {
Roo.apply(this, cfg);
this.core.doc.body.innerHTML = this.tidy(this.core.doc.body, '');
}
Roo.htmleditor.Tidy.toString = function(node)
{
return Roo.htmleditor.Tidy.prototype.tidy(node, '');
}
Roo.htmleditor.Tidy.prototype = {
wrap : function(s) {
return s.replace(/\n/g, " ").replace(/(?![^\n]{1,80}$)([^\n]{1,80})\s/g, '$1\n');
},
tidy : function(node, indent) {
if (node.nodeType == 3) {
return indent === false ? node.nodeValue : this.wrap(node.nodeValue.trim()).split("\n").join("\n" + indent);
}
if (node.nodeType != 1) {
return '';
}
if (node.tagName == 'BODY') {
return this.cn(node, '');
}
var ret = "<" + node.tagName + this.attr(node) ;
if (['IMG', 'BR', 'HR', 'INPUT'].indexOf(node.tagName) > -1) {
return ret + '/>';
}
ret += '>';
var cindent = indent === false ? '' : (indent + ' ');
if (['PRE', 'TEXTAREA', 'TD', 'A', 'SPAN', 'B', 'I', 'S'].indexOf(node.tagName) > -1) { cindent = false;
}
var cn = this.cn(node, cindent );
return ret + cn + '</' + node.tagName + '>';
},
cn: function(node, indent)
{
var ret = [];
var ar = Array.from(node.childNodes);
for (var i = 0 ; i < ar.length ; i++) {
if (indent !== false && i > 0
&& ar[i].nodeType == 3
&& ar[i].nodeValue.length > 0
&& ar[i].nodeValue.match(/^\s+/)
) {
if (ret.length && ret[ret.length-1] == "\n" + indent) {
ret.pop(); }
ret.push(" "); }
if (indent !== false
&& ar[i].nodeType == 1 ) {
ret.push("\n" + indent);
}
ret.push(this.tidy(ar[i], indent));
if (indent !== false
&& ar[i].nodeType == 3
&& ar[i].nodeValue.length > 0
&& ar[i].nodeValue.match(/\s+$/)
){
ret.push("\n" + indent);
}
}
return ret.join('');
},
attr : function(node)
{
var attr = [];
for(i = 0; i < node.attributes.length;i++) {
if (!node.attributes.item(i).value.length) {
continue;
}
attr.push( node.attributes.item(i).name + '="' +
Roo.util.Format.htmlEncode(node.attributes.item(i).value) + '"'
);
}
return attr.length ? (' ' + attr.join(' ') ) : '';
}
}