From 5eb9e3ec536965ba848a6d9d4584c8534275d5af Mon Sep 17 00:00:00 2001 From: Daniel Jacob Archer Date: Tue, 26 May 2015 14:19:12 -0700 Subject: [PATCH 1/5] Revise onDelete and created onClear callbacks --- src/jquery.tokeninput.js | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/jquery.tokeninput.js b/src/jquery.tokeninput.js index 4b69d823..413bafc1 100755 --- a/src/jquery.tokeninput.js +++ b/src/jquery.tokeninput.js @@ -64,6 +64,7 @@ onAdd: null, onFreeTaggingAdd: null, onDelete: null, + onClear: null, onReady: null, // Other settings @@ -495,11 +496,7 @@ // this.clear = function() { - token_list.children("li").each(function() { - if ($(this).children("input").length === 0) { - delete_token($(this)); - } - }); + clear_tokens(token_list); }; this.add = function(item) { @@ -518,7 +515,7 @@ } } if (match) { - delete_token($(this)); + remove_token($(this)); } } }); @@ -737,12 +734,10 @@ select_token(token); } } - - // Delete a token from the token list + function delete_token (token) { // Remove the id from the saved list var token_data = $.data(token.get(0), "tokeninput"); - var callback = $(input).data("settings").onDelete; var index = token.prevAll().length; if(index > selected_token_index) index--; @@ -772,6 +767,14 @@ .val(""); focusWithTimeout(input_box); } + } + + // Delete a token from the token list + function remove_token (token) { + var callback = $(input).data("settings").onDelete; + var token_data = $.data(token.get(0), "tokeninput"); + + delete_token(token); // Execute the onDelete callback if defined if($.isFunction(callback)) { @@ -779,6 +782,22 @@ } } + // Clear all tokens from the token list + function clear_tokens (tokens) { + var callback = $(input).data("settings").onClear; + + tokens.children("li").each(function() { + if ($(this).children("input").length === 0) { + delete_token($(this)); + } + }); + + // Execute the onClear callback if defined + if($.isFunction(callback)) { + callback.call(hiddenInput); + } + } + // Update the hidden input box value function update_hiddenInput(saved_tokens, hiddenInput) { var token_values = $.map(saved_tokens, function (el) { From fea7650eb139e5c782d306ea4aa33c2314eb00ee Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 26 May 2015 14:46:08 -0700 Subject: [PATCH 2/5] renamed delete_token back to original name, fix grunt build uglify issue --- Gruntfile.js | 2 +- build/jquery.tokeninput.min.js | 4 ++-- src/jquery.tokeninput.js | 9 +++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index a4d8f7dc..2fd7f6a1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -6,7 +6,7 @@ module.exports = function(grunt) { uglify: { options: { banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n', - compress: true + compress: {} }, build: { src: 'src/<%= pkg.name %>.js', diff --git a/build/jquery.tokeninput.min.js b/build/jquery.tokeninput.min.js index e5df300f..750744c6 100644 --- a/build/jquery.tokeninput.min.js +++ b/build/jquery.tokeninput.min.js @@ -1,2 +1,2 @@ -/*! jquery.tokeninput 2014-04-02 */ -!function(a){function b(a){return String(null===a||void 0===a?"":a)}function c(a){return b(a).replace(i,function(a){return h[a]})}var d={method:"GET",queryParam:"q",searchDelay:300,minChars:1,propertyToSearch:"name",jsonContainer:null,contentType:"json",excludeCurrent:!1,excludeCurrentParameter:"x",prePopulate:null,processPrePopulate:!1,hintText:"Type in a search term",noResultsText:"No results",searchingText:"Searching...",deleteText:"×",animateDropdown:!0,placeholder:null,theme:null,zindex:999,resultsLimit:null,enableHTML:!1,resultsFormatter:function(a){var b=a[this.propertyToSearch];return"
  • "+(this.enableHTML?b:c(b))+"
  • "},tokenFormatter:function(a){var b=a[this.propertyToSearch];return"
  • "+(this.enableHTML?b:c(b))+"

  • "},tokenLimit:null,tokenDelimiter:",",preventDuplicates:!1,tokenValue:"id",allowFreeTagging:!1,allowTabOut:!1,autoSelectFirstResult:!1,onResult:null,onCachedResult:null,onAdd:null,onFreeTaggingAdd:null,onDelete:null,onReady:null,idPrefix:"token-input-",disabled:!1},e={tokenList:"token-input-list",token:"token-input-token",tokenReadOnly:"token-input-token-readonly",tokenDelete:"token-input-delete-token",selectedToken:"token-input-selected-token",highlightedToken:"token-input-highlighted-token",dropdown:"token-input-dropdown",dropdownItem:"token-input-dropdown-item",dropdownItem2:"token-input-dropdown-item2",selectedDropdownItem:"token-input-selected-dropdown-item",inputToken:"token-input-input-token",focused:"token-input-focused",disabled:"token-input-disabled"},f={BEFORE:0,AFTER:1,END:2},g={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,NUMPAD_ENTER:108,COMMA:188},h={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},i=/[&<>"'\/]/g,j={init:function(b,c){var e=a.extend({},d,c||{});return this.each(function(){a(this).data("settings",e),a(this).data("tokenInputObject",new a.TokenList(this,b,e))})},clear:function(){return this.data("tokenInputObject").clear(),this},add:function(a){return this.data("tokenInputObject").add(a),this},remove:function(a){return this.data("tokenInputObject").remove(a),this},get:function(){return this.data("tokenInputObject").getTokens()},toggleDisabled:function(a){return this.data("tokenInputObject").toggleDisabled(a),this},setOptions:function(b){return a(this).data("settings",a.extend({},a(this).data("settings"),b||{})),this},destroy:function(){if(this.data("tokenInputObject")){this.data("tokenInputObject").clear();var a=this,b=this.parent();return b.empty(),a.show(),b.append(a),a}}};a.fn.tokenInput=function(a){return j[a]?j[a].apply(this,Array.prototype.slice.call(arguments,1)):j.init.apply(this,arguments)},a.TokenList=function(b,d,h){function i(d){return a(b).data("settings").enableHTML?d:c(d)}function j(c){a(b).data("settings").disabled="boolean"==typeof c?c:!a(b).data("settings").disabled,P.attr("disabled",a(b).data("settings").disabled),U.toggleClass(a(b).data("settings").classes.disabled,a(b).data("settings").disabled),R&&q(a(R),f.END),Q.attr("disabled",a(b).data("settings").disabled)}function k(){return null!==a(b).data("settings").tokenLimit&&N>=a(b).data("settings").tokenLimit?(P.hide(),void u()):void 0}function l(){if(L!==(L=P.val())){var a=U.width()-P.offset().left-U.offset().left;X.html(c(L)||c(h.placeholder)),P.width(Math.min(U.width(),Math.max(a,X.width()+30)))}}function m(){var c=a.trim(P.val()),d=c.split(a(b).data("settings").tokenDelimiter);a.each(d,function(c,d){if(d){a.isFunction(a(b).data("settings").onFreeTaggingAdd)&&(d=a(b).data("settings").onFreeTaggingAdd.call(Q,d));var e={};e[a(b).data("settings").tokenValue]=e[a(b).data("settings").propertyToSearch]=d,o(e)}})}function n(c){var d=a(a(b).data("settings").tokenFormatter(c)),e=c.readonly===!0?!0:!1;e&&d.addClass(a(b).data("settings").classes.tokenReadOnly),d.addClass(a(b).data("settings").classes.token).insertBefore(V),e||a(""+a(b).data("settings").deleteText+"").addClass(a(b).data("settings").classes.tokenDelete).appendTo(d).click(function(){return a(b).data("settings").disabled?void 0:(s(a(this).parent()),Q.change(),!1)});var f=c;return a.data(d.get(0),"tokeninput",c),M=M.slice(0,S).concat([f]).concat(M.slice(S)),S++,t(M,Q),N+=1,null!==a(b).data("settings").tokenLimit&&N>=a(b).data("settings").tokenLimit&&(P.hide(),u()),d}function o(c){var d=a(b).data("settings").onAdd;if(N>0&&a(b).data("settings").preventDuplicates){var e=null;if(U.children().each(function(){var b=a(this),d=a.data(b.get(0),"tokeninput");return d&&d[h.tokenValue]===c[h.tokenValue]?(e=b,!1):void 0}),e)return p(e),V.insertAfter(e),void I(P)}P.width(1),(null==a(b).data("settings").tokenLimit||NS&&f--,c.remove(),R=null,I(P),M=M.slice(0,f).concat(M.slice(f+1)),0==M.length&&P.attr("placeholder",h.placeholder),S>f&&S--,t(M,Q),N-=1,null!==a(b).data("settings").tokenLimit&&(P.show().val(""),I(P)),a.isFunction(e)&&e.call(Q,d)}function t(c,d){var e=a.map(c,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});d.val(e.join(a(b).data("settings").tokenDelimiter))}function u(){W.hide().empty(),T=null}function v(){W.css({position:"absolute",top:U.offset().top+U.outerHeight(!0),left:U.offset().left,width:U.width(),"z-index":a(b).data("settings").zindex}).show()}function w(){a(b).data("settings").searchingText&&(W.html("

    "+i(a(b).data("settings").searchingText)+"

    "),v())}function x(){a(b).data("settings").hintText&&(W.html("

    "+i(a(b).data("settings").hintText)+"

    "),v())}function y(a){return a.replace(Z,"\\$&")}function z(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+y(b)+")(?![^<>]*>)(?![^&;]+;)","gi"),function(a,b){return""+i(b)+""})}function A(a,b,c){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+y(b)+")(?![^<>]*>)(?![^&;]+;)","g"),z(b,c))}function B(c){if(a(b).data("settings").excludeCurrent){var d=a(b).data("tokenInputObject").getTokens(),e=[];d.length&&(a.each(c,function(c,f){var g=!0;a.each(d,function(c,d){return f[a(b).data("settings").propertyToSearch]==d[a(b).data("settings").propertyToSearch]?(g=!1,!1):void 0}),g&&e.push(f)}),c=e)}return c}function C(c,d){if(d=B(d),d&&d.length){W.empty();var e=a("
      ").appendTo(W).mouseover(function(b){D(a(b.target).closest("li"))}).mousedown(function(b){return o(a(b.target).closest("li").data("tokeninput")),Q.change(),!1}).hide();a(b).data("settings").resultsLimit&&d.length>a(b).data("settings").resultsLimit&&(d=d.slice(0,a(b).data("settings").resultsLimit)),a.each(d,function(d,f){var g=a(b).data("settings").resultsFormatter(f);g=A(g,f[a(b).data("settings").propertyToSearch],c),g=a(g).appendTo(e),g.addClass(d%2?a(b).data("settings").classes.dropdownItem:a(b).data("settings").classes.dropdownItem2),0===d&&a(b).data("settings").autoSelectFirstResult&&D(g),a.data(g.get(0),"tokeninput",f)}),v(),a(b).data("settings").animateDropdown?e.slideDown("fast"):e.show()}else a(b).data("settings").noResultsText&&(W.html("

      "+i(a(b).data("settings").noResultsText)+"

      "),v())}function D(c){c&&(T&&E(a(T)),c.addClass(a(b).data("settings").classes.selectedDropdownItem),T=c.get(0))}function E(c){c.removeClass(a(b).data("settings").classes.selectedDropdownItem),T=null}function F(){var c=P.val();c&&c.length&&(R&&q(a(R),f.AFTER),c.length>=a(b).data("settings").minChars?(w(),clearTimeout(K),K=setTimeout(function(){G(c)},a(b).data("settings").searchDelay)):u())}function G(c){var d=c+H(),e=O.get(d);if(e)a.isFunction(a(b).data("settings").onCachedResult)&&(e=a(b).data("settings").onCachedResult.call(Q,e)),C(c,e);else if(a(b).data("settings").url){var f=H(),g={};if(g.data={},f.indexOf("?")>-1){var i=f.split("?");g.url=i[0];var j=i[1].split("&");a.each(j,function(a,b){var c=b.split("=");g.data[c[0]]=c[1]})}else g.url=f;if(g.data[a(b).data("settings").queryParam]=c,g.type=a(b).data("settings").method,g.dataType=a(b).data("settings").contentType,a(b).data("settings").crossDomain&&(g.dataType="jsonp"),a(b).data("settings").excludeCurrent){var k=a(b).data("tokenInputObject").getTokens(),l=a.map(k,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});g.data[a(b).data("settings").excludeCurrentParameter]=l.join(a(b).data("settings").tokenDelimiter)}g.success=function(e){O.add(d,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e),a.isFunction(a(b).data("settings").onResult)&&(e=a(b).data("settings").onResult.call(Q,e)),P.val()===c&&C(c,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e)},h.onSend&&h.onSend(g),a.ajax(g)}else if(a(b).data("settings").local_data){var m=a.grep(a(b).data("settings").local_data,function(d){return d[a(b).data("settings").propertyToSearch].toLowerCase().indexOf(c.toLowerCase())>-1});O.add(d,m),a.isFunction(a(b).data("settings").onResult)&&(m=a(b).data("settings").onResult.call(Q,m)),C(c,m)}}function H(){var c=a(b).data("settings").url;return"function"==typeof a(b).data("settings").url&&(c=a(b).data("settings").url.call(a(b).data("settings"))),c}function I(a){setTimeout(function(){a.focus()},50)}if("string"==typeof d||"function"==typeof d){a(b).data("settings").url=d;var J=H();void 0===a(b).data("settings").crossDomain&&"string"==typeof J&&(a(b).data("settings").crossDomain=-1===J.indexOf("://")?!1:location.href.split(/\/+/g)[1]!==J.split(/\/+/g)[1])}else"object"==typeof d&&(a(b).data("settings").local_data=d);a(b).data("settings").classes?a(b).data("settings").classes=a.extend({},e,a(b).data("settings").classes):a(b).data("settings").theme?(a(b).data("settings").classes={},a.each(e,function(c,d){a(b).data("settings").classes[c]=d+"-"+a(b).data("settings").theme})):a(b).data("settings").classes=e;var K,L,M=[],N=0,O=new a.TokenList.Cache,P=a('').css({outline:"none"}).attr("id",a(b).data("settings").idPrefix+b.id).focus(function(){return a(b).data("settings").disabled?!1:((null===a(b).data("settings").tokenLimit||a(b).data("settings").tokenLimit!==N)&&x(),void U.addClass(a(b).data("settings").classes.focused))}).blur(function(){u(),a(b).data("settings").allowFreeTagging&&m(),a(this).val(""),U.removeClass(a(b).data("settings").classes.focused)}).bind("keyup keydown blur update",l).keydown(function(c){var d,e;switch(c.keyCode){case g.LEFT:case g.RIGHT:case g.UP:case g.DOWN:if(0===this.value.length)d=V.prev(),e=V.next(),d.length&&d.get(0)===R||e.length&&e.get(0)===R?c.keyCode===g.LEFT||c.keyCode===g.UP?q(a(R),f.BEFORE):q(a(R),f.AFTER):c.keyCode!==g.LEFT&&c.keyCode!==g.UP||!d.length?c.keyCode!==g.RIGHT&&c.keyCode!==g.DOWN||!e.length||p(a(e.get(0))):p(a(d.get(0)));else{var h=null;c.keyCode===g.DOWN||c.keyCode===g.RIGHT?(h=a(W).find("li").first(),T&&(h=a(T).next())):(h=a(W).find("li").last(),T&&(h=a(T).prev())),D(h)}break;case g.BACKSPACE:if(d=V.prev(),0===this.value.length)return R?(s(a(R)),Q.change()):d.length&&p(a(d.get(0))),!1;1===a(this).val().length?u():setTimeout(function(){F()},5);break;case g.TAB:case g.ENTER:case g.NUMPAD_ENTER:case g.COMMA:if(T)o(a(T).data("tokeninput")),Q.change();else{if(a(b).data("settings").allowFreeTagging){if(a(b).data("settings").allowTabOut&&""===a(this).val())return!0;m()}else if(a(this).val(""),a(b).data("settings").allowTabOut)return!0;c.stopPropagation(),c.preventDefault()}return!1;case g.ESCAPE:return u(),!0;default:String.fromCharCode(c.which)&&setTimeout(function(){F()},5)}});h.placeholder&&P.attr("placeholder",h.placeholder);var Q=a(b).hide().val("").focus(function(){I(P)}).blur(function(){return P.blur(),Q}),R=null,S=0,T=null,U=a("
        ").addClass(a(b).data("settings").classes.tokenList).click(function(b){var c=a(b.target).closest("li");c&&c.get(0)&&a.data(c.get(0),"tokeninput")?r(c):(R&&q(a(R),f.END),I(P))}).mouseover(function(c){var d=a(c.target).closest("li");d&&R!==this&&d.addClass(a(b).data("settings").classes.highlightedToken)}).mouseout(function(c){var d=a(c.target).closest("li");d&&R!==this&&d.removeClass(a(b).data("settings").classes.highlightedToken)}).insertBefore(Q),V=a("
      • ").addClass(a(b).data("settings").classes.inputToken).appendTo(U).append(P),W=a("
        ").addClass(a(b).data("settings").classes.dropdown).appendTo("body").hide(),X=a("").insertAfter(P).css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:P.css("fontSize"),fontFamily:P.css("fontFamily"),fontWeight:P.css("fontWeight"),letterSpacing:P.css("letterSpacing"),whiteSpace:"nowrap"});Q.val("");var Y=a(b).data("settings").prePopulate||Q.data("pre");a(b).data("settings").processPrePopulate&&a.isFunction(a(b).data("settings").onResult)&&(Y=a(b).data("settings").onResult.call(Q,Y)),Y&&Y.length&&a.each(Y,function(a,b){n(b),k(),P.attr("placeholder",null)}),a(b).data("settings").disabled&&j(!0),"function"==typeof a(b).data("settings").onReady&&a(b).data("settings").onReady.call(),this.clear=function(){U.children("li").each(function(){0===a(this).children("input").length&&s(a(this))})},this.add=function(a){o(a)},this.remove=function(b){U.children("li").each(function(){if(0===a(this).children("input").length){var c=a(this).data("tokeninput"),d=!0;for(var e in b)if(b[e]!==c[e]){d=!1;break}d&&s(a(this))}})},this.getTokens=function(){return M},this.toggleDisabled=function(a){j(a)},l();var Z=new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]","g")},a.TokenList.Cache=function(b){var c,d,e={},f=0;c=a.extend({max_size:500},b),d=function(){e={},f=0},this.add=function(a,b){f>c.max_size&&d(),e[a]||(f+=1),e[a]=b},this.get=function(a){return e[a]}}}(jQuery); \ No newline at end of file +/*! jquery.tokeninput 2015-05-26 */ +!function(a){function b(a){return String(null===a||void 0===a?"":a)}function c(a){return b(a).replace(i,function(a){return h[a]})}var d={method:"GET",queryParam:"q",searchDelay:300,minChars:1,propertyToSearch:"name",jsonContainer:null,contentType:"json",excludeCurrent:!1,excludeCurrentParameter:"x",prePopulate:null,processPrePopulate:!1,hintText:"Type in a search term",noResultsText:"No results",searchingText:"Searching...",deleteText:"×",animateDropdown:!0,placeholder:null,theme:null,zindex:999,resultsLimit:null,enableHTML:!1,resultsFormatter:function(a){var b=a[this.propertyToSearch];return"
      • "+(this.enableHTML?b:c(b))+"
      • "},tokenFormatter:function(a){var b=a[this.propertyToSearch];return"
      • "+(this.enableHTML?b:c(b))+"

      • "},tokenLimit:null,tokenDelimiter:",",preventDuplicates:!1,tokenValue:"id",allowFreeTagging:!1,allowTabOut:!1,autoSelectFirstResult:!1,onResult:null,onCachedResult:null,onAdd:null,onFreeTaggingAdd:null,onDelete:null,onClear:null,onReady:null,idPrefix:"token-input-",disabled:!1},e={tokenList:"token-input-list",token:"token-input-token",tokenReadOnly:"token-input-token-readonly",tokenDelete:"token-input-delete-token",selectedToken:"token-input-selected-token",highlightedToken:"token-input-highlighted-token",dropdown:"token-input-dropdown",dropdownItem:"token-input-dropdown-item",dropdownItem2:"token-input-dropdown-item2",selectedDropdownItem:"token-input-selected-dropdown-item",inputToken:"token-input-input-token",focused:"token-input-focused",disabled:"token-input-disabled"},f={BEFORE:0,AFTER:1,END:2},g={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,NUMPAD_ENTER:108,COMMA:188},h={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},i=/[&<>"'\/]/g,j={init:function(b,c){var e=a.extend({},d,c||{});return this.each(function(){a(this).data("settings",e),a(this).data("tokenInputObject",new a.TokenList(this,b,e))})},clear:function(){return this.data("tokenInputObject").clear(),this},add:function(a){return this.data("tokenInputObject").add(a),this},remove:function(a){return this.data("tokenInputObject").remove(a),this},get:function(){return this.data("tokenInputObject").getTokens()},toggleDisabled:function(a){return this.data("tokenInputObject").toggleDisabled(a),this},setOptions:function(b){return a(this).data("settings",a.extend({},a(this).data("settings"),b||{})),this},destroy:function(){if(this.data("tokenInputObject")){this.data("tokenInputObject").clear();var a=this,b=this.parent();return b.empty(),a.show(),b.append(a),a}}};a.fn.tokenInput=function(a){return j[a]?j[a].apply(this,Array.prototype.slice.call(arguments,1)):j.init.apply(this,arguments)},a.TokenList=function(b,d,h){function i(d){return a(b).data("settings").enableHTML?d:c(d)}function j(c){"boolean"==typeof c?a(b).data("settings").disabled=c:a(b).data("settings").disabled=!a(b).data("settings").disabled,R.attr("disabled",a(b).data("settings").disabled),W.toggleClass(a(b).data("settings").classes.disabled,a(b).data("settings").disabled),T&&q(a(T),f.END),S.attr("disabled",a(b).data("settings").disabled)}function k(){return null!==a(b).data("settings").tokenLimit&&P>=a(b).data("settings").tokenLimit?(R.hide(),void w()):void 0}function l(){if(N!==(N=R.val())){var a=W.width()-R.offset().left-W.offset().left;Z.html(c(N)||c(h.placeholder)),R.width(Math.min(W.width(),Math.max(a,Z.width()+30)))}}function m(){var c=a.trim(R.val()),d=c.split(a(b).data("settings").tokenDelimiter);a.each(d,function(c,d){if(d){a.isFunction(a(b).data("settings").onFreeTaggingAdd)&&(d=a(b).data("settings").onFreeTaggingAdd.call(S,d));var e={};e[a(b).data("settings").tokenValue]=e[a(b).data("settings").propertyToSearch]=d,o(e)}})}function n(c){var d=a(a(b).data("settings").tokenFormatter(c)),e=c.readonly===!0;e&&d.addClass(a(b).data("settings").classes.tokenReadOnly),d.addClass(a(b).data("settings").classes.token).insertBefore(X),e||a(""+a(b).data("settings").deleteText+"").addClass(a(b).data("settings").classes.tokenDelete).appendTo(d).click(function(){return a(b).data("settings").disabled?void 0:(t(a(this).parent()),S.change(),!1)});var f=c;return a.data(d.get(0),"tokeninput",c),O=O.slice(0,U).concat([f]).concat(O.slice(U)),U++,v(O,S),P+=1,null!==a(b).data("settings").tokenLimit&&P>=a(b).data("settings").tokenLimit&&(R.hide(),w()),d}function o(c){var d=a(b).data("settings").onAdd;if(P>0&&a(b).data("settings").preventDuplicates){var e=null;if(W.children().each(function(){var b=a(this),d=a.data(b.get(0),"tokeninput");return d&&d[h.tokenValue]===c[h.tokenValue]?(e=b,!1):void 0}),e)return p(e),X.insertAfter(e),void K(R)}R.width(1),(null==a(b).data("settings").tokenLimit||PU&&d--,c.remove(),T=null,K(R),O=O.slice(0,d).concat(O.slice(d+1)),0==O.length&&R.attr("placeholder",h.placeholder),U>d&&U--,v(O,S),P-=1,null!==a(b).data("settings").tokenLimit&&(R.show().val(""),K(R))}function t(c){var d=a(b).data("settings").onDelete,e=a.data(c.get(0),"tokeninput");s(c),a.isFunction(d)&&d.call(S,e)}function u(c){var d=a(b).data("settings").onClear;c.children("li").each(function(){0===a(this).children("input").length&&s(a(this))}),a.isFunction(d)&&d.call(S)}function v(c,d){var e=a.map(c,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});d.val(e.join(a(b).data("settings").tokenDelimiter))}function w(){Y.hide().empty(),V=null}function x(){Y.css({position:"absolute",top:W.offset().top+W.outerHeight(!0),left:W.offset().left,width:W.width(),"z-index":a(b).data("settings").zindex}).show()}function y(){a(b).data("settings").searchingText&&(Y.html("

        "+i(a(b).data("settings").searchingText)+"

        "),x())}function z(){a(b).data("settings").hintText&&(Y.html("

        "+i(a(b).data("settings").hintText)+"

        "),x())}function A(a){return a.replace(_,"\\$&")}function B(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+A(b)+")(?![^<>]*>)(?![^&;]+;)","gi"),function(a,b){return""+i(b)+""})}function C(a,b,c){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+A(b)+")(?![^<>]*>)(?![^&;]+;)","g"),B(b,c))}function D(c){if(a(b).data("settings").excludeCurrent){var d=a(b).data("tokenInputObject").getTokens(),e=[];d.length&&(a.each(c,function(c,f){var g=!0;a.each(d,function(c,d){return f[a(b).data("settings").propertyToSearch]==d[a(b).data("settings").propertyToSearch]?(g=!1,!1):void 0}),g&&e.push(f)}),c=e)}return c}function E(c,d){if(d=D(d),d&&d.length){Y.empty();var e=a("
          ").appendTo(Y).mouseover(function(b){F(a(b.target).closest("li"))}).mousedown(function(b){return o(a(b.target).closest("li").data("tokeninput")),S.change(),!1}).hide();a(b).data("settings").resultsLimit&&d.length>a(b).data("settings").resultsLimit&&(d=d.slice(0,a(b).data("settings").resultsLimit)),a.each(d,function(d,f){var g=a(b).data("settings").resultsFormatter(f);g=C(g,f[a(b).data("settings").propertyToSearch],c),g=a(g).appendTo(e),d%2?g.addClass(a(b).data("settings").classes.dropdownItem):g.addClass(a(b).data("settings").classes.dropdownItem2),0===d&&a(b).data("settings").autoSelectFirstResult&&F(g),a.data(g.get(0),"tokeninput",f)}),x(),a(b).data("settings").animateDropdown?e.slideDown("fast"):e.show()}else a(b).data("settings").noResultsText&&(Y.html("

          "+i(a(b).data("settings").noResultsText)+"

          "),x())}function F(c){c&&(V&&G(a(V)),c.addClass(a(b).data("settings").classes.selectedDropdownItem),V=c.get(0))}function G(c){c.removeClass(a(b).data("settings").classes.selectedDropdownItem),V=null}function H(){var c=R.val();c&&c.length&&(T&&q(a(T),f.AFTER),c.length>=a(b).data("settings").minChars?(y(),clearTimeout(M),M=setTimeout(function(){I(c)},a(b).data("settings").searchDelay)):w())}function I(c){var d=c+J(),e=Q.get(d);if(e)a.isFunction(a(b).data("settings").onCachedResult)&&(e=a(b).data("settings").onCachedResult.call(S,e)),E(c,e);else if(a(b).data("settings").url){var f=J(),g={};if(g.data={},f.indexOf("?")>-1){var i=f.split("?");g.url=i[0];var j=i[1].split("&");a.each(j,function(a,b){var c=b.split("=");g.data[c[0]]=c[1]})}else g.url=f;if(g.data[a(b).data("settings").queryParam]=c,g.type=a(b).data("settings").method,g.dataType=a(b).data("settings").contentType,a(b).data("settings").crossDomain&&(g.dataType="jsonp"),a(b).data("settings").excludeCurrent){var k=a(b).data("tokenInputObject").getTokens(),l=a.map(k,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});g.data[a(b).data("settings").excludeCurrentParameter]=l.join(a(b).data("settings").tokenDelimiter)}g.success=function(e){Q.add(d,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e),a.isFunction(a(b).data("settings").onResult)&&(e=a(b).data("settings").onResult.call(S,e)),R.val()===c&&E(c,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e)},h.onSend&&h.onSend(g),a.ajax(g)}else if(a(b).data("settings").local_data){var m=a.grep(a(b).data("settings").local_data,function(d){return d[a(b).data("settings").propertyToSearch].toLowerCase().indexOf(c.toLowerCase())>-1});Q.add(d,m),a.isFunction(a(b).data("settings").onResult)&&(m=a(b).data("settings").onResult.call(S,m)),E(c,m)}}function J(){var c=a(b).data("settings");return"function"==typeof c.url?c.url.call(c):c.url}function K(a){setTimeout(function(){a.focus()},50)}if("string"==typeof d||"function"==typeof d){a(b).data("settings").url=d;var L=J();void 0===a(b).data("settings").crossDomain&&"string"==typeof L&&(-1===L.indexOf("://")?a(b).data("settings").crossDomain=!1:a(b).data("settings").crossDomain=location.href.split(/\/+/g)[1]!==L.split(/\/+/g)[1])}else"object"==typeof d&&(a(b).data("settings").local_data=d);a(b).data("settings").classes?a(b).data("settings").classes=a.extend({},e,a(b).data("settings").classes):a(b).data("settings").theme?(a(b).data("settings").classes={},a.each(e,function(c,d){a(b).data("settings").classes[c]=d+"-"+a(b).data("settings").theme})):a(b).data("settings").classes=e;var M,N,O=[],P=0,Q=new a.TokenList.Cache,R=a('').css({outline:"none"}).attr("id",a(b).data("settings").idPrefix+b.id).focus(function(){return a(b).data("settings").disabled?!1:((null===a(b).data("settings").tokenLimit||a(b).data("settings").tokenLimit!==P)&&z(),void W.addClass(a(b).data("settings").classes.focused))}).blur(function(){w(),a(b).data("settings").allowFreeTagging&&m(),a(this).val(""),W.removeClass(a(b).data("settings").classes.focused)}).bind("keyup keydown blur update",l).keydown(function(c){var d,e;switch(c.keyCode){case g.LEFT:case g.RIGHT:case g.UP:case g.DOWN:if(0===this.value.length)d=X.prev(),e=X.next(),d.length&&d.get(0)===T||e.length&&e.get(0)===T?c.keyCode===g.LEFT||c.keyCode===g.UP?q(a(T),f.BEFORE):q(a(T),f.AFTER):c.keyCode!==g.LEFT&&c.keyCode!==g.UP||!d.length?c.keyCode!==g.RIGHT&&c.keyCode!==g.DOWN||!e.length||p(a(e.get(0))):p(a(d.get(0)));else{var h=null;c.keyCode===g.DOWN||c.keyCode===g.RIGHT?(h=a(Y).find("li").first(),V&&(h=a(V).next())):(h=a(Y).find("li").last(),V&&(h=a(V).prev())),F(h)}break;case g.BACKSPACE:if(d=X.prev(),0===this.value.length)return T?(t(a(T)),S.change()):d.length&&p(a(d.get(0))),!1;1===a(this).val().length?w():setTimeout(function(){H()},5);break;case g.TAB:case g.ENTER:case g.NUMPAD_ENTER:case g.COMMA:if(V)o(a(V).data("tokeninput")),S.change();else{if(a(b).data("settings").allowFreeTagging){if(a(b).data("settings").allowTabOut&&""===a(this).val())return!0;m()}else if(a(this).val(""),a(b).data("settings").allowTabOut)return!0;c.stopPropagation(),c.preventDefault()}return!1;case g.ESCAPE:return w(),!0;default:String.fromCharCode(c.which)&&setTimeout(function(){H()},5)}});h.placeholder&&R.attr("placeholder",h.placeholder);var S=a(b).hide().val("").focus(function(){K(R)}).blur(function(){return R.blur(),S}),T=null,U=0,V=null,W=a("
            ").addClass(a(b).data("settings").classes.tokenList).click(function(b){var c=a(b.target).closest("li");c&&c.get(0)&&a.data(c.get(0),"tokeninput")?r(c):(T&&q(a(T),f.END),K(R))}).mouseover(function(c){var d=a(c.target).closest("li");d&&T!==this&&d.addClass(a(b).data("settings").classes.highlightedToken)}).mouseout(function(c){var d=a(c.target).closest("li");d&&T!==this&&d.removeClass(a(b).data("settings").classes.highlightedToken)}).insertBefore(S),X=a("
          • ").addClass(a(b).data("settings").classes.inputToken).appendTo(W).append(R),Y=a("
            ").addClass(a(b).data("settings").classes.dropdown).appendTo("body").hide(),Z=a("").insertAfter(R).css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:R.css("fontSize"),fontFamily:R.css("fontFamily"),fontWeight:R.css("fontWeight"),letterSpacing:R.css("letterSpacing"),whiteSpace:"nowrap"});S.val("");var $=a(b).data("settings").prePopulate||S.data("pre");a(b).data("settings").processPrePopulate&&a.isFunction(a(b).data("settings").onResult)&&($=a(b).data("settings").onResult.call(S,$)),$&&$.length&&a.each($,function(a,b){n(b),k(),R.attr("placeholder",null)}),a(b).data("settings").disabled&&j(!0),"function"==typeof a(b).data("settings").onReady&&a(b).data("settings").onReady.call(),this.clear=function(){u(W)},this.add=function(a){o(a)},this.remove=function(b){W.children("li").each(function(){if(0===a(this).children("input").length){var c=a(this).data("tokeninput"),d=!0;for(var e in b)if(b[e]!==c[e]){d=!1;break}d&&s(a(this))}})},this.getTokens=function(){return O},this.toggleDisabled=function(a){j(a)},l();var _=new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]","g")},a.TokenList.Cache=function(b){var c,d,e={},f=0;c=a.extend({max_size:500},b),d=function(){e={},f=0},this.add=function(a,b){f>c.max_size&&d(),e[a]||(f+=1),e[a]=b},this.get=function(a){return e[a]}}}(jQuery); \ No newline at end of file diff --git a/src/jquery.tokeninput.js b/src/jquery.tokeninput.js index 413bafc1..dc0fdbb2 100755 --- a/src/jquery.tokeninput.js +++ b/src/jquery.tokeninput.js @@ -735,7 +735,8 @@ } } - function delete_token (token) { + // Remove a token from the token list, called by delete_token and clear_tokens + function remove_token (token) { // Remove the id from the saved list var token_data = $.data(token.get(0), "tokeninput"); @@ -770,11 +771,11 @@ } // Delete a token from the token list - function remove_token (token) { + function delete_token (token) { var callback = $(input).data("settings").onDelete; var token_data = $.data(token.get(0), "tokeninput"); - delete_token(token); + remove_token(token); // Execute the onDelete callback if defined if($.isFunction(callback)) { @@ -788,7 +789,7 @@ tokens.children("li").each(function() { if ($(this).children("input").length === 0) { - delete_token($(this)); + remove_token($(this)); } }); From d88e83e4adcc6e875a661945a19f06cb854d9de4 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 26 May 2015 15:41:03 -0700 Subject: [PATCH 3/5] add preload method --- build/jquery.tokeninput.min.js | 2 +- src/jquery.tokeninput.js | 43 ++++++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/build/jquery.tokeninput.min.js b/build/jquery.tokeninput.min.js index 750744c6..f0a71483 100644 --- a/build/jquery.tokeninput.min.js +++ b/build/jquery.tokeninput.min.js @@ -1,2 +1,2 @@ /*! jquery.tokeninput 2015-05-26 */ -!function(a){function b(a){return String(null===a||void 0===a?"":a)}function c(a){return b(a).replace(i,function(a){return h[a]})}var d={method:"GET",queryParam:"q",searchDelay:300,minChars:1,propertyToSearch:"name",jsonContainer:null,contentType:"json",excludeCurrent:!1,excludeCurrentParameter:"x",prePopulate:null,processPrePopulate:!1,hintText:"Type in a search term",noResultsText:"No results",searchingText:"Searching...",deleteText:"×",animateDropdown:!0,placeholder:null,theme:null,zindex:999,resultsLimit:null,enableHTML:!1,resultsFormatter:function(a){var b=a[this.propertyToSearch];return"
          • "+(this.enableHTML?b:c(b))+"
          • "},tokenFormatter:function(a){var b=a[this.propertyToSearch];return"
          • "+(this.enableHTML?b:c(b))+"

          • "},tokenLimit:null,tokenDelimiter:",",preventDuplicates:!1,tokenValue:"id",allowFreeTagging:!1,allowTabOut:!1,autoSelectFirstResult:!1,onResult:null,onCachedResult:null,onAdd:null,onFreeTaggingAdd:null,onDelete:null,onClear:null,onReady:null,idPrefix:"token-input-",disabled:!1},e={tokenList:"token-input-list",token:"token-input-token",tokenReadOnly:"token-input-token-readonly",tokenDelete:"token-input-delete-token",selectedToken:"token-input-selected-token",highlightedToken:"token-input-highlighted-token",dropdown:"token-input-dropdown",dropdownItem:"token-input-dropdown-item",dropdownItem2:"token-input-dropdown-item2",selectedDropdownItem:"token-input-selected-dropdown-item",inputToken:"token-input-input-token",focused:"token-input-focused",disabled:"token-input-disabled"},f={BEFORE:0,AFTER:1,END:2},g={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,NUMPAD_ENTER:108,COMMA:188},h={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},i=/[&<>"'\/]/g,j={init:function(b,c){var e=a.extend({},d,c||{});return this.each(function(){a(this).data("settings",e),a(this).data("tokenInputObject",new a.TokenList(this,b,e))})},clear:function(){return this.data("tokenInputObject").clear(),this},add:function(a){return this.data("tokenInputObject").add(a),this},remove:function(a){return this.data("tokenInputObject").remove(a),this},get:function(){return this.data("tokenInputObject").getTokens()},toggleDisabled:function(a){return this.data("tokenInputObject").toggleDisabled(a),this},setOptions:function(b){return a(this).data("settings",a.extend({},a(this).data("settings"),b||{})),this},destroy:function(){if(this.data("tokenInputObject")){this.data("tokenInputObject").clear();var a=this,b=this.parent();return b.empty(),a.show(),b.append(a),a}}};a.fn.tokenInput=function(a){return j[a]?j[a].apply(this,Array.prototype.slice.call(arguments,1)):j.init.apply(this,arguments)},a.TokenList=function(b,d,h){function i(d){return a(b).data("settings").enableHTML?d:c(d)}function j(c){"boolean"==typeof c?a(b).data("settings").disabled=c:a(b).data("settings").disabled=!a(b).data("settings").disabled,R.attr("disabled",a(b).data("settings").disabled),W.toggleClass(a(b).data("settings").classes.disabled,a(b).data("settings").disabled),T&&q(a(T),f.END),S.attr("disabled",a(b).data("settings").disabled)}function k(){return null!==a(b).data("settings").tokenLimit&&P>=a(b).data("settings").tokenLimit?(R.hide(),void w()):void 0}function l(){if(N!==(N=R.val())){var a=W.width()-R.offset().left-W.offset().left;Z.html(c(N)||c(h.placeholder)),R.width(Math.min(W.width(),Math.max(a,Z.width()+30)))}}function m(){var c=a.trim(R.val()),d=c.split(a(b).data("settings").tokenDelimiter);a.each(d,function(c,d){if(d){a.isFunction(a(b).data("settings").onFreeTaggingAdd)&&(d=a(b).data("settings").onFreeTaggingAdd.call(S,d));var e={};e[a(b).data("settings").tokenValue]=e[a(b).data("settings").propertyToSearch]=d,o(e)}})}function n(c){var d=a(a(b).data("settings").tokenFormatter(c)),e=c.readonly===!0;e&&d.addClass(a(b).data("settings").classes.tokenReadOnly),d.addClass(a(b).data("settings").classes.token).insertBefore(X),e||a(""+a(b).data("settings").deleteText+"").addClass(a(b).data("settings").classes.tokenDelete).appendTo(d).click(function(){return a(b).data("settings").disabled?void 0:(t(a(this).parent()),S.change(),!1)});var f=c;return a.data(d.get(0),"tokeninput",c),O=O.slice(0,U).concat([f]).concat(O.slice(U)),U++,v(O,S),P+=1,null!==a(b).data("settings").tokenLimit&&P>=a(b).data("settings").tokenLimit&&(R.hide(),w()),d}function o(c){var d=a(b).data("settings").onAdd;if(P>0&&a(b).data("settings").preventDuplicates){var e=null;if(W.children().each(function(){var b=a(this),d=a.data(b.get(0),"tokeninput");return d&&d[h.tokenValue]===c[h.tokenValue]?(e=b,!1):void 0}),e)return p(e),X.insertAfter(e),void K(R)}R.width(1),(null==a(b).data("settings").tokenLimit||PU&&d--,c.remove(),T=null,K(R),O=O.slice(0,d).concat(O.slice(d+1)),0==O.length&&R.attr("placeholder",h.placeholder),U>d&&U--,v(O,S),P-=1,null!==a(b).data("settings").tokenLimit&&(R.show().val(""),K(R))}function t(c){var d=a(b).data("settings").onDelete,e=a.data(c.get(0),"tokeninput");s(c),a.isFunction(d)&&d.call(S,e)}function u(c){var d=a(b).data("settings").onClear;c.children("li").each(function(){0===a(this).children("input").length&&s(a(this))}),a.isFunction(d)&&d.call(S)}function v(c,d){var e=a.map(c,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});d.val(e.join(a(b).data("settings").tokenDelimiter))}function w(){Y.hide().empty(),V=null}function x(){Y.css({position:"absolute",top:W.offset().top+W.outerHeight(!0),left:W.offset().left,width:W.width(),"z-index":a(b).data("settings").zindex}).show()}function y(){a(b).data("settings").searchingText&&(Y.html("

            "+i(a(b).data("settings").searchingText)+"

            "),x())}function z(){a(b).data("settings").hintText&&(Y.html("

            "+i(a(b).data("settings").hintText)+"

            "),x())}function A(a){return a.replace(_,"\\$&")}function B(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+A(b)+")(?![^<>]*>)(?![^&;]+;)","gi"),function(a,b){return""+i(b)+""})}function C(a,b,c){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+A(b)+")(?![^<>]*>)(?![^&;]+;)","g"),B(b,c))}function D(c){if(a(b).data("settings").excludeCurrent){var d=a(b).data("tokenInputObject").getTokens(),e=[];d.length&&(a.each(c,function(c,f){var g=!0;a.each(d,function(c,d){return f[a(b).data("settings").propertyToSearch]==d[a(b).data("settings").propertyToSearch]?(g=!1,!1):void 0}),g&&e.push(f)}),c=e)}return c}function E(c,d){if(d=D(d),d&&d.length){Y.empty();var e=a("
              ").appendTo(Y).mouseover(function(b){F(a(b.target).closest("li"))}).mousedown(function(b){return o(a(b.target).closest("li").data("tokeninput")),S.change(),!1}).hide();a(b).data("settings").resultsLimit&&d.length>a(b).data("settings").resultsLimit&&(d=d.slice(0,a(b).data("settings").resultsLimit)),a.each(d,function(d,f){var g=a(b).data("settings").resultsFormatter(f);g=C(g,f[a(b).data("settings").propertyToSearch],c),g=a(g).appendTo(e),d%2?g.addClass(a(b).data("settings").classes.dropdownItem):g.addClass(a(b).data("settings").classes.dropdownItem2),0===d&&a(b).data("settings").autoSelectFirstResult&&F(g),a.data(g.get(0),"tokeninput",f)}),x(),a(b).data("settings").animateDropdown?e.slideDown("fast"):e.show()}else a(b).data("settings").noResultsText&&(Y.html("

              "+i(a(b).data("settings").noResultsText)+"

              "),x())}function F(c){c&&(V&&G(a(V)),c.addClass(a(b).data("settings").classes.selectedDropdownItem),V=c.get(0))}function G(c){c.removeClass(a(b).data("settings").classes.selectedDropdownItem),V=null}function H(){var c=R.val();c&&c.length&&(T&&q(a(T),f.AFTER),c.length>=a(b).data("settings").minChars?(y(),clearTimeout(M),M=setTimeout(function(){I(c)},a(b).data("settings").searchDelay)):w())}function I(c){var d=c+J(),e=Q.get(d);if(e)a.isFunction(a(b).data("settings").onCachedResult)&&(e=a(b).data("settings").onCachedResult.call(S,e)),E(c,e);else if(a(b).data("settings").url){var f=J(),g={};if(g.data={},f.indexOf("?")>-1){var i=f.split("?");g.url=i[0];var j=i[1].split("&");a.each(j,function(a,b){var c=b.split("=");g.data[c[0]]=c[1]})}else g.url=f;if(g.data[a(b).data("settings").queryParam]=c,g.type=a(b).data("settings").method,g.dataType=a(b).data("settings").contentType,a(b).data("settings").crossDomain&&(g.dataType="jsonp"),a(b).data("settings").excludeCurrent){var k=a(b).data("tokenInputObject").getTokens(),l=a.map(k,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});g.data[a(b).data("settings").excludeCurrentParameter]=l.join(a(b).data("settings").tokenDelimiter)}g.success=function(e){Q.add(d,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e),a.isFunction(a(b).data("settings").onResult)&&(e=a(b).data("settings").onResult.call(S,e)),R.val()===c&&E(c,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e)},h.onSend&&h.onSend(g),a.ajax(g)}else if(a(b).data("settings").local_data){var m=a.grep(a(b).data("settings").local_data,function(d){return d[a(b).data("settings").propertyToSearch].toLowerCase().indexOf(c.toLowerCase())>-1});Q.add(d,m),a.isFunction(a(b).data("settings").onResult)&&(m=a(b).data("settings").onResult.call(S,m)),E(c,m)}}function J(){var c=a(b).data("settings");return"function"==typeof c.url?c.url.call(c):c.url}function K(a){setTimeout(function(){a.focus()},50)}if("string"==typeof d||"function"==typeof d){a(b).data("settings").url=d;var L=J();void 0===a(b).data("settings").crossDomain&&"string"==typeof L&&(-1===L.indexOf("://")?a(b).data("settings").crossDomain=!1:a(b).data("settings").crossDomain=location.href.split(/\/+/g)[1]!==L.split(/\/+/g)[1])}else"object"==typeof d&&(a(b).data("settings").local_data=d);a(b).data("settings").classes?a(b).data("settings").classes=a.extend({},e,a(b).data("settings").classes):a(b).data("settings").theme?(a(b).data("settings").classes={},a.each(e,function(c,d){a(b).data("settings").classes[c]=d+"-"+a(b).data("settings").theme})):a(b).data("settings").classes=e;var M,N,O=[],P=0,Q=new a.TokenList.Cache,R=a('').css({outline:"none"}).attr("id",a(b).data("settings").idPrefix+b.id).focus(function(){return a(b).data("settings").disabled?!1:((null===a(b).data("settings").tokenLimit||a(b).data("settings").tokenLimit!==P)&&z(),void W.addClass(a(b).data("settings").classes.focused))}).blur(function(){w(),a(b).data("settings").allowFreeTagging&&m(),a(this).val(""),W.removeClass(a(b).data("settings").classes.focused)}).bind("keyup keydown blur update",l).keydown(function(c){var d,e;switch(c.keyCode){case g.LEFT:case g.RIGHT:case g.UP:case g.DOWN:if(0===this.value.length)d=X.prev(),e=X.next(),d.length&&d.get(0)===T||e.length&&e.get(0)===T?c.keyCode===g.LEFT||c.keyCode===g.UP?q(a(T),f.BEFORE):q(a(T),f.AFTER):c.keyCode!==g.LEFT&&c.keyCode!==g.UP||!d.length?c.keyCode!==g.RIGHT&&c.keyCode!==g.DOWN||!e.length||p(a(e.get(0))):p(a(d.get(0)));else{var h=null;c.keyCode===g.DOWN||c.keyCode===g.RIGHT?(h=a(Y).find("li").first(),V&&(h=a(V).next())):(h=a(Y).find("li").last(),V&&(h=a(V).prev())),F(h)}break;case g.BACKSPACE:if(d=X.prev(),0===this.value.length)return T?(t(a(T)),S.change()):d.length&&p(a(d.get(0))),!1;1===a(this).val().length?w():setTimeout(function(){H()},5);break;case g.TAB:case g.ENTER:case g.NUMPAD_ENTER:case g.COMMA:if(V)o(a(V).data("tokeninput")),S.change();else{if(a(b).data("settings").allowFreeTagging){if(a(b).data("settings").allowTabOut&&""===a(this).val())return!0;m()}else if(a(this).val(""),a(b).data("settings").allowTabOut)return!0;c.stopPropagation(),c.preventDefault()}return!1;case g.ESCAPE:return w(),!0;default:String.fromCharCode(c.which)&&setTimeout(function(){H()},5)}});h.placeholder&&R.attr("placeholder",h.placeholder);var S=a(b).hide().val("").focus(function(){K(R)}).blur(function(){return R.blur(),S}),T=null,U=0,V=null,W=a("
                ").addClass(a(b).data("settings").classes.tokenList).click(function(b){var c=a(b.target).closest("li");c&&c.get(0)&&a.data(c.get(0),"tokeninput")?r(c):(T&&q(a(T),f.END),K(R))}).mouseover(function(c){var d=a(c.target).closest("li");d&&T!==this&&d.addClass(a(b).data("settings").classes.highlightedToken)}).mouseout(function(c){var d=a(c.target).closest("li");d&&T!==this&&d.removeClass(a(b).data("settings").classes.highlightedToken)}).insertBefore(S),X=a("
              • ").addClass(a(b).data("settings").classes.inputToken).appendTo(W).append(R),Y=a("
                ").addClass(a(b).data("settings").classes.dropdown).appendTo("body").hide(),Z=a("").insertAfter(R).css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:R.css("fontSize"),fontFamily:R.css("fontFamily"),fontWeight:R.css("fontWeight"),letterSpacing:R.css("letterSpacing"),whiteSpace:"nowrap"});S.val("");var $=a(b).data("settings").prePopulate||S.data("pre");a(b).data("settings").processPrePopulate&&a.isFunction(a(b).data("settings").onResult)&&($=a(b).data("settings").onResult.call(S,$)),$&&$.length&&a.each($,function(a,b){n(b),k(),R.attr("placeholder",null)}),a(b).data("settings").disabled&&j(!0),"function"==typeof a(b).data("settings").onReady&&a(b).data("settings").onReady.call(),this.clear=function(){u(W)},this.add=function(a){o(a)},this.remove=function(b){W.children("li").each(function(){if(0===a(this).children("input").length){var c=a(this).data("tokeninput"),d=!0;for(var e in b)if(b[e]!==c[e]){d=!1;break}d&&s(a(this))}})},this.getTokens=function(){return O},this.toggleDisabled=function(a){j(a)},l();var _=new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]","g")},a.TokenList.Cache=function(b){var c,d,e={},f=0;c=a.extend({max_size:500},b),d=function(){e={},f=0},this.add=function(a,b){f>c.max_size&&d(),e[a]||(f+=1),e[a]=b},this.get=function(a){return e[a]}}}(jQuery); \ No newline at end of file +!function(a){function b(a){return String(null===a||void 0===a?"":a)}function c(a){return b(a).replace(i,function(a){return h[a]})}var d={method:"GET",queryParam:"q",searchDelay:300,minChars:1,propertyToSearch:"name",jsonContainer:null,contentType:"json",excludeCurrent:!1,excludeCurrentParameter:"x",prePopulate:null,processPrePopulate:!1,hintText:"Type in a search term",noResultsText:"No results",searchingText:"Searching...",deleteText:"×",animateDropdown:!0,placeholder:null,theme:null,zindex:999,resultsLimit:null,enableHTML:!1,resultsFormatter:function(a){var b=a[this.propertyToSearch];return"
              • "+(this.enableHTML?b:c(b))+"
              • "},tokenFormatter:function(a){var b=a[this.propertyToSearch];return"
              • "+(this.enableHTML?b:c(b))+"

              • "},tokenLimit:null,tokenDelimiter:",",preventDuplicates:!1,tokenValue:"id",allowFreeTagging:!1,allowTabOut:!1,autoSelectFirstResult:!1,onResult:null,onCachedResult:null,onAdd:null,onFreeTaggingAdd:null,onDelete:null,onClear:null,onReady:null,idPrefix:"token-input-",disabled:!1},e={tokenList:"token-input-list",token:"token-input-token",tokenReadOnly:"token-input-token-readonly",tokenDelete:"token-input-delete-token",selectedToken:"token-input-selected-token",highlightedToken:"token-input-highlighted-token",dropdown:"token-input-dropdown",dropdownItem:"token-input-dropdown-item",dropdownItem2:"token-input-dropdown-item2",selectedDropdownItem:"token-input-selected-dropdown-item",inputToken:"token-input-input-token",focused:"token-input-focused",disabled:"token-input-disabled"},f={BEFORE:0,AFTER:1,END:2},g={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,NUMPAD_ENTER:108,COMMA:188},h={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},i=/[&<>"'\/]/g,j={init:function(b,c){var e=a.extend({},d,c||{});return this.each(function(){a(this).data("settings",e),a(this).data("tokenInputObject",new a.TokenList(this,b,e))})},clear:function(){return this.data("tokenInputObject").clear(),this},preload:function(a){return this.data("tokenInputObject").preload(a),this},add:function(a){return this.data("tokenInputObject").add(a),this},remove:function(a){return this.data("tokenInputObject").remove(a),this},get:function(){return this.data("tokenInputObject").getTokens()},toggleDisabled:function(a){return this.data("tokenInputObject").toggleDisabled(a),this},setOptions:function(b){return a(this).data("settings",a.extend({},a(this).data("settings"),b||{})),this},destroy:function(){if(this.data("tokenInputObject")){this.data("tokenInputObject").clear();var a=this,b=this.parent();return b.empty(),a.show(),b.append(a),a}}};a.fn.tokenInput=function(a){return j[a]?j[a].apply(this,Array.prototype.slice.call(arguments,1)):j.init.apply(this,arguments)},a.TokenList=function(b,d,h){function i(d){return a(b).data("settings").enableHTML?d:c(d)}function j(c){"boolean"==typeof c?a(b).data("settings").disabled=c:a(b).data("settings").disabled=!a(b).data("settings").disabled,T.attr("disabled",a(b).data("settings").disabled),Y.toggleClass(a(b).data("settings").classes.disabled,a(b).data("settings").disabled),V&&s(a(V),f.END),U.attr("disabled",a(b).data("settings").disabled)}function k(){return null!==a(b).data("settings").tokenLimit&&R>=a(b).data("settings").tokenLimit?(T.hide(),void y()):void 0}function l(){if(P!==(P=T.val())){var a=Y.width()-T.offset().left-Y.offset().left;_.html(c(P)||c(h.placeholder)),T.width(Math.min(Y.width(),Math.max(a,_.width()+30)))}}function m(){var c=a.trim(T.val()),d=c.split(a(b).data("settings").tokenDelimiter);a.each(d,function(c,d){if(d){a.isFunction(a(b).data("settings").onFreeTaggingAdd)&&(d=a(b).data("settings").onFreeTaggingAdd.call(U,d));var e={};e[a(b).data("settings").tokenValue]=e[a(b).data("settings").propertyToSearch]=d,q(e)}})}function n(c){var d=a(a(b).data("settings").tokenFormatter(c)),e=c.readonly===!0;e&&d.addClass(a(b).data("settings").classes.tokenReadOnly),d.addClass(a(b).data("settings").classes.token).insertBefore(Z),e||a(""+a(b).data("settings").deleteText+"").addClass(a(b).data("settings").classes.tokenDelete).appendTo(d).click(function(){return a(b).data("settings").disabled?void 0:(v(a(this).parent()),U.change(),!1)});var f=c;return a.data(d.get(0),"tokeninput",c),Q=Q.slice(0,W).concat([f]).concat(Q.slice(W)),W++,x(Q,U),R+=1,null!==a(b).data("settings").tokenLimit&&R>=a(b).data("settings").tokenLimit&&(T.hide(),y()),d}function o(c){if(R>0&&a(b).data("settings").preventDuplicates){var d=null;if(Y.children().each(function(){var b=a(this),e=a.data(b.get(0),"tokeninput");return e&&e[h.tokenValue]===c[h.tokenValue]?(d=b,!1):void 0}),d)return r(d),Z.insertAfter(d),void M(T)}T.width(1),(null==a(b).data("settings").tokenLimit||RW&&d--,c.remove(),V=null,M(T),Q=Q.slice(0,d).concat(Q.slice(d+1)),0==Q.length&&T.attr("placeholder",h.placeholder),W>d&&W--,x(Q,U),R-=1,null!==a(b).data("settings").tokenLimit&&(T.show().val(""),M(T))}function v(c){var d=a(b).data("settings").onDelete,e=a.data(c.get(0),"tokeninput");u(c),a.isFunction(d)&&d.call(U,e)}function w(c){var d=a(b).data("settings").onClear;c.children("li").each(function(){0===a(this).children("input").length&&u(a(this))}),a.isFunction(d)&&d.call(U)}function x(c,d){var e=a.map(c,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});d.val(e.join(a(b).data("settings").tokenDelimiter))}function y(){$.hide().empty(),X=null}function z(){$.css({position:"absolute",top:Y.offset().top+Y.outerHeight(!0),left:Y.offset().left,width:Y.width(),"z-index":a(b).data("settings").zindex}).show()}function A(){a(b).data("settings").searchingText&&($.html("

                "+i(a(b).data("settings").searchingText)+"

                "),z())}function B(){a(b).data("settings").hintText&&($.html("

                "+i(a(b).data("settings").hintText)+"

                "),z())}function C(a){return a.replace(ba,"\\$&")}function D(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+C(b)+")(?![^<>]*>)(?![^&;]+;)","gi"),function(a,b){return""+i(b)+""})}function E(a,b,c){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+C(b)+")(?![^<>]*>)(?![^&;]+;)","g"),D(b,c))}function F(c){if(a(b).data("settings").excludeCurrent){var d=a(b).data("tokenInputObject").getTokens(),e=[];d.length&&(a.each(c,function(c,f){var g=!0;a.each(d,function(c,d){return f[a(b).data("settings").propertyToSearch]==d[a(b).data("settings").propertyToSearch]?(g=!1,!1):void 0}),g&&e.push(f)}),c=e)}return c}function G(c,d){if(d=F(d),d&&d.length){$.empty();var e=a("
                  ").appendTo($).mouseover(function(b){H(a(b.target).closest("li"))}).mousedown(function(b){return q(a(b.target).closest("li").data("tokeninput")),U.change(),!1}).hide();a(b).data("settings").resultsLimit&&d.length>a(b).data("settings").resultsLimit&&(d=d.slice(0,a(b).data("settings").resultsLimit)),a.each(d,function(d,f){var g=a(b).data("settings").resultsFormatter(f);g=E(g,f[a(b).data("settings").propertyToSearch],c),g=a(g).appendTo(e),d%2?g.addClass(a(b).data("settings").classes.dropdownItem):g.addClass(a(b).data("settings").classes.dropdownItem2),0===d&&a(b).data("settings").autoSelectFirstResult&&H(g),a.data(g.get(0),"tokeninput",f)}),z(),a(b).data("settings").animateDropdown?e.slideDown("fast"):e.show()}else a(b).data("settings").noResultsText&&($.html("

                  "+i(a(b).data("settings").noResultsText)+"

                  "),z())}function H(c){c&&(X&&I(a(X)),c.addClass(a(b).data("settings").classes.selectedDropdownItem),X=c.get(0))}function I(c){c.removeClass(a(b).data("settings").classes.selectedDropdownItem),X=null}function J(){var c=T.val();c&&c.length&&(V&&s(a(V),f.AFTER),c.length>=a(b).data("settings").minChars?(A(),clearTimeout(O),O=setTimeout(function(){K(c)},a(b).data("settings").searchDelay)):y())}function K(c){var d=c+L(),e=S.get(d);if(e)a.isFunction(a(b).data("settings").onCachedResult)&&(e=a(b).data("settings").onCachedResult.call(U,e)),G(c,e);else if(a(b).data("settings").url){var f=L(),g={};if(g.data={},f.indexOf("?")>-1){var i=f.split("?");g.url=i[0];var j=i[1].split("&");a.each(j,function(a,b){var c=b.split("=");g.data[c[0]]=c[1]})}else g.url=f;if(g.data[a(b).data("settings").queryParam]=c,g.type=a(b).data("settings").method,g.dataType=a(b).data("settings").contentType,a(b).data("settings").crossDomain&&(g.dataType="jsonp"),a(b).data("settings").excludeCurrent){var k=a(b).data("tokenInputObject").getTokens(),l=a.map(k,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});g.data[a(b).data("settings").excludeCurrentParameter]=l.join(a(b).data("settings").tokenDelimiter)}g.success=function(e){S.add(d,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e),a.isFunction(a(b).data("settings").onResult)&&(e=a(b).data("settings").onResult.call(U,e)),T.val()===c&&G(c,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e)},h.onSend&&h.onSend(g),a.ajax(g)}else if(a(b).data("settings").local_data){var m=a.grep(a(b).data("settings").local_data,function(d){return d[a(b).data("settings").propertyToSearch].toLowerCase().indexOf(c.toLowerCase())>-1});S.add(d,m),a.isFunction(a(b).data("settings").onResult)&&(m=a(b).data("settings").onResult.call(U,m)),G(c,m)}}function L(){var c=a(b).data("settings");return"function"==typeof c.url?c.url.call(c):c.url}function M(a){setTimeout(function(){a.focus()},50)}if("string"==typeof d||"function"==typeof d){a(b).data("settings").url=d;var N=L();void 0===a(b).data("settings").crossDomain&&"string"==typeof N&&(-1===N.indexOf("://")?a(b).data("settings").crossDomain=!1:a(b).data("settings").crossDomain=location.href.split(/\/+/g)[1]!==N.split(/\/+/g)[1])}else"object"==typeof d&&(a(b).data("settings").local_data=d);a(b).data("settings").classes?a(b).data("settings").classes=a.extend({},e,a(b).data("settings").classes):a(b).data("settings").theme?(a(b).data("settings").classes={},a.each(e,function(c,d){a(b).data("settings").classes[c]=d+"-"+a(b).data("settings").theme})):a(b).data("settings").classes=e;var O,P,Q=[],R=0,S=new a.TokenList.Cache,T=a('').css({outline:"none"}).attr("id",a(b).data("settings").idPrefix+b.id).focus(function(){return a(b).data("settings").disabled?!1:((null===a(b).data("settings").tokenLimit||a(b).data("settings").tokenLimit!==R)&&B(),void Y.addClass(a(b).data("settings").classes.focused))}).blur(function(){y(),a(b).data("settings").allowFreeTagging&&m(),a(this).val(""),Y.removeClass(a(b).data("settings").classes.focused)}).bind("keyup keydown blur update",l).keydown(function(c){var d,e;switch(c.keyCode){case g.LEFT:case g.RIGHT:case g.UP:case g.DOWN:if(0===this.value.length)d=Z.prev(),e=Z.next(),d.length&&d.get(0)===V||e.length&&e.get(0)===V?c.keyCode===g.LEFT||c.keyCode===g.UP?s(a(V),f.BEFORE):s(a(V),f.AFTER):c.keyCode!==g.LEFT&&c.keyCode!==g.UP||!d.length?c.keyCode!==g.RIGHT&&c.keyCode!==g.DOWN||!e.length||r(a(e.get(0))):r(a(d.get(0)));else{var h=null;c.keyCode===g.DOWN||c.keyCode===g.RIGHT?(h=a($).find("li").first(),X&&(h=a(X).next())):(h=a($).find("li").last(),X&&(h=a(X).prev())),H(h)}break;case g.BACKSPACE:if(d=Z.prev(),0===this.value.length)return V?(v(a(V)),U.change()):d.length&&r(a(d.get(0))),!1;1===a(this).val().length?y():setTimeout(function(){J()},5);break;case g.TAB:case g.ENTER:case g.NUMPAD_ENTER:case g.COMMA:if(X)q(a(X).data("tokeninput")),U.change();else{if(a(b).data("settings").allowFreeTagging){if(a(b).data("settings").allowTabOut&&""===a(this).val())return!0;m()}else if(a(this).val(""),a(b).data("settings").allowTabOut)return!0;c.stopPropagation(),c.preventDefault()}return!1;case g.ESCAPE:return y(),!0;default:String.fromCharCode(c.which)&&setTimeout(function(){J()},5)}});h.placeholder&&T.attr("placeholder",h.placeholder);var U=a(b).hide().val("").focus(function(){M(T)}).blur(function(){return T.blur(),U}),V=null,W=0,X=null,Y=a("
                    ").addClass(a(b).data("settings").classes.tokenList).click(function(b){var c=a(b.target).closest("li");c&&c.get(0)&&a.data(c.get(0),"tokeninput")?t(c):(V&&s(a(V),f.END),M(T))}).mouseover(function(c){var d=a(c.target).closest("li");d&&V!==this&&d.addClass(a(b).data("settings").classes.highlightedToken)}).mouseout(function(c){var d=a(c.target).closest("li");d&&V!==this&&d.removeClass(a(b).data("settings").classes.highlightedToken)}).insertBefore(U),Z=a("
                  • ").addClass(a(b).data("settings").classes.inputToken).appendTo(Y).append(T),$=a("
                    ").addClass(a(b).data("settings").classes.dropdown).appendTo("body").hide(),_=a("").insertAfter(T).css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:T.css("fontSize"),fontFamily:T.css("fontFamily"),fontWeight:T.css("fontWeight"),letterSpacing:T.css("letterSpacing"),whiteSpace:"nowrap"});U.val("");var aa=a(b).data("settings").prePopulate||U.data("pre");a(b).data("settings").processPrePopulate&&a.isFunction(a(b).data("settings").onResult)&&(aa=a(b).data("settings").onResult.call(U,aa)),aa&&aa.length&&a.each(aa,function(a,b){n(b),k(),T.attr("placeholder",null)}),a(b).data("settings").disabled&&j(!0),"function"==typeof a(b).data("settings").onReady&&a(b).data("settings").onReady.call(),this.clear=function(){w(Y)},this.preload=function(a){p(a)},this.add=function(a){q(a)},this.remove=function(b){Y.children("li").each(function(){if(0===a(this).children("input").length){var c=a(this).data("tokeninput"),d=!0;for(var e in b)if(b[e]!==c[e]){d=!1;break}d&&u(a(this))}})},this.getTokens=function(){return Q},this.toggleDisabled=function(a){j(a)},l();var ba=new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]","g")},a.TokenList.Cache=function(b){var c,d,e={},f=0;c=a.extend({max_size:500},b),d=function(){e={},f=0},this.add=function(a,b){f>c.max_size&&d(),e[a]||(f+=1),e[a]=b},this.get=function(a){return e[a]}}}(jQuery); \ No newline at end of file diff --git a/src/jquery.tokeninput.js b/src/jquery.tokeninput.js index dc0fdbb2..6b8f05dc 100755 --- a/src/jquery.tokeninput.js +++ b/src/jquery.tokeninput.js @@ -152,6 +152,10 @@ this.data("tokenInputObject").clear(); return this; }, + preload: function(items) { + this.data("tokenInputObject").preload(items); + return this; + }, add: function(item) { this.data("tokenInputObject").add(item); return this; @@ -499,6 +503,10 @@ clear_tokens(token_list); }; + this.preload = function(items) { + preload_token(items); + }; + this.add = function(item) { add_token(item); }; @@ -639,17 +647,15 @@ return $this_token; } - // Add a token to the token list based on user input - function add_token (item) { - var callback = $(input).data("settings").onAdd; - + // Insert/Add token, used by preload_token and add_token + function put_token (token) { // See if the token already exists and select it if we don't want duplicates if(token_count > 0 && $(input).data("settings").preventDuplicates) { var found_existing_token = null; token_list.children().each(function () { var existing_token = $(this); var existing_data = $.data(existing_token.get(0), "tokeninput"); - if(existing_data && existing_data[settings.tokenValue] === item[settings.tokenValue]) { + if(existing_data && existing_data[settings.tokenValue] === token[settings.tokenValue]) { found_existing_token = existing_token; return false; } @@ -668,7 +674,7 @@ // Insert the new tokens if($(input).data("settings").tokenLimit == null || token_count < $(input).data("settings").tokenLimit) { - insert_token(item); + insert_token(token); // Remove the placeholder so it's not seen after you've added a token input_box.attr("placeholder", null); checkTokenLimit(); @@ -679,10 +685,33 @@ // Don't show the help dropdown, they've got the idea hide_dropdown(); + } + + // Preload tokens to the token list based on user input + function preload_token (tokens) { + var callback = $(input).data("settings").onReady; + + tokens.children("li").each(function() { + if ($(this).children("input").length === 0) { + put_token($(this)); + } + }); + + // Execute the onReady callback if defined + if($.isFunction(callback)) { + callback.call(hiddenInput); + } + } + + // Add a token to the token list based on user input + function add_token (token) { + var callback = $(input).data("settings").onAdd; + + put_token(token); // Execute the onAdd callback if defined if($.isFunction(callback)) { - callback.call(hiddenInput,item); + callback.call(hiddenInput,token); } } From e29d8eebde5a044dbb70d33fea5b067d98a551ea Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 26 May 2015 15:58:28 -0700 Subject: [PATCH 4/5] add preload method --- src/jquery.tokeninput.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/jquery.tokeninput.js b/src/jquery.tokeninput.js index 6b8f05dc..80b6debc 100755 --- a/src/jquery.tokeninput.js +++ b/src/jquery.tokeninput.js @@ -648,7 +648,7 @@ } // Insert/Add token, used by preload_token and add_token - function put_token (token) { + function add_insert_token (token) { // See if the token already exists and select it if we don't want duplicates if(token_count > 0 && $(input).data("settings").preventDuplicates) { var found_existing_token = null; @@ -693,7 +693,7 @@ tokens.children("li").each(function() { if ($(this).children("input").length === 0) { - put_token($(this)); + add_insert_token($(this)); } }); @@ -707,7 +707,7 @@ function add_token (token) { var callback = $(input).data("settings").onAdd; - put_token(token); + add_insert_token(token); // Execute the onAdd callback if defined if($.isFunction(callback)) { From b6eeaa9d1b389082e3a220014030f1ee05aee1bc Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 26 May 2015 16:36:05 -0700 Subject: [PATCH 5/5] added preload method to manually preload after initialization --- build/jquery.tokeninput.min.js | 2 +- src/jquery.tokeninput.js | 51 ++++++++++++---------------------- 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/build/jquery.tokeninput.min.js b/build/jquery.tokeninput.min.js index f0a71483..5fcb8229 100644 --- a/build/jquery.tokeninput.min.js +++ b/build/jquery.tokeninput.min.js @@ -1,2 +1,2 @@ /*! jquery.tokeninput 2015-05-26 */ -!function(a){function b(a){return String(null===a||void 0===a?"":a)}function c(a){return b(a).replace(i,function(a){return h[a]})}var d={method:"GET",queryParam:"q",searchDelay:300,minChars:1,propertyToSearch:"name",jsonContainer:null,contentType:"json",excludeCurrent:!1,excludeCurrentParameter:"x",prePopulate:null,processPrePopulate:!1,hintText:"Type in a search term",noResultsText:"No results",searchingText:"Searching...",deleteText:"×",animateDropdown:!0,placeholder:null,theme:null,zindex:999,resultsLimit:null,enableHTML:!1,resultsFormatter:function(a){var b=a[this.propertyToSearch];return"
                  • "+(this.enableHTML?b:c(b))+"
                  • "},tokenFormatter:function(a){var b=a[this.propertyToSearch];return"
                  • "+(this.enableHTML?b:c(b))+"

                  • "},tokenLimit:null,tokenDelimiter:",",preventDuplicates:!1,tokenValue:"id",allowFreeTagging:!1,allowTabOut:!1,autoSelectFirstResult:!1,onResult:null,onCachedResult:null,onAdd:null,onFreeTaggingAdd:null,onDelete:null,onClear:null,onReady:null,idPrefix:"token-input-",disabled:!1},e={tokenList:"token-input-list",token:"token-input-token",tokenReadOnly:"token-input-token-readonly",tokenDelete:"token-input-delete-token",selectedToken:"token-input-selected-token",highlightedToken:"token-input-highlighted-token",dropdown:"token-input-dropdown",dropdownItem:"token-input-dropdown-item",dropdownItem2:"token-input-dropdown-item2",selectedDropdownItem:"token-input-selected-dropdown-item",inputToken:"token-input-input-token",focused:"token-input-focused",disabled:"token-input-disabled"},f={BEFORE:0,AFTER:1,END:2},g={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,NUMPAD_ENTER:108,COMMA:188},h={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},i=/[&<>"'\/]/g,j={init:function(b,c){var e=a.extend({},d,c||{});return this.each(function(){a(this).data("settings",e),a(this).data("tokenInputObject",new a.TokenList(this,b,e))})},clear:function(){return this.data("tokenInputObject").clear(),this},preload:function(a){return this.data("tokenInputObject").preload(a),this},add:function(a){return this.data("tokenInputObject").add(a),this},remove:function(a){return this.data("tokenInputObject").remove(a),this},get:function(){return this.data("tokenInputObject").getTokens()},toggleDisabled:function(a){return this.data("tokenInputObject").toggleDisabled(a),this},setOptions:function(b){return a(this).data("settings",a.extend({},a(this).data("settings"),b||{})),this},destroy:function(){if(this.data("tokenInputObject")){this.data("tokenInputObject").clear();var a=this,b=this.parent();return b.empty(),a.show(),b.append(a),a}}};a.fn.tokenInput=function(a){return j[a]?j[a].apply(this,Array.prototype.slice.call(arguments,1)):j.init.apply(this,arguments)},a.TokenList=function(b,d,h){function i(d){return a(b).data("settings").enableHTML?d:c(d)}function j(c){"boolean"==typeof c?a(b).data("settings").disabled=c:a(b).data("settings").disabled=!a(b).data("settings").disabled,T.attr("disabled",a(b).data("settings").disabled),Y.toggleClass(a(b).data("settings").classes.disabled,a(b).data("settings").disabled),V&&s(a(V),f.END),U.attr("disabled",a(b).data("settings").disabled)}function k(){return null!==a(b).data("settings").tokenLimit&&R>=a(b).data("settings").tokenLimit?(T.hide(),void y()):void 0}function l(){if(P!==(P=T.val())){var a=Y.width()-T.offset().left-Y.offset().left;_.html(c(P)||c(h.placeholder)),T.width(Math.min(Y.width(),Math.max(a,_.width()+30)))}}function m(){var c=a.trim(T.val()),d=c.split(a(b).data("settings").tokenDelimiter);a.each(d,function(c,d){if(d){a.isFunction(a(b).data("settings").onFreeTaggingAdd)&&(d=a(b).data("settings").onFreeTaggingAdd.call(U,d));var e={};e[a(b).data("settings").tokenValue]=e[a(b).data("settings").propertyToSearch]=d,q(e)}})}function n(c){var d=a(a(b).data("settings").tokenFormatter(c)),e=c.readonly===!0;e&&d.addClass(a(b).data("settings").classes.tokenReadOnly),d.addClass(a(b).data("settings").classes.token).insertBefore(Z),e||a(""+a(b).data("settings").deleteText+"").addClass(a(b).data("settings").classes.tokenDelete).appendTo(d).click(function(){return a(b).data("settings").disabled?void 0:(v(a(this).parent()),U.change(),!1)});var f=c;return a.data(d.get(0),"tokeninput",c),Q=Q.slice(0,W).concat([f]).concat(Q.slice(W)),W++,x(Q,U),R+=1,null!==a(b).data("settings").tokenLimit&&R>=a(b).data("settings").tokenLimit&&(T.hide(),y()),d}function o(c){if(R>0&&a(b).data("settings").preventDuplicates){var d=null;if(Y.children().each(function(){var b=a(this),e=a.data(b.get(0),"tokeninput");return e&&e[h.tokenValue]===c[h.tokenValue]?(d=b,!1):void 0}),d)return r(d),Z.insertAfter(d),void M(T)}T.width(1),(null==a(b).data("settings").tokenLimit||RW&&d--,c.remove(),V=null,M(T),Q=Q.slice(0,d).concat(Q.slice(d+1)),0==Q.length&&T.attr("placeholder",h.placeholder),W>d&&W--,x(Q,U),R-=1,null!==a(b).data("settings").tokenLimit&&(T.show().val(""),M(T))}function v(c){var d=a(b).data("settings").onDelete,e=a.data(c.get(0),"tokeninput");u(c),a.isFunction(d)&&d.call(U,e)}function w(c){var d=a(b).data("settings").onClear;c.children("li").each(function(){0===a(this).children("input").length&&u(a(this))}),a.isFunction(d)&&d.call(U)}function x(c,d){var e=a.map(c,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});d.val(e.join(a(b).data("settings").tokenDelimiter))}function y(){$.hide().empty(),X=null}function z(){$.css({position:"absolute",top:Y.offset().top+Y.outerHeight(!0),left:Y.offset().left,width:Y.width(),"z-index":a(b).data("settings").zindex}).show()}function A(){a(b).data("settings").searchingText&&($.html("

                    "+i(a(b).data("settings").searchingText)+"

                    "),z())}function B(){a(b).data("settings").hintText&&($.html("

                    "+i(a(b).data("settings").hintText)+"

                    "),z())}function C(a){return a.replace(ba,"\\$&")}function D(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+C(b)+")(?![^<>]*>)(?![^&;]+;)","gi"),function(a,b){return""+i(b)+""})}function E(a,b,c){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+C(b)+")(?![^<>]*>)(?![^&;]+;)","g"),D(b,c))}function F(c){if(a(b).data("settings").excludeCurrent){var d=a(b).data("tokenInputObject").getTokens(),e=[];d.length&&(a.each(c,function(c,f){var g=!0;a.each(d,function(c,d){return f[a(b).data("settings").propertyToSearch]==d[a(b).data("settings").propertyToSearch]?(g=!1,!1):void 0}),g&&e.push(f)}),c=e)}return c}function G(c,d){if(d=F(d),d&&d.length){$.empty();var e=a("
                      ").appendTo($).mouseover(function(b){H(a(b.target).closest("li"))}).mousedown(function(b){return q(a(b.target).closest("li").data("tokeninput")),U.change(),!1}).hide();a(b).data("settings").resultsLimit&&d.length>a(b).data("settings").resultsLimit&&(d=d.slice(0,a(b).data("settings").resultsLimit)),a.each(d,function(d,f){var g=a(b).data("settings").resultsFormatter(f);g=E(g,f[a(b).data("settings").propertyToSearch],c),g=a(g).appendTo(e),d%2?g.addClass(a(b).data("settings").classes.dropdownItem):g.addClass(a(b).data("settings").classes.dropdownItem2),0===d&&a(b).data("settings").autoSelectFirstResult&&H(g),a.data(g.get(0),"tokeninput",f)}),z(),a(b).data("settings").animateDropdown?e.slideDown("fast"):e.show()}else a(b).data("settings").noResultsText&&($.html("

                      "+i(a(b).data("settings").noResultsText)+"

                      "),z())}function H(c){c&&(X&&I(a(X)),c.addClass(a(b).data("settings").classes.selectedDropdownItem),X=c.get(0))}function I(c){c.removeClass(a(b).data("settings").classes.selectedDropdownItem),X=null}function J(){var c=T.val();c&&c.length&&(V&&s(a(V),f.AFTER),c.length>=a(b).data("settings").minChars?(A(),clearTimeout(O),O=setTimeout(function(){K(c)},a(b).data("settings").searchDelay)):y())}function K(c){var d=c+L(),e=S.get(d);if(e)a.isFunction(a(b).data("settings").onCachedResult)&&(e=a(b).data("settings").onCachedResult.call(U,e)),G(c,e);else if(a(b).data("settings").url){var f=L(),g={};if(g.data={},f.indexOf("?")>-1){var i=f.split("?");g.url=i[0];var j=i[1].split("&");a.each(j,function(a,b){var c=b.split("=");g.data[c[0]]=c[1]})}else g.url=f;if(g.data[a(b).data("settings").queryParam]=c,g.type=a(b).data("settings").method,g.dataType=a(b).data("settings").contentType,a(b).data("settings").crossDomain&&(g.dataType="jsonp"),a(b).data("settings").excludeCurrent){var k=a(b).data("tokenInputObject").getTokens(),l=a.map(k,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});g.data[a(b).data("settings").excludeCurrentParameter]=l.join(a(b).data("settings").tokenDelimiter)}g.success=function(e){S.add(d,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e),a.isFunction(a(b).data("settings").onResult)&&(e=a(b).data("settings").onResult.call(U,e)),T.val()===c&&G(c,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e)},h.onSend&&h.onSend(g),a.ajax(g)}else if(a(b).data("settings").local_data){var m=a.grep(a(b).data("settings").local_data,function(d){return d[a(b).data("settings").propertyToSearch].toLowerCase().indexOf(c.toLowerCase())>-1});S.add(d,m),a.isFunction(a(b).data("settings").onResult)&&(m=a(b).data("settings").onResult.call(U,m)),G(c,m)}}function L(){var c=a(b).data("settings");return"function"==typeof c.url?c.url.call(c):c.url}function M(a){setTimeout(function(){a.focus()},50)}if("string"==typeof d||"function"==typeof d){a(b).data("settings").url=d;var N=L();void 0===a(b).data("settings").crossDomain&&"string"==typeof N&&(-1===N.indexOf("://")?a(b).data("settings").crossDomain=!1:a(b).data("settings").crossDomain=location.href.split(/\/+/g)[1]!==N.split(/\/+/g)[1])}else"object"==typeof d&&(a(b).data("settings").local_data=d);a(b).data("settings").classes?a(b).data("settings").classes=a.extend({},e,a(b).data("settings").classes):a(b).data("settings").theme?(a(b).data("settings").classes={},a.each(e,function(c,d){a(b).data("settings").classes[c]=d+"-"+a(b).data("settings").theme})):a(b).data("settings").classes=e;var O,P,Q=[],R=0,S=new a.TokenList.Cache,T=a('').css({outline:"none"}).attr("id",a(b).data("settings").idPrefix+b.id).focus(function(){return a(b).data("settings").disabled?!1:((null===a(b).data("settings").tokenLimit||a(b).data("settings").tokenLimit!==R)&&B(),void Y.addClass(a(b).data("settings").classes.focused))}).blur(function(){y(),a(b).data("settings").allowFreeTagging&&m(),a(this).val(""),Y.removeClass(a(b).data("settings").classes.focused)}).bind("keyup keydown blur update",l).keydown(function(c){var d,e;switch(c.keyCode){case g.LEFT:case g.RIGHT:case g.UP:case g.DOWN:if(0===this.value.length)d=Z.prev(),e=Z.next(),d.length&&d.get(0)===V||e.length&&e.get(0)===V?c.keyCode===g.LEFT||c.keyCode===g.UP?s(a(V),f.BEFORE):s(a(V),f.AFTER):c.keyCode!==g.LEFT&&c.keyCode!==g.UP||!d.length?c.keyCode!==g.RIGHT&&c.keyCode!==g.DOWN||!e.length||r(a(e.get(0))):r(a(d.get(0)));else{var h=null;c.keyCode===g.DOWN||c.keyCode===g.RIGHT?(h=a($).find("li").first(),X&&(h=a(X).next())):(h=a($).find("li").last(),X&&(h=a(X).prev())),H(h)}break;case g.BACKSPACE:if(d=Z.prev(),0===this.value.length)return V?(v(a(V)),U.change()):d.length&&r(a(d.get(0))),!1;1===a(this).val().length?y():setTimeout(function(){J()},5);break;case g.TAB:case g.ENTER:case g.NUMPAD_ENTER:case g.COMMA:if(X)q(a(X).data("tokeninput")),U.change();else{if(a(b).data("settings").allowFreeTagging){if(a(b).data("settings").allowTabOut&&""===a(this).val())return!0;m()}else if(a(this).val(""),a(b).data("settings").allowTabOut)return!0;c.stopPropagation(),c.preventDefault()}return!1;case g.ESCAPE:return y(),!0;default:String.fromCharCode(c.which)&&setTimeout(function(){J()},5)}});h.placeholder&&T.attr("placeholder",h.placeholder);var U=a(b).hide().val("").focus(function(){M(T)}).blur(function(){return T.blur(),U}),V=null,W=0,X=null,Y=a("
                        ").addClass(a(b).data("settings").classes.tokenList).click(function(b){var c=a(b.target).closest("li");c&&c.get(0)&&a.data(c.get(0),"tokeninput")?t(c):(V&&s(a(V),f.END),M(T))}).mouseover(function(c){var d=a(c.target).closest("li");d&&V!==this&&d.addClass(a(b).data("settings").classes.highlightedToken)}).mouseout(function(c){var d=a(c.target).closest("li");d&&V!==this&&d.removeClass(a(b).data("settings").classes.highlightedToken)}).insertBefore(U),Z=a("
                      • ").addClass(a(b).data("settings").classes.inputToken).appendTo(Y).append(T),$=a("
                        ").addClass(a(b).data("settings").classes.dropdown).appendTo("body").hide(),_=a("").insertAfter(T).css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:T.css("fontSize"),fontFamily:T.css("fontFamily"),fontWeight:T.css("fontWeight"),letterSpacing:T.css("letterSpacing"),whiteSpace:"nowrap"});U.val("");var aa=a(b).data("settings").prePopulate||U.data("pre");a(b).data("settings").processPrePopulate&&a.isFunction(a(b).data("settings").onResult)&&(aa=a(b).data("settings").onResult.call(U,aa)),aa&&aa.length&&a.each(aa,function(a,b){n(b),k(),T.attr("placeholder",null)}),a(b).data("settings").disabled&&j(!0),"function"==typeof a(b).data("settings").onReady&&a(b).data("settings").onReady.call(),this.clear=function(){w(Y)},this.preload=function(a){p(a)},this.add=function(a){q(a)},this.remove=function(b){Y.children("li").each(function(){if(0===a(this).children("input").length){var c=a(this).data("tokeninput"),d=!0;for(var e in b)if(b[e]!==c[e]){d=!1;break}d&&u(a(this))}})},this.getTokens=function(){return Q},this.toggleDisabled=function(a){j(a)},l();var ba=new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]","g")},a.TokenList.Cache=function(b){var c,d,e={},f=0;c=a.extend({max_size:500},b),d=function(){e={},f=0},this.add=function(a,b){f>c.max_size&&d(),e[a]||(f+=1),e[a]=b},this.get=function(a){return e[a]}}}(jQuery); \ No newline at end of file +!function(a){function b(a){return String(null===a||void 0===a?"":a)}function c(a){return b(a).replace(i,function(a){return h[a]})}var d={method:"GET",queryParam:"q",searchDelay:300,minChars:1,propertyToSearch:"name",jsonContainer:null,contentType:"json",excludeCurrent:!1,excludeCurrentParameter:"x",prePopulate:null,processPrePopulate:!1,hintText:"Type in a search term",noResultsText:"No results",searchingText:"Searching...",deleteText:"×",animateDropdown:!0,placeholder:null,theme:null,zindex:999,resultsLimit:null,enableHTML:!1,resultsFormatter:function(a){var b=a[this.propertyToSearch];return"
                      • "+(this.enableHTML?b:c(b))+"
                      • "},tokenFormatter:function(a){var b=a[this.propertyToSearch];return"
                      • "+(this.enableHTML?b:c(b))+"

                      • "},tokenLimit:null,tokenDelimiter:",",preventDuplicates:!1,tokenValue:"id",allowFreeTagging:!1,allowTabOut:!1,autoSelectFirstResult:!1,onResult:null,onCachedResult:null,onAdd:null,onFreeTaggingAdd:null,onDelete:null,onClear:null,onReady:null,idPrefix:"token-input-",disabled:!1},e={tokenList:"token-input-list",token:"token-input-token",tokenReadOnly:"token-input-token-readonly",tokenDelete:"token-input-delete-token",selectedToken:"token-input-selected-token",highlightedToken:"token-input-highlighted-token",dropdown:"token-input-dropdown",dropdownItem:"token-input-dropdown-item",dropdownItem2:"token-input-dropdown-item2",selectedDropdownItem:"token-input-selected-dropdown-item",inputToken:"token-input-input-token",focused:"token-input-focused",disabled:"token-input-disabled"},f={BEFORE:0,AFTER:1,END:2},g={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,NUMPAD_ENTER:108,COMMA:188},h={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},i=/[&<>"'\/]/g,j={init:function(b,c){var e=a.extend({},d,c||{});return this.each(function(){a(this).data("settings",e),a(this).data("tokenInputObject",new a.TokenList(this,b,e))})},clear:function(){return this.data("tokenInputObject").clear(),this},preload:function(a){return this.data("tokenInputObject").preload(a),this},add:function(a){return this.data("tokenInputObject").add(a),this},remove:function(a){return this.data("tokenInputObject").remove(a),this},get:function(){return this.data("tokenInputObject").getTokens()},toggleDisabled:function(a){return this.data("tokenInputObject").toggleDisabled(a),this},setOptions:function(b){return a(this).data("settings",a.extend({},a(this).data("settings"),b||{})),this},destroy:function(){if(this.data("tokenInputObject")){this.data("tokenInputObject").clear();var a=this,b=this.parent();return b.empty(),a.show(),b.append(a),a}}};a.fn.tokenInput=function(a){return j[a]?j[a].apply(this,Array.prototype.slice.call(arguments,1)):j.init.apply(this,arguments)},a.TokenList=function(b,d,h){function i(d){return a(b).data("settings").enableHTML?d:c(d)}function j(c){"boolean"==typeof c?a(b).data("settings").disabled=c:a(b).data("settings").disabled=!a(b).data("settings").disabled,R.attr("disabled",a(b).data("settings").disabled),W.toggleClass(a(b).data("settings").classes.disabled,a(b).data("settings").disabled),T&&q(a(T),f.END),S.attr("disabled",a(b).data("settings").disabled)}function k(){return null!==a(b).data("settings").tokenLimit&&P>=a(b).data("settings").tokenLimit?(R.hide(),void w()):void 0}function l(){if(N!==(N=R.val())){var a=W.width()-R.offset().left-W.offset().left;Z.html(c(N)||c(h.placeholder)),R.width(Math.min(W.width(),Math.max(a,Z.width()+30)))}}function m(){var c=a.trim(R.val()),d=c.split(a(b).data("settings").tokenDelimiter);a.each(d,function(c,d){if(d){a.isFunction(a(b).data("settings").onFreeTaggingAdd)&&(d=a(b).data("settings").onFreeTaggingAdd.call(S,d));var e={};e[a(b).data("settings").tokenValue]=e[a(b).data("settings").propertyToSearch]=d,o(e)}})}function n(c){var d=a(a(b).data("settings").tokenFormatter(c)),e=c.readonly===!0;e&&d.addClass(a(b).data("settings").classes.tokenReadOnly),d.addClass(a(b).data("settings").classes.token).insertBefore(X),e||a(""+a(b).data("settings").deleteText+"").addClass(a(b).data("settings").classes.tokenDelete).appendTo(d).click(function(){return a(b).data("settings").disabled?void 0:(t(a(this).parent()),S.change(),!1)});var f=c;return a.data(d.get(0),"tokeninput",c),O=O.slice(0,U).concat([f]).concat(O.slice(U)),U++,v(O,S),P+=1,null!==a(b).data("settings").tokenLimit&&P>=a(b).data("settings").tokenLimit&&(R.hide(),w()),d}function o(c){var d=a(b).data("settings").onAdd;if(P>0&&a(b).data("settings").preventDuplicates){var e=null;if(W.children().each(function(){var b=a(this),d=a.data(b.get(0),"tokeninput");return d&&d[h.tokenValue]===c[h.tokenValue]?(e=b,!1):void 0}),e)return p(e),X.insertAfter(e),void K(R)}R.width(1),(null==a(b).data("settings").tokenLimit||PU&&d--,c.remove(),T=null,K(R),O=O.slice(0,d).concat(O.slice(d+1)),0==O.length&&R.attr("placeholder",h.placeholder),U>d&&U--,v(O,S),P-=1,null!==a(b).data("settings").tokenLimit&&(R.show().val(""),K(R))}function t(c){var d=a(b).data("settings").onDelete,e=a.data(c.get(0),"tokeninput");s(c),a.isFunction(d)&&d.call(S,e)}function u(c){var d=a(b).data("settings").onClear;c.children("li").each(function(){0===a(this).children("input").length&&s(a(this))}),a.isFunction(d)&&d.call(S)}function v(c,d){var e=a.map(c,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});d.val(e.join(a(b).data("settings").tokenDelimiter))}function w(){Y.hide().empty(),V=null}function x(){Y.css({position:"absolute",top:W.offset().top+W.outerHeight(!0),left:W.offset().left,width:W.width(),"z-index":a(b).data("settings").zindex}).show()}function y(){a(b).data("settings").searchingText&&(Y.html("

                        "+i(a(b).data("settings").searchingText)+"

                        "),x())}function z(){a(b).data("settings").hintText&&(Y.html("

                        "+i(a(b).data("settings").hintText)+"

                        "),x())}function A(a){return a.replace(_,"\\$&")}function B(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+A(b)+")(?![^<>]*>)(?![^&;]+;)","gi"),function(a,b){return""+i(b)+""})}function C(a,b,c){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+A(b)+")(?![^<>]*>)(?![^&;]+;)","g"),B(b,c))}function D(c){if(a(b).data("settings").excludeCurrent){var d=a(b).data("tokenInputObject").getTokens(),e=[];d.length&&(a.each(c,function(c,f){var g=!0;a.each(d,function(c,d){return f[a(b).data("settings").propertyToSearch]==d[a(b).data("settings").propertyToSearch]?(g=!1,!1):void 0}),g&&e.push(f)}),c=e)}return c}function E(c,d){if(d=D(d),d&&d.length){Y.empty();var e=a("
                          ").appendTo(Y).mouseover(function(b){F(a(b.target).closest("li"))}).mousedown(function(b){return o(a(b.target).closest("li").data("tokeninput")),S.change(),!1}).hide();a(b).data("settings").resultsLimit&&d.length>a(b).data("settings").resultsLimit&&(d=d.slice(0,a(b).data("settings").resultsLimit)),a.each(d,function(d,f){var g=a(b).data("settings").resultsFormatter(f);g=C(g,f[a(b).data("settings").propertyToSearch],c),g=a(g).appendTo(e),d%2?g.addClass(a(b).data("settings").classes.dropdownItem):g.addClass(a(b).data("settings").classes.dropdownItem2),0===d&&a(b).data("settings").autoSelectFirstResult&&F(g),a.data(g.get(0),"tokeninput",f)}),x(),a(b).data("settings").animateDropdown?e.slideDown("fast"):e.show()}else a(b).data("settings").noResultsText&&(Y.html("

                          "+i(a(b).data("settings").noResultsText)+"

                          "),x())}function F(c){c&&(V&&G(a(V)),c.addClass(a(b).data("settings").classes.selectedDropdownItem),V=c.get(0))}function G(c){c.removeClass(a(b).data("settings").classes.selectedDropdownItem),V=null}function H(){var c=R.val();c&&c.length&&(T&&q(a(T),f.AFTER),c.length>=a(b).data("settings").minChars?(y(),clearTimeout(M),M=setTimeout(function(){I(c)},a(b).data("settings").searchDelay)):w())}function I(c){var d=c+J(),e=Q.get(d);if(e)a.isFunction(a(b).data("settings").onCachedResult)&&(e=a(b).data("settings").onCachedResult.call(S,e)),E(c,e);else if(a(b).data("settings").url){var f=J(),g={};if(g.data={},f.indexOf("?")>-1){var i=f.split("?");g.url=i[0];var j=i[1].split("&");a.each(j,function(a,b){var c=b.split("=");g.data[c[0]]=c[1]})}else g.url=f;if(g.data[a(b).data("settings").queryParam]=c,g.type=a(b).data("settings").method,g.dataType=a(b).data("settings").contentType,a(b).data("settings").crossDomain&&(g.dataType="jsonp"),a(b).data("settings").excludeCurrent){var k=a(b).data("tokenInputObject").getTokens(),l=a.map(k,function(c){return"function"==typeof a(b).data("settings").tokenValue?a(b).data("settings").tokenValue.call(this,c):c[a(b).data("settings").tokenValue]});g.data[a(b).data("settings").excludeCurrentParameter]=l.join(a(b).data("settings").tokenDelimiter)}g.success=function(e){Q.add(d,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e),a.isFunction(a(b).data("settings").onResult)&&(e=a(b).data("settings").onResult.call(S,e)),R.val()===c&&E(c,a(b).data("settings").jsonContainer?e[a(b).data("settings").jsonContainer]:e)},h.onSend&&h.onSend(g),a.ajax(g)}else if(a(b).data("settings").local_data){var m=a.grep(a(b).data("settings").local_data,function(d){return d[a(b).data("settings").propertyToSearch].toLowerCase().indexOf(c.toLowerCase())>-1});Q.add(d,m),a.isFunction(a(b).data("settings").onResult)&&(m=a(b).data("settings").onResult.call(S,m)),E(c,m)}}function J(){var c=a(b).data("settings");return"function"==typeof c.url?c.url.call(c):c.url}function K(a){setTimeout(function(){a.focus()},50)}if("string"==typeof d||"function"==typeof d){a(b).data("settings").url=d;var L=J();void 0===a(b).data("settings").crossDomain&&"string"==typeof L&&(-1===L.indexOf("://")?a(b).data("settings").crossDomain=!1:a(b).data("settings").crossDomain=location.href.split(/\/+/g)[1]!==L.split(/\/+/g)[1])}else"object"==typeof d&&(a(b).data("settings").local_data=d);a(b).data("settings").classes?a(b).data("settings").classes=a.extend({},e,a(b).data("settings").classes):a(b).data("settings").theme?(a(b).data("settings").classes={},a.each(e,function(c,d){a(b).data("settings").classes[c]=d+"-"+a(b).data("settings").theme})):a(b).data("settings").classes=e;var M,N,O=[],P=0,Q=new a.TokenList.Cache,R=a('').css({outline:"none"}).attr("id",a(b).data("settings").idPrefix+b.id).focus(function(){return a(b).data("settings").disabled?!1:((null===a(b).data("settings").tokenLimit||a(b).data("settings").tokenLimit!==P)&&z(),void W.addClass(a(b).data("settings").classes.focused))}).blur(function(){w(),a(b).data("settings").allowFreeTagging&&m(),a(this).val(""),W.removeClass(a(b).data("settings").classes.focused)}).bind("keyup keydown blur update",l).keydown(function(c){var d,e;switch(c.keyCode){case g.LEFT:case g.RIGHT:case g.UP:case g.DOWN:if(0===this.value.length)d=X.prev(),e=X.next(),d.length&&d.get(0)===T||e.length&&e.get(0)===T?c.keyCode===g.LEFT||c.keyCode===g.UP?q(a(T),f.BEFORE):q(a(T),f.AFTER):c.keyCode!==g.LEFT&&c.keyCode!==g.UP||!d.length?c.keyCode!==g.RIGHT&&c.keyCode!==g.DOWN||!e.length||p(a(e.get(0))):p(a(d.get(0)));else{var h=null;c.keyCode===g.DOWN||c.keyCode===g.RIGHT?(h=a(Y).find("li").first(),V&&(h=a(V).next())):(h=a(Y).find("li").last(),V&&(h=a(V).prev())),F(h)}break;case g.BACKSPACE:if(d=X.prev(),0===this.value.length)return T?(t(a(T)),S.change()):d.length&&p(a(d.get(0))),!1;1===a(this).val().length?w():setTimeout(function(){H()},5);break;case g.TAB:case g.ENTER:case g.NUMPAD_ENTER:case g.COMMA:if(V)o(a(V).data("tokeninput")),S.change();else{if(a(b).data("settings").allowFreeTagging){if(a(b).data("settings").allowTabOut&&""===a(this).val())return!0;m()}else if(a(this).val(""),a(b).data("settings").allowTabOut)return!0;c.stopPropagation(),c.preventDefault()}return!1;case g.ESCAPE:return w(),!0;default:String.fromCharCode(c.which)&&setTimeout(function(){H()},5)}});h.placeholder&&R.attr("placeholder",h.placeholder);var S=a(b).hide().val("").focus(function(){K(R)}).blur(function(){return R.blur(),S}),T=null,U=0,V=null,W=a("
                            ").addClass(a(b).data("settings").classes.tokenList).click(function(b){var c=a(b.target).closest("li");c&&c.get(0)&&a.data(c.get(0),"tokeninput")?r(c):(T&&q(a(T),f.END),K(R))}).mouseover(function(c){var d=a(c.target).closest("li");d&&T!==this&&d.addClass(a(b).data("settings").classes.highlightedToken)}).mouseout(function(c){var d=a(c.target).closest("li");d&&T!==this&&d.removeClass(a(b).data("settings").classes.highlightedToken)}).insertBefore(S),X=a("
                          • ").addClass(a(b).data("settings").classes.inputToken).appendTo(W).append(R),Y=a("
                            ").addClass(a(b).data("settings").classes.dropdown).appendTo("body").hide(),Z=a("").insertAfter(R).css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:R.css("fontSize"),fontFamily:R.css("fontFamily"),fontWeight:R.css("fontWeight"),letterSpacing:R.css("letterSpacing"),whiteSpace:"nowrap"});S.val("");var $=a(b).data("settings").prePopulate||S.data("pre");a(b).data("settings").processPrePopulate&&a.isFunction(a(b).data("settings").onResult)&&($=a(b).data("settings").onResult.call(S,$)),$&&$.length&&a.each($,function(a,b){n(b),k(),R.attr("placeholder",null)}),a(b).data("settings").disabled&&j(!0),"function"==typeof a(b).data("settings").onReady&&a(b).data("settings").onReady.call(),this.clear=function(){u(W)},this.add=function(a){o(a)},this.preload=function(b){b&&b.length&&a.each(b,function(a,b){n(b),k(),R.attr("placeholder",null)})},this.remove=function(b){W.children("li").each(function(){if(0===a(this).children("input").length){var c=a(this).data("tokeninput"),d=!0;for(var e in b)if(b[e]!==c[e]){d=!1;break}d&&s(a(this))}})},this.getTokens=function(){return O},this.toggleDisabled=function(a){j(a)},l();var _=new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]","g")},a.TokenList.Cache=function(b){var c,d,e={},f=0;c=a.extend({max_size:500},b),d=function(){e={},f=0},this.add=function(a,b){f>c.max_size&&d(),e[a]||(f+=1),e[a]=b},this.get=function(a){return e[a]}}}(jQuery); \ No newline at end of file diff --git a/src/jquery.tokeninput.js b/src/jquery.tokeninput.js index 80b6debc..15503c8e 100755 --- a/src/jquery.tokeninput.js +++ b/src/jquery.tokeninput.js @@ -503,14 +503,20 @@ clear_tokens(token_list); }; - this.preload = function(items) { - preload_token(items); - }; - this.add = function(item) { add_token(item); }; + this.preload = function(items) { + if (items && items.length) { + $.each(items, function (index, value) { + insert_token(value); + checkTokenLimit(); + input_box.attr("placeholder", null) + }); + } + }; + this.remove = function(item) { token_list.children("li").each(function() { if ($(this).children("input").length === 0) { @@ -602,7 +608,7 @@ }); } - // Inner function to a token to the list + // Inner function to add token to the list function insert_token(item) { var $this_token = $($(input).data("settings").tokenFormatter(item)); var readonly = item.readonly === true; @@ -647,15 +653,17 @@ return $this_token; } - // Insert/Add token, used by preload_token and add_token - function add_insert_token (token) { + // Add a token to the token list based on user input + function add_token (item) { + var callback = $(input).data("settings").onAdd; + // See if the token already exists and select it if we don't want duplicates if(token_count > 0 && $(input).data("settings").preventDuplicates) { var found_existing_token = null; token_list.children().each(function () { var existing_token = $(this); var existing_data = $.data(existing_token.get(0), "tokeninput"); - if(existing_data && existing_data[settings.tokenValue] === token[settings.tokenValue]) { + if(existing_data && existing_data[settings.tokenValue] === item[settings.tokenValue]) { found_existing_token = existing_token; return false; } @@ -674,7 +682,7 @@ // Insert the new tokens if($(input).data("settings").tokenLimit == null || token_count < $(input).data("settings").tokenLimit) { - insert_token(token); + insert_token(item); // Remove the placeholder so it's not seen after you've added a token input_box.attr("placeholder", null); checkTokenLimit(); @@ -685,33 +693,10 @@ // Don't show the help dropdown, they've got the idea hide_dropdown(); - } - - // Preload tokens to the token list based on user input - function preload_token (tokens) { - var callback = $(input).data("settings").onReady; - - tokens.children("li").each(function() { - if ($(this).children("input").length === 0) { - add_insert_token($(this)); - } - }); - - // Execute the onReady callback if defined - if($.isFunction(callback)) { - callback.call(hiddenInput); - } - } - - // Add a token to the token list based on user input - function add_token (token) { - var callback = $(input).data("settings").onAdd; - - add_insert_token(token); // Execute the onAdd callback if defined if($.isFunction(callback)) { - callback.call(hiddenInput,token); + callback.call(hiddenInput,item); } }