diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2012-02-27 20:18:20 +0100 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2012-02-27 20:18:20 +0100 |
commit | caaef2492e17b397bb2ee3d60edfaf830ead51e5 (patch) | |
tree | 2272ae0fac307e24e493c313475867c03b2763b4 /static | |
parent | 6606fe505cf23e6f2a98daac851a0336c432888c (diff) |
Book Marx: Implement tag auto-completion.
Diffstat (limited to 'static')
-rw-r--r-- | static/js/bookmarx-submit.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/static/js/bookmarx-submit.js b/static/js/bookmarx-submit.js new file mode 100644 index 0000000..6e5ad01 --- /dev/null +++ b/static/js/bookmarx-submit.js @@ -0,0 +1,55 @@ +// Based on the jQuery UI autocomplete example. +// http://jqueryui.com/demos/autocomplete/#multiple + +$(function() { + var availableTags; + $.ajax('tags', { + success: function(data){ + availableTags = data; + } + }); + function split(val) { + return val.split(/,\s*/); + } + function extractLast(term) { + return split(term).pop(); + } + + $("#bookmark-tags-field") + // don't navigate away from the field on tab when selecting an item + .bind("keydown", function(event) { + if (event.keyCode === $.ui.keyCode.TAB && + $(this).data("autocomplete").menu.active) { + event.preventDefault(); + } + }) + .bind("keyup", function(event) { + if (event.keyCode === $.ui.keyCode.TAB && + $(this).data("autocomplete").menu.active) { + event.preventDefault(); + } + }) + .autocomplete({ + minLength: 0, + source: function(request, response) { + // delegate back to autocomplete, but extract the last term + response($.ui.autocomplete.filter( + availableTags, extractLast(request.term))); + }, + focus: function() { + // prevent value inserted on focus + return false; + }, + select: function(event, ui) { + var terms = split(this.value); + // remove the current input + terms.pop(); + // add the selected item + terms.push(ui.item.value); + // add placeholder to get the comma-and-space at the end + terms.push(""); + this.value = terms.join(", "); + return false; + } + }); +}); |