/** * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This software consists of voluntary contributions made by many individuals * and is licensed under the new BSD license. * * @author David Zeller * @license http://www.opensource.org/licenses/BSD-3-Clause New BSD license * @version 2.6 */ (function($, tokenize){ // Keycodes var KEYS = { BACKSPACE: 8, TAB: 9, ENTER: 13, ESCAPE: 27, ARROW_UP: 38, ARROW_DOWN: 40 }; // Debounce timeout var debounce_timeout = null; // Data storage constant var DATA = 'tokenize'; /** * Get Tokenize object * * @param {Object} options * @param {jQuery} el * @returns {$.tokenize} */ var getObject = function(options, el){ if(!el.data(DATA)){ var obj = new $.tokenize($.extend({}, $.fn.tokenize.defaults, options)); el.data(DATA, obj); obj.init(el); } return el.data(DATA); }; /** * Tokenize constructor * * @param {Object} opts */ $.tokenize = function(opts){ if(opts == undefined){ opts = $.fn.tokenize.defaults; } this.options = opts; }; $.extend($.tokenize.prototype, { /** * Init tokenize object * * @param {jQuery} el jQuery object of the select */ init: function(el){ var $this = this; this.select = el.attr('multiple', 'multiple').css({margin: 0, padding: 0, border: 0}).hide(); this.container = $('
') .attr('class', this.select.attr('class')) .addClass('Tokenize'); if(this.options.maxElements == 1){ this.container.addClass('OnlyOne'); } this.dropdown = $('