Fixes #382.
[redakcja.git] / platforma / static / js / app.js
index fde1539..e870a38 100644 (file)
@@ -180,6 +180,59 @@ Editor.Object = Class.extend({
   }
 });
 
   }
 });
 
+// Handle JSON error responses in uniform way
+function parseXHRError(response)
+{
+    var message = "";
+    var level = "";
+    
+    try {
+      var json = $.evalJSON(response.responseText);
+
+      if(json.reason == 'xml-parse-error') {
+          message = json.message.replace(/(line\s+)(\d+)(\s+)/i,
+            "<a class='xml-editor-ref' href='#xml-$2-1'>$1$2$3</a>");
+
+          message = message.replace(/(line\s+)(\d+)(\,\s*column\s+)(\d+)/i,
+            "<a class='xml-editor-ref' href='#xml-$2-$4'>$1$2$3$4</a>");
+
+          level = "warning";
+      }
+      else if(json.reason == 'xml-non-valid') {
+          message = json.message;
+          level = "warning";
+      }
+      else {
+         message = json.message || json.reason || "Nieznany błąd :((";
+         level = "error";
+      }
+    } catch(e) {
+        // not a valid JSON response
+        message = response.statusText || 'Brak połączenia z serwerem';
+        level = "error";
+    }
+    
+    return {error_message: message, error_level: level};
+}
+
+function parseXHRResponse(xhr) {
+    var response = {}
+    
+    if(xhr.status >= 200 && xhr.status < 300) 
+    {
+        response.success = true;
+        try {
+            response.data = $.evalJSON(xhr.responseText);
+        } catch(e) {
+            response.data = {};
+        }
+
+        return response;
+    }
+
+    return parseXHRError(xhr);
+}
+
 Editor.Object._lastGuid = 0;
 
 Editor.Object._lastGuid = 0;
 
-var panels = [];
+var panels = [];
\ No newline at end of file