1 define('tinymce/html/Serializer', ['tinymce/html/Writer', 'tinymce/html/Schema'], function(Writer, Schema) {
3 * Constructs a new Serializer instance.
7 * @param {Object} settings Name/value settings object.
8 * @param {tinymce.html.Schema} schema Schema instance to use.
10 return function(settings, schema) {
12 writer = new Writer(settings);
13 settings = settings || {};
14 settings.validate = !('validate' in settings) || settings.validate;
15 self.schema = schema = schema || new Schema();
18 * Serializes the specified node into a string.
21 * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('<p>text</p>'));
23 * @param {tinymce.html.Node} node Node instance to serialize.
24 * @return {String} String with HTML based on DOM tree.
26 self.serialize = function(node) {
27 var handlers, validate;
28 validate = settings.validate;
32 writer.text(node.value, node.raw);
36 writer.comment(node.value);
38 // Processing instruction
40 writer.pi(node.name, node.value);
44 writer.doctype(node.value);
48 writer.cdata(node.value);
52 if (node = node.firstChild) {
55 } while (node = node.next);
62 var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule, handler = handlers[node.type];
67 isEmpty = node.shortEnded;
68 attrs = node.attributes;
70 if (validate && attrs && attrs.length > 1) {
73 elementRule = schema.getElementRule(node.name);
75 for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {
76 attrName = elementRule.attributesOrder[i];
77 if (attrName in attrs.map) {
78 attrValue = attrs.map[attrName];
79 sortedAttrs.map[attrName] = attrValue;
86 for (i = 0, l = attrs.length; i < l; i++) {
87 attrName = attrs[i].name;
88 if (!(attrName in sortedAttrs.map)) {
89 attrValue = attrs.map[attrName];
90 sortedAttrs.map[attrName] = attrValue;
100 writer.start(node.name, attrs, isEmpty);
102 if (node = node.firstChild) {
105 } while (node = node.next);
111 // Serialize element and treat all non elements as fragments
112 1 != node.type || settings.inner ? handlers[11](node) : walk(node);
113 return writer.getContent();