summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2015-02-18 09:54:23 +0200
committerAlon Levy <alon@pobox.com>2015-02-18 09:54:23 +0200
commit8a4cc23ff5f4ac022ce4c3f0b8546fe1a4db0c1b (patch)
treec742040b5e0e7b2a364c17b460ca9924fcdc9fdd /src/client
parent057e9e46d488c8e76f63afb98c8729e6a9533de3 (diff)
client/completer: wip handle multiple delimiters for search (| and space)
Diffstat (limited to 'src/client')
-rw-r--r--src/client/view/completer.js35
-rw-r--r--src/client/view/search.js8
2 files changed, 33 insertions, 10 deletions
diff --git a/src/client/view/completer.js b/src/client/view/completer.js
index 66b94ed4..078f8860 100644
--- a/src/client/view/completer.js
+++ b/src/client/view/completer.js
@@ -42,7 +42,6 @@ var completer = (function (input_element, dropdown, base_config) {
// turn off the browser's autocomplete
input_element.attr('autocomplete', 'off');
- //$('.ui-autocomplete').css('width', '10px');
options_bus.onValue(function update_options(new_options) {
options = new_options;
});
@@ -82,11 +81,18 @@ var completer = (function (input_element, dropdown, base_config) {
}
});
+ function anyof_re(chars)
+ {
+ return new RegExp('[' + chars.replace('[', '\\[').replace(']', '\\]') + ']');
+ }
+
function get_config(base) {
return {
- triggerStart: base && base.triggerStart || '#',
- triggerEnd: base && base.triggerEnd || ' ',
+ triggerStart: anyof_re(base && base.triggerStart || '#'),
+ triggerEnd: anyof_re(base && base.triggerEnd || ' '),
hideOnTab: base && base.hasOwnProperty('hideOnTab') ? base.hideOnTab : true,
+ matchStartOfString: (base && base.matchStartOfString) || false,
+ appendSpaceOnEnter: (base && base.appendSpaceOnEnter) || false,
};
}
@@ -104,7 +110,6 @@ var completer = (function (input_element, dropdown, base_config) {
var click_event = 'click.completer.' + input_element_raw.id;
function hide_on_click(e) {
- console.log('good night');
hide();
}
@@ -122,6 +127,20 @@ var completer = (function (input_element, dropdown, base_config) {
$(document).off(click_event, "body", hide_on_click);
}
+ /**
+ * Helper similar to String.lastIndexOf but works with regular expressions
+ */
+ function lastRegexpIndex(s, r)
+ {
+ var reversed = s.split('').reverse().join(''); // constly
+ index = reversed.search(r);
+
+ if (index == -1) {
+ return -1;
+ }
+ return s.length - 1 - index;
+ }
+
/***
* #this is a #
* ^
@@ -133,15 +152,15 @@ var completer = (function (input_element, dropdown, base_config) {
* ^
*/
function oninput(text, cursor) {
- var hash = text.slice(0, cursor).lastIndexOf(config.triggerStart);
+ var hash = lastRegexpIndex(text.slice(0, cursor), config.triggerStart);
// TODO check if current completion has been invalidated
_invalidateSelection();
hide();
dropdown_raw.innerHTML = ""; // remove all elements
- if (hash == -1 && config.triggerStart != ' ') { // space matches start of string too
+ if (hash == -1 && !config.matchStartOfString) {
return;
}
- var space = text.slice(hash + 1).indexOf(config.triggerEnd);
+ var space = text.slice(hash + 1).search(config.triggerEnd);
space = space == -1 ? text.length : space;
if (space < cursor) {
return;
@@ -215,7 +234,7 @@ var completer = (function (input_element, dropdown, base_config) {
}
function _applySuggestion(str) {
var cur = input_element.val(),
- start = cur.slice(0, completion_start) + str + ' ';
+ start = cur.slice(0, completion_start) + str + config.appendSpaceOnEnter ? ' ' : '';
input_element.val(start + cur.slice(completion_end));
setCaret(input_element, start.length);
oninput('', 0);
diff --git a/src/client/view/search.js b/src/client/view/search.js
index 4da81b4a..c6203c34 100644
--- a/src/client/view/search.js
+++ b/src/client/view/search.js
@@ -11,7 +11,11 @@ var focus = function() {
function init() {
search = $('#search');
search_completer = completer(search, $('#search-suggestion'),
- {triggerStart:' ', triggerEnd:' '});
+ {
+ triggerStart:' |',
+ triggerEnd:' |',
+ matchStartOfString: true,
+ });
search_completer.options.plug(textanalysis.suggestions_options);
search.on('input', search_on_submit);
@@ -21,7 +25,7 @@ function init() {
search_on_submit(e);
return false;
}
- return undefined;
+ return true;
});
function search_on_submit() {