--- /dev/null
+define(['libs/jquery-1.9.1.min'], function($) {\r
+\r
+ var transformations = {};\r
+\r
+ transformations.fromXML = {\r
+ getHTMLTree: function(xml) {\r
+ var inner = $(xml).clone();\r
+ var toret = $('<div></div>');\r
+ toret.append(inner);\r
+ \r
+ var toBlock = ['div', 'section', 'header'];\r
+ var toInline = ['aside', 'span'];\r
+ \r
+ var transform = function(tags, replacingTagName) {\r
+ tags.forEach(function(tagName) {\r
+ tagName = tagName.toLowerCase();\r
+ console.log('running ' + tagName);\r
+ toret.find(tagName).replaceWith(function() {\r
+ var currentTag = $(this);\r
+ if(currentTag.attr('wlxml-tag'))\r
+ return;\r
+ var toret = $('<' + replacingTagName + '>').attr('wlxml-tag', tagName);\r
+ toret.attr('id', 'xxxxxxxx-xxxx-xxxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {var r = Math.random()*16|0,v=c=='x'?r:r&0x3|0x8;return v.toString(16);}));\r
+ for(var i = 0; i < this.attributes.length; i++) {\r
+ var attr = this.attributes.item(i);\r
+ var value = attr.name === 'class' ? attr.value.replace(/\./g, '-') : attr.value;\r
+ toret.attr('wlxml-' + attr.name, value)\r
+ }\r
+ toret.append(currentTag.contents());\r
+ return toret;\r
+ });\r
+ });\r
+ }\r
+ \r
+ transform(toBlock, 'div');\r
+ transform(toInline, 'span');\r
+\r
+ return toret.children();\r
+ },\r
+ getMetaData: function(xml) {\r
+ var toret = {};\r
+ $(xml).find('metadata').children().each(function() {\r
+ var node = $(this);\r
+ toret[this.nodeName.split(':')[1].toLowerCase()] = node.text();\r
+ })\r
+ return toret;\r
+ },\r
+ getDocumentDescription: function(xml) {\r
+ return {\r
+ HTMLTree: this.getHTMLTree(xml),\r
+ metadata: this.getMetaData(xml)\r
+ }\r
+ }\r
+ }\r
+\r
+ transformations.toXML = {\r
+ getXML: function(documentDescription) {\r
+ \r
+ var inner = $(documentDescription.HTMLTree);\r
+ var toret = $('<div></div>');\r
+ toret.append(inner);\r
+ \r
+ toret.find('div, span').replaceWith(function() {\r
+ var div = $(this);\r
+ var tagName = div.attr('wlxml-tag');\r
+ var toret = $('<'+tagName+'>');\r
+ \r
+ for(var i = 0; i < this.attributes.length; i++) {\r
+ var attr = this.attributes.item(i);\r
+ var split = attr.name.split('-')\r
+ console.log(split);\r
+ if(split[0] !== 'wlxml' || (split.length > 1 && split[1] === 'tag')) \r
+ continue;\r
+ var wlxmlName = split.splice(1).join('-');\r
+ var value = wlxmlName === 'class' ? attr.value.replace(/-/g, '.') : attr.value;\r
+ console.log(name + ': ' + value);\r
+ toret.attr(wlxmlName, value);\r
+ }\r
+ \r
+ toret.append(div.contents());\r
+ return toret;\r
+ });\r
+ \r
+ var meta = $('<metadata></metadata>\n');\r
+ _.each(_.keys(documentDescription.metadata), function(key) {\r
+ meta.append('\n\t<dc:'+key+'>' + documentDescription.metadata[key] + '</dc:'+key+'>');\r
+ });\r
+ meta.append('\n');\r
+ \r
+ var metadata = toret.find('metadata');\r
+ if(metadata.length === 0) {\r
+ var section = toret.find('section');\r
+ section = section.length ? $(section[0]) : null;\r
+ if(section) {\r
+ section.prepend(meta)\r
+ }\r
+ } else {\r
+ metadata.replaceWith(meta);\r
+ }\r
+ \r
+ \r
+ return vkbeautify.xml(toret.html());\r
+ }\r
+ }\r
+\r
+ return transformations;\r
+\r
+});
\ No newline at end of file