diff options
| author | LV-426 <lv-426@taproot.org.il> | 2014-11-17 13:29:01 +0200 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2014-11-19 23:21:42 +0200 |
| commit | cbf03e61c2f052bad71345b7ff8348ad8d4186c2 (patch) | |
| tree | a6335c177aee0cb4c8569acbd29c77cea0ebd7f8 /src | |
| parent | f9383cc394312d80a2687cb92746a0c7e2bebbaf (diff) | |
crete_node_from_spec, create_node__set_random_id & link equivalents
Diffstat (limited to 'src')
| -rw-r--r-- | src/model/core.js | 98 |
1 files changed, 79 insertions, 19 deletions
diff --git a/src/model/core.js b/src/model/core.js index b1758cd1..6111954b 100644 --- a/src/model/core.js +++ b/src/model/core.js @@ -19,29 +19,43 @@ define([], function() { function Node() { } - Node.prototype.selected = function() { - return this.state == 'chosen' || this.state == 'enter' || this.state == 'exit'; + function Link() { } - function create_node__set_random_id(node_spec) { - if (node_spec.id) { - console.log('create_node__set_random_id: bug: given id'); - } - node_spec.id = random_id(); - return create_node(node_spec); - } + /** + * the most flexible way to create a node: - perform spec field validation - + * fill-in missing spec fields + */ + function crete_node_from_spec(node_spec) { + var ret = new Node(); - function create_node(node_spec) { - if (undefined == node_spec) { - node_spec = {}; + // name + if (undefined == node_spec.name) { + console.debug('crete_node_from_spec: undefined name, falling back to \"\"'); + node_spec.name = ""; } - var ret = new Node(); ret.name = node_spec.name; + + // type + if (undefined == node_spec.type) { + console.debug('crete_node_from_spec: undefined type, falling back to \'empty\''); + node_spec.type = 'empty'; + } ret.type = node_spec.type; - ret.state = node_spec.state; + + // status + if (undefined == node_spec.status) { + node_spec.type = 'unknown'; + } ret.status = node_spec.status; - ret.url = node_spec.url; + // visual + ret.x = node_spec.x; + ret.y = node_spec.y; + + // other + ret.state = node_spec.state; + ret.url = node_spec.url; ret.start = node_spec.start; ret.end = node_spec.end; ret.x = node_spec.x; @@ -51,9 +65,29 @@ define([], function() { return ret; } - function create_link__set_random_id(link_spec) { - var ret = new Link(); - ret.id = random_id(); + /** + * + */ + function create_node__set_random_id(node_spec) { + if (undefined == node_spec) { + node_spec = {}; + } + + var ret = crete_node_from_spec(node_spec); + Object.defineProperty(ret, "id", { + value: random_id(), + writable: false + }); + + return ret; + } + + function create_link__set_random_id(src, dst, link_spec) { + var ret = crete_link_from_spec(src, dst, link_spec); + Object.defineProperty(ret, "id", { + value: random_id(), + writable: false + }); } /** @@ -74,6 +108,31 @@ define([], function() { } + function crete_link_from_spec(src, dst, link_spec) { + if (undefined == src) { + console.error('crete_link_from_spec: undefined: src'); + return null; + } + if (undefined == dst) { + console.error('crete_link_from_spec: undefined: dst'); + return null; + } + + var ret = new Link(); + ret.__src = src; + ret.__dst = dst; + ret.__type = 'textual_link'; + + if (undefined == link_spec.name){ + console.warn('crete_link_from_spec: name: ' + link_spec.name); + link_spec.name = ""; + } + ret.name = link_spec.name.trim(); + + ret.state = link_spec.state; + return ret; + } + /** * determine if links are equal by ID * @@ -86,7 +145,8 @@ define([], function() { return { random_node_name : random_node_name, - create_node: create_node, + crete_node_from_spec : crete_node_from_spec, + crete_link_from_spec : crete_link_from_spec, create_node__set_random_id : create_node__set_random_id, create_link__set_random_id : create_link__set_random_id, }; |
