diff options
| author | Alon Levy <alon@pobox.com> | 2015-03-02 20:16:45 +0200 |
|---|---|---|
| committer | Alon Levy <alon@pobox.com> | 2015-03-02 20:16:51 +0200 |
| commit | 17070acb91aa22605f5ad9de60b3cb58171bce50 (patch) | |
| tree | 99775d6307f94ff245c7d2a855bf88da1605ac34 /src/client/textanalysis.ui.js | |
| parent | 8bcb92cf1a80692413c74c1f73e373141a975188 (diff) | |
client: extract textanalyser_input component
Killed some dead code in the process.
Diffstat (limited to 'src/client/textanalysis.ui.js')
| -rw-r--r-- | src/client/textanalysis.ui.js | 167 |
1 files changed, 33 insertions, 134 deletions
diff --git a/src/client/textanalysis.ui.js b/src/client/textanalysis.ui.js index 913395cc..33dafafe 100644 --- a/src/client/textanalysis.ui.js +++ b/src/client/textanalysis.ui.js @@ -1,22 +1,17 @@ "use strict" -define(['jquery', 'Bacon_wrapper', 'consts', 'rz_bus', 'rz_core', 'textanalysis', 'view/completer', 'util'], -function($, Bacon , consts , rz_bus , rz_core , textanalysis , completer , util) { +define(['jquery', 'Bacon_wrapper', 'consts', 'rz_bus', 'rz_core', 'textanalysis', 'util', 'view/textanalyser_input'], +function($, Bacon , consts , rz_bus , rz_core , textanalysis , util, textanalyser_input) { -var text = "", // Last text of sentence - element_name = '#textanalyser', - element = $(element_name), - element_raw = element[0], +var element_name = '#textanalyser', + input = textanalyser_input({ + 'element_name': element_name, + 'completer_name': '#input-suggestion', + }), plus_button = $('#btn_add'), description = consts.description, - input = new Bacon.Bus(), - initial_width = element.width(), - plus_button_initial_offset = plus_button.offset(), - nbsp = String.fromCharCode(160), - // aliases - value = util.value, - selectionStart = util.selectionStart, - setSelection = util.setSelection; + input_bus = new Bacon.Bus(), + plus_button_initial_offset = plus_button.offset(); function get_svg__body_position(node_id) { @@ -76,15 +71,13 @@ var typeselection = function TypeSelectionDialog() { return typeselection; }(); -var analysisCompleter = completer(element, $('#input-suggestion'), {hideOnTab: false}); - function analyzeSentence(spec) { util.assert(spec.sentence !== undefined && spec.finalize !== undefined, "bad input"); - var sentence = nbsp_to_spaces(spec.sentence), + var sentence = spec.sentence, finalize = spec.finalize, ret = textanalysis.textAnalyser({'sentence': sentence, 'finalize': finalize}), lastnode; @@ -97,7 +90,7 @@ function analyzeSentence(spec) switch (ret.state) { case textanalysis.ANALYSIS_NODE_START: - lastnode = textanalysis.lastnode(rz_core.edit_graph, selectionStart(element_raw)); + lastnode = textanalysis.lastnode(rz_core.edit_graph, input.selectionStart()); if (lastnode !== null) { typeselection.analysisNodeStart(lastnode.id); } @@ -112,24 +105,11 @@ function analyzeSentence(spec) } else { rz_core.main_graph_view.nodes__user_visible(ret.existing_nodes(rz_core.main_graph)); } -} - -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); - } + input_bus.push({where: consts.INPUT_WHERE_TEXTANALYSIS, input: sentence}); } function changeType(arg) { - var lastnode = textanalysis.lastnode(rz_core.edit_graph, selectionStart(element_raw)), + var lastnode = textanalysis.lastnode(rz_core.edit_graph, input.selectionStart()), nodetype, id, name; @@ -149,55 +129,27 @@ function changeType(arg) { var main = function () { - if (element.length != 1) { - return; - } - - analysisCompleter.options.plug(textanalysis.suggestions_options); - - var document_keydown = new Bacon.Bus(); - rz_bus.ui_key.plug(document_keydown); - - element.keydown(function(e) { - var ret = undefined; - - switch (e.keyCode) { - case 13: - if (!analysisCompleter.handleEnter()) { - submitNewSentence(); - } else { - analyzeSentence({ - sentence: value(element_raw), - finalize: false, - }); - } - ret = false; - break; - case 9: //TAB - if (textanalysis.lastnode(rz_core.edit_graph, selectionStart(element_raw))) { + input.on_sentence.onValue(submitNewSentence); + input.on_analysis.onValue(function (sentence) { + analyzeSentence({ + sentence: sentence, + finalize: false, + }); + }); + input.on_tab.onValue(function (e) { + if (textanalysis.lastnode(rz_core.edit_graph, input.selectionStart())) { e.preventDefault(); changeType(e.shiftKey ? "up" : "down"); ret = false; } - break; - } - document_keydown.push({where: consts.KEYSTROKE_WHERE_TEXTANALYSIS, keys: [e.keyCode]}); - return ret; - }); - element.bind('input selectionchange click', function(e) { - analysisCompleter.oninput(value(element_raw), selectionStart(element_raw)); - e.stopPropagation(); - e.preventDefault(); - }); + }); - function submitNewSentence() { - text = value(element_raw); - value(element_raw, ""); - analyzeSentence({ - sentence: text, - finalize: true, + function submitNewSentence(text) { + analyzeSentence( + { + sentence: text, + finalize: true, }); - text = ""; } // Click is required to prevent the default action - this is a form so that's a post, @@ -207,69 +159,16 @@ var main = function () // http://stackoverflow.com/questions/15786891/browser-sometimes-ignores-a-jquery-click-event-during-a-css3-transform plus_button.bind("click mousedown", function(e) { console.dir(e); - submitNewSentence(); + submitNewSentence(input.value()); e.preventDefault(); }); - rz_bus.ui_input.plug(input); - if ('oninput' in document.documentElement) { - element.on('input', function(e) { - analyze_element_text(); - }); - } else { - console.log('textanalysis.ui: fallback to polling'); - window.setInterval(function() { - analyze_element_text(); - }, 50); - } -}; - -function nbsp_to_spaces(str) { - return str.replace(new RegExp(nbsp, 'g'), ' '); -} - -var analyze_element_text = function() -{ - var current_text = value(element_raw), - parts, - base_parts, - selection_start, - spaced_text = nbsp_to_spaces(current_text); - - if (current_text == text) { - return; - } - text = current_text; - analyzeSentence({ - sentence: spaced_text, - finalize: false, + input.on_resize.onValue(function () { + plus_button.offset({'left': input.element.offset().left + input.element.width() - 18}); }); - input.push({where: consts.INPUT_WHERE_TEXTANALYSIS, input: text}); - selection_start = selectionStart(element_raw); - value(element_raw, ''); // this removes span elements as well - // here we stop treating the element as an input, this only works on a div/other "normal" element - base_parts = spaced_text.split(/ /) - parts = base_parts.slice(0, base_parts.length - 1).map(function (l) { return l + ' '; }); - if (base_parts[base_parts.length - 1].length != 0) { - parts.push(base_parts[base_parts.length - 1]); - } - function span(text, color) { - return $('<span style="color: ' + color + '">' + text.replace(/ /g, nbsp) + '</span>'); - } - parts.map(function (part, index) { - element.append(span(part, index % 2 == 0 ? 'blue' : 'red')); - }); - setSelection(element_raw, selection_start, selection_start); - stretch_input_to_text_size(); -} -function stretch_input_to_text_size() -{ - var new_width = Math.min(Math.max(initial_width, text.length * 9 + 20), $(window).width() * 0.8); - - element.width(new_width); - plus_button.offset({'left': element.offset().left + element.width() - 18}); -} + rz_bus.ui_input.plug(input_bus); +}; return { analyzeSentence: analyzeSentence, |
