client/js/json-serializer.js
changeset 1 45cca39b00ac
child 2 3360c3f7fb18
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/js/json-serializer.js	Wed Jul 25 19:36:31 2012 +0200
@@ -0,0 +1,42 @@
+Rkns.Serializers.BasicJson = Rkns.Utils.inherit(Rkns.Serializers._Base);
+
+Rkns.Serializers.BasicJson.prototype._init = function() {
+    this.load(this._project._opts.url);
+}
+
+Rkns.Serializers.BasicJson.prototype.load = function(_url) {
+    var _this = this;
+    Rkns.$.getJSON(_url, function(_data) {
+        _this.deserialize(_data);
+        _this.handleCallbacks();
+    });
+}
+
+Rkns.Serializers.BasicJson.prototype.deserialize = function(_serializedData) {
+    if (typeof _serializedData === "string") {
+        _serializedData = JSON.parse(_serializedData);
+    }
+    var _proj = this._project;
+    _proj.title = _serializedData.title || "(untitled project)";
+    if (typeof _serializedData.users === "object" && _serializedData.users) {
+        _proj.users.addElements(
+            Rkns._(_serializedData.users).map(function(_userData) {
+                return new Rkns.Model.User(_proj, _userData);
+            })
+        );
+    }
+    if (typeof _serializedData.nodes === "object" && _serializedData.nodes) {
+        _proj.nodes.addElements(
+            Rkns._(_serializedData.nodes).map(function(_nodeData) {
+                return new Rkns.Model.Node(_proj, _nodeData);
+            })
+        );
+    }
+    if (typeof _serializedData.edges === "object" && _serializedData.edges) {
+        _proj.edges.addElements(
+            Rkns._(_serializedData.edges).map(function(_edgeData) {
+                return new Rkns.Model.Edge(_proj, _edgeData);
+            })
+        );
+    }
+}