summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2014-12-16 15:46:28 +0200
committerLV-426 <lv-426@taproot.org.il>2014-12-16 15:46:28 +0200
commit1b5f26253e335c33c65405a5df135aa8aec70b94 (patch)
tree4b4453599601bcf7972e48eba66af52658d4aebb /src
parent1e8d414e34db20e5a1549cd73a2dce4a5fffd5c0 (diff)
[wip] graph.update_node()
Diffstat (limited to 'src')
-rw-r--r--src/model/graph.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/model/graph.js b/src/model/graph.js
index 6264e86e..53000104 100644
--- a/src/model/graph.js
+++ b/src/model/graph.js
@@ -384,6 +384,57 @@ function Graph() {
}
}
+ this.update_node = function(node, new_node_spec, on_success, on_error) {
+ util.assert(node instanceof model_core.Node);
+
+ if (rz_config.backend_enabled){
+
+ if (node.name != new_node_spec.name){
+ /*
+ * handle name update collision: suggest removal first
+ */
+ var n_eq_name = findNodeByName(new_node_spec.name);
+ if (undefined != n_eq_name) {
+ // delete colliding node on rename
+ console.warn('update_node: name collision blocked due to node rename');
+ undefined != on_error && on_error();
+ return;
+ }
+
+ node['name'] = new_node_spec['name']; // [!] may still fail due to server NAK
+ }
+
+ var attr_diff = model_diff.new_attr_diff();
+ for (var key in new_node_spec){
+ attr_diff.add_node_attr_write(node.id, key, new_node_spec[key]);
+ }
+
+ var on_ajax_success = function(id_to_node_map){
+ var node_id = node.id; // original node id
+ if (id_to_node_map[node_id].id != node_id){
+ // TODO: handle incoming ID update
+ util.assert(false, 'update_node: id attr change');
+ }
+
+ var ret_node = id_to_node_map[node_id];
+ for (var key in ret_node){
+ if ('name' == key || 'id' == key){
+ continue;
+ }
+ node[key] = ret_node[key];
+ }
+
+ // TODO: handle NAK: add problem emblem to node
+ on_success();
+ };
+
+ var on_ajax_error = function(){
+ };
+
+ rz_api_backend.commit_diff__attr(attr_diff, on_ajax_success, on_ajax_error);
+ }
+ }
+
this.editNameByName = function(old_name, new_name) {
var node = findNodeByName(old_name);