aboutsummaryrefslogtreecommitdiff
path: root/src/main/webapp/textext/textext.plugin.suggestions.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/webapp/textext/textext.plugin.suggestions.js')
-rw-r--r--src/main/webapp/textext/textext.plugin.suggestions.js175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/main/webapp/textext/textext.plugin.suggestions.js b/src/main/webapp/textext/textext.plugin.suggestions.js
new file mode 100644
index 00000000..1e04613b
--- /dev/null
+++ b/src/main/webapp/textext/textext.plugin.suggestions.js
@@ -0,0 +1,175 @@
+/**
+ * jQuery TextExt Plugin
+ * http://textextjs.com
+ *
+ * @version 1.3.1
+ * @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
+ * @license MIT License
+ */
+(function($)
+{
+ /**
+ * Suggestions plugin allows to easily specify the list of suggestion items that the
+ * Autocomplete plugin would present to the user.
+ *
+ * @author agorbatchev
+ * @date 2011/08/18
+ * @id TextExtSuggestions
+ */
+ function TextExtSuggestions() {};
+
+ $.fn.textext.TextExtSuggestions = TextExtSuggestions;
+ $.fn.textext.addPlugin('suggestions', TextExtSuggestions);
+
+ var p = TextExtSuggestions.prototype,
+ /**
+ * Suggestions plugin only has one option and that is to set suggestion items. It could be
+ * changed when passed to the `$().textext()` function. For example:
+ *
+ * $('textarea').textext({
+ * plugins: 'suggestions',
+ * suggestions: [ "item1", "item2" ]
+ * })
+ *
+ * @author agorbatchev
+ * @date 2011/08/18
+ * @id TextExtSuggestions.options
+ */
+
+ /**
+ * List of items that Autocomplete plugin would display in the dropdown.
+ *
+ * @name suggestions
+ * @default null
+ * @author agorbatchev
+ * @date 2011/08/18
+ * @id TextExtSuggestions.options.suggestions
+ */
+ OPT_SUGGESTIONS = 'suggestions',
+
+ /**
+ * Suggestions plugin dispatches or reacts to the following events.
+ *
+ * @author agorbatchev
+ * @date 2011/08/17
+ * @id TextExtSuggestions.events
+ */
+
+ /**
+ * Suggestions plugin reacts to the `getSuggestions` event and returns `suggestions` items
+ * from the options.
+ *
+ * @name getSuggestions
+ * @author agorbatchev
+ * @date 2011/08/19
+ * @id TextExtSuggestions.events.getSuggestions
+ */
+
+ /**
+ * Suggestions plugin triggers the `setSuggestions` event to pass its own list of `Suggestions`
+ * to the Autocomplete plugin.
+ *
+ * @name setSuggestions
+ * @author agorbatchev
+ * @date 2011/08/19
+ * @id TextExtSuggestions.events.setSuggestions
+ */
+
+ /**
+ * Suggestions plugin reacts to the `postInit` event to pass its list of `suggestions` to the
+ * Autocomplete right away.
+ *
+ * @name postInit
+ * @author agorbatchev
+ * @date 2011/08/19
+ * @id TextExtSuggestions.events.postInit
+ */
+
+ DEFAULT_OPTS = {
+ suggestions : null
+ }
+ ;
+
+ /**
+ * Initialization method called by the core during plugin instantiation.
+ *
+ * @signature TextExtSuggestions.init(core)
+ *
+ * @param core {TextExt} Instance of the TextExt core class.
+ *
+ * @author agorbatchev
+ * @date 2011/08/18
+ * @id TextExtSuggestions.init
+ */
+ p.init = function(core)
+ {
+ var self = this;
+
+ self.baseInit(core, DEFAULT_OPTS);
+
+ self.on({
+ getSuggestions : self.onGetSuggestions,
+ postInit : self.onPostInit
+ });
+ };
+
+ /**
+ * Triggers `setSuggestions` and passes supplied suggestions to the Autocomplete plugin.
+ *
+ * @signature TextExtSuggestions.setSuggestions(suggestions, showHideDropdown)
+ *
+ * @param suggestions {Array} List of suggestions. With the default `ItemManager` it should
+ * be a list of strings.
+ * @param showHideDropdown {Boolean} If it's undesirable to show the dropdown right after
+ * suggestions are set, `false` should be passed for this argument.
+ *
+ * @author agorbatchev
+ * @date 2011/08/19
+ * @id TextExtSuggestions.setSuggestions
+ */
+ p.setSuggestions = function(suggestions, showHideDropdown)
+ {
+ this.trigger('setSuggestions', { result : suggestions, showHideDropdown : showHideDropdown != false });
+ };
+
+ /**
+ * Reacts to the `postInit` event and triggers `setSuggestions` event to set suggestions list
+ * right after initialization.
+ *
+ * @signature TextExtSuggestions.onPostInit(e)
+ *
+ * @param e {Object} jQuery event.
+ *
+ * @author agorbatchev
+ * @date 2011/08/19
+ * @id TextExtSuggestions.onPostInit
+ */
+ p.onPostInit = function(e)
+ {
+ var self = this;
+ self.setSuggestions(self.opts(OPT_SUGGESTIONS), false);
+ };
+
+ /**
+ * Reacts to the `getSuggestions` event and triggers `setSuggestions` event with the list
+ * of `suggestions` specified in the options.
+ *
+ * @signature TextExtSuggestions.onGetSuggestions(e, data)
+ *
+ * @param e {Object} jQuery event.
+ * @param data {Object} Payload from the `getSuggestions` event with the user query, eg `{ query: {String} }`.
+ *
+ * @author agorbatchev
+ * @date 2011/08/19
+ * @id TextExtSuggestions.onGetSuggestions
+ */
+ p.onGetSuggestions = function(e, data)
+ {
+ var self = this,
+ suggestions = self.opts(OPT_SUGGESTIONS)
+ ;
+
+ suggestions.sort();
+ self.setSuggestions(self.itemManager().filter(suggestions, data.query));
+ };
+})(jQuery);