X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/0214643f72c6aaa8e85eaba2ad27f2ca03ca6401..5c2e36d7dbb5d7437b70183f87fb68ccb6c5d866:/modules/documentCanvas/transformations.js?ds=sidebyside diff --git a/modules/documentCanvas/transformations.js b/modules/documentCanvas/transformations.js index cd20d2b..effe253 100644 --- a/modules/documentCanvas/transformations.js +++ b/modules/documentCanvas/transformations.js @@ -1,108 +1,107 @@ -define(['libs/jquery-1.9.1.min'], function($) { - - var transformations = {}; - - transformations.fromXML = { - getHTMLTree: function(xml) { - var inner = $(xml).clone(); - var toret = $('
'); - toret.append(inner); - - var toBlock = ['div', 'section', 'header']; - var toInline = ['aside', 'span']; - - var transform = function(tags, replacingTagName) { - tags.forEach(function(tagName) { - tagName = tagName.toLowerCase(); - console.log('running ' + tagName); - toret.find(tagName).replaceWith(function() { - var currentTag = $(this); - if(currentTag.attr('wlxml-tag')) - return; - var toret = $('<' + replacingTagName + '>').attr('wlxml-tag', tagName); - 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);})); - for(var i = 0; i < this.attributes.length; i++) { - var attr = this.attributes.item(i); - var value = attr.name === 'class' ? attr.value.replace(/\./g, '-') : attr.value; - toret.attr('wlxml-' + attr.name, value) - } - toret.append(currentTag.contents()); - return toret; - }); - }); - } - - transform(toBlock, 'div'); - transform(toInline, 'span'); - - return toret.children(); - }, - getMetaData: function(xml) { - var toret = {}; - $(xml).find('metadata').children().each(function() { - var node = $(this); - toret[this.nodeName.split(':')[1].toLowerCase()] = node.text(); - }) - return toret; - }, - getDocumentDescription: function(xml) { - return { - HTMLTree: this.getHTMLTree(xml), - metadata: this.getMetaData(xml) - } - } - } - - transformations.toXML = { - getXML: function(documentDescription) { - - var inner = $(documentDescription.HTMLTree); - var toret = $('
'); - toret.append(inner); - - toret.find('div, span').replaceWith(function() { - var div = $(this); - var tagName = div.attr('wlxml-tag'); - var toret = $('<'+tagName+'>'); - - for(var i = 0; i < this.attributes.length; i++) { - var attr = this.attributes.item(i); - var split = attr.name.split('-') - console.log(split); - if(split[0] !== 'wlxml' || (split.length > 1 && split[1] === 'tag')) - continue; - var wlxmlName = split.splice(1).join('-'); - var value = wlxmlName === 'class' ? attr.value.replace(/-/g, '.') : attr.value; - console.log(name + ': ' + value); - toret.attr(wlxmlName, value); - } - - toret.append(div.contents()); - return toret; - }); - - var meta = $('\n'); - _.each(_.keys(documentDescription.metadata), function(key) { - meta.append('\n\t' + documentDescription.metadata[key] + ''); - }); - meta.append('\n'); - - var metadata = toret.find('metadata'); - if(metadata.length === 0) { - var section = toret.find('section'); - section = section.length ? $(section[0]) : null; - if(section) { - section.prepend(meta) - } - } else { - metadata.replaceWith(meta); - } - - - return vkbeautify.xml(toret.html()); - } - } - - return transformations; - +define(['libs/jquery-1.9.1.min'], function($) { + + 'use strict'; + + var transformations = {}; + + transformations.fromXML = { + getHTMLTree: function(xml) { + var inner = $(xml).clone(); + var toret = $('
'); + toret.append(inner); + + var toBlock = ['div', 'section', 'header']; + var toInline = ['aside', 'span']; + + var transform = function(tags, replacingTagName) { + tags.forEach(function(tagName) { + tagName = tagName.toLowerCase(); + console.log('running ' + tagName); + toret.find(tagName).replaceWith(function() { + var currentTag = $(this); + if(currentTag.attr('wlxml-tag')) + return; + var toret = $('<' + replacingTagName + '>').attr('wlxml-tag', tagName); + 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);})); + for(var i = 0; i < this.attributes.length; i++) { + var attr = this.attributes.item(i); + var value = attr.name === 'class' ? attr.value.replace(/\./g, '-') : attr.value; + toret.attr('wlxml-' + attr.name, value); + } + toret.append(currentTag.contents()); + return toret; + }); + }); + }; + + transform(toBlock, 'div'); + transform(toInline, 'span'); + + toret.find(":not(iframe)").addBack().contents().filter(function() { + return this.nodeType == 3;} ).each(function() { + var n = $(this); + var hasText = /\S/g.test(n.text()); + if(!hasText) { + n.remove(); + return; + } + var startSpace = /\s/g.test(n.text().substr(0,1)); + var endSpace = /\s/g.test(n.text().substr(-1)) && n.text().length > 1; + var trimmed = $.trim(n.text()); + n.get(0).data = (startSpace ? ' ' : '') + trimmed + (endSpace ? ' ' : ''); + }); + + return toret.children(); + }, + getMetaData: function(xml) { + var toret = {}; + $(xml).find('metadata').children().each(function() { + var node = $(this); + toret[this.nodeName.split(':')[1].toLowerCase()] = node.text(); + }); + return toret; + }, + getDocumentDescription: function(xml) { + return { + HTMLTree: this.getHTMLTree(xml), + metadata: this.getMetaData(xml) + }; + } + }; + + transformations.toXML = { + getXML: function(body) { + + var inner = body.clone(); + var toret = $('
'); + toret.append(inner); + + toret.find('div, span').replaceWith(function() { + var div = $(this); + var tagName = div.attr('wlxml-tag'); + var toret = $('<'+tagName+'>'); + + for(var i = 0; i < this.attributes.length; i++) { + var attr = this.attributes.item(i); + var split = attr.name.split('-'); + console.log(split); + if(split[0] !== 'wlxml' || (split.length > 1 && split[1] === 'tag')) + continue; + var wlxmlName = split.splice(1).join('-'); + var value = wlxmlName === 'class' ? attr.value.replace(/-/g, '.') : attr.value; + console.log(name + ': ' + value); + if(value.length && value.length > 0) + toret.attr(wlxmlName, value); + } + + toret.append(div.contents()); + return toret; + }); + + return vkbeautify.xml(toret.html()); + } + }; + + return transformations; + }); \ No newline at end of file