summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client-tests/base.js4
-rw-r--r--src/client/model/core.js7
-rw-r--r--src/client/model/graph.js31
-rw-r--r--src/client/rz_core.js2
-rw-r--r--src/client/textanalysis.js114
5 files changed, 87 insertions, 71 deletions
diff --git a/src/client-tests/base.js b/src/client-tests/base.js
index 318e2696..c466abef 100644
--- a/src/client-tests/base.js
+++ b/src/client-tests/base.js
@@ -46,11 +46,11 @@ function run_tests(settings) {
settings.created(undefined, window);
}
debugger
- addScript(window, '../client/require.js')
+ addScript(window, '../../res/client/lib/require.js')
.load_next('../client/app.js')
.done(function () {
console.log('test harness: starting script loading with requirejs');
- console.dir(window.require);
+ console.dir(window.rhizi_require_config);
window.require.config(window.rhizi_require_config);
window.requirejs(['main'], function(main) {
console.log('test harness: main loaded');
diff --git a/src/client/model/core.js b/src/client/model/core.js
index d0674bd8..18aa2507 100644
--- a/src/client/model/core.js
+++ b/src/client/model/core.js
@@ -137,7 +137,8 @@ define(['util'], function(util) {
}
function create_link_from_spec(src, dst, link_spec) {
- var ret = new Link();
+ var ret = new Link(),
+ temp = link_spec.state === 'temp';
if (undefined != link_spec.id) {
// reuse id if present
@@ -146,8 +147,8 @@ define(['util'], function(util) {
util.assert(undefined != src, 'create_link_from_spec: src missing');
util.assert(undefined != dst, 'create_link_from_spec: dst missing');
- util.assert(undefined != src.id, 'create_link_from_spec: src missing id');
- util.assert(undefined != dst.id, 'create_link_from_spec: dst missing id');
+ util.assert(temp || undefined != src.id, 'create_link_from_spec: non temp src missing id');
+ util.assert(temp || undefined != dst.id, 'create_link_from_spec: non temp dst missing id');
util.assert(undefined != link_spec.name, 'create_link_from_spec: name missing, unable to deduce type');
ret.__src = src;
diff --git a/src/client/model/graph.js b/src/client/model/graph.js
index c244356f..46b0359b 100644
--- a/src/client/model/graph.js
+++ b/src/client/model/graph.js
@@ -72,7 +72,7 @@ function Graph() {
$.merge(topo_diff.link_set_rm, nodes_to_touched_links(topo_diff.node_set_rm));
topo_diff.node_set_add = topo_diff.node_set_add.map(function(n) {
if (n.id === undefined) {
- var existing = findNodeByName(n.name);
+ var existing = find_node__by_name(n.name);
if (existing) {
n = existing;
} else {
@@ -135,7 +135,7 @@ function Graph() {
node;
if (undefined == spec.id) {
- existing_node = findNodeByName(spec.name)
+ existing_node = find_node__by_name(spec.name)
if (existing_node){
return existing_node;
} else {
@@ -377,8 +377,8 @@ function Graph() {
this.addLinkByName = function(src_name, dst_name, name, state, drop_conjugator_links) {
- var src = findNodeByName(src_name),
- dst = findNodeByName(dst_name),
+ var src = find_node__by_name(src_name),
+ dst = find_node__by_name(dst_name),
src_id = src ? src.id : null,
dst_id = dst ? dst.id : null;
@@ -479,7 +479,7 @@ function Graph() {
/*
* handle name update collision: suggest removal first
*/
- var n_eq_name = findNodeByName(new_node_spec.name);
+ var n_eq_name = find_node__by_name(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');
@@ -521,7 +521,7 @@ function Graph() {
}
this.editNameByName = function(old_name, new_name) {
- var node = findNodeByName(old_name);
+ var node = find_node__by_name(old_name);
if (node === undefined) {
console.log('editNameByName: error: cannot find node with name ' + old_name);
@@ -531,7 +531,7 @@ function Graph() {
}
this.editName = function(id, new_name) {
- var n_eq_name = findNodeByName(new_name);
+ var n_eq_name = find_node__by_name(new_name);
var n_eq_id = find_node__by_id(id);
var acceptReplace=true;
@@ -623,16 +623,8 @@ function Graph() {
}
this.removeLinks = function(state) {
- var id = null;
var ls = findLinks(state);
- for (var j = 0; j < ls.length; j++) {
- var l = ls[j];
- var i = 0;
- while (i < links.length) {
- if (links[i] === l) links.splice(i, 1);
- else i++;
- }
- }
+ ls.map(_link_remove_helper);
}
var findLink = function(src_id, dst_id, name) {
@@ -668,6 +660,7 @@ function Graph() {
this.hasNodeByName = hasNodeByName;
var hasNodeByNameAndNotState = function(name, state) {
+ util.assert(state === 'temp', "this is deprecated and to be removed but anyway just for temp");
return get_nodes().filter(function(n) {
return compareNames(n.name, name) && n.state !== state;
}).length > 0;
@@ -694,13 +687,14 @@ function Graph() {
return ret;
}
- var findNodeByName = function(name) {
+ var find_node__by_name = function(name) {
for (var k in node_map) {
if (compareNames(node_map[k].name, name)) {
return node_map[k];
}
}
}
+ this.find_node__by_name = find_node__by_name;
var findNodes = function(id, state) {
// id=id.toLowerCase();
@@ -763,6 +757,7 @@ function Graph() {
}
function commit_diff__topo(diff) {
+ console.dir(diff);
// done under protest
diff.node_set_add.map(function (node_spec) {
__addNode(node_spec);
@@ -770,7 +765,7 @@ function Graph() {
diff.link_set_add.map(function (link_spec) {
// resolve link ptr
var src = find_node__by_id(link_spec.__src_id),
- dst = find_node__by_id(link_spec.__dst_id),
+ dst = find_node__by_id(link_spec.__dst_id) || find_node__by_name(link_spec.__dst.name),
link = model_core.create_link_from_spec(src, dst, link_spec);
__addLink(link);
diff --git a/src/client/rz_core.js b/src/client/rz_core.js
index 85a58e93..36d8058e 100644
--- a/src/client/rz_core.js
+++ b/src/client/rz_core.js
@@ -378,6 +378,8 @@ function update_view__graph(relayout) {
selected_link_group = document.querySelector('#selected-link-group'),
relayout = relayout || true;
+ //return;
+
link = vis.selectAll("g.link")
.data(graph.links(), function(d) { return d.id; });
diff --git a/src/client/textanalysis.js b/src/client/textanalysis.js
index 9850e627..ebfd3007 100644
--- a/src/client/textanalysis.js
+++ b/src/client/textanalysis.js
@@ -59,8 +59,8 @@ function new_tokenize(text, node_token, quote)
return tokens;
}
-define(['rz_core', 'model/core', 'model/util', 'model/diff', 'consts'],
-function(rz_core, model_core, model_util, model_diff, consts) {
+define(['rz_core', 'model/core', 'model/util', 'model/diff', 'consts', 'util'],
+function(rz_core, model_core, model_util, model_diff, consts, util) {
var typeindex = 0;
var nodetypes = consts.nodetypes;
@@ -108,7 +108,7 @@ function auto_suggest_remove_name(name, id)
/* up_to_two_renames:
*
* allow one letter or 'new node' to anything changes */
-function up_to_two_renames(graph, old_name, new_name)
+function up_to_two_renames(graph, old_name, new_name, link_set_add)
{
var not_one_letter = false;
var k;
@@ -152,6 +152,15 @@ function up_to_two_renames(graph, old_name, new_name)
}
for (k = 0 ; k < old_name.length ; ++k) {
graph.editNameByName(old_name[k], new_name[k]);
+ // very disappointing. suicide threats are ok?
+ link_set_add.forEach(function (link) {
+ if (link.__src.name == old_name[k]) {
+ link.__src.name = new_name[k];
+ }
+ if (link.__dst.name == old_name[k]) {
+ link.__dst.name = new_name[k];
+ }
+ });
}
}
@@ -245,34 +254,44 @@ var textAnalyser = function (newtext, finalize) {
ret.node_set_add.push(node);
}
- function __addLink(src, dst, name, state) {
- if (!src || !dst) {
+ var __sourceNodeFromName = function (name) {
+ for (var key in ret.node_set_add) {
+ var node = ret.node_set_add[key];
+ if (node.name == name) {
+ return node;
+ }
+ }
+ return {'existing': name};
+ };
+
+ function __addLink(src_name, dst_name, name, state) {
+ if (!src_name || !dst_name) {
if (yell_bug) {
- console.log('bug - adding link (' + src + ', ' + dst + ')');
+ console.log('bug - adding link (' + src_name + ', ' + dst_name + ')');
}
return;
}
- if (link_hash[src] && link_hash[src][dst]) {
+ name = name || 'is';
+ if (link_hash[src_name] && link_hash[src_name][dst_name]) {
if (yell_bug) {
- console.log('bug - adding link twice (' + src + ', ' + dst + ')');
+ console.log('bug - adding link twice (' + src_name + ', ' + dst_name + ')');
}
return;
}
- if (!link_hash[src]) {
- link_hash[src] = {};
+ if (!link_hash[src_name]) {
+ link_hash[src_name] = {};
}
- link_hash[src][dst] = 1;
+ link_hash[src_name][dst_name] = 1;
- var link = {'__src': src, '__dst':dst, 'name':name, 'state':state}; // can't use model_core.create_link_from_spec as src,dst are only names
+ var link = {
+ '__src': src_name,
+ '__dst': dst_name,
+ 'name':name,
+ 'state':state
+ };
ret.link_set_add.push(link);
}
- function apply_conjugator_link_logic(link, drop_conjugator_links){
- if (drop_conjugator_links && link.name && (link.name.replace(/ /g,"") === "and")) {
- link.state = "temp";
- }
- }
-
if (newtext.indexOf('#') == -1 || finalize) {
lastnode = null;
}
@@ -458,6 +477,20 @@ var textAnalyser = function (newtext, finalize) {
ret.applyToGraph = function(graph, backend_commit) {
window.ret = ret;
+ ret.link_set_add.forEach(function (link) {
+ if (ret.drop_conjugator_links && (link.name.replace(/ /g,"") === "and")) {
+ link.state = "temp";
+ }
+ link.__src = graph.find_node__by_name(link.__src) || __sourceNodeFromName(link.__src);
+ link.__dst = graph.find_node__by_name(link.__dst) || __sourceNodeFromName(link.__dst);
+ if (link.__src.id !== undefined) {
+ link.__src_id = link.__src.id;
+ }
+ if (link.__dst.id !== undefined) {
+ link.__dst_id = link.__dst.id;
+ }
+ });
+
/*
* generate fitered node set who:
* - are not name-present in graph
@@ -469,42 +502,25 @@ var textAnalyser = function (newtext, finalize) {
}),
link_set = ret.link_set_add.map(
function (link) {
- return [link.__src, link.__dst];
+ return [link.__src.name, link.__dst.name];
}),
comp = graph.compareSubset('temp', n_set, link_set);
if (false == finalize && comp.graph_same) {
+ console.log('close enough');
if (comp.old_name && comp.new_name) {
- up_to_two_renames(graph, comp.old_name, comp.new_name);
+ up_to_two_renames(graph, comp.old_name, comp.new_name, ret.link_set_add);
}
} else {
+ console.log('not close enough (or finalize)');
// REINITIALISE GRAPH (DUMB BUT IT WORKS)
+ //
+ // FIXME: have temp nodes on a separete graph
+ // finalize - take temp graph and create a single topo_diff
+ // else - update temp graph with this topodiff, first clear it every time.
graph.removeNodes("temp");
graph.removeLinks("temp");
-
- if (!finalize) { // finalize done via topo diff below
- ret.for_each_node_add(function (node_spec) {
- var new_node;
- if (true == finalize && node.state == 'temp') {
- console.log('bug: temp node creation on finalize');
- } else {
- new_node = graph.addTempNode(node_spec);
- if (!finalize) {
- lastnode = new_node;
- }
- }
- });
- }
}
- ret.for_each_link_add(function (link) {
- if (false == finalize || link.name !== 'and') {
- apply_conjugator_link_logic(link, ret.drop_conjugator_links);
- graph.addLinkByName(link.__src,
- link.__dst,
- link.name || 'is',
- link.state);
- }
- });
if (!finalize) {
graph.markRelated(token_set_new_node_names);
@@ -512,17 +528,19 @@ var textAnalyser = function (newtext, finalize) {
graph.removeRelated();
}
- // drop bubble node
- ret.node_set_add = ret.node_set_add.filter(function(n) { return n.type != 'bubble'; });
- // drop and links
- ret.link_set_add = ret.link_set_add.filter(function(l) { return l.name !== 'and'; });
if (finalize && backend_commit) {
// broadcast diff:
// - finalize?
// - broadcast_diff requested by caller
+ // drop bubble node
+ ret.node_set_add = ret.node_set_add.filter(function(n) { return n.type != 'bubble'; });
+ // drop and links
+ ret.link_set_add = ret.link_set_add.filter(function(l) { return l.name !== 'and'; });
graph.commit_and_tx_diff__topo(ret);
} else {
- graph.commit_diff__topo(ret);
+ if (!comp.graph_same) {
+ graph.commit_diff__topo(ret);
+ }
}
};