X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/fd01330786845fedb31dd93439bf8b1c82cd56c6..b58b8f498d9b5e70aec099829b97af2c4d72da10:/modules/visualEditor.transformations.js diff --git a/modules/visualEditor.transformations.js b/modules/visualEditor.transformations.js index c317314..1fef83a 100644 --- a/modules/visualEditor.transformations.js +++ b/modules/visualEditor.transformations.js @@ -1,23 +1,108 @@ -rng.modules.visualEditor.transformations = {}; +define(['libs/jquery-1.9.1.min'], function($) { -rng.modules.visualEditor.transformations.fromXML = { - getHTMLTree: function(xml) { - return xml; - }, - getMetaData: function(xml) { - return {}; - }, - getDocumentDescription: function(xml) { - return { - HTMLTree: this.getHTMLTree(xml), - metadata: this.getMetaData(xml) + 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) + } } } -} - -rng.modules.visualEditor.transformations.toXML = { - getXML: function(documentDescription) { - return documentDescription.HTMLTree; + 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 = $('