client/js/json-serializer.js
author ymh <ymh.work@gmail.com>
Thu, 16 Aug 2012 15:59:25 +0200
changeset 13 6d0e0100f4e8
parent 5 67085e6281e5
child 14 f7d9fe3ef6f3
permissions -rw-r--r--
Clean server, copy dep from client
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     1
Rkns.Serializers.BasicJson = Rkns.Utils.inherit(Rkns.Serializers._Base);
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     2
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     3
Rkns.Serializers.BasicJson.prototype._init = function() {
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     4
    this.load(this._project._opts.url);
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
     5
    var _this = this;
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
     6
    this.save = Rkns._.throttle(function() {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
     7
        _this._save.apply(this, Array.prototype.slice.call(arguments,0));
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
     8
    }, 2000);
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
     9
}
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    10
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    11
Rkns.Serializers.BasicJson.prototype.load = function(_url) {
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    12
    var _this = this;
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    13
    Rkns.$.getJSON(_url, function(_data) {
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    14
        _this.deserialize(_data);
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    15
        _this.handleCallbacks();
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    16
    });
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    17
}
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    18
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    19
Rkns.Serializers.BasicJson.prototype.deserialize = function(_serializedData) {
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    20
    if (typeof _serializedData === "string") {
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    21
        _serializedData = JSON.parse(_serializedData);
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    22
    }
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    23
    var _proj = this._project;
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    24
    _proj.title = _serializedData.title || "(untitled project)";
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    25
    if (typeof _serializedData.users === "object" && _serializedData.users) {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    26
        Rkns._(_serializedData.users).each(function(_data) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    27
            var _userData = {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    28
                id: _data.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    29
                title: _data.title,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    30
                uri: _data.uri,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    31
                color: _data.color
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    32
            };
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    33
            _proj.addUser(_userData);
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    34
        });
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    35
    }
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    36
    if (typeof _serializedData.nodes === "object" && _serializedData.nodes) {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    37
        Rkns._(_serializedData.nodes).each(function(_data) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    38
            var _nodeData = {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    39
                id: _data.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    40
                title: _data.title,
5
67085e6281e5 Added basic node/edge editing
veltr
parents: 4
diff changeset
    41
                description: _data.description,
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    42
                uri: _data.uri,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    43
                created_by: _data.created_by,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    44
                position: {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    45
                    x: _data.position.x,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    46
                    y: _data.position.y
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    47
                }
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    48
            };
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    49
            _proj.addNode(_nodeData);
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    50
        });
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    51
    }
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    52
    if (typeof _serializedData.edges === "object" && _serializedData.edges) {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    53
        Rkns._(_serializedData.edges).each(function(_data) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    54
            var _edgeData = {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    55
                id: _data.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    56
                title: _data.title,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    57
                uri: _data.uri,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    58
                from: _data.from,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    59
                to: _data.to,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    60
                created_by: _data.created_by
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    61
            };
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    62
            _proj.addEdge(_edgeData);
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    63
        });
1
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    64
    }
45cca39b00ac First rendering tests
veltr
parents:
diff changeset
    65
}
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    66
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    67
Rkns.Serializers.BasicJson.prototype.serialize = function() {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    68
    var _res = {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    69
        title: this._project.title,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    70
        users: this._project.users.map(function(_user) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    71
            return {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    72
                id: _user.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    73
                title: _user.title,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    74
                uri: _user.uri,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    75
                color: _user.color
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    76
            }
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    77
        }),
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    78
        nodes: this._project.nodes.map(function(_node) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    79
            return {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    80
                id: _node.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    81
                title: _node.title,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    82
                uri: _node.uri,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    83
                created_by: _node.created_by.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    84
                position: {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    85
                    x: _node.position.x,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    86
                    y: _node.position.y
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    87
                }
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    88
            }
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    89
        }),
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    90
        edges: this._project.edges.map(function(_node) {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    91
            return {
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    92
                id: _node.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    93
                title: _node.title,
5
67085e6281e5 Added basic node/edge editing
veltr
parents: 4
diff changeset
    94
                description: _node.description,
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    95
                uri: _node.uri,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    96
                from: _node.from.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    97
                to: _node.to.id,
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    98
                created_by: _node.created_by.id
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
    99
            }
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
   100
        })
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
   101
    }
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
   102
    return _res;
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
   103
}
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
   104
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
   105
Rkns.Serializers.BasicJson.prototype._save = function() {
5
67085e6281e5 Added basic node/edge editing
veltr
parents: 4
diff changeset
   106
    var _data = JSON.stringify(this.serialize());
13
6d0e0100f4e8 Clean server, copy dep from client
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   107
    Rkns.$.ajax({
6d0e0100f4e8 Clean server, copy dep from client
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   108
    	type: 'PUT',
6d0e0100f4e8 Clean server, copy dep from client
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   109
    	url: this._project._opts.url,
6d0e0100f4e8 Clean server, copy dep from client
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   110
    	contentType: "application/json",
6d0e0100f4e8 Clean server, copy dep from client
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   111
    	data: _data,
6d0e0100f4e8 Clean server, copy dep from client
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   112
    	success: function(data, textStatus, jqXHR) {
4
f5297dde9053 Can now add nodes/edges
veltr
parents: 2
diff changeset
   113
        }
13
6d0e0100f4e8 Clean server, copy dep from client
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   114
    });
6d0e0100f4e8 Clean server, copy dep from client
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   115
};