| 1 |
- (function(e){"use strict";function o(e,o,n){var t,i,l,a=null,d=0;n||(n={});var s=function(){d=n.leading===!1?0:(new Date).getTime(),a=null,l=e.apply(t,i),a||(t=i=null)};return function(){var c=(new Date).getTime();d||n.leading!==!1||(d=c);var r=o-(c-d);return t=this,i=arguments,r<=0||r>o?(clearTimeout(a),a=null,d=c,l=e.apply(t,i),a||(t=i=null)):a||n.trailing===!1||(a=setTimeout(s,r)),l}}function n(){var e=this.isLabelMode,o=this.config.searchable,n=o?'<span class="dropdown-search">'+this.config.input+"</span>":"";return e?'<div class="dropdown-display-label"><div class="dropdown-chose-list">'+n+'</div></div><div class="dropdown-main">{{ul}}</div>':'<a href="javascript:;" class="dropdown-display"><span class="dropdown-chose-list"></span><a href="javascript:;" class="dropdown-clear-all">×</a></a><div class="dropdown-main">'+n+"{{ul}}</div>"}function t(){var o=this,n=o.config,t=o.$el,i=t.find(".dropdown-maxItem-alert");clearTimeout(o.maxItemAlertTimer),0===i.length&&(i=e('<div class="dropdown-maxItem-alert">最多可选择'+n.limitCount+"个</div>")),t.append(i),o.maxItemAlertTimer=setTimeout(function(){t.find(".dropdown-maxItem-alert").remove()},1e3)}function i(e){var o=e||"";return o=o.replace(/<select[^>]*>/gi,"").replace("</select>",""),o=o.replace(/<\/optgroup>/gi,""),o=o.replace(/<optgroup[^>]*>/gi,function(e){var o=/label="(.[^"]*)"(\s|>)/.exec(e),n=/data\-group\-id="(.[^"]*)"(\s|>)/.exec(e);return'<li class="dropdown-group" data-group-id="'+(n?n[1]:"")+'">'+(o?o[1]:"")+"</li>"}),o=o.replace(/<option(.*?)<\/option>/gi,function(e){var o=/value="?([\w\u4E00-\u9FA5\uF900-\uFA2D]+)"?/.exec(e),n=/>(.*)<\//.exec(e),t=e.indexOf("selected")>-1,i=e.indexOf("disabled")>-1;return"<li "+(i?" disabled":' tabindex="0"')+' data-value="'+(o?o[1]:"")+'" class="dropdown-option '+(t?"dropdown-chose":"")+'">'+(n?n[1]:"")+"</li>"})}function l(o){var n={},t="",i=[],l=0;return!(!o||!o.length)&&(e.each(o,function(e,o){var t=o.groupId,a=o.disabled?" disabled":"",d=o.selected&&!a?" selected":"",s="<option"+a+d+' value="'+o.id+'">'+o.name+"</option>";d&&(i.push('<span class="dropdown-selected">'+o.name+'<i class="del" data-id="'+o.id+'"></i></span>'),l++),t?n[o.groupId]?n[o.groupId]+=s:n[o.groupId]=o.groupName+"&janking&"+s:n[e]=s}),e.each(n,function(e,o){var n=o.split("&janking&");if(2===n.length){var i=n[0],l=n[1];t+='<optgroup label="'+i+'" data-group-id="'+e+'">'+l+"</optgroup>"}else t+=o}),[t,i,l])}function a(o){function n(o,n){var t=e(n);this.id=t.prop("value"),this.name=t.text(),this.disabled=t.prop("disabled"),this.selected=t.prop("selected")}var t=o,i=[];return e.each(t.children(),function(o,t){var l={},a={},d=e(t);"OPTGROUP"===t.nodeName?(a.groupId=d.data("groupId"),a.groupName=d.attr("label"),e.each(d.children(),e.proxy(n,l)),e.extend(l,a)):e.each(d,e.proxy(n,l)),i.push(l)}),i}function d(o,n){this.$el=e(n),this.$select=this.$el.find("select"),this.placeholder=this.$select.attr("placeholder"),this.config=o,this.name=[],this.isSingleSelect=!this.$select.prop("multiple"),this.selectAmount=0,this.maxItemAlertTimer=null,this.isLabelMode="label"===this.config.multipleMode,this.init()}var s=function(){var e=navigator.userAgent.toLowerCase();if(e.indexOf("safari")!==-1)return!(e.indexOf("chrome")>-1)}(),c={readonly:!1,limitCount:1/0,input:'<input type="text" maxLength="20" placeholder="搜索关键词或ID">',data:[],searchable:!0,searchNoData:'<li style="color:#ddd">查无数据,换个词儿试试 /(ㄒoㄒ)/~~</li>',choice:function(){}},r={up:38,down:40,enter:13},p={click:"click.iui-dropdown",focus:"focus.iui-dropdown",keydown:"keydown.iui-dropdown",keyup:"keyup.iui-dropdown"},u={show:function(o){o.stopPropagation();var n=this;e(document).trigger("click.dropdown"),n.$el.toggleClass("active")},search:o(function(o){var n=this,t=n.config,a=n.$el,d=e(o.target),s=d.val(),c=n.config.data,r=[];o.keyCode>36&&o.keyCode<41||(e.each(c,function(e,o){(o.name.toLowerCase().indexOf(s)>-1||""+o.id==""+s)&&r.push(o)}),a.find("ul").html(i(l(r)[0])||t.searchNoData))},300),control:function(o){var n,t,i,l=o.keyCode,a=r,d=0;l!==a.down&&l!==a.up||(n=l===a.up?-1:1,i=this.$el.find("[tabindex]"),t=i.index(e(document.activeElement)),d=t===-1?n+1?-1:0:t,d+=n,d===i.length&&(d=0),i.eq(d).focus(),o.preventDefault())},multiChoose:function(o){var n=this,i=n.config,l=n.$select,a=e(o.target),d=a.attr("data-value"),s=a.hasClass("dropdown-chose"),c=[];if(s)a.removeClass("dropdown-chose"),n.selectAmount--;else{if(!(n.selectAmount<i.limitCount))return t.call(n),!1;a.addClass("dropdown-chose"),n.selectAmount++}n.name=[],e.each(i.data,function(e,o){""+o.id==""+d&&(o.selected=!s),o.selected&&(c.push(o.name),n.name.push('<span class="dropdown-selected">'+o.name+'<i class="del" data-id="'+o.id+'"></i></span>'))}),l.find('option[value="'+d+'"]').prop("selected",!s),n.$choseList.find(".dropdown-selected").remove(),n.$choseList.prepend(n.name.join("")),n.$el.find(".dropdown-display").attr("title",c.join(",")),i.choice.call(n,o)},singleChoose:function(o){var n=this,t=n.config,i=n.$el,l=n.$select,a=e(o.target),d=a.attr("data-value"),s=a.hasClass("dropdown-chose");return n.name=[],!a.hasClass("dropdown-chose")&&(i.removeClass("active").find("li").not(a).removeClass("dropdown-chose"),a.toggleClass("dropdown-chose"),e.each(t.data,function(e,o){o.selected=!1,""+o.id==""+d&&(o.selected=s?0:1,o.selected&&n.name.push('<span class="dropdown-selected">'+o.name+'<i class="del" data-id="'+o.id+'"></i></span>'))}),l.find('option[value="'+d+'"]').prop("selected",!0),n.name.push('<span class="placeholder">'+n.placeholder+"</span>"),n.$choseList.html(n.name.join("")),void t.choice.call(n,o))},del:function(o){var n=this,t=e(o.target),i=t.data("id");return e.each(n.name,function(e,o){if(o.indexOf('data-id="'+i+'"')!==-1)return n.name.splice(e,1),!1}),e.each(n.config.data,function(e,o){if(""+o.id==""+i)return o.selected=!1,!1}),n.selectAmount--,n.$el.find('[data-value="'+i+'"]').removeClass("dropdown-chose"),n.$el.find('[value="'+i+'"]').prop("selected",!1).removeAttr("selected"),t.closest(".dropdown-selected").remove(),!1},clearAll:function(o){return o.preventDefault(),this.$choseList.find(".del").each(function(o,n){e(n).trigger("click")}),this.$el.find(".dropdown-display").removeAttr("title"),!1}};d.prototype={init:function(){var e=this,o=e.config,n=e.$el;e.$select.hide(),n.addClass(e.isSingleSelect?"dropdown-single":e.isLabelMode?"dropdown-multiple-label":"dropdown-multiple"),0===o.data.length&&(o.data=a(e.$select));var t=l(o.data);e.name=t[1],e.selectAmount=t[2],e.$select.html(t[0]),e.renderSelect(),e.changeStatus(o.disabled?"disabled":!!o.readonly&&"readonly")},renderSelect:function(o,t){var l,a=this,d=a.$el,s=a.$select,c=i(s.prop("outerHTML"));o?d.find("ul")[t?"html":"append"](c):(l=n.call(a).replace("{{ul}}","<ul>"+c+"</ul>"),d.append(l).find("ul").removeAttr("style class")),t&&(a.name=[],a.$el.find(".dropdown-selected").remove(),a.$select.val("")),a.$choseList=d.find(".dropdown-chose-list"),a.isLabelMode||a.$choseList.html(e('<span class="placeholder"></span>').text(a.placeholder)),a.$choseList.prepend(a.name.join(""))},bindEvent:function(){var o=this,n=o.$el,t=s?p.click:p.focus;n.on(p.click,function(e){e.stopPropagation()}),n.on(p.click,".del",e.proxy(u.del,o)),o.isLabelMode?(n.on(p.click,".dropdown-display-label",function(){n.find("input").focus()}),n.on(p.focus,"input",e.proxy(u.show,o)),n.on(p.keydown,"input",function(e){8===e.keyCode&&""===this.value&&o.name.length&&n.find(".del").eq(-1).trigger("click")})):(n.on(t,".dropdown-display",e.proxy(u.show,o)),n.on(t,".dropdown-clear-all",e.proxy(u.clearAll,o))),n.on(p.keyup,"input",e.proxy(u.search,o)),n.on(p.keyup,function(n){var t=n.keyCode,i=r;t===i.enter&&e.proxy(o.isSingleSelect?u.singleChoose:u.multiChoose,o,n)()}),n.on(p.keydown,e.proxy(u.control,o)),n.on(p.click,"[tabindex]",e.proxy(o.isSingleSelect?u.singleChoose:u.multiChoose,o))},unbindEvent:function(){var e=this,o=e.$el,n=s?p.click:p.focus;o.off(p.click),o.off(p.click,".del"),e.isLabelMode?(o.off(p.click,".dropdown-display-label"),o.off(p.focus,"input"),o.off(p.keydown,"input")):(o.off(n,".dropdown-display"),o.off(n,".dropdown-clear-all")),o.off(p.keyup,"input"),o.off(p.keyup),o.off(p.keydown),o.off(p.click,"[tabindex]")},changeStatus:function(e){var o=this;"readonly"===e?o.unbindEvent():"disabled"===e?(o.$select.prop("disabled",!0),o.unbindEvent()):(o.$select.prop("disabled",!1),o.bindEvent())},update:function(e,o){var n=this,t=n.config,i=(n.$el,o||!1);if("[object Array]"===Object.prototype.toString.call(e)){t.data=i?e.slice(0):t.data.concat(e);var a=l(t.data);n.name=a[1],n.selectAmount=a[2],n.$select.html(a[0]),n.renderSelect(!0,i)}},destroy:function(){this.unbindEvent(),this.$el.children().not("select").remove(),this.$el.removeClass("dropdown-single dropdown-multiple-label dropdown-multiple"),this.$select.show()}},e(document).on("click.dropdown",function(){e(".dropdown-single,.dropdown-multiple,.dropdown-multiple-label").removeClass("active")}),e.fn.dropdown=function(o){return this.each(function(n,t){e(t).data("dropdown",new d(e.extend(!0,{},c,o),t))}),this}})(jQuery);
|