+ _dataToHtml : function(data) {\r
+ var headerFragment, headElement, html, elm, value, dom = this.editor.dom;\r
+\r
+ function setAttr(elm, name, value) {\r
+ elm.attr(name, value ? value : undefined);\r
+ };\r
+\r
+ function addHeadNode(node) {\r
+ if (headElement.firstChild)\r
+ headElement.insert(node, headElement.firstChild);\r
+ else\r
+ headElement.append(node);\r
+ };\r
+\r
+ headerFragment = this._parseHeader();\r
+ headElement = headerFragment.getAll('head')[0];\r
+ if (!headElement) {\r
+ elm = headerFragment.getAll('html')[0];\r
+ headElement = new Node('head', 1);\r
+\r
+ if (elm.firstChild)\r
+ elm.insert(headElement, elm.firstChild, true);\r
+ else\r
+ elm.append(headElement);\r
+ }\r
+\r
+ // Add/update/remove XML-PI\r
+ elm = headerFragment.firstChild;\r
+ if (data.xml_pi) {\r
+ value = 'version="1.0"';\r
+\r
+ if (data.docencoding)\r
+ value += ' encoding="' + data.docencoding + '"';\r
+\r
+ if (elm.type != 7) {\r
+ elm = new Node('xml', 7);\r
+ headerFragment.insert(elm, headerFragment.firstChild, true);\r
+ }\r
+\r
+ elm.value = value;\r
+ } else if (elm && elm.type == 7)\r
+ elm.remove();\r
+\r
+ // Add/update/remove doctype\r
+ elm = headerFragment.getAll('#doctype')[0];\r
+ if (data.doctype) {\r
+ if (!elm) {\r
+ elm = new Node('#doctype', 10);\r
+\r
+ if (data.xml_pi)\r
+ headerFragment.insert(elm, headerFragment.firstChild);\r
+ else\r
+ addHeadNode(elm);\r
+ }\r
+\r
+ elm.value = data.doctype.substring(9, data.doctype.length - 1);\r
+ } else if (elm)\r
+ elm.remove();\r
+\r
+ // Add/update/remove title\r
+ elm = headerFragment.getAll('title')[0];\r
+ if (data.metatitle) {\r
+ if (!elm) {\r
+ elm = new Node('title', 1);\r
+ elm.append(new Node('#text', 3)).value = data.metatitle;\r
+ addHeadNode(elm);\r
+ }\r
+ }\r
+\r
+ // Add meta encoding\r
+ if (data.docencoding) {\r
+ elm = null;\r
+ each(headerFragment.getAll('meta'), function(meta) {\r
+ if (meta.attr('http-equiv') == 'Content-Type')\r
+ elm = meta;\r
+ });\r
+\r
+ if (!elm) {\r
+ elm = new Node('meta', 1);\r
+ elm.attr('http-equiv', 'Content-Type');\r
+ elm.shortEnded = true;\r
+ addHeadNode(elm);\r
+ }\r
+\r
+ elm.attr('content', 'text/html; charset=' + data.docencoding);\r
+ }\r
+\r
+ // Add/update/remove meta\r
+ each('keywords,description,author,copyright,robots'.split(','), function(name) {\r
+ var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name];\r
+\r
+ for (i = 0; i < nodes.length; i++) {\r
+ meta = nodes[i];\r
+\r
+ if (meta.attr('name') == name) {\r
+ if (value)\r
+ meta.attr('content', value);\r
+ else\r
+ meta.remove();\r
+\r
+ return;\r
+ }\r
+ }\r
+\r
+ if (value) {\r
+ elm = new Node('meta', 1);\r
+ elm.attr('name', name);\r
+ elm.attr('content', value);\r
+ elm.shortEnded = true;\r
+\r
+ addHeadNode(elm);\r
+ }\r