summaryrefslogtreecommitdiff
path: root/src/client/model/graph.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/model/graph.js')
-rw-r--r--src/client/model/graph.js48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/client/model/graph.js b/src/client/model/graph.js
index a85b6b7e..063bc3c5 100644
--- a/src/client/model/graph.js
+++ b/src/client/model/graph.js
@@ -381,6 +381,54 @@ function Graph() {
rz_bus.names.push([newname]);
}
+ this.update_link = function(link, new_link_spec, on_success, on_error) {
+ util.assert(link instanceof model_core.Link);
+
+ // TODO - fake api for client only (debug, demo, ui work)
+ if (!rz_config.backend_enabled) return;
+
+ var attr_diff = model_diff.new_attr_diff();
+ for (var key in new_link_spec){
+ attr_diff.add_link_attr_write(link.id, key, new_link_spec[key]);
+ }
+
+ var on_ajax_success = function(id_to_link_map){
+ var link_id = link.id; // original link id
+ if (id_to_link_map[link_id].id != link_id){
+ // TODO: handle incoming ID update
+ util.assert(false, 'update_link: id attr change');
+ }
+
+ var ret_link = id_to_link_map[link_id];
+ for (var key in ret_link){
+ if ('id' == key){
+ continue;
+ }
+ var matching = null;
+ link[key] = ret_link[key];
+ // this part is fucked up right now
+ if (key == '__type') {
+ matching = 'name';
+ }
+ if (key == 'name') {
+ matching = '__type';
+ }
+ if (matching) {
+ link[matching] = link[key];
+ }
+ }
+
+ // TODO: handle NAK: add problem emblem to link
+ on_success();
+ };
+
+ var on_ajax_error = function(){
+ console.log('error with commit to server: danger robinson!');
+ };
+
+ rz_api_backend.commit_diff__attr(attr_diff, on_ajax_success, on_ajax_error);
+ }
+
this.update_node = function(node, new_node_spec, on_success, on_error) {
util.assert(node instanceof model_core.Node);