diff --git a/bower.json b/bower.json index f42a2cc..8854e5e 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-selector", - "version": "1.6.0", + "version": "1.6.1", "authors": [ "Indri Muska " ], diff --git a/dist/angular-selector.css b/dist/angular-selector.css index 2476068..e76a999 100644 --- a/dist/angular-selector.css +++ b/dist/angular-selector.css @@ -1,4 +1,4 @@ -/*! angular-selector - v1.6.0 - https://github.com/indrimuska/angular-selector - (c) 2015 Indri Muska - MIT */ +/*! angular-selector - v1.6.1 - https://github.com/indrimuska/angular-selector - (c) 2015 Indri Muska - MIT */ @-webkit-keyframes selector-rotate { 0% { -webkit-transform: rotateZ(-359deg); } 100% { -webkit-transform: rotateZ(0deg); } } @-moz-keyframes selector-rotate { 0% { -moz-transform: rotateZ(-359deg); } 100% { -moz-transform: rotateZ(0deg); } } @-o-keyframes selector-rotate { 0% { -o-transform: rotateZ(-359deg); } 100% { -o-transform: rotateZ(0deg); } } diff --git a/dist/angular-selector.js b/dist/angular-selector.js index fdf2665..0ad4a53 100644 --- a/dist/angular-selector.js +++ b/dist/angular-selector.js @@ -1,4 +1,4 @@ -/*! angular-selector - v1.6.0 - https://github.com/indrimuska/angular-selector - (c) 2015 Indri Muska - MIT */ +/*! angular-selector - v1.6.1 - https://github.com/indrimuska/angular-selector - (c) 2015 Indri Muska - MIT */ (function (angular) { // Key codes @@ -308,7 +308,7 @@ marginTop = parseFloat(styles.marginTop || 0), marginBottom = parseFloat(styles.marginBottom || 0); - if (!scope.filteredOptions.length) return; + if (!scope.filteredOptions.length || !option) return; if (option.offsetTop + option.offsetHeight + marginBottom > dd.scrollTop + dd.offsetHeight) scope.$evalAsync(function () { @@ -439,10 +439,10 @@ } // show create item option if (scope.create) { - scope.showCreateOption = scope.create && scope.search && scope.filteredOptions.filter(function (option) { - return scope.getObjValue(option, scope.labelAttr).toLowerCase() == scope.search.toLowerCase(); - - }).length == 0; + scope.showCreateOption = scope.create && scope.search && + filter(scope.filteredOptions, scope.search, function (actual, expected) { + return angular.isString(actual) && (actual || '').toLowerCase() == expected.toLowerCase(); + }).length == 0; if (scope.showCreateOption && scope.filteredOptions.length == 0 && scope.highlighted != -1) scope.highlighted = -1; } }; diff --git a/dist/angular-selector.min.css b/dist/angular-selector.min.css index 19753ce..ed3363a 100644 --- a/dist/angular-selector.min.css +++ b/dist/angular-selector.min.css @@ -1,2 +1,2 @@ -/*! angular-selector - v1.6.0 - https://github.com/indrimuska/angular-selector - (c) 2015 Indri Muska - MIT */ +/*! angular-selector - v1.6.1 - https://github.com/indrimuska/angular-selector - (c) 2015 Indri Muska - MIT */ @-webkit-keyframes selector-rotate{0%{-webkit-transform:rotateZ(-359deg)}100%{-webkit-transform:rotateZ(0)}}@-moz-keyframes selector-rotate{0%{-moz-transform:rotateZ(-359deg)}100%{-moz-transform:rotateZ(0)}}@-o-keyframes selector-rotate{0%{-o-transform:rotateZ(-359deg)}100%{-o-transform:rotateZ(0)}}@keyframes selector-rotate{0%{transform:rotateZ(-359deg)}100%{transform:rotateZ(0)}}.selector,[selector]{display:none}.selector-container,.selector-input{display:block;position:relative}.selector-container,.selector-container input{font-size:1em;line-height:normal;color:#495c68;text-shadow:0 1px 0 rgba(255,255,255,.5)}.selector-input{margin:0;width:100%;padding:.8em 2.6em .7em .7em;overflow:hidden;cursor:pointer;border:1px solid #bbb;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.05),inset 0 1px 0 rgba(255,255,255,.8);box-shadow:0 1px 0 rgba(0,0,0,.05),inset 0 1px 0 rgba(255,255,255,.8);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:4px;border-radius:4px;font-weight:inherit;background-color:#f9f9f9;background-image:-webkit-linear-gradient(#fafafa,#eee);background-image:-moz-linear-gradient(#fafafa,#eee);background-image:-ms-linear-gradient(#fafafa,#eee);background-image:-o-linear-gradient(#fafafa,#eee);background-image:linear-gradient(#fafafa,#eee)}.selector-container.rtl .selector-input{padding-right:.7em;padding-left:2.6em}.selector-container .selector-values{list-style:none}.selector-container input{outline:0;background:0 0!important;border-color:transparent!important;width:2px;cursor:pointer}.selector-container.has-value input,.selector-container.open input{cursor:text}.selector-container.disabled{opacity:.6}.selector-container.remove-button.has-value .selector-input{padding-right:3.5em}.selector-container.remove-button.has-value.rtl .selector-input{padding-right:.7em;padding-left:3.5em}.selector-container.open .selector-input{background:0 0;border-bottom-color:#f0f0f0;padding-right:2.6em;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.selector-container.open.rtl .selector-input{padding-right:.7em;padding-left:2.6em}.selector-container.open.empty .selector-input{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-bottom-color:#bbb}.selector-container.multiple.rtl .selector-values,.selector-container.multiple.rtl input{float:right}.selector-container .selector-values,.selector-container .selector-values>li,.selector-container .selector-values>li>div,.selector-container input{padding:0;margin:0;border:0;display:inline}.selector-container.multiple .selector-input{padding:.5em .55em .2em!important;cursor:text;background:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.selector-container.multiple.has-value .selector-input{padding-left:.35em!important;padding-right:.35em!important}.selector-container.multiple .selector-values{float:none}.selector-container.multiple .selector-values>li,.selector-container.multiple input{padding:.2em .6em;margin:0 .15em .25em;border-width:1px;border-style:solid;float:left;line-height:normal}.selector-container.multiple .selector-values>li{display:inline-block;position:relative;border-color:#0987d6;color:#fff;text-shadow:0 1px 1px rgba(0,0,0,.2);font-weight:300;-webkit-border-radius:3px;border-radius:3px;box-shadow:inset 0 1px 1px rgba(255,255,255,.5),0 1px 1px rgba(0,0,0,.2);background-color:#2dadef}.selector-container.multiple.remove-button .selector-values>li{padding-right:1.9em}.selector-container.multiple.rtl .selector-values>li,.selector-container.multiple.rtl input{float:right}.selector-container.multiple.rtl.remove-button .selector-values>li{padding-right:.6em;padding-left:1.9em}.selector-helper{position:absolute;display:block;width:2.6em;top:0;right:0;bottom:0}.selector-container.rtl .selector-helper{right:inherit;left:0}.selector-helper .selector-icon{display:block;position:relative;height:100%}.selector-helper .selector-icon:after{content:'';display:block;position:absolute;top:50%;left:50%;margin-top:-.1em;margin-left:-.4em;width:0;height:0;border:.4em solid #888;border-left-color:transparent;border-right-color:transparent;border-bottom:none}.selector-container.has-value.remove-button .selector-helper{border-left:1px solid #bbb}.selector-container.has-value.remove-button.rtl .selector-helper{border-left:none;border-right:1px solid #bbb}.selector-container.has-value.remove-button .selector-icon{display:table;width:100%}.selector-container.has-value.remove-button .selector-icon:after{content:'\00d7';display:table-cell;position:relative;top:0;left:0;margin:0;border:none;height:100%;text-align:center;vertical-align:middle}.selector-container.loading .selector-helper.selector-global-helper{width:1.3em;height:1.3em;margin:.65em .7em}.selector-container.loading .selector-global-helper .selector-icon{display:table;width:100%}.selector-container.loading .selector-global-helper .selector-icon:after{content:'';width:100%;height:100%;margin:0;top:0;left:0;opacity:.5;border-top:1px solid #545a6a;border-bottom:1px solid #d4d4db;border-left:1px solid #545a6a;border-right:1px solid #d4d4db;-webkit-animation:selector-rotate .5s linear infinite;-moz-animation:selector-rotate .5s linear infinite;-o-animation:selector-rotate .5s linear infinite;animation:selector-rotate .5s linear infinite;-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%}.selector-container.loading .selector-global-helper,.selector-container.open .selector-global-helper{border-left:none!important;border-right:none!important}.selector-container.multiple .selector-helper{display:none}.selector-container.multiple.remove-button .selector-helper{display:block;width:1.3em;border-left:1px solid #0987d6;cursor:pointer}.selector-container.multiple.remove-button .selector-helper:hover{background:rgba(0,0,0,.1)}.selector-container.multiple.remove-button.rtl .selector-helper{border-left:none;border-right:1px solid #0987d6}.selector-container.multiple.loading .selector-input{padding-right:3em!important}.selector-container.multiple.loading .selector-global-helper{margin:.75em .8em;border-left:none;border-right:none}.selector-container.multiple.loading.rtl .selector-input{padding-right:.55em!important;padding-left:3em!important}.selector-container.multiple.loading.rtl.has-value .selector-input{padding-right:.25em!important}.selector-input input,.selector-shadow{padding-left:0!important;padding-right:0!important;border-left:0!important;border-right:0!important;max-width:100%!important}.selector-shadow{position:absolute;top:0;left:0;opacity:0;visibility:hidden;white-space:pre;margin:0}.selector-dropdown{display:none;list-style:none;padding:0!important;margin:0!important;position:absolute;background:#fff;border:1px solid #ccc;border-top:0;max-height:15.5em;overflow-x:hidden;overflow-y:auto;z-index:1000;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selector-dropdown>li{padding:.65em .8em;overflow:hidden;cursor:pointer}.selector-dropdown>.selector-optgroup{background:#fefefe;border-top:1px solid #f0f0f0;border-bottom:1px solid #f0f0f0}.selector-dropdown>.selector-option.grouped{padding-left:1.6em}.selector-dropdown>.selector-option.active{background:#f5fafd}.selector-dropdown>.selector-option.create{color:rgba(73,92,104,.6)}.selector-dropdown>.selector-option.create.active{color:#495c68}.selector-container.open .selector-dropdown{display:block} \ No newline at end of file diff --git a/dist/angular-selector.min.js b/dist/angular-selector.min.js index d338b46..29793ba 100644 --- a/dist/angular-selector.min.js +++ b/dist/angular-selector.min.js @@ -1,2 +1,2 @@ -/*! angular-selector - v1.6.0 - https://github.com/indrimuska/angular-selector - (c) 2015 Indri Muska - MIT */ -!function(a){var b,c,d,e,f,g={up:38,down:40,left:37,right:39,escape:27,enter:13,backspace:8,delete:46,shift:16,leftCmd:91,rightCmd:93,ctrl:17,alt:18,tab:9},h=function(){function h(a){return a instanceof HTMLElement?a.ownerDocument&&a.ownerDocument.defaultView.opener?a.ownerDocument.defaultView.getComputedStyle(a):window.getComputedStyle(a):{}}function i(a,g,h,i,j){this.restrict="EAC",this.replace=!0,this.transclude=!0,this.scope={name:"@?",value:"=model",disabled:"=?disable",disableSearch:"=?",required:"=?require",multiple:"=?multi",placeholder:"@?",valueAttr:"@",labelAttr:"@?",groupAttr:"@?",options:"=?",debounce:"=?",create:"&?",limit:"=?",rtl:"=?",api:"=?",change:"&?",remote:"&?",remoteParam:"@?",remoteValidation:"&?",remoteValidationParam:"@?",removeButton:"=?",softDelete:"=?",closeAfterSelection:"=?",viewItemTemplate:"=?",dropdownItemTemplate:"=?",dropdownCreateTemplate:"=?",dropdownGroupTemplate:"=?"},this.templateUrl="selector/selector.html",b=a,c=g,d=h,e=i,f=j}return i.prototype.$inject=["$filter","$timeout","$window","$http","$q"],i.prototype.link=function(i,j,k,l,m){m(i,function(i,l){var m=b("filter"),n=a.element(j[0].querySelector(".selector-input input")),o=a.element(j[0].querySelector(".selector-dropdown")),p=n.controller("ngModel"),q=j.find("select").controller("ngModel"),r=f.defer(),s={api:{},search:"",disableSearch:!1,selectedValues:[],highlighted:0,valueAttr:null,labelAttr:"label",groupAttr:"group",options:[],debounce:0,limit:1/0,remoteParam:"q",remoteValidationParam:"value",removeButton:!0,showCreateOption:!1,viewItemTemplate:"selector/item-default.html",dropdownItemTemplate:"selector/item-default.html",dropdownCreateTemplate:"selector/item-create.html",dropdownGroupTemplate:"selector/group-default.html"};!a.isDefined(l.value)&&l.multiple&&(l.value=[]),a.forEach(s,function(b,c){a.isDefined(l[c])||(l[c]=b)}),a.forEach(["name","valueAttr","labelAttr"],function(a){k[a]||(k[a]=l[a])}),l.getObjValue=function(b,c){var d;if(!a.isDefined(b)||!a.isDefined(c))return b;if(c=a.isArray(c)?c:c.split("."),d=c.shift(),d.indexOf("[")>0){var e=d.match(/(\w+)\[(\d+)\]/);null!==e&&(b=b[e[1]],d=e[2])}return 0===c.length?b[d]:l.getObjValue(b[d],c)},l.setObjValue=function(b,c,d){var e;if(a.isDefined(b)||(b={}),c=a.isArray(c)?c:c.split("."),e=c.shift(),e.indexOf("[")>0){var f=e.match(/(\w+)\[(\d+)\]/);null!==f&&(b=b[f[1]],e=f[2])}return b[e]=0===c.length?d:l.setObjValue(b[e],c,d),b},l.optionValue=function(a){return null==l.valueAttr?a:l.getObjValue(a,l.valueAttr)},l.optionEquals=function(b,c){return a.equals(l.optionValue(b),a.isDefined(c)?c:l.value)},l.setValue=function(a){l.multiple?l.value=null==l.valueAttr?a||[]:(a||[]).map(function(a){return l.getObjValue(a,l.valueAttr)}):l.value=null==l.valueAttr?a:l.getObjValue(a||{},l.valueAttr)},l.hasValue=function(){return l.multiple?(l.value||[]).length>0:!!l.value},l.request=function(b,c,d,g){var h,i={};if(l.disabled)return f.reject();if(!a.isDefined(d))throw"Remote attribute is not defined";if(l.loading=!0,l.options=[],i[b]=c,h=d(i),"function"!=typeof h.then){var j={method:"GET",cache:!0,params:{}};a.extend(j,h),a.extend(j.params,h.params),j.params[g]=c,h=e(j)}return h.then(function(a){l.options=a.data||a,l.filterOptions(),l.loading=!1,r.resolve()},function(a){throw l.loading=!1,r.reject(),"Error while fetching data: "+(a.message||a)}),h},l.fetch=function(){return l.request("search",l.search||"",l.remote,l.remoteParam)},l.fetchValidation=function(a){return l.request("value",a,l.remoteValidation,l.remoteValidationParam)},a.isDefined(l.remote)?a.isDefined(l.remoteValidation)||(l.remoteValidation=!1):(l.remote=!1,l.remoteValidation=!1,r.resolve()),l.remote&&l.$evalAsync(function(){f.when(l.hasValue()&&l.remoteValidation?l.fetchValidation(l.value):a.noop).then(function(){l.$watch("search",function(){l.$evalAsync(l.fetch)})})}),l.optionToObject=function(b,c){var d={},e=a.element(b);a.forEach(b.dataset,function(a,b){b.match(/^\$/)||(d[b]=a)}),b.value&&l.setObjValue(d,l.valueAttr||"value",b.value),e.text()&&l.setObjValue(d,l.labelAttr,e.text().trim()),a.isDefined(c)&&l.setObjValue(d,l.groupAttr,c),l.options.push(d),!e.attr("selected")||!l.multiple&&l.hasValue()||(l.multiple?(l.value||(l.value=[]),l.value.push(l.optionValue(d))):l.value||(l.value=l.optionValue(d)))},l.fillWithHtml=function(){l.options=[],a.forEach(i,function(b){var c=(b.tagName||"").toLowerCase();"option"==c&&l.optionToObject(b),"optgroup"==c&&a.forEach(b.querySelectorAll("option"),function(a){l.optionToObject(a,(b.attributes.label||{}).value)})}),l.updateSelected()},l.initialize=function(){l.remote||a.isArray(l.options)&&l.options.length||l.fillWithHtml(),l.hasValue()&&(l.multiple?a.isArray(l.value)||(l.value=[l.value]):a.isArray(l.value)&&(l.value=l.value[0]),l.updateSelected(),l.filterOptions(),l.updateValue())},l.$watch("multiple",function(){c(l.setInputWidth),r.promise.then(l.initialize,l.initialize)}),l.dropdownPosition=function(){var a=n.parent()[0],b=h(a),c=parseFloat(b.marginTop||0),d=parseFloat(b.marginLeft||0);o.css({top:a.offsetTop+a.offsetHeight+c+"px",left:a.offsetLeft+d+"px",width:a.offsetWidth+"px"})},l.open=function(){l.multiple&&(l.selectedValues||[]).length>=l.limit||(l.isOpen=!0,l.dropdownPosition(),l.$evalAsync(l.scrollToHighlighted))},l.close=function(){l.isOpen=!1,l.resetInput(),l.remote&&c(l.fetch)},l.decrementHighlighted=function(){l.highlight(l.highlighted-1),l.scrollToHighlighted()},l.incrementHighlighted=function(){l.highlight(l.highlighted+1),l.scrollToHighlighted()},l.highlight=function(a){var b=l.filteredOptions.length;b&&(l.highlighted=(b+a)%b),l.showCreateOption&&(a!=-1&&a!=b||(l.highlighted=-1),a==-2&&(l.highlighted=b-1))},l.scrollToHighlighted=function(){var a=o[0],b=l.highlighted+(l.showCreateOption?1:0),c=a.querySelectorAll("li.selector-option")[b],d=h(c),e=parseFloat(d.marginTop||0),f=parseFloat(d.marginBottom||0);l.filteredOptions.length&&(c.offsetTop+c.offsetHeight+f>a.scrollTop+a.offsetHeight&&l.$evalAsync(function(){a.scrollTop=c.offsetTop+c.offsetHeight+f-a.offsetHeight}),c.offsetTop-e=l.limit||(a.isDefined(b)||(b=l.filteredOptions[l.highlighted]),l.multiple?(l.selectedValues||(l.selectedValues=[]),l.selectedValues.indexOf(b)<0&&l.selectedValues.push(b)):l.selectedValues=[b],(!l.multiple||l.closeAfterSelection||(l.selectedValues||[]).length>=l.limit)&&l.close(),l.resetInput(),q.$setDirty())},l.unset=function(b){l.multiple?l.selectedValues.splice(a.isDefined(b)?b:l.selectedValues.length-1,1):l.selectedValues=[],l.resetInput(),q.$setDirty()},l.keydown=function(a){switch(a.keyCode){case g.up:l.isOpen?l.decrementHighlighted():l.open(),a.preventDefault();break;case g.down:l.isOpen?l.incrementHighlighted():l.open(),a.preventDefault();break;case g.escape:l.highlight(0),l.close();break;case g.enter:l.isOpen&&(k.create&&l.search&&l.highlighted==-1?l.createOption(a.target.value):l.filteredOptions.length&&l.set(),a.preventDefault());break;case g.backspace:if(!n.val()){var b=l.getObjValue(l.selectedValues.slice(-1)[0]||{},l.labelAttr||"");l.unset(),l.open(),l.softDelete&&!l.disableSearch&&l.$evalAsync(function(){l.search=b}),a.preventDefault()}break;case g.left:case g.right:case g.shift:case g.ctrl:case g.alt:case g.tab:case g.leftCmd:case g.rightCmd:break;default:!l.multiple&&l.hasValue()?a.preventDefault():(l.open(),l.highlight(0))}},l.inOptions=function(b,c){return l.remote?b.filter(function(b){return a.equals(c,b)}).length>0:b.indexOf(c)>=0},l.filterOptions=function(){if(l.filteredOptions=m(l.options||[],l.search),a.isArray(l.selectedValues)||(l.selectedValues=[]),l.multiple)l.filteredOptions=l.filteredOptions.filter(function(a){return!l.inOptions(l.selectedValues,a)});else{var b=l.filteredOptions.indexOf(l.selectedValues[0]);b>=0&&l.highlight(b)}l.create&&(l.showCreateOption=l.create&&l.search&&0==l.filteredOptions.filter(function(a){return l.getObjValue(a,l.labelAttr).toLowerCase()==l.search.toLowerCase()}).length,l.showCreateOption&&0==l.filteredOptions.length&&l.highlighted!=-1&&(l.highlighted=-1))},l.measureWidth=function(){var b,c=h(n[0]),d=a.element('');return d.text(n.val()||(l.hasValue()?"":l.placeholder)||""),a.element(document.body).append(d),a.forEach(["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","textTransform","wordSpacing","textIndent"],function(a){d.css(a,c[a])}),b=d[0].offsetWidth,d.remove(),b},l.setInputWidth=function(){var a=l.measureWidth()+1;n.css("width",a+"px")},l.resetInput=function(){n.val(""),l.setInputWidth(),l.$evalAsync(function(){l.search=""})},l.$watch("[search, options, value]",function(){l.filterOptions(),c(function(){l.setInputWidth(),l.isOpen&&l.dropdownPosition()})},!0),l.updateValue=function(b){a.isDefined(b)||(b=l.selectedValues||[]),l.setValue(l.multiple?b:b[0])},l.$watch("selectedValues",function(b,c){a.equals(b,c)||(l.updateValue(),a.isFunction(l.change)&&l.change(l.multiple?{newValue:b,oldValue:c}:{newValue:(b||[])[0],oldValue:(c||[])[0]}))},!0),l.$watchCollection("options",function(b,c){a.equals(b,c)||l.remote||l.updateSelected()}),l.updateSelected=function(){l.multiple?l.selectedValues=(l.value||[]).map(function(a){return m(l.options,function(b){return l.optionEquals(b,a)})[0]}).filter(function(b){return a.isDefined(b)}).slice(0,l.limit):l.selectedValues=(l.options||[]).filter(function(a){return l.optionEquals(a)}).slice(0,1)},l.$watch("value",function(b,c){a.equals(b,c)||f.when(l.remote&&l.remoteValidation&&l.hasValue()?l.fetchValidation(b):a.noop).then(function(){l.updateSelected(),l.filterOptions(),l.updateValue()})},!0),a.element(j[0].querySelector(".selector-input")).on("click",function(){n[0].focus()}),n=a.element(j[0].querySelector(".selector-input input")).on("focus",function(){c(function(){l.$apply(l.open)})}).on("keydown",function(a){l.$apply(function(){l.keydown(a)})}).on("input",function(){l.setInputWidth()}),o.on("mousedown",function(a){a.preventDefault()}),a.element(d).on("resize",function(){l.dropdownPosition()}).on("click",function(b){a.equals(j,b.target)||l.isOpen&&(l.$evalAsync(l.close),b.preventDefault())}),l.$watch(function(){return p.$pristine},function(a){q[a?"$setPristine":"$setDirty"]()}),l.$watch(function(){return p.$touched},function(a){q[a?"$setTouched":"$setUntouched"]()}),a.forEach(["open","close","fetch"],function(a){l.api[a]=l[a]}),l.api.focus=function(){n[0].focus()},l.api.set=function(a){return l.value=a},l.api.unset=function(b){var c=b?(l.selectedValues||[]).filter(function(a){return l.optionEquals(a,b)}):l.selectedValues,d=l.selectedValues.map(function(a,b){return l.inOptions(c,a)?b:-1}).filter(function(a){return a>=0});a.forEach(d,function(a,b){l.unset(a-b)})}})},i}();a.module("selector",[]).run(["$templateCache",function(a){a.put("selector/selector.html",'
'),a.put("selector/item-create.html",'Add '),a.put("selector/item-default.html",''),a.put("selector/group-default.html",'')}]).directive("selector",["$filter","$timeout","$window","$http","$q",function(a,b,c,d,e){return new h(a,b,c,d,e)}])}(window.angular); \ No newline at end of file +/*! angular-selector - v1.6.1 - https://github.com/indrimuska/angular-selector - (c) 2015 Indri Muska - MIT */ +!function(a){var b,c,d,e,f,g={up:38,down:40,left:37,right:39,escape:27,enter:13,backspace:8,delete:46,shift:16,leftCmd:91,rightCmd:93,ctrl:17,alt:18,tab:9},h=function(){function h(a){return a instanceof HTMLElement?a.ownerDocument&&a.ownerDocument.defaultView.opener?a.ownerDocument.defaultView.getComputedStyle(a):window.getComputedStyle(a):{}}function i(a,g,h,i,j){this.restrict="EAC",this.replace=!0,this.transclude=!0,this.scope={name:"@?",value:"=model",disabled:"=?disable",disableSearch:"=?",required:"=?require",multiple:"=?multi",placeholder:"@?",valueAttr:"@",labelAttr:"@?",groupAttr:"@?",options:"=?",debounce:"=?",create:"&?",limit:"=?",rtl:"=?",api:"=?",change:"&?",remote:"&?",remoteParam:"@?",remoteValidation:"&?",remoteValidationParam:"@?",removeButton:"=?",softDelete:"=?",closeAfterSelection:"=?",viewItemTemplate:"=?",dropdownItemTemplate:"=?",dropdownCreateTemplate:"=?",dropdownGroupTemplate:"=?"},this.templateUrl="selector/selector.html",b=a,c=g,d=h,e=i,f=j}return i.prototype.$inject=["$filter","$timeout","$window","$http","$q"],i.prototype.link=function(i,j,k,l,m){m(i,function(i,l){var m=b("filter"),n=a.element(j[0].querySelector(".selector-input input")),o=a.element(j[0].querySelector(".selector-dropdown")),p=n.controller("ngModel"),q=j.find("select").controller("ngModel"),r=f.defer(),s={api:{},search:"",disableSearch:!1,selectedValues:[],highlighted:0,valueAttr:null,labelAttr:"label",groupAttr:"group",options:[],debounce:0,limit:1/0,remoteParam:"q",remoteValidationParam:"value",removeButton:!0,showCreateOption:!1,viewItemTemplate:"selector/item-default.html",dropdownItemTemplate:"selector/item-default.html",dropdownCreateTemplate:"selector/item-create.html",dropdownGroupTemplate:"selector/group-default.html"};!a.isDefined(l.value)&&l.multiple&&(l.value=[]),a.forEach(s,function(b,c){a.isDefined(l[c])||(l[c]=b)}),a.forEach(["name","valueAttr","labelAttr"],function(a){k[a]||(k[a]=l[a])}),l.getObjValue=function(b,c){var d;if(!a.isDefined(b)||!a.isDefined(c))return b;if(c=a.isArray(c)?c:c.split("."),d=c.shift(),d.indexOf("[")>0){var e=d.match(/(\w+)\[(\d+)\]/);null!==e&&(b=b[e[1]],d=e[2])}return 0===c.length?b[d]:l.getObjValue(b[d],c)},l.setObjValue=function(b,c,d){var e;if(a.isDefined(b)||(b={}),c=a.isArray(c)?c:c.split("."),e=c.shift(),e.indexOf("[")>0){var f=e.match(/(\w+)\[(\d+)\]/);null!==f&&(b=b[f[1]],e=f[2])}return b[e]=0===c.length?d:l.setObjValue(b[e],c,d),b},l.optionValue=function(a){return null==l.valueAttr?a:l.getObjValue(a,l.valueAttr)},l.optionEquals=function(b,c){return a.equals(l.optionValue(b),a.isDefined(c)?c:l.value)},l.setValue=function(a){l.multiple?l.value=null==l.valueAttr?a||[]:(a||[]).map(function(a){return l.getObjValue(a,l.valueAttr)}):l.value=null==l.valueAttr?a:l.getObjValue(a||{},l.valueAttr)},l.hasValue=function(){return l.multiple?(l.value||[]).length>0:!!l.value},l.request=function(b,c,d,g){var h,i={};if(l.disabled)return f.reject();if(!a.isDefined(d))throw"Remote attribute is not defined";if(l.loading=!0,l.options=[],i[b]=c,h=d(i),"function"!=typeof h.then){var j={method:"GET",cache:!0,params:{}};a.extend(j,h),a.extend(j.params,h.params),j.params[g]=c,h=e(j)}return h.then(function(a){l.options=a.data||a,l.filterOptions(),l.loading=!1,r.resolve()},function(a){throw l.loading=!1,r.reject(),"Error while fetching data: "+(a.message||a)}),h},l.fetch=function(){return l.request("search",l.search||"",l.remote,l.remoteParam)},l.fetchValidation=function(a){return l.request("value",a,l.remoteValidation,l.remoteValidationParam)},a.isDefined(l.remote)?a.isDefined(l.remoteValidation)||(l.remoteValidation=!1):(l.remote=!1,l.remoteValidation=!1,r.resolve()),l.remote&&l.$evalAsync(function(){f.when(l.hasValue()&&l.remoteValidation?l.fetchValidation(l.value):a.noop).then(function(){l.$watch("search",function(){l.$evalAsync(l.fetch)})})}),l.optionToObject=function(b,c){var d={},e=a.element(b);a.forEach(b.dataset,function(a,b){b.match(/^\$/)||(d[b]=a)}),b.value&&l.setObjValue(d,l.valueAttr||"value",b.value),e.text()&&l.setObjValue(d,l.labelAttr,e.text().trim()),a.isDefined(c)&&l.setObjValue(d,l.groupAttr,c),l.options.push(d),!e.attr("selected")||!l.multiple&&l.hasValue()||(l.multiple?(l.value||(l.value=[]),l.value.push(l.optionValue(d))):l.value||(l.value=l.optionValue(d)))},l.fillWithHtml=function(){l.options=[],a.forEach(i,function(b){var c=(b.tagName||"").toLowerCase();"option"==c&&l.optionToObject(b),"optgroup"==c&&a.forEach(b.querySelectorAll("option"),function(a){l.optionToObject(a,(b.attributes.label||{}).value)})}),l.updateSelected()},l.initialize=function(){l.remote||a.isArray(l.options)&&l.options.length||l.fillWithHtml(),l.hasValue()&&(l.multiple?a.isArray(l.value)||(l.value=[l.value]):a.isArray(l.value)&&(l.value=l.value[0]),l.updateSelected(),l.filterOptions(),l.updateValue())},l.$watch("multiple",function(){c(l.setInputWidth),r.promise.then(l.initialize,l.initialize)}),l.dropdownPosition=function(){var a=n.parent()[0],b=h(a),c=parseFloat(b.marginTop||0),d=parseFloat(b.marginLeft||0);o.css({top:a.offsetTop+a.offsetHeight+c+"px",left:a.offsetLeft+d+"px",width:a.offsetWidth+"px"})},l.open=function(){l.multiple&&(l.selectedValues||[]).length>=l.limit||(l.isOpen=!0,l.dropdownPosition(),l.$evalAsync(l.scrollToHighlighted))},l.close=function(){l.isOpen=!1,l.resetInput(),l.remote&&c(l.fetch)},l.decrementHighlighted=function(){l.highlight(l.highlighted-1),l.scrollToHighlighted()},l.incrementHighlighted=function(){l.highlight(l.highlighted+1),l.scrollToHighlighted()},l.highlight=function(a){var b=l.filteredOptions.length;b&&(l.highlighted=(b+a)%b),l.showCreateOption&&(a!=-1&&a!=b||(l.highlighted=-1),a==-2&&(l.highlighted=b-1))},l.scrollToHighlighted=function(){var a=o[0],b=l.highlighted+(l.showCreateOption?1:0),c=a.querySelectorAll("li.selector-option")[b],d=h(c),e=parseFloat(d.marginTop||0),f=parseFloat(d.marginBottom||0);l.filteredOptions.length&&c&&(c.offsetTop+c.offsetHeight+f>a.scrollTop+a.offsetHeight&&l.$evalAsync(function(){a.scrollTop=c.offsetTop+c.offsetHeight+f-a.offsetHeight}),c.offsetTop-e=l.limit||(a.isDefined(b)||(b=l.filteredOptions[l.highlighted]),l.multiple?(l.selectedValues||(l.selectedValues=[]),l.selectedValues.indexOf(b)<0&&l.selectedValues.push(b)):l.selectedValues=[b],(!l.multiple||l.closeAfterSelection||(l.selectedValues||[]).length>=l.limit)&&l.close(),l.resetInput(),q.$setDirty())},l.unset=function(b){l.multiple?l.selectedValues.splice(a.isDefined(b)?b:l.selectedValues.length-1,1):l.selectedValues=[],l.resetInput(),q.$setDirty()},l.keydown=function(a){switch(a.keyCode){case g.up:l.isOpen?l.decrementHighlighted():l.open(),a.preventDefault();break;case g.down:l.isOpen?l.incrementHighlighted():l.open(),a.preventDefault();break;case g.escape:l.highlight(0),l.close();break;case g.enter:l.isOpen&&(k.create&&l.search&&l.highlighted==-1?l.createOption(a.target.value):l.filteredOptions.length&&l.set(),a.preventDefault());break;case g.backspace:if(!n.val()){var b=l.getObjValue(l.selectedValues.slice(-1)[0]||{},l.labelAttr||"");l.unset(),l.open(),l.softDelete&&!l.disableSearch&&l.$evalAsync(function(){l.search=b}),a.preventDefault()}break;case g.left:case g.right:case g.shift:case g.ctrl:case g.alt:case g.tab:case g.leftCmd:case g.rightCmd:break;default:!l.multiple&&l.hasValue()?a.preventDefault():(l.open(),l.highlight(0))}},l.inOptions=function(b,c){return l.remote?b.filter(function(b){return a.equals(c,b)}).length>0:b.indexOf(c)>=0},l.filterOptions=function(){if(l.filteredOptions=m(l.options||[],l.search),a.isArray(l.selectedValues)||(l.selectedValues=[]),l.multiple)l.filteredOptions=l.filteredOptions.filter(function(a){return!l.inOptions(l.selectedValues,a)});else{var b=l.filteredOptions.indexOf(l.selectedValues[0]);b>=0&&l.highlight(b)}l.create&&(l.showCreateOption=l.create&&l.search&&0==m(l.filteredOptions,l.search,function(b,c){return a.isString(b)&&(b||"").toLowerCase()==c.toLowerCase()}).length,l.showCreateOption&&0==l.filteredOptions.length&&l.highlighted!=-1&&(l.highlighted=-1))},l.measureWidth=function(){var b,c=h(n[0]),d=a.element('');return d.text(n.val()||(l.hasValue()?"":l.placeholder)||""),a.element(document.body).append(d),a.forEach(["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","textTransform","wordSpacing","textIndent"],function(a){d.css(a,c[a])}),b=d[0].offsetWidth,d.remove(),b},l.setInputWidth=function(){var a=l.measureWidth()+1;n.css("width",a+"px")},l.resetInput=function(){n.val(""),l.setInputWidth(),l.$evalAsync(function(){l.search=""})},l.$watch("[search, options, value]",function(){l.filterOptions(),c(function(){l.setInputWidth(),l.isOpen&&l.dropdownPosition()})},!0),l.updateValue=function(b){a.isDefined(b)||(b=l.selectedValues||[]),l.setValue(l.multiple?b:b[0])},l.$watch("selectedValues",function(b,c){a.equals(b,c)||(l.updateValue(),a.isFunction(l.change)&&l.change(l.multiple?{newValue:b,oldValue:c}:{newValue:(b||[])[0],oldValue:(c||[])[0]}))},!0),l.$watchCollection("options",function(b,c){a.equals(b,c)||l.remote||l.updateSelected()}),l.updateSelected=function(){l.multiple?l.selectedValues=(l.value||[]).map(function(a){return m(l.options,function(b){return l.optionEquals(b,a)})[0]}).filter(function(b){return a.isDefined(b)}).slice(0,l.limit):l.selectedValues=(l.options||[]).filter(function(a){return l.optionEquals(a)}).slice(0,1)},l.$watch("value",function(b,c){a.equals(b,c)||f.when(l.remote&&l.remoteValidation&&l.hasValue()?l.fetchValidation(b):a.noop).then(function(){l.updateSelected(),l.filterOptions(),l.updateValue()})},!0),a.element(j[0].querySelector(".selector-input")).on("click",function(){n[0].focus()}),n=a.element(j[0].querySelector(".selector-input input")).on("focus",function(){c(function(){l.$apply(l.open)})}).on("keydown",function(a){l.$apply(function(){l.keydown(a)})}).on("input",function(){l.setInputWidth()}),o.on("mousedown",function(a){a.preventDefault()}),a.element(d).on("resize",function(){l.dropdownPosition()}).on("click",function(b){a.equals(j,b.target)||l.isOpen&&(l.$evalAsync(l.close),b.preventDefault())}),l.$watch(function(){return p.$pristine},function(a){q[a?"$setPristine":"$setDirty"]()}),l.$watch(function(){return p.$touched},function(a){q[a?"$setTouched":"$setUntouched"]()}),a.forEach(["open","close","fetch"],function(a){l.api[a]=l[a]}),l.api.focus=function(){n[0].focus()},l.api.set=function(a){return l.value=a},l.api.unset=function(b){var c=b?(l.selectedValues||[]).filter(function(a){return l.optionEquals(a,b)}):l.selectedValues,d=l.selectedValues.map(function(a,b){return l.inOptions(c,a)?b:-1}).filter(function(a){return a>=0});a.forEach(d,function(a,b){l.unset(a-b)})}})},i}();a.module("selector",[]).run(["$templateCache",function(a){a.put("selector/selector.html",'
'),a.put("selector/item-create.html",'Add '),a.put("selector/item-default.html",''),a.put("selector/group-default.html",'')}]).directive("selector",["$filter","$timeout","$window","$http","$q",function(a,b,c,d,e){return new h(a,b,c,d,e)}])}(window.angular); \ No newline at end of file diff --git a/package.json b/package.json index ec4cdde..18cbabf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-selector", - "version": "1.6.0", + "version": "1.6.1", "description": "A native AngularJS directive that transform a simple `