Dirty hack to fix gallery editing on some browsers
[redakcja.git] / platforma / static / js / xslt.js
index f164c5b..c3f13d6 100644 (file)
@@ -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, '<br />');
-            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('<p class="error">Wystąpił błąd:</p><pre>' + error.text() + '</pre>');
-            } 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, '<br />');
+        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('<p>Wystąpił błąd:</p>' + 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'); });
 };