X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/1ffafa96f9858a9eb43d3a66d7593ae0cbf090d1..e47b0769de4853ef9c027592533804e39f247f44:/modules/visualEditor.transformations.js?ds=inline diff --git a/modules/visualEditor.transformations.js b/modules/visualEditor.transformations.js index 57049e7..1fef83a 100644 --- a/modules/visualEditor.transformations.js +++ b/modules/visualEditor.transformations.js @@ -1,8 +1,4 @@ -if(typeof module !== 'undefined' && module.exports) { - var $ = require('jquery'); -} - -(function($) { +define(['libs/jquery-1.9.1.min'], function($) { var transformations = {}; @@ -12,37 +8,33 @@ if(typeof module !== 'undefined' && module.exports) { var toret = $('
'); toret.append(inner); - var toBlock = ['div', 'document', 'section', 'header']; + var toBlock = ['div', 'section', 'header']; var toInline = ['aside', 'span']; - toBlock.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 = $('
').attr('wlxml-tag', tagName); - if(currentTag.attr('class')) - toret.attr('wlxml-class', currentTag.attr('class').replace(/\./g, '-')); - toret.append(currentTag.contents()); - return toret; + 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; + }); }); - }); + } - toInline.forEach(function(tagName) { - tagName = tagName.toLowerCase(); - toret.find(tagName).replaceWith(function() { - var currentTag = $(this); - if(currentTag.attr('wlxml-tag')) - return; - var toret = $('').attr('wlxml-tag', tagName); - if(currentTag.attr('class')) - toret.attr('wlxml-class', currentTag.attr('class').replace(/\./g, '-')); - toret.append(currentTag.contents()); - return toret; - }); - }); + transform(toBlock, 'div'); + transform(toInline, 'span'); + return toret.children(); }, getMetaData: function(xml) { @@ -72,8 +64,19 @@ if(typeof module !== 'undefined' && module.exports) { var div = $(this); var tagName = div.attr('wlxml-tag'); var toret = $('<'+tagName+'>'); - if(div.attr('wlxml-class')) - toret.attr('class', div.attr('wlxml-class').replace(/-/g, '.')) + + 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; }); @@ -84,18 +87,22 @@ if(typeof module !== 'undefined' && module.exports) { }); meta.append('\n'); - toret.find('metadata').replaceWith(meta); + 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 toret.html(); + return vkbeautify.xml(toret.html()); } } + return transformations; - 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