diff options
| author | Alon Levy <alon@pobox.com> | 2014-10-20 13:25:32 +0300 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2014-10-20 21:36:37 +0300 |
| commit | c919c4bfef4ad9e2dc25d040c0727dd29ad541ae (patch) | |
| tree | dd6394603680976c48801b53321e8085b0db1505 /scripts/textanalysis.ui.js | |
| parent | f1f4e937932f52c630831d0d501f8f8756b37531 (diff) | |
introduce require.js and rewrite tests
Yes, I'm being lazy. The purpose of require.js is to allow writing
modules, i.e. individual smaller then the whole files with clear
dependencies. This is achieved by using a new api provided by
require.js:
define, require, requirejs
Read more at [requirejs] (http://requirejs.org)
Tests have been rewritten to work correctly with require.js; they still
use jsdom.
Test output is now stored in the repository, all tests are run via
run_tests.js; This is a hack - once a good harness (with assertions,
suites - unittest like) presents itself it will be used.
Hidden here is also using FileSaver for history saving, so history is
saved to history.json instead to a random name. Plus dropping some dead
code.
Diffstat (limited to 'scripts/textanalysis.ui.js')
| -rw-r--r-- | scripts/textanalysis.ui.js | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/scripts/textanalysis.ui.js b/scripts/textanalysis.ui.js new file mode 100644 index 00000000..98d0fe83 --- /dev/null +++ b/scripts/textanalysis.ui.js @@ -0,0 +1,147 @@ +define('textanalysis.ui', ['autocomplete', 'rhizicore', 'textanalysis', 'history'], function(autocomplete, RZ, textanalysis, history) { +var text = ""; // Last text of sentence +var element_name = '#textanalyser'; +var element = $(element_name); + +// TODO - hide this in a scope +function analyzeSentence(sentence, finalize) +{ + var ret = textanalysis.textAnalyser2(sentence, finalize); + switch (ret.state) { + case textanalysis.ANALYSIS_NODE_START: + $('.typeselection').css({top:window.innerHeight/2-115,left:window.innerWidth/2-325}); + $('.typeselection').html('<table><tr><td style="height:28px"></td></tr><tr><td>Use [TAB] key to pick a type</td></tr></table>'); + break; + case textanalysis.ANALYSIS_LINK: + $('.typeselection').css('top', -300); + $('.typeselection').css('left', 0); + break; + } + ret.applyToGraph(RZ.graph); + if (finalize || sentence.length == 0) { + $('.typeselection').css('top', -300); + $('.typeselection').css('left', 0); + } +} + +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; + RZ.graph.editType(id, null, nodetypes[typeindex]); + $('.typeselection').html('<table><tr><td style="height:28px"></td></tr><tr><td>' + "Chosen Type: " + nodetypes[typeindex] + '</td></tr></table>'); + RZ.graph.findCoordinates(lastnode,null); + } else { + if (typeindex > 0) typeindex--; + else typeindex = 4; + + RZ.graph.editType(id, null, nodetypes[typeindex]); + $('.typeselection').html('<table><tr><td style="height:28px"></td></tr><tr><td>' + "Chosen Type: " + nodetypes[typeindex] + '</td></tr></table>'); + RZ.graph.findCoordinates(lastnode,null); + } + RZ.graph.update(true); +} + +return { + main:function () { + if (element.length != 1) { + return; + } + + element.autocompleteTrigger({ + triggerStart: '#', + triggerEnd: '', + source: textanalysis.autocompleteCallback + }); + + $(document).keydown(function(e) { + + if (RZ.graph.history !== undefined) { + RZ.graph.history.record_keystrokes(history.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; + } + }); + + element.keypress(function(e) { + if (RZ.graph.history !== undefined) { + RZ.graph.history.record_keystrokes(history.KEYSTROKE_WHERE_TEXTANALYSIS, [e.which]); + } + if (e.which == 13) { + if(!suggestionChange) { + text = element.val(); + element.val(""); + analyzeSentence(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; + } + }); + + /* TODO: don't use interval by default but only if keys are comming to fast (but still - 5 ms??) */ + 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; + } + }, 5); + } +}; +}); // define |
