"use strict"
var text = "";
var sugg = [];
var typeindex = 0;
var nodetypes = ["person", "project", "skill", "deliverable", "objective"];
var suggestionChange=false;
var sentenceStack = [];
var typeStack = [];
var ExecutionStack = [];
var lastnode;
$('#textanalyser').autocompleteTrigger({
triggerStart: '#',
triggerEnd: '',
source: sugg
});
$("#textanalyser").keypress(function(e) {
if (graph.history !== undefined) {
graph.history.record_keystrokes(KEYSTROKE_WHERE_TEXTANALYSIS, [e.which]);
}
if (e.which == 13) {
if(!suggestionChange){
text = $('#textanalyser').val();
$('#textanalyser').val("");
TextAnalyser2(text, true);
typeStack=[];
} else {
suggestionChange=false;
}
return false;
}
if (e.which == 37) {//RIGHT
$('body').scrollLeft(0);
e.stopPropagation();
return false;
}
if (e.which == 39) { //LEFT
$('body').scrollLeft(0);
e.stopPropagation();
return false;
}
});
$(document).keydown(function(e) {
if (graph.history !== undefined) {
graph.history.record_keystrokes(KEYSTROKE_WHERE_DOCUMENT, [e.KeyCode]);
}
if (e.keyCode == 9) {//TAB
e.preventDefault();
changeType("down", lastnode);
return false;
}
if (e.keyCode == 37) {//UP
$('html, body').scrollLeft(0);
}
if (e.keyCode == 39) {//DOWN
$('html, body').scrollLeft(0);
}
if (e.keyCode == 38) {//UP
suggestionChange=true;
}
if (e.keyCode == 40) {//DOWN
suggestionChange=true;
}
if (e.keyCode == 9) {//TAB
return false;
}
});
function textSelect(inp, s, e) {
e = e || s;
if (inp.createTextRange) {
var r = inp.createTextRange();
r.collapse(true);
r.moveEnd('character', e);
r.moveStart('character', s);
r.select();
}else if(inp.setSelectionRange) {
inp.focus();
inp.setSelectionRange(s, e);
}
}
function changeType(arg, id) {
if(!id)id="new node";
if (arg === 'up') {
if (typeindex < 4) typeindex++;
else typeindex = 0;
graph.editType(id, null, nodetypes[typeindex]);
$('.typeselection').html('
|
| ' + "Chosen Type: " + nodetypes[typeindex] + ' |
');
graph.findCoordinates(lastnode,null);
} else {
if (typeindex > 0) typeindex--;
else typeindex = 4;
graph.editType(id, null, nodetypes[typeindex]);
$('.typeselection').html(' |
| ' + "Chosen Type: " + nodetypes[typeindex] + ' |
');
graph.findCoordinates(lastnode,null);
}
graph.updateGraph();
}
window.setInterval(function() {
if ($('#textanalyser').val() != text) {
if(text.length*8>500)$('#textanalyser').css('width',text.length*8+20);
// text changed
text = $('#textanalyser').val();
TextAnalyser2(text, false);
suggestionChange=false;
}
}, 5);
function TextAnalyser2(newtext, finalize) {
var segment = [],
subsegment = [],
sentence = [];
var newlinks = [];
var newnodes = [];
var linkindex = 0;
var nodeindex = 0;
var orderStack = [];
var quoteword = "";
var ANDcase = false;
var ANDcount = 0;
var prefix = "";
//Sentence Sequencing
//Build the words and cuts the main elements
segment = newtext.split("#");
for (var j = 0; j < segment.length; j++) {
if (j !== 0) sentence.push("#");
subsegment = segment[j].split(" ");
if (subsegment.length === 0) {
sentence.push(" ");
}
for (var k = 0; k < subsegment.length; k++) {
if (subsegment[k] !== " " && subsegment[k] !== "") {
if (subsegment[k].charAt(0) === '"') {
quoteword = "";
do {
quoteword += subsegment[k] + " ";
if(subsegment[k].charAt(subsegment[k].length-1) !== '"')k++;
} while (k < subsegment.length && subsegment[k].charAt(subsegment[k].length - 1) !== '"');
if(subsegment[k])if(subsegment[k]!==quoteword.replace(/ /g, ""))quoteword += subsegment[k];
sentence.push(quoteword.replace(/"/g, ""));
} else {
sentence.push(subsegment[k]);
}
}
}
}
//BUILD NEW NODE AND LINK ARRAYS WITH ORDER OF APPEARENCE
for (var m = 0; m < sentence.length; m++) {
switch (sentence[m]) {
case "#":
orderStack.push("START");
break;
case "and":
case "+":
case ",":
case "&":
sentence[m]=" and ";
ANDcount++;
//orderStack.push("AND");
default:
if (orderStack[orderStack.length - 1] === "START") {
orderStack.push("NODE");
newnodes.push(sentence[m]);
linkindex++;
} else if (orderStack[orderStack.length - 1] === "NODE") {
orderStack.push("LINK");
if (!newlinks[linkindex]) {
newlinks[linkindex] = sentence[m] + " ";
} else {
newlinks[linkindex] += sentence[m] + " ";
}
} else {
if (!newlinks[linkindex]) {
newlinks[linkindex] = sentence[m] + " ";
} else {
newlinks[linkindex] += sentence[m] + " ";
}
}
if (newnodes.length === 0) prefix += sentence[m] + " ";
break;
}
}
//ATTACH SENTENCE PREFIX
if (prefix) newlinks[1] += "(" + prefix + ")";
//WRITE COMPLETE SENTENCE
linkindex = 0;
nodeindex = 0;
var word = "";
var completeSentence = "";
for (var m = 0; m < orderStack.length; m++) {
if (orderStack[m] === "NODE") {
word += " (" + newnodes[nodeindex] + ") ";
if(newnodes[nodeindex].split(" ").length>1){
completeSentence += '"'+newnodes[nodeindex]+'"' + " ";
}else{
completeSentence += newnodes[nodeindex] + " ";
}
nodeindex++;
} else if (orderStack[m] === "LINK") {
linkindex++;
word += " -->" + newlinks[linkindex] + " --> ";
completeSentence += newlinks[linkindex];
}
}
//REBUILD GRAPH
linkindex = 0;
nodeindex = 0;
//CHANGE TO PERMANENT STATE AND UPDATE SUGGESTIONLIST
var typesetter = "";
if (finalize === true) {
typesetter = "perm";
for (var n = 0; n < newnodes.length; n++) {
if (Unique(newnodes[n])) {
if(newnodes[n].split(" ").length>1){
sugg.push('"'+newnodes[n]+'"');
}else{
sugg.push(newnodes[n]);
}
}
}
sugg.push(text);
} else {
typesetter = "temp";
}
//REINITIALISE GRAPH (DUMB BUT IT WORKS)
graph.removeNodes("temp");
graph.removeLinks("temp");
//ADD SURROUNDING BUBBLE
if (orderStack.length > 0) {
graph.addNode("", "bubble", "temp");
}
var abnormalGraph = (newlinks.length - ANDcount) >= 3;
//0-N ORDER STACK
for (var m = 0; m < orderStack.length - 1; m++) {
switch (orderStack[m]) {
case "START":
if (!typeStack[nodeindex]) {
typeStack[nodeindex] = nodetypes[typeindex];
}
break;
case "NODE":
graph.addNode(newnodes[nodeindex], typeStack[nodeindex], typesetter);
if (!abnormalGraph) graph.addLink(newnodes[nodeindex - 1], newnodes[nodeindex], newlinks[linkindex], typesetter);
nodeindex++;
break;
case "LINK":
linkindex++;
break;
}
}
//FINAL N ORDER
switch (orderStack[orderStack.length - 1]) {
case "START":
typeStack[nodeindex]=nodetypes[typeindex];
graph.addNode("new node", typeStack[nodeindex], "temp");
if (!abnormalGraph){graph.addLink(newnodes[nodeindex - 1], "new node", newlinks[linkindex], "temp");
ANDconnect("new node");}
$('.typeselection').css({top:window.innerHeight/2-115,left:window.innerWidth/2-325});
$('.typeselection').html(' |
| Use [TAB] key to pick a type |
');
break;
case "NODE":
typeStack[nodeindex]=nodetypes[typeindex];
graph.addNode(newnodes[nodeindex], typeStack[nodeindex], typesetter);
if (!abnormalGraph) {
graph.addLink(newnodes[nodeindex - 1], newnodes[nodeindex], newlinks[linkindex], typesetter);
ANDconnect(newnodes[nodeindex]);
}
break;
case "LINK":
linkindex++;
graph.addNode("new node", "empty", "temp");
if (!abnormalGraph){ graph.addLink(newnodes[nodeindex - 1], "new node", newlinks[linkindex], "temp");
ANDconnect("new node");}
$('.typeselection').css('top', -300);
$('.typeselection').css('left', 0);
break;
}
//EXTERNAL AND CONNECTION CHECKING
var verb = "";
function ANDconnect(node) {
for(var x=0;x