"use strict" define(['autocomplete', 'rz_core', 'textanalysis', 'signal', 'consts'], function(autocomplete, rz_core, textanalysis, signal, consts) { var text = ""; // Last text of sentence var element_name = '#textanalyser'; var element = $(element_name); var suggestionChange; function analyzeSentence(sentence, finalize) { var ret = textanalysis.textAnalyser(sentence, finalize); switch (ret.state) { case textanalysis.ANALYSIS_NODE_START: $('.typeselection').css({top:window.innerHeight/2-115,left:window.innerWidth/2-325}); $('.typeselection').html('
Use [TAB] key to pick a type
'); break; case textanalysis.ANALYSIS_LINK: $('.typeselection').css('top', -300); $('.typeselection').css('left', 0); break; } var backend_commit = false; ret.applyToGraph(rz_core.graph, backend_commit); if (finalize || sentence.length == 0) { $('.typeselection').css('top', -300); $('.typeselection').css('left', 0); $('span.ui-helper-hidden-accessible').hide(); } else { $('span.ui-helper-hidden-accessible').show(); } } 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) { var lastnode = textanalysis.lastnode(), nodetype, id; if(!lastnode) { id = "new node"; } else { id = lastnode.id; } nodetype = (arg === 'up'? textanalysis.selected_type_next() : textanalysis.selected_type_prev()); if (arg === 'up') { rz_core.graph.editType(id, null, nodetype); $('.typeselection').html('
' + "Chosen Type: " + nodetype + '
'); rz_core.graph.findCoordinates(id, null); } else { rz_core.graph.editType(id, null, nodetype); $('.typeselection').html('
' + "Chosen Type: " + nodetype + '
'); rz_core.graph.findCoordinates(id, null); } rz_core.graph.update(true); } return { analyzeSentence: analyzeSentence, main:function () { if (element.length != 1) { return; } element.autocompleteTrigger({ triggerStart: '#', triggerEnd: '', source: textanalysis.autocompleteCallback, open: function() { $('.ui-autocomplete').css('width', '10px'); }, }); $(document).keydown(function(e) { signal.signal(consts.KEYSTROKES, [{where: consts.KEYSTROKE_WHERE_DOCUMENT, keys: [e.keyCode]}]); if (e.keyCode == 9) {//TAB e.preventDefault(); changeType(e.shiftKey ? "up" : "down", textanalysis.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; } }); element.keypress(function(e) { signal.signal(consts.KEYSTROKES, [{where: consts.KEYSTROKE_WHERE_TEXTANALYSIS, keys:[e.which]}]); if (e.which == 13) { if(!suggestionChange) { text = element.val(); element.val(""); analyzeSentence(text, true); } 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; } }); if ('oninput' in document.documentElement) { element.on('input', function(e) { text = element.val(); analyzeSentence(text, false); }); } else { console.log('textanalysis.ui: fallback to polling'); window.setInterval(function() { if (element.val() != text) { if (text.length * 8 > 500) { element.css('width', text.length * 8 + 20); } // text changed text = element.val(); analyzeSentence(text, false); suggestionChange = false; } }, 50); } } }; }); // define