UsersManagementPortlet-portlet/src/main/webapp/js/jquery-textext-master/src/js/textext.plugin.filter.js

243 lines
6.6 KiB
JavaScript

/**
* jQuery TextExt Plugin
* http://textextjs.com
*
* @version 1.3.1
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
* @license MIT License
*/
(function($)
{
/**
* The Filter plugin introduces ability to limit input that the text field
* will accept. If the Tags plugin is used, Filter plugin will limit which
* tags it's possible to add.
*
* The list of allowed items can be either specified through the
* options, can come from the Suggestions plugin or be loaded by the Ajax
* plugin. All these plugins have one thing in common -- they
* trigger `setSuggestions` event which the Filter plugin is expecting.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter
*/
function TextExtFilter() {};
$.fn.textext.TextExtFilter = TextExtFilter;
$.fn.textext.addPlugin('filter', TextExtFilter);
var p = TextExtFilter.prototype,
/**
* Filter plugin options are grouped under `filter` when passed to the
* `$().textext()` function. For example:
*
* $('textarea').textext({
* plugins: 'filter',
* filter: {
* items: [ "item1", "item2" ]
* }
* })
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.options
*/
/**
* This is a toggle switch to enable or disable the Filter plugin. The value is checked
* each time at the top level which allows you to toggle this setting on the fly.
*
* @name filter.enabled
* @default true
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.options.enabled
*/
OPT_ENABLED = 'filter.enabled',
/**
* Arra of items that the Filter plugin will allow the Tag plugin to add to the list of
* its resut tags. Each item by default is expected to be a string which default `ItemManager`
* can work with. You can change the item type by supplying custom `ItemManager`.
*
* @name filter.items
* @default null
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.options.items
*/
OPT_ITEMS = 'filter.items',
/**
* Filter plugin dispatches and reacts to the following events.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.events
*/
/**
* Filter plugin reacts to the `isTagAllowed` event triggered by the Tags plugin before
* adding a new tag to the list. If the new tag is among the `items` specified in options,
* then the new tag will be allowed.
*
* @name isTagAllowed
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.events.isTagAllowed
*/
/**
* Filter plugin reacts to the `setSuggestions` event triggered by other plugins like
* Suggestions and Ajax.
*
* However, event if this event is handled and items are passed with it and stored, if `items`
* option was supplied, it will always take precedense.
*
* @name setSuggestions
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.events.setSuggestions
*/
DEFAULT_OPTS = {
filter : {
enabled : true,
items : null
}
}
;
/**
* Initialization method called by the core during plugin instantiation.
*
* @signature TextExtFilter.init(core)
*
* @param core {TextExt} Instance of the TextExt core class.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.init
*/
p.init = function(core)
{
var self = this;
self.baseInit(core, DEFAULT_OPTS);
self.on({
getFormData : self.onGetFormData,
isTagAllowed : self.onIsTagAllowed,
setSuggestions : self.onSetSuggestions
});
self._suggestions = null;
};
//--------------------------------------------------------------------------------
// Core functionality
/**
* Reacts to the [`getFormData`][1] event triggered by the core. Returns data with the
* weight of 200 to be *greater than the Autocomplete plugins* data weights.
* The weights system is covered in greater detail in the [`getFormData`][1] event
* documentation.
*
* This method does nothing if Tags tag is also present.
*
* [1]: /manual/textext.html#getformdata
*
* @signature TextExtFilter.onGetFormData(e, data, keyCode)
*
* @param e {Object} jQuery event.
* @param data {Object} Data object to be populated.
* @param keyCode {Number} Key code that triggered the original update request.
*
* @author agorbatchev
* @date 2011/12/28
* @id TextExtFilter.onGetFormData
* @version 1.1
*/
p.onGetFormData = function(e, data, keyCode)
{
var self = this,
val = self.val(),
inputValue = val,
formValue = ''
;
if(!self.core().hasPlugin('tags'))
{
if(self.isValueAllowed(inputValue))
formValue = val;
data[300] = self.formDataObject(inputValue, formValue);
}
};
/**
* Checks given value if it's present in `filterItems` or was loaded for the Autocomplete
* or by the Suggestions plugins. `value` is compared to each item using `ItemManager.compareItems`
* method which is currently attached to the core. Returns `true` if value is known or
* Filter plugin is disabled.
*
* @signature TextExtFilter.isValueAllowed(value)
*
* @param value {Object} Value to check.
*
* @author agorbatchev
* @date 2011/12/28
* @id TextExtFilter.isValueAllowed
* @version 1.1
*/
p.isValueAllowed = function(value)
{
var self = this,
list = self.opts('filterItems') || self._suggestions || [],
itemManager = self.itemManager(),
result = !self.opts(OPT_ENABLED), // if disabled, should just return true
i
;
for(i = 0; i < list.length && !result; i++)
if(itemManager.compareItems(value, list[i]))
result = true;
return result;
};
/**
* Handles `isTagAllowed` event dispatched by the Tags plugin. If supplied tag is not
* in the `items` list, method sets `result` on the `data` argument to `false`.
*
* @signature TextExtFilter.onIsTagAllowed(e, data)
*
* @param e {Object} jQuery event.
* @param data {Object} Payload in the following format : `{ tag : {Object}, result : {Boolean} }`.
* @author agorbatchev
* @date 2011/08/04
* @id TextExtFilter.onIsTagAllowed
*/
p.onIsTagAllowed = function(e, data)
{
data.result = this.isValueAllowed(data.tag);
};
/**
* Reacts to the `setSuggestions` events and stores supplied suggestions for future use.
*
* @signature TextExtFilter.onSetSuggestions(e, data)
*
* @param e {Object} jQuery event.
* @param data {Object} Payload in the following format : `{ result : {Array} } }`.
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.onSetSuggestions
*/
p.onSetSuggestions = function(e, data)
{
this._suggestions = data.result;
};
})(jQuery);