X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/552cb3f87d513678d5a046d6012fc196c98f71b9..0fd55a38c4873d5916a3553d7510b9308f4eee6d:/platforma/static/js/xslt.js diff --git a/platforma/static/js/xslt.js b/platforma/static/js/xslt.js index 750acb2e..566b0a80 100644 --- a/platforma/static/js/xslt.js +++ b/platforma/static/js/xslt.js @@ -43,15 +43,21 @@ function xml2html(options) { var error = $('parsererror', doc); if (error.length == 0) { - doc = xml2htmlStylesheet.transformToDocument(doc); - console.log(doc); + doc = xml2htmlStylesheet.transformToFragment(doc, document); + console.log(doc.firstChild); + + if(doc.firstChild === null) { + options.error("Błąd w przetwarzaniu XML."); + return; + } + error = $('parsererror', doc); } if (error.length > 0 && options.error) { options.error(error.text()); } else { - options.success(document.importNode(doc.documentElement, true)); + options.success(doc.firstChild); } }, function() { options.error && options.error('Nie udało się załadować XSLT'); }); } @@ -118,18 +124,32 @@ const PADDING = { lista_osoba: 1, "podpis": 1, - "wers": 1, - "wers_cd": 1, - "wers_akap": 1, - "wers_wciety": 1, + "wers": 0, + "wers_cd": 0, + "wers_akap": 0, + "wers_wciety": 0, + + "rdf:RDF": 3, + "rdf:Description": 1, +}; + +function getPadding(name) { - "rdf:RDF": 3, + if(name.match(/^dc:.*$/)) + return -1; + + if(PADDING[name]) + return PADDING[name]; + + return 0; } function HTMLSerializer() { // empty constructor } + + HTMLSerializer.prototype._prepare = function() { this.stack = []; @@ -162,28 +182,30 @@ HTMLSerializer.prototype._pushTagEnd = function(tagName) { HTMLSerializer.prototype._verseBefore = function(node) { var prev = node.previousSibling; - while(prev) { - if(prev.nodeType == ELEMENT_NODE && prev.hasAttribute('x-verse')) - return true; - } - - return false; + while((prev !== null) && (prev.nodeType != ELEMENT_NODE)) { + prev = prev.previousSibling; + } + + return (prev !== null) && prev.hasAttribute('x-verse'); } -HTMLSerializer.prototype.serialize = function(rootElement) +HTMLSerializer.prototype.serialize = function(rootElement, stripOuter) { var self = this; self._prepare(); - self._pushElement(rootElement); + + if(!stripOuter) + self._pushElement(rootElement); + else + self._pushChildren(rootElement); while(self.stack.length > 0) { var token = self.stack.pop(); if(token.type === ELEM_END) { - self.result += ""; - if (PADDING[token.tagName]) { - for(var n=0; n < PADDING[token.tagName]; n++) - self.result += "\n"; + self.result += ""; + for(var padding = getPadding(token.tagName); padding > 0; padding--) { + self.result += "\n"; } continue; }; @@ -214,6 +236,11 @@ HTMLSerializer.prototype.serialize = function(rootElement) break; }; + if(xnode === 'out-of-flow-text') { + self._pushChildren(token.node); + break; + } + if(token.node.hasAttribute('x-verse') && self._verseBefore(token.node)) { self.result += '/\n'; }; @@ -305,6 +332,9 @@ HTMLSerializer.prototype._serializeElement = function(node) { }; /* print out */ + if (getPadding(tagName)) + self.result += '\n'; + self.result += '<' + tagName; $.each(attributeIDs, function() { @@ -338,14 +368,10 @@ HTMLSerializer.prototype._serializeElement = function(node) { }; }; -function html2text(params) { - if (params.stripOuter) { - // ... - }; - +function html2text(params) { try { var s = new HTMLSerializer(); - params.success( s.serialize(params.element) ); + params.success( s.serialize(params.element, params.stripOuter) ); } catch(e) { params.error("Nie udało się zserializować tekstu:" + e) }