X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/fd01330786845fedb31dd93439bf8b1c82cd56c6..cf7d465ce6ed2acbc2b1c028e46847ead5320e9c:/modules/visualEditor.transformations.js?ds=sidebyside diff --git a/modules/visualEditor.transformations.js b/modules/visualEditor.transformations.js index c317314..49f9aa3 100644 --- a/modules/visualEditor.transformations.js +++ b/modules/visualEditor.transformations.js @@ -1,23 +1,94 @@ -rng.modules.visualEditor.transformations = {}; +if(typeof module !== 'undefined' && module.exports) { + var $ = require('jquery'); +} + +(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); + toret.find('metadata').remove(); + + var toBlock = ['div', 'document', 'section', 'header']; + var toInline = ['aside', 'span']; + + toBlock.forEach(function(tagName) { + tagName = tagName.toLowerCase(); + console.log('running ' + tagName); + toret.find(tagName).replaceWith(function() { + var suffix = tagName !== 'div' ? tagName : 'block'; + var toret = $('
').attr('wlxml-tag', suffix); + var currentTag = $(this); + if(currentTag.attr('class')) + toret.attr('wlxml-class', currentTag.attr('class')); + toret.append(currentTag.contents()); + return toret; + }); + }); + + toInline.forEach(function(tagName) { + tagName = tagName.toLowerCase(); + toret.find(tagName).replaceWith(function() { + var currentTag = $(this); + var toret = $('').attr('wlxml-tag', tagName); + if(currentTag.attr('class')) + toret.attr('wlxml-class', currentTag.attr('class')); + toret.append(currentTag.contents()); + return toret; + }); + }); + 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'); + return $('<'+tagName+'>').append(div.contents()); + }); + + var meta = $(''); + _.each(_.keys(documentDescription.metadata), function(key) { + meta.append($('' + documentDescription.metadata[key] + '')); + }); + + toret.find('document').prepend(meta); + + return toret.html(); + + } + } -rng.modules.visualEditor.transformations.toXML = { - getXML: function(documentDescription) { - return documentDescription.HTMLTree; + + if(typeof module !== 'undefined' && module.exports) { + module.exports = transformations; + } else { + rng.modules.visualEditor.transformations = transformations; } -} \ No newline at end of file + +})($); \ No newline at end of file