X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/3d61fc117d9e5274189d16be83d4489cd4b36d7f..198be737937aec7259e81ba791bf7f4e401795eb:/platforma/static/js/xslt.js diff --git a/platforma/static/js/xslt.js b/platforma/static/js/xslt.js index f164c5bd..c3f13d6a 100644 --- a/platforma/static/js/xslt.js +++ b/platforma/static/js/xslt.js @@ -34,8 +34,9 @@ var MARGIN = { MARGIN['rdf:RDF'] = 3; MARGIN['rdf:Description'] = 2; +var blockTags = ['akap', 'akap_cd', 'akap_dialog', 'strofa', 'didaskalia', 'wers', 'wers_cd', 'wers_akap', 'wers_wciety', 'autor_utworu', 'nazwa_utworu', 'dzielo_nadrzedne', 'podpis']; function elementType(element) { - if ($.inArray(element.tagName, ['akap', 'akap_cd', 'akap_dialog', 'strofa', 'didaskalia', 'wers', 'wers_cd', 'wers_akap', 'wers_wciety', 'autor_utworu', 'nazwa_utworu', 'dzielo_nadrzedne', 'podpis'])) { + if (blockTags.indexOf(element.tagName) != -1) { return 'inline'; } else { return 'block'; @@ -49,11 +50,7 @@ function serialize(element, mode) { } if (element.nodeType == 3) { // tekst - if (mode == 'block') { - return [$.trim(element.nodeValue)]; - } else { - return [element.nodeValue]; - } + return [element.nodeValue]; } else if (element.nodeType != 1) { // pomijamy węzły nie będące elementami XML ani tekstem return []; } @@ -61,6 +58,8 @@ function serialize(element, mode) { var result = []; var hasContent = false; + + if (MARGIN[element.tagName]) { for (var i=0; i < MARGIN[element.tagName]; i++) { result.push('\n'); @@ -132,12 +131,12 @@ function withStylesheets(block, onError) { } $.blockUI({message: 'Ładowanie arkuszy stylów...'}); $.ajax({ - url: '/static/xsl/wl2html_client.xsl', + url: STATIC_URL + 'xsl/wl2html_client.xsl', dataType: 'xml', success: function(data) { xml2htmlStylesheet = createXSLT(data); $.ajax({ - url: '/static/xsl/html2wl_client.xsl', + url: STATIC_URL + 'xsl/html2wl_client.xsl', dataType: 'xml', success: function(data) { html2xmlStylesheet = createXSLT(data); @@ -151,72 +150,55 @@ function withStylesheets(block, onError) { }) } -function transform(editor) { - $.blockUI({message: 'Ładowanie...'}); - withStylesheets(function() { - setTimeout(function() { - var doc = null; - var parser = new DOMParser(); - var serializer = new XMLSerializer(); - - doc = editor.getCode().replace(/\/\s+/g, '
'); - doc = parser.parseFromString(doc, 'text/xml'); - var error = $('parsererror', doc); - console.log(error); - if (error.length == 0) { - doc = xml2htmlStylesheet.transformToFragment(doc, document); - error = $('parsererror', doc); - } - console.log('xml', doc); - if (error.length > 0) { - console.log(error); - $('#html-view').html('

Wystąpił błąd:

' + error.text() + '
'); - } else { - console.log('after transform', doc); - $('#html-view').html(doc.firstChild); - } - $.unblockUI(); - }, 200); - }, function() { alert('Nie udało się załadować XSLT!'); }); -}; +function xml2html(options) { + withStylesheets(function() { + var xml = options.xml.replace(/\/\s+/g, '
'); + var parser = new DOMParser(); + var serializer = new XMLSerializer(); + var doc = parser.parseFromString(xml, 'text/xml'); + var error = $('parsererror', doc); + + if (error.length == 0) { + doc = xml2htmlStylesheet.transformToFragment(doc, document); + error = $('parsererror', doc); + } + + if (error.length > 0 && options.error) { + options.error(error.text()); + } else { + options.success(doc.firstChild); + } + }, function() { options.error && options.error('Nie udało się załadować XSLT'); }); +} -function reverseTransform(editor) { - $.blockUI({message: 'Ładowanie...'}); +function html2xml(options) { withStylesheets(function() { - setTimeout(function() { - var doc = null; - var parser = new DOMParser(); - var serializer = new XMLSerializer(); - - if ($('#html-view .error').length > 0) { - $('#source-editor').unblock(); - return; - } - - doc = serializer.serializeToString($('#html-view div').get(0)) - doc = parser.parseFromString(doc, 'text/xml'); - console.log('xml',doc, doc.documentElement); - // TODO: Sprawdzenie błędów - var error = $('parsererror', doc.documentElement); - console.log(error); - if (error.length == 0) { - doc = html2xmlStylesheet.transformToDocument(doc, document); - error = $('parsererror', doc.documentElement); - } - - if (error.length > 0) { - console.log(error); - $('#source-editor').html('

Wystąpił błąd:

' + error.text()); + var xml = options.xml; + var parser = new DOMParser(); + var serializer = new XMLSerializer(); + var doc = parser.parseFromString(xml, 'text/xml'); + var error = $('parsererror', doc.documentElement); + + if (error.length == 0) { + doc = html2xmlStylesheet.transformToDocument(doc); + error = $('parsererror', doc.documentElement); + } + + if (error.length > 0 && options.error) { + options.error(error.text()); + } else { + if (options.inner) { + var result = []; + for (var i = 0; i < doc.documentElement.childNodes.length; i++) { + result.push(serialize(doc.documentElement.childNodes[i]).join('')); + }; + options.success(result.join('')); } else { - doc = serialize(doc.documentElement).join(''); - editor.setCode(doc); + options.success(serialize(doc.documentElement).join('')); } - - console.log('after transform', doc, doc.documentElement); - $.unblockUI(); - }, 200) - }, function() { alert('Nie udało się załadować XSLT!')}); + } + }, function() { options.error && options.error('Nie udało się załadować XSLT'); }); };