X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/6b0f855c770066db9b5b3fa11a9af64c4b8c60bd..008b2c8d44987a6ef6b405ffc2124f28d3c6220d:/src/redakcja/static/js/wiki/xslt.js diff --git a/src/redakcja/static/js/wiki/xslt.js b/src/redakcja/static/js/wiki/xslt.js index 1c693521..a38ce6b5 100644 --- a/src/redakcja/static/js/wiki/xslt.js +++ b/src/redakcja/static/js/wiki/xslt.js @@ -17,21 +17,20 @@ function withStylesheets(code_block, onError) if (!xml2htmlStylesheet) { $.blockUI({message: 'Ładowanie arkuszy stylów...'}); $.ajax({ - url: STATIC_URL + 'xsl/wl2html_client.xsl?2019121801', - dataType: 'xml', - timeout: 10000, - success: function(data) { + url: '/wlxml/wl2html.xsl', + dataType: 'xml', + timeout: 10000, + success: function(data) { xml2htmlStylesheet = createXSLT(data); $.unblockUI(); - code_block(); - + code_block(); }, - error: onError + error: onError }) } - else { - code_block(); - } + else { + code_block(); + } } @@ -61,6 +60,20 @@ function xml2html(options) { source.text(''); options.error(error.text(), source_text); } else { + let galleryUrl = new URL( + options.base, + window.location.href + ); + $("img", $(doc.childNodes)).each(function() { + $(this).attr( + 'src', + new URL( + $(this).attr('src'), + galleryUrl + ) + ); + }) + options.success(doc.childNodes); $.themes.withCanon(function(canonThemes) { @@ -94,6 +107,7 @@ const DOCUMENT_TYPE_NODE = 10; const DOCUMENT_FRAGMENT_NODE = 11; const NOTATION_NODE = 12; const XATTR_RE = /^x-attr-name-(.*)$/; +const XATTR_KNOWN_RE = /^x-a-([a-z]+)-(.*)$/; const ELEM_START = 1; const ELEM_END = 2; @@ -106,6 +120,13 @@ const NAMESPACES = { "http://www.w3.org/XML/1998/namespace": "xml" }; +NS_PREFIXES = { + 'wl': '' +}; +for (prefix in NAMESPACES) { + NS_PREFIXES[NAMESPACES[prefix]] = prefix +}; + function HTMLSerializer() { // empty constructor } @@ -314,32 +335,61 @@ HTMLSerializer.prototype._serializeElement = function(node) { /* retrieve attributes */ var attributeIDs = []; + var attributes = []; for (var i = 0; i < node.attributes.length; i++) { - var attr = node.attributes.item(i); - - // check if name starts with "x-attr-name" - var m = attr.name.match(XATTR_RE); - if (m !== null) - attributeIDs.push(m[1]); + var attr = node.attributes.item(i); + + m = attr.name.match(XATTR_KNOWN_RE); + if (m !== null) { + prefix = m[1]; + tag = m[2]; + attributes.push([ + NS_PREFIXES[prefix], + tag, + attr.value + ]); + } else { + // check if name starts with "x-attr-name" + var m = attr.name.match(XATTR_RE); + if (m !== null) { + attributeIDs.push(m[1]); + } + } }; /* print out */ self.result += '<' + tagName; - $.each(attributeIDs, function() { - var nsData = self._assignNamespace(node.getAttribute('x-attr-ns-'+this)); - + function writeAttr(ns, tag, value) { + if (ns) { + var nsData = self._assignNamespace(ns); if(nsData.fresh) { - newNamespaces.push(nsData); - self.stack.push({ - "type": NS_END, - "namespace": nsData - }); + newNamespaces.push(nsData); + self.stack.push({ + "type": NS_END, + "namespace": nsData + }); }; + tag = self._join(nsData.prefix, tag); + } - self.result += ' ' + self._join(nsData.prefix, node.getAttribute('x-attr-name-'+this)); - self.result += '="'+node.getAttribute('x-attr-value-'+this) +'"'; + self.result += ' ' + tag; + self.result += '="' + value.replace(/&/g, '&').replace(/"/g, '"') + '"'; + } + + $.each(attributes, function() { + writeAttr( + this[0], this[1], this[2] + ); + }); + + $.each(attributeIDs, function() { + writeAttr( + node.getAttribute('x-attr-ns-'+this), + node.getAttribute('x-attr-name-'+this), + node.getAttribute('x-attr-value-'+this) + ); }); /* print new namespace declarations */