-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathjQuery.ddMultipleInput-1.3.2.min.js
30 lines (29 loc) · 5.94 KB
/
jQuery.ddMultipleInput-1.3.2.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* jQuery ddMultipleInput Plugin
* @version 1.3.2 (2016-10-31)
*
* @uses jQuery 1.7.2
* @uses jQuery-UI 1.10 autocomplete
* @uses jQuery-UI 1.10 sortable
*
* @param params {object_plain} — Параметры.
* @param params.source {array} — Источник данных для ввода (то, что будет в выпадающем списке).
* @param params.source[i] {object_plain|string} — Элемент, может быть задан как строка или как объект.
* @param params.source[i].label {string} — Отображаемое значение.
* @param params.source[i].value {string} — Сохраняемое значение.
* @param [params.separator=','] {string} — Разделитель между значениями.
* @param [allowDoubling=false] {boolean} — Разрешить ли выбор одинаковых значений.
* @param [max=0] {integer} — Максимальное количество выбранных значений (при == 0 — без ограничений).
*
* @copyright 2013–2016 [DivanDesign]{@link http://www.DivanDesign.biz }
*/
(function(c){c.fn.ddMultipleInput=function(d){d=c.extend({separator:",",allowDoubling:!1,max:0},d||{});if(d.source){var k=!0;"string"==c.type(d.source[0])&&(k=!1);c.each(d.source,function(a,c){var b=String(c.label),e=String(c.value);k||(b=String(c),e=String(c));d.source[a]={label:b,value:e}});return c(this).each(function(){var a=c(this),g=c.trim(a.val()),b=c('<div class="ddMultipleInput"></div>'),e=c('<input type="text" value="" />'),h={display:"inline-block",width:a.width()||"auto","padding-top":0,
"padding-right":a.css("padding-right"),"padding-bottom":a.css("padding-bottom"),"padding-left":a.css("padding-left"),"border-color":a.css("border-color"),"border-radius":a.css("border-radius"),"border-top-width":a.css("border-top-width"),"border-top-style":a.css("border-top-style"),"border-top-color":a.css("border-top-color"),"border-right-width":a.css("border-right-width"),"border-right-style":a.css("border-right-style"),"border-right-color":a.css("border-right-color"),"border-bottom-width":a.css("border-bottom-width"),
"border-bottom-style":a.css("border-bottom-style"),"border-bottom-color":a.css("border-bottom-color"),"border-left-width":a.css("border-left-width"),"border-left-style":a.css("border-left-style"),"border-left-color":a.css("border-left-color"),overflow:"hidden","background-image":a.css("background-image"),"background-repeat":a.css("background-repeat"),"background-color":a.css("background-color"),"box-shadow":a.css("box-shadow"),cursor:"text","font-family":a.css("font-family"),"font-size":a.css("font-size"),
"font-style":a.css("font-style"),"font-weight":a.css("font-weight"),"line-height":a.css("line-height"),color:a.css("color"),"text-shadow":a.css("text-shadow"),"white-space":"normal"};""==h["border-color"]&&(h["border-color"]=h["border-top-color"]);var l={display:"inline-block","margin-top":a.css("padding-top"),"margin-right":"0.5em","margin-bottom":0,"margin-left":0,"border-width":"1px","border-style":"solid","border-color":h["border-color"],"padding-top":"0","padding-right":"1em","padding-bottom":"0",
"padding-left":"0.38em","border-radius":"3px",position:"relative",cursor:"move"};a.on("ddMIaddItem",function(a,f){if(f&&c.isPlainObject(f)){e.val("").css({width:"1em"});e.before(c('<span data-value="'+f.value+'" data-label="'+f.label+'">'+f.label+"</span>").css(l).append(c('<span class="ddMultipleInput_closeIcon">\u00d7</span>').css({display:"block",width:l["padding-right"],height:"100%",position:"absolute",right:"0",top:"0",cursor:"pointer","text-align":"center"})));g.push(f.value);if(!d.allowDoubling){for(var b=
e.autocomplete("option","source"),m=0,h=b.length;m<h;m++)if(b[m].value==f.value){b.splice(m,1);break}e.autocomplete("option","source",b)}0!=d.max&&g.length==d.max&&e.hide()}});a.on("ddMIremoveItem",function(a,f){f&&""!=c.trim(f)&&b.find('span[data-value="'+f+'"]').trigger("click")});a.on("ddMIopen",function(){e.autocomplete("search","")});a.on("ddMIclose",function(){e.autocomplete("close")});b.on("click",".ddMultipleInput_closeIcon",function(){var a=c(this).parent(),f=a.attr("data-value"),b=c.inArray(f,
g);-1!=b&&(g.splice(b,1),d.allowDoubling||(b=e.autocomplete("option","source"),b.push({label:a.attr("data-label"),value:f}),e.autocomplete("option","source",b)),0!=d.max&&e.show());a.remove()});b.on("click",function(){e.trigger("focus");(0==d.max||g.length<d.max)&&a.trigger("ddMIopen")});e.on("focusin",function(a){b.addClass("focus")}).on("focusout",function(){b.removeClass("focus");a.val(g.join(d.separator))}).on("keydown",function(a){var f=c(this),d=f.val();a.keyCode===c.ui.keyCode.TAB&&f.data("ui-autocomplete").menu.active&&
a.preventDefault();a.keyCode===c.ui.keyCode.BACKSPACE&&""==d&&b.find("span:last").trigger("click");f.css({width:d.length+1+"em"})});b.css(h).insertBefore(a);b.append(c("<span> </span>").css(c.extend({},l,{width:0,"margin-right":0,padding:0,"border-left-width":0,"border-right-width":0})));e.css({width:"1em",padding:"0",border:"none","margin-top":l["margin-top"],"margin-right":"0","margin-bottom":"0","margin-left":"0",background:"transparent","box-shadow":"none",outline:"none"});a.appendTo(b).hide();
e.appendTo(b);a.data("ddMultipleInput",e);e.autocomplete({minLength:0,delay:0,source:c.extend([],d.source),select:function(c,b){a.trigger("ddMIaddItem",[b.item]);return!1}});b.sortable({placeholder:"ddMultipleInput_dropPlaceholder",start:function(a,b){c(".ddMultipleInput_dropPlaceholder").css({width:b.item.css("width"),height:b.item.css("height"),padding:b.item.css("padding"),margin:b.item.css("margin"),border:b.item.css("border")})},update:function(){var e=[];b.find("span[data-value]").each(function(){e.push(c(this).attr("data-value"))});
a.val(e.join(d.separator))}});if(""!=g)for(var h=g.split(d.separator),g=[],p=0,k=h.length;p<k;p++){for(var q=!1,n=0,r=d.source.length;n<r;n++)if(d.source[n].value==h[p]){q=d.source[n];break}!1!==q&&a.trigger("ddMIaddItem",[q])}else g=[]})}}})(jQuery);