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