summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2015-03-03 09:44:12 +0200
committerAlon Levy <alon@pobox.com>2015-03-03 09:45:54 +0200
commit3e0e73e461ad8d603f7467a8e995c34ebda14b1c (patch)
tree86825dab98d68f759448c85eefe82434b33d3d1d /src/client
parenta0a3d502f3dae7b65501f8091a24e2b4a81c5b01 (diff)
client/completer: generalize getter, setter, selectionStart
Diffstat (limited to 'src/client')
-rw-r--r--src/client/view/completer.js24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/client/view/completer.js b/src/client/view/completer.js
index 95e8fe0c..d1f1f13c 100644
--- a/src/client/view/completer.js
+++ b/src/client/view/completer.js
@@ -40,7 +40,19 @@ var completer = (function (input_element, dropdown, base_config) {
input_element_raw = input_element[0],
completion_start = 0,
completion_end = 0,
- minimum_length = 1;
+ minimum_length = 1,
+ optional_getter = base_config.getter,
+ optional_setter = base_config.setter,
+ optional_selectionStart = base_config.selectionStart,
+ getter = undefined !== optional_getter ? optional_getter :
+ function () { return util.value(input_element_raw); },
+ setter = undefined !== optional_setter ? optional_setter :
+ function (val, caret) {
+ util.value(input_element_raw, val);
+ setCaret(input_element_raw, val.length);
+ },
+ selectionStart = undefined !== optional_selectionStart ? optional_selectionStart :
+ function () { return util.selectionStart(input_element_raw); };
// we need an identifier to remove callbacks without affecting other completers
util.assert(input_element_raw.id !== '');
@@ -70,7 +82,7 @@ var completer = (function (input_element, dropdown, base_config) {
default:
// This catches cursor move due to keyboard events. no event for cursor movement itself
// below we catch cursor moves due to mouse click
- oninput(value(input_element_raw), selectionStart(input_element_raw));
+ oninput(getter(), selectionStart());
}
return ret;
});
@@ -243,10 +255,10 @@ var completer = (function (input_element, dropdown, base_config) {
selected_index = new_index;
}
function _applySuggestion(str) {
- var cur = input_element.val(),
- start = cur.slice(0, completion_start) + str + (config.appendSpaceOnEnter ? ' ' : '');
- value(input_element_raw, start + cur.slice(completion_end));
- setCaret(input_element_raw, start.length);
+ var cur = getter(),
+ start = cur.slice(0, completion_start) + str + (config.appendSpaceOnEnter ? ' ' : ''),
+ new_text = start + cur.slice(completion_end);
+ setter(new_text, new_text.length);
oninput('', 0);
}
function handleEnter() {