summaryrefslogtreecommitdiff
path: root/src/client/model/util.js
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2014-12-16 17:37:42 +0200
committerAlon Levy <alon@pobox.com>2014-12-16 17:37:42 +0200
commitade19de410e0a789a921ec1666b278b2a64176d6 (patch)
treec4c54b106de93609ca7bb70a20fd4be696715dbe /src/client/model/util.js
parentc7d026b1d504323a8c61d51b726e5e8d2337fc4b (diff)
moving files around after repository merger
Diffstat (limited to 'src/client/model/util.js')
-rw-r--r--src/client/model/util.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/src/client/model/util.js b/src/client/model/util.js
new file mode 100644
index 00000000..d938fbc9
--- /dev/null
+++ b/src/client/model/util.js
@@ -0,0 +1,134 @@
+"use strict"
+
+/**
+ * model utility functions: - convert from/to client/backend data
+ * representations
+ */
+define([ 'jquery', 'model/diff' ], function($, model_diff) {
+
+ function __sanitize_label__write(label_str){
+ var ret = label_str[0].toUpperCase() +
+ label_str.substring(1).toLowerCase();
+ return ret;
+ }
+
+ function __sanitize_label__read(label_str){
+ return label_str.toLowerCase();
+ }
+
+ /**
+ * read by adapting from backend format
+ */
+ function adapt_format_read_node(n_raw) {
+ var ret;
+
+ ret = $.extend({
+ // type:
+ // - discard all but first label
+ // - adjust to lowercase
+ 'type' : __sanitize_label__read(n_raw['__label_set'][0]),
+ 'state' : 'perm',
+ }, n_raw);
+
+ delete ret.__label_set;
+
+ return ret;
+ }
+
+ /**
+ * write by adapting to backend format
+ */
+ function adapt_format_write_node(n_raw) {
+ var ret = $.extend({
+ }, n_raw);
+
+ ret['__label_set'] = [__sanitize_label__write(n_raw.type)];
+
+ delete ret.state;
+ delete ret.status
+ delete ret.type;
+
+ return ret
+ }
+
+ /**
+ * read by adapting from backend format
+ */
+ function adapt_format_read_link_ptr(l_raw) {
+ var ret;
+
+ ret = $.extend({
+ '__src_id' : l_raw['__src_id'],
+ '__dst_id' : l_raw['__dst_id'],
+ // type:
+ // - discard all but first label
+ // - adjust to lowercase
+ '__type' : __sanitize_label__read(l_raw['__label_set'][0]),
+ 'state' : 'perm',
+ }, l_raw);
+
+ ret['name'] = ret['__type'];
+
+ delete ret.__label_set;
+
+ return ret;
+ }
+
+ /**
+ * write by adapting to backend format
+ */
+ function adapt_format_write_link(l_raw) {
+ var ret = $.extend({
+ '__src_id' : l_raw.source.id,
+ '__dst_id' : l_raw.target.id,
+ }, l_raw);
+
+ ret['__label_set'] = [__sanitize_label__write(l_raw.__type)];
+
+ delete ret.__dst;
+ delete ret.__src;
+ delete ret.source; // introduced by d3 accessor methods
+ delete ret.state;
+ delete ret.status;
+ delete ret.target;
+
+ return ret;
+ }
+
+ /**
+ * write adapt diff from node set, link set. sets may be passed by reference
+ * as they are cloned
+ */
+ function adapt_format_write_topo_diff(n_set, l_set) {
+
+ var new_n_set = $.extend([], n_set);
+ var new_l_set = $.extend([], l_set);
+
+ // filter out 'bubble' nodes
+ new_n_set = new_n_set.filter(function(n) {
+ return 'bubble' != n.type;
+ });
+
+ new_n_set = $.map(new_n_set, function(n, _) {
+ return adapt_format_write_node(n);
+ })
+
+ new_l_set = $.map(new_l_set, function(l, _) {
+ return adapt_format_write_link(l);
+ })
+
+ var topo_diff = new model_diff.new_topo_diff({
+ node_set_add : new_n_set,
+ link_set_add : new_l_set
+ });
+ return topo_diff;
+ }
+
+ return {
+ adapt_format_read_node : adapt_format_read_node,
+ adapt_format_read_link_ptr : adapt_format_read_link_ptr,
+ adapt_format_write_node : adapt_format_write_node,
+ adapt_format_write_link : adapt_format_write_link,
+ adapt_format_write_topo_diff : adapt_format_write_topo_diff,
+ }
+}); \ No newline at end of file