You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1 lines
9.3 KiB

(function(e){var c={method:"GET",contentType:"json",queryParam:"q",searchDelay:300,minChars:1,propertyToSearch:"name",jsonContainer:null,hintText:"Type in a search term",noResultsText:"No results",searchingText:"Searching...",deleteText:"&times;",animateDropdown:true,tokenLimit:null,tokenDelimiter:",",preventDuplicates:false,tokenValue:"id",prePopulate:null,processPrePopulate:false,idPrefix:"token-input-",resultsFormatter:function(g){return"<li>"+g[this.propertyToSearch]+"</li>"},tokenFormatter:function(g){return"<li><p>"+g[this.propertyToSearch]+"</p></li>"},onResult:null,onAdd:null,onDelete:null,onReady:null};var f={tokenList:"token-input-list",token:"token-input-token",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"};var d={BEFORE:0,AFTER:1,END:2};var a={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};var b={init:function(g,h){var i=e.extend({},c,h||{});return this.each(function(){e(this).data("tokenInputObject",new e.TokenList(this,g,i))})},clear:function(){this.data("tokenInputObject").clear();return this},add:function(g){this.data("tokenInputObject").add(g);return this},remove:function(g){this.data("tokenInputObject").remove(g);return this},get:function(){return this.data("tokenInputObject").getTokens()}};e.fn.tokenInput=function(g){if(b[g]){return b[g].apply(this,Array.prototype.slice.call(arguments,1))}else{return b.init.apply(this,arguments)}};e.TokenList=function(i,s,Q){if(e.type(s)==="string"||e.type(s)==="function"){Q.url=s;var m=x();if(Q.crossDomain===undefined){if(m.indexOf("://")===-1){Q.crossDomain=false}else{Q.crossDomain=(location.href.split(/\/+/g)[1]!==m.split(/\/+/g)[1])}}}else{if(typeof(s)==="object"){Q.local_data=s}}if(Q.classes){Q.classes=e.extend({},f,Q.classes)}else{if(Q.theme){Q.classes={};e.each(f,function(V,W){Q.classes[V]=W+"-"+Q.theme})}else{Q.classes=f}}var E=[];var v=0;var r=new e.TokenList.Cache();var O;var L;var z=e('<input type="text" autocomplete="off">').css({outline:"none"}).attr("id",Q.idPrefix+i.id).focus(function(){if(Q.tokenLimit===null||Q.tokenLimit!==v){l()}}).blur(function(){F();e(this).val("")}).keydown(function(W){var Y;var V;switch(W.keyCode){case a.LEFT:case a.RIGHT:case a.UP:case a.DOWN:if(!e(this).val()){Y=n.prev();V=n.next();if((Y.length&&Y.get(0)===C)||(V.length&&V.get(0)===C)){if(W.keyCode===a.LEFT||W.keyCode===a.UP){I(e(C),d.BEFORE)}else{I(e(C),d.AFTER)}}else{if((W.keyCode===a.LEFT||W.keyCode===a.UP)&&Y.length){R(e(Y.get(0)))}else{if((W.keyCode===a.RIGHT||W.keyCode===a.DOWN)&&V.length){R(e(V.get(0)))}}}}else{var X=null;if(W.keyCode===a.DOWN||W.keyCode===a.RIGHT){X=e(N).next()}else{X=e(N).prev()}if(X.length){U(X)}return false}break;case a.BACKSPACE:Y=n.prev();if(!e(this).val().length){if(C){k(e(C));D.change()}else{if(Y.length){R(e(Y.get(0)))}}return false}else{if(e(this).val().length===1){F()}else{setTimeout(function(){B()},5)}}break;case a.ENTER:case a.NUMPAD_ENTER:case a.COMMA:if(N){K(e(N).data("tokeninput"));D.change();return false}else{K(null);return false}break;case a.ESCAPE:F();return true;default:if(String.fromCharCode(W.which)){setTimeout(function(){B()},5)}break}});var D=e(i).hide().val("").focus(function(){z.focus()}).blur(function(){z.blur()});var C=null;var G=0;var N=null;var p=e("<ul />").addClass(Q.classes.tokenList).click(function(W){var V=e(W.target).closest("li");if(V&&V.get(0)&&e.data(V.get(0),"tokeninput")){T(V)}else{if(C){I(e(C),d.END)}z.focus()}}).mouseover(function(W){var V=e(W.target).closest("li");if(V&&C!==this){V.addClass(Q.classes.highlightedToken)}}).mouseout(function(W){var V=e(W.target).closest("li");if(V&&C!==this){V.removeClass(Q.classes.highlightedToken)}}).insertBefore(D);var n=e("<li />").addClass(Q.classes.inputToken).appendTo(p).append(z);var S=e("<div>").addClass(Q.classes.dropdown).appendTo("body").hide();var J=e("<tester/>").insertAfter(z).css({position:"absolute",top:-9999,left:-9999,width:"auto",fontSize:z.css("fontSize"),fontFamily:z.css("fontFamily"),fontWeight:z.css("fontWeight"),letterSpacing:z.css("letterSpacing"),whiteSpace:"nowrap"});D.val("");var y=Q.prePopulate||D.data("pre");if(Q.processPrePopulate&&e.isFunction(Q.onResult)){y=Q.onResult.call(D,y)}if(y&&y.length){e.each(y,function(V,W){j(W);H()})}if(e.isFunction(Q.onReady)){Q.onReady.call()}this.clear=function(){p.children("li").each(function(){if(e(this).children("input").length===0){k(e(this))}})};this.add=function(V){K(V)};this.remove=function(V){p.children("li").each(function(){if(e(this).children("input").length===0){var Y=e(this).data("tokeninput");var W=true;for(var X in V){if(V[X]!==Y[X]){W=false;break}}if(W){k(e(this))}}})};this.getTokens=function(){return E};function H(){if(Q.tokenLimit!==null&&v>=Q.tokenLimit){z.hide();F();return}}function g(){if(L===(L=z.val())){return}var V=L.replace(/&/g,"&amp;").replace(/\s/g," ").replace(/</g,"&lt;").replace(/>/g,"&gt;");J.html(V);z.width(J.width()+30)}function P(V){return((V>=48&&V<=90)||(V>=96&&V<=111)||(V>=186&&V<=192)||(V>=219&&V<=222))}function j(V){var X=Q.tokenFormatter(V);X=e(X).addClass(Q.classes.token).insertBefore(n);e("<span>"+Q.deleteText+"</span>").addClass(Q.classes.tokenDelete).appendTo(X).click(function(){k(e(this).parent());D.change();return false});var W={id:V.id};W[Q.propertyToSearch]=V[Q.propertyToSearch];e.data(X.get(0),"tokeninput",V);E=E.slice(0,G).concat([W]).concat(E.slice(G));G++;w(E,D);v+=1;if(Q.tokenLimit!==null&&v>=Q.tokenLimit){z.hide();F()}return X}function K(V){var X=Q.onAdd;if(!V&&z.val().length>0){V={id:z.val()};V[Q.propertyToSearch]=z.val()}if(!V){return false}if(v>0&&Q.preventDuplicates){var W=null;p.children().each(function(){var Z=e(this);var Y=e.data(Z.get(0),"tokeninput");if(Y&&Y.id===V.id){W=Z;return false}});if(W){R(W);n.insertAfter(W);z.focus();return}}if(Q.tokenLimit==null||v<Q.tokenLimit){j(V);H()}z.val("");F();if(e.isFunction(X)){X.call(D,V)}}function R(V){V.addClass(Q.classes.selectedToken);C=V.get(0);z.val("");F()}function I(W,V){W.removeClass(Q.classes.selectedToken);C=null;if(V===d.BEFORE){n.insertBefore(W);G--}else{if(V===d.AFTER){n.insertAfter(W);G++}else{n.appendTo(p);G=v}}z.focus()}function T(W){var V=C;if(C){I(e(C),d.END)}if(V===W.get(0)){I(W,d.END)}else{R(W)}}function k(W){var X=e.data(W.get(0),"tokeninput");var Y=Q.onDelete;var V=W.prevAll().length;if(V>G){V--}W.remove();C=null;z.focus();E=E.slice(0,V).concat(E.slice(V+1));if(V<G){G--}w(E,D);v-=1;if(Q.tokenLimit!==null){z.show().val("").focus()}if(e.isFunction(Y)){Y.call(D,X)}}function w(X,V){var W=e.map(X,function(Y){return Y[Q.tokenValue]});V.val(W.join(Q.tokenDelimiter))}function F(){S.hide().empty();N=null}function q(){S.css({position:"absolute",top:e(p).offset().top+e(p).outerHeight(),left:e(p).offset().left,zindex:999}).show()}function o(){if(Q.searchingText){S.html("<p>"+Q.searchingText+"</p>");q()}}function l(){if(Q.hintText){S.html("<p>"+Q.hintText+"</p>");q()}}function u(W,V){return W.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+V+")(?![^<>]*>)(?![^&;]+;)","gi"),"<b>$1</b>")}function A(W,X,V){return W.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+X+")(?![^<>]*>)(?![^&;]+;)","g"),u(X,V))}function M(X,V){if(V&&V.length){S.empty();var W=e("<ul>").appendTo(S).mouseover(function(Y){U(e(Y.target).closest("li"))}).mousedown(function(Y){K(e(Y.target).closest("li").data("tokeninput"));D.change();return false}).hide();e.each(V,function(Y,Z){var aa=Q.resultsFormatter(Z);aa=A(aa,Z[Q.propertyToSearch],X);aa=e(aa).appendTo(W);if(Y%2){aa.addClass(Q.classes.dropdownItem)}else{aa.addClass(Q.classes.dropdownItem2)}if(Y===0){U(aa)}e.data(aa.get(0),"tokeninput",Z)});q();if(Q.animateDropdown){W.slideDown("fast")}else{W.show()}}else{if(Q.noResultsText){S.html("<p>"+Q.noResultsText+"</p>");q()}}}function U(V){if(V){if(N){h(e(N))}V.addClass(Q.classes.selectedDropdownItem);N=V.get(0)}}function h(V){V.removeClass(Q.classes.selectedDropdownItem);N=null}function B(){var W=z.val(),V=W.toLowerCase();if(V&&V.length){if(C){I(e(C),d.AFTER)}if(V.length>=Q.minChars){o();clearTimeout(O);O=setTimeout(function(){t(V,W)},Q.searchDelay)}else{F()}}}function t(ac,W){var X=W+x();var ad=r.get(X);if(ad){M(ac,ad)}else{if(Q.url){var V=x();var ab={};ab.data={};if(V.indexOf("?")>-1){var Z=V.split("?");ab.url=Z[0];var Y=Z[1].split("&");e.each(Y,function(ae,ag){var af=ag.split("=");ab.data[af[0]]=af[1]})}else{ab.url=V}ab.data[Q.queryParam]=ac;ab.type=Q.method;ab.dataType=Q.contentType;if(Q.crossDomain){ab.dataType="jsonp"}ab.success=function(ae){if(e.isFunction(Q.onResult)){ae=Q.onResult.call(D,ae,ac,W)}r.add(X,Q.jsonContainer?ae[Q.jsonContainer]:ae);if(z.val().toLowerCase()===ac){M(ac,Q.jsonContainer?ae[Q.jsonContainer]:ae)}};e.ajax(ab)}else{if(Q.local_data){var aa=e.grep(Q.local_data,function(ae){return ae[Q.propertyToSearch].toLowerCase().indexOf(ac.toLowerCase())>-1});if(e.isFunction(Q.onResult)){aa=Q.onResult.call(D,aa,ac,W)}r.add(X,aa);M(ac,aa)}}}}function x(){var V=Q.url;if(typeof Q.url=="function"){V=Q.url.call()}return V}};e.TokenList.Cache=function(h){var j=e.extend({max_size:500},h);var k={};var i=0;var g=function(){k={};i=0};this.add=function(m,l){if(i>j.max_size){g()}if(!k[m]){i+=1}k[m]=l};this.get=function(l){return k[l]}}}(jQuery));