From a7e33ca693382e4458ad63d56bb3efe7a68effb7 Mon Sep 17 00:00:00 2001 From: lordfriend Date: Mon, 15 Dec 2014 21:36:00 +0800 Subject: [PATCH] update to 2.0.5, update document. --- bower.json | 2 +- dist/css/nya-bs-select.css | 2 +- dist/css/nya-bs-select.min.css | 2 +- dist/js/nya-bs-select.js | 13 ++++++++++--- dist/js/nya-bs-select.min.js | 4 ++-- docs/dist/css/main.css | 2 +- docs/dist/css/nya-bs-select.css | 7 ++++++- docs/dist/js/nya-bs-select.js | 19 +++++++++++++++---- docs/src/content/api/nya-bs-option.md | 12 +++++++++++- package.json | 2 +- 10 files changed, 49 insertions(+), 16 deletions(-) diff --git a/bower.json b/bower.json index e0f0665..a74ef49 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "nya-bootstrap-select", - "version": "2.0.4", + "version": "2.0.5", "main": [ "dist/js/nya-bs-select.js", "dist/css/nya-bs-select.css" diff --git a/dist/css/nya-bs-select.css b/dist/css/nya-bs-select.css index 0d45625..b9eb024 100644 --- a/dist/css/nya-bs-select.css +++ b/dist/css/nya-bs-select.css @@ -1,5 +1,5 @@ /** - * nya-bootstrap-select v2.0.4 + * nya-bootstrap-select v2.0.5 * Copyright 2014 Nyasoft * Licensed under MIT license */ diff --git a/dist/css/nya-bs-select.min.css b/dist/css/nya-bs-select.min.css index 36a7d28..945ec92 100644 --- a/dist/css/nya-bs-select.min.css +++ b/dist/css/nya-bs-select.min.css @@ -1,5 +1,5 @@ /** - * nya-bootstrap-select v2.0.4 + * nya-bootstrap-select v2.0.5 * Copyright 2014 Nyasoft * Licensed under MIT license */ diff --git a/dist/js/nya-bs-select.js b/dist/js/nya-bs-select.js index 7f90de7..7468a93 100644 --- a/dist/js/nya-bs-select.js +++ b/dist/js/nya-bs-select.js @@ -1,5 +1,5 @@ /** - * nya-bootstrap-select v2.0.4 + * nya-bootstrap-select v2.0.5 * Copyright 2014 Nyasoft * Licensed under MIT license */ @@ -1246,7 +1246,14 @@ nyaBsSelect.directive('nyaBsOption', ['$parse', function($parse){ // hasOwnProperty. var lastBlockMap = createMap(); - $scope.$watchCollection(collectionExp, function nyaBsOptionAction(collection) { + // deepWatch will impact performance. use with caution. + if($attr.deepWatch === 'true') { + $scope.$watch(collectionExp, nyaBsOptionAction, true); + } else { + $scope.$watchCollection(collectionExp, nyaBsOptionAction); + } + + function nyaBsOptionAction(collection) { var index, previousNode = $element[0], // node that cloned nodes should be inserted after @@ -1429,7 +1436,7 @@ nyaBsSelect.directive('nyaBsOption', ['$parse', function($parse){ lastBlockMap = nextBlockMap; nyaBsSelectCtrl.onCollectionChange(values); - }); + } }; } } diff --git a/dist/js/nya-bs-select.min.js b/dist/js/nya-bs-select.min.js index 562b152..e55282c 100644 --- a/dist/js/nya-bs-select.min.js +++ b/dist/js/nya-bs-select.min.js @@ -1,6 +1,6 @@ /** - * nya-bootstrap-select v2.0.4 + * nya-bootstrap-select v2.0.5 * Copyright 2014 Nyasoft * Licensed under MIT license */ -!function(){"use strict";function a(){return++j}function b(a){return a&&a.window===a}function c(a){return"string"==typeof a}function d(a){if(null==a||b(a))return!1;var d=a.length;return 1===a.nodeType&&d?!0:c(a)||Array.isArray(a)||0===d||"number"==typeof d&&d>0&&d-1 in a}function e(){return Object.create(null)}function f(b,c){var d,e=typeof b;return"function"==e||"object"==e&&null!==b?"function"==typeof(d=b.$$hashKey)?d=b.$$hashKey():void 0===d&&(d=b.$$hashKey=(c||a)()):d=b,e+":"+d}function g(a,b,c){var d,e,f=[],g=[];for(d=0;dc;c++)if(v(b,a[c]))return!0;return!1},o=function(a,b){var c,d=a.length;if(0===d)return-1;for(c=0;d>c;c++)if(v(b,a[c]))return c;return-1},p=function(a,b,c){var d,e=a,f=typeof c;if(a==b)return null;do if("string"===f){if(d=" "+e.className+" ",1===e.nodeType&&d.replace(/[\t\r\n\f]/g," ").indexOf(c)>=0)return e}else if(e==c)return e;while((e=e.parentNode)&&e!=b&&9!==e.nodeType);return null},q=function(a){var b,c=a.className.replace(/[\t\r\n\f]/g," ").trim();b=c.split(" ");for(var d=0;d0)for(var h=0;g>h;h++){if(c=f.eq(h),d=!0,e=q(c[0]),e.length>0)for(var i=0;id;d++)if(-1!==c.eq(d).text().toLowerCase().indexOf(b.toLowerCase()))return!0;return!1},u=angular.element,v=angular.equals,w=angular.copy,x=angular.module("nya.bootstrap.select",[]);x.controller("nyaBsSelectCtrl",function(){var a=this;a.keyIdentifier=null,a.valueIdentifier=null,a.isMultiple=!1,a.onCollectionChange=function(){},a.setId=function(b){a.id=b||"id#"+Math.floor(1e4*Math.random())}}),x.directive("nyaBsSelect",["$parse","$document","$timeout",function(a,b,c){var d="Nothing selected",e='',f='',g='',h='',j='
  • NO SEARCH RESULT
  • ';return{restrict:"ECA",require:["ngModel","nyaBsSelect"],controller:"nyaBsSelectCtrl",compile:function(k,l){console.log(k.attr("id")+" compiled"),k.addClass("btn-group");var m,x,y,z,A,B,C=k.children(),D=u(e),E=u(f),F=u(h);for(y=q(k[0]),y.forEach(function(a){/btn-(?:primary|info|success|warning|danger|inverse)/.test(a)&&(k.removeClass(a),D.removeClass("btn-default"),D.addClass(a)),"form-control"===a&&D.addClass(a)}),F.append(C),z=C.length,A=0;z>A;A++)B=C.eq(A),(B.hasClass("nya-bs-option")||B.attr("nya-bs-option"))&&B.find("a").attr("tabindex","0");return"true"===l.liveSearch&&(m=u(g),x=u(j),E.append(m),F.append(x)),D.children().eq(0).text(l.title?l.title:d),E.append(F),k.append(D),k.append(E),function(e,f,g,h){function j(){var a,b,c=L.children(),d=c.length;for(a=0;d>a;a++)if(b=c.eq(a),b.hasClass("active")&&b.hasClass("nya-bs-option"))return b;return null}function k(a){for(var b,c=a.childNodes,d=c.length,e=0;d>e;e++)if(b=c[e],1===b.nodeType&&"a"===b.tagName.toLowerCase()){b.focus();break}}function l(a){var b;return b=L.children().eq(a?0:L.children().length-1),!b.hasClass("nya-bs-option")||b.hasClass("disabled")||b.hasClass("not-match")?a?m(b[0],"nextSibling"):m(b[0],"previousSibling"):b[0]}function m(a,b){if(!a||r(a,"nya-bs-option")){for(var c=a;(c=i(c,b))&&c.nodeType;)if(r(c,"nya-bs-option")&&!r(c,"disabled")&&!r(c,"not-match"))return c;return null}}function q(a){var b,c,d,g=E.$modelValue;b=x(a),"undefined"!=typeof b&&(I?(c=Array.isArray(g)?w(g):[],d=o(c,b),-1===d?(c.push(b),a.addClass("selected")):(c.splice(d,1),a.removeClass("selected"))):(L.children().removeClass("selected"),c=b,a.addClass("selected")),E.$setViewValue(c),e.$digest()),I||f.removeClass("open"),z()}function x(a){var b;return D?(b=a.scope(),D(b)):F.valueIdentifier||F.keyIdentifier?(b=a.scope(),b[F.valueIdentifier]||b[F.keyIdentifier]):a.attr("value")}function y(a){var b=a.find("a");return 0===b.children().length||b.children().eq(0).hasClass("check-mark")?b[0].firstChild.cloneNode(!1):b.children().eq(0)[0].cloneNode(!0)}function z(){var a=E.$modelValue,b=J.children().eq(0);a&&(I&&0===a.length?g.title?(b.empty(),b.append(document.createTextNode(g.title))):(b.empty(),b.append(document.createTextNode(d))):c(function(){var c,e,f,h,i,j,k=L.children(),l=k.length,m=[];if(I&&"count"===g.selectedTextFormat?j=1:I&&g.selectedTextFormat&&(i=g.selectedTextFormat.match(/\s*count\s*>\s*(\d+)\s*/))&&(j=parseInt(i[1],10)),"undefined"!=typeof j&&a.length>j)return b.empty(),void b.append(document.createTextNode(a.length+" items selected"));for(f=0;l>f;f++)e=k.eq(f),e.hasClass("nya-bs-option")&&(c=x(e),I?Array.isArray(a)&&n(a,c)&&(h=e.attr("title"),m.push(h?document.createTextNode(h):y(e))):v(a,c)&&(h=e.attr("title"),m.push(h?document.createTextNode(h):y(e))));if(0===m.length)g.title?(b.empty(),b.append(document.createTextNode(g.title))):(b.empty(),b.append(document.createTextNode(d)));else if(1===m.length)b.empty(),b.append(m[0]);else for(b.empty(),f=0;fb;b++)if(a=c.eq(b),a.hasClass("nya-bs-option")||a.attr("nya-bs-option")){B=a[0].clientHeight;break}if(/\d+/.test(g.size)){var e=parseInt(g.size,10);L.css("max-height",e*B+"px"),L.css("overflow-y","auto")}}console.log(f.attr("id")+" linked");var B,C,D,E=h[0],F=h[1],G=!1,H=a(F.valueExp),I="undefined"!=typeof g.multiple,J=s(f,["dropdown-toggle"]),K=J.next(),L=s(K,["dropdown-menu","inner"]),M=s(K,["bs-searchbox"]),N=s(L,["no-search-result"]);F.valueExp&&(D=function(a,b){return H(a,b)}),F.setId(f.attr("id")),I&&(F.isMultiple=!0,E.$isEmpty=function(a){return!a||0===a.length}),"undefined"!=typeof g.disabled&&e.$watch(g.disabled,function(a){a?(J.addClass("disabled"),C=J.attr("tabindex"),J.attr("tabindex","-1"),G=!0):(J.removeClass("disabled"),C?J.attr("tabindex",C):J.removeAttr("tabindex"),G=!1)}),F.onCollectionChange=function(a){var b,c,d=[],f=E.$modelValue;if(f){if(a&&0!==a.length){if(D)for(b=0;ba;a++)b=f.eq(a),b.hasClass("nya-bs-option")&&(t(b.find("a"),d)?(b.removeClass("not-match"),e++):b.addClass("not-match"));0===e?N.addClass("show"):N.removeClass("show")}else{for(a=0;g>a;a++)b=f.eq(a),b.hasClass("nya-bs-option")&&b.removeClass("not-match");N.removeClass("show")}c=l(!0),c&&(f.removeClass("active"),u(c).addClass("active"))}),E.$render=function(){var a,b,c=E.$modelValue,d=L.children(),e=d.length;if("undefined"==typeof c)for(a=0;e>a;a++)d.eq(a).hasClass("nya-bs-option")&&d.eq(a).removeClass("selected");else for(a=0;e>a;a++)d.eq(a).hasClass("nya-bs-option")&&(b=x(d.eq(a)),I?n(c,b)?d.eq(a).addClass("selected"):d.eq(a).removeClass("selected"):v(c,b)?d.eq(a).addClass("selected"):d.eq(a).removeClass("selected"));console.log(F.id+" render end"),z()},f.on("keydown",function(a){var b=a.keyCode;if(27===b||13===b||38===b||40===b){if(a.preventDefault(),G)return void a.stopPropagation();var c,d,e,h,i=p(a.target,f[0],J[0]);"true"===g.liveSearch?d=p(a.target,f[0],M[0]):c=p(a.target,f[0],K[0]),i?(console.log("toggleButton"),13!==b&&38!==b&&40!==b||f.hasClass("open")||(a.stopPropagation(),f.addClass("open"),"undefined"==typeof B&&A(),"true"===g.liveSearch?(M.children().eq(0)[0].focus(),h=l(!0),h&&(L.children().removeClass("active"),u(h).addClass("active"))):(h=l(!0),h&&k(h)))):c?27===b?(J[0].focus(),f.removeClass("open"),a.stopPropagation()):38===b?(a.stopPropagation(),h=m(a.target.parentNode,"previousSibling"),h?k(h):(h=l(!1),h&&k(h))):40===b?(a.stopPropagation(),h=m(a.target.parentNode,"nextSibling"),h?k(h):(h=l(!0),h&&k(h))):13===b&&(a.stopPropagation(),e=u(a.target.parentNode),e.hasClass("nya-bs-option")&&(q(e),I||J[0].focus())):d&&(27===b?(J[0].focus(),f.removeClass("open"),a.stopPropagation()):38===b?(a.stopPropagation(),e=j(),e&&(h=m(e[0],"previousSibling"),h?(e.removeClass("active"),u(h).addClass("active")):(h=l(!1),h&&(e.removeClass("active"),u(h).addClass("active"))))):40===b?(a.stopPropagation(),e=j(),e&&(h=m(e[0],"nextSibling"),h?(e.removeClass("active"),u(h).addClass("active")):(h=l(!0),h&&(e.removeClass("active"),u(h).addClass("active"))))):13===b&&(e=j(),e&&(q(e),I||J[0].focus())))}})}}}}]),x.directive("nyaBsOption",["$parse",function(a){var b=/^\s*(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/;return{restrict:"A",transclude:"element",priority:1e3,terminal:!0,require:["^nyaBsSelect","^ngModel"],compile:function(c,i){var j=i.nyaBsOption,o=document.createComment(" end nyaBsOption: "+j+" "),p=j.match(b);if(!p)throw new Error("invalid expression");var q,r,s,t,w,x=i.value,y=x?a(x):null,z=p[3]||p[1],A=p[2],B=p[4],C=p[5]?a(p[5]):null,D=p[6],E={$id:f},F={};return D?t=a(D):(q=function(a,b){return f(b)},r=function(a){return a}),function(a,b,c,f,i){var j,p=f[0],D=f[1],G={};t&&(s=function(b,c,d){return A&&(E[A]=b),E[z]=c,E.$index=d,t(a,E)}),C&&(w=function(b,c){return A&&(F[A]=b),F[z]=c,C(a,F)}),A&&(p.keyIdentifier=A),z&&(p.valueIdentifier=z),y&&(p.valueExp=x,j=function(b,c){return A&&(G[A]=b),G[z]=c,y(a,G)});var H=e();a.$watchCollection(B,function(a){var c,f,t,x,y,B,C,E,F,G,I,J,K,L,M=b[0],N=e(),O=[];if(w&&(J=[]),d(a))B=a,y=s||q;else{y=s||r,B=[];for(var P in a)a.hasOwnProperty(P)&&"$"!=P.charAt(0)&&B.push(P);B.sort()}for(C=B.length,E=new Array(C),c=0;C>c;c++)if(f=a===B?c:B[c],t=a[f],x=y(f,t,c),L={},A&&(L[A]=f),L[z]=t,O.push(L),w&&(G=w(f,t),-1===J.indexOf(G)&&G&&J.push(G)),H[x])F=H[x],delete H[x],w&&(F.group=G),F.key=f,F.value=t,N[x]=F,E[c]=F;else{if(N[x])throw E.forEach(function(a){a&&a.scope&&(H[a.id]=a)}),new Error("Duplicates in a select are not allowed. Use 'track by' expression to specify unique keys.");E[c]={id:x,scope:void 0,clone:void 0,key:f,value:t},N[x]=!0,G&&(E[c].group=G)}J&&J.length>0&&(E=g(E,J,"group"));for(var Q in H)F=H[Q],h(F.clone).remove(),F.scope.$destroy();for(c=0;C>c;c++)F=E[c],F.scope?(I=M,k(F)!=I&&u(M).after(F.clone),M=l(F),m(F.scope,c,z,F.value,A,F.key,C,F.group)):i(function(a,b){F.scope=b;var d=o.cloneNode(!1);a[a.length++]=d,u(M).after(a),a.addClass("nya-bs-option"),t=j?j(F.key,F.value):F.value||F.key,p.isMultiple?Array.isArray(D.$modelValue)&&n(D.$modelValue,t)&&a.addClass("selected"):v(t,D.$modelValue)&&a.addClass("selected"),M=d,F.clone=a,N[F.id]=F,m(F.scope,c,z,F.value,A,F.key,C,F.group)}),J&&(K&&K===F.group?F.clone.removeClass("first-in-group"):F.clone.addClass("first-in-group"),K=F.group,F.clone.addClass("group-item"));H=N,p.onCollectionChange(O)})}}}}])}(); \ No newline at end of file +!function(){"use strict";function a(){return++j}function b(a){return a&&a.window===a}function c(a){return"string"==typeof a}function d(a){if(null==a||b(a))return!1;var d=a.length;return 1===a.nodeType&&d?!0:c(a)||Array.isArray(a)||0===d||"number"==typeof d&&d>0&&d-1 in a}function e(){return Object.create(null)}function f(b,c){var d,e=typeof b;return"function"==e||"object"==e&&null!==b?"function"==typeof(d=b.$$hashKey)?d=b.$$hashKey():void 0===d&&(d=b.$$hashKey=(c||a)()):d=b,e+":"+d}function g(a,b,c){var d,e,f=[],g=[];for(d=0;dc;c++)if(v(b,a[c]))return!0;return!1},o=function(a,b){var c,d=a.length;if(0===d)return-1;for(c=0;d>c;c++)if(v(b,a[c]))return c;return-1},p=function(a,b,c){var d,e=a,f=typeof c;if(a==b)return null;do if("string"===f){if(d=" "+e.className+" ",1===e.nodeType&&d.replace(/[\t\r\n\f]/g," ").indexOf(c)>=0)return e}else if(e==c)return e;while((e=e.parentNode)&&e!=b&&9!==e.nodeType);return null},q=function(a){var b,c=a.className.replace(/[\t\r\n\f]/g," ").trim();b=c.split(" ");for(var d=0;d0)for(var h=0;g>h;h++){if(c=f.eq(h),d=!0,e=q(c[0]),e.length>0)for(var i=0;id;d++)if(-1!==c.eq(d).text().toLowerCase().indexOf(b.toLowerCase()))return!0;return!1},u=angular.element,v=angular.equals,w=angular.copy,x=angular.module("nya.bootstrap.select",[]);x.controller("nyaBsSelectCtrl",function(){var a=this;a.keyIdentifier=null,a.valueIdentifier=null,a.isMultiple=!1,a.onCollectionChange=function(){},a.setId=function(b){a.id=b||"id#"+Math.floor(1e4*Math.random())}}),x.directive("nyaBsSelect",["$parse","$document","$timeout",function(a,b,c){var d="Nothing selected",e='',f='',g='',h='',j='
  • NO SEARCH RESULT
  • ';return{restrict:"ECA",require:["ngModel","nyaBsSelect"],controller:"nyaBsSelectCtrl",compile:function(k,l){console.log(k.attr("id")+" compiled"),k.addClass("btn-group");var m,x,y,z,A,B,C=k.children(),D=u(e),E=u(f),F=u(h);for(y=q(k[0]),y.forEach(function(a){/btn-(?:primary|info|success|warning|danger|inverse)/.test(a)&&(k.removeClass(a),D.removeClass("btn-default"),D.addClass(a)),"form-control"===a&&D.addClass(a)}),F.append(C),z=C.length,A=0;z>A;A++)B=C.eq(A),(B.hasClass("nya-bs-option")||B.attr("nya-bs-option"))&&B.find("a").attr("tabindex","0");return"true"===l.liveSearch&&(m=u(g),x=u(j),E.append(m),F.append(x)),D.children().eq(0).text(l.title?l.title:d),E.append(F),k.append(D),k.append(E),function(e,f,g,h){function j(){var a,b,c=L.children(),d=c.length;for(a=0;d>a;a++)if(b=c.eq(a),b.hasClass("active")&&b.hasClass("nya-bs-option"))return b;return null}function k(a){for(var b,c=a.childNodes,d=c.length,e=0;d>e;e++)if(b=c[e],1===b.nodeType&&"a"===b.tagName.toLowerCase()){b.focus();break}}function l(a){var b;return b=L.children().eq(a?0:L.children().length-1),!b.hasClass("nya-bs-option")||b.hasClass("disabled")||b.hasClass("not-match")?a?m(b[0],"nextSibling"):m(b[0],"previousSibling"):b[0]}function m(a,b){if(!a||r(a,"nya-bs-option")){for(var c=a;(c=i(c,b))&&c.nodeType;)if(r(c,"nya-bs-option")&&!r(c,"disabled")&&!r(c,"not-match"))return c;return null}}function q(a){var b,c,d,g=E.$modelValue;b=x(a),"undefined"!=typeof b&&(I?(c=Array.isArray(g)?w(g):[],d=o(c,b),-1===d?(c.push(b),a.addClass("selected")):(c.splice(d,1),a.removeClass("selected"))):(L.children().removeClass("selected"),c=b,a.addClass("selected")),E.$setViewValue(c),e.$digest()),I||f.removeClass("open"),z()}function x(a){var b;return D?(b=a.scope(),D(b)):F.valueIdentifier||F.keyIdentifier?(b=a.scope(),b[F.valueIdentifier]||b[F.keyIdentifier]):a.attr("value")}function y(a){var b=a.find("a");return 0===b.children().length||b.children().eq(0).hasClass("check-mark")?b[0].firstChild.cloneNode(!1):b.children().eq(0)[0].cloneNode(!0)}function z(){var a=E.$modelValue,b=J.children().eq(0);a&&(I&&0===a.length?g.title?(b.empty(),b.append(document.createTextNode(g.title))):(b.empty(),b.append(document.createTextNode(d))):c(function(){var c,e,f,h,i,j,k=L.children(),l=k.length,m=[];if(I&&"count"===g.selectedTextFormat?j=1:I&&g.selectedTextFormat&&(i=g.selectedTextFormat.match(/\s*count\s*>\s*(\d+)\s*/))&&(j=parseInt(i[1],10)),"undefined"!=typeof j&&a.length>j)return b.empty(),void b.append(document.createTextNode(a.length+" items selected"));for(f=0;l>f;f++)e=k.eq(f),e.hasClass("nya-bs-option")&&(c=x(e),I?Array.isArray(a)&&n(a,c)&&(h=e.attr("title"),m.push(h?document.createTextNode(h):y(e))):v(a,c)&&(h=e.attr("title"),m.push(h?document.createTextNode(h):y(e))));if(0===m.length)g.title?(b.empty(),b.append(document.createTextNode(g.title))):(b.empty(),b.append(document.createTextNode(d)));else if(1===m.length)b.empty(),b.append(m[0]);else for(b.empty(),f=0;fb;b++)if(a=c.eq(b),a.hasClass("nya-bs-option")||a.attr("nya-bs-option")){B=a[0].clientHeight;break}if(/\d+/.test(g.size)){var e=parseInt(g.size,10);L.css("max-height",e*B+"px"),L.css("overflow-y","auto")}}console.log(f.attr("id")+" linked");var B,C,D,E=h[0],F=h[1],G=!1,H=a(F.valueExp),I="undefined"!=typeof g.multiple,J=s(f,["dropdown-toggle"]),K=J.next(),L=s(K,["dropdown-menu","inner"]),M=s(K,["bs-searchbox"]),N=s(L,["no-search-result"]);F.valueExp&&(D=function(a,b){return H(a,b)}),F.setId(f.attr("id")),I&&(F.isMultiple=!0,E.$isEmpty=function(a){return!a||0===a.length}),"undefined"!=typeof g.disabled&&e.$watch(g.disabled,function(a){a?(J.addClass("disabled"),C=J.attr("tabindex"),J.attr("tabindex","-1"),G=!0):(J.removeClass("disabled"),C?J.attr("tabindex",C):J.removeAttr("tabindex"),G=!1)}),F.onCollectionChange=function(a){var b,c,d=[],f=E.$modelValue;if(f){if(a&&0!==a.length){if(D)for(b=0;ba;a++)b=f.eq(a),b.hasClass("nya-bs-option")&&(t(b.find("a"),d)?(b.removeClass("not-match"),e++):b.addClass("not-match"));0===e?N.addClass("show"):N.removeClass("show")}else{for(a=0;g>a;a++)b=f.eq(a),b.hasClass("nya-bs-option")&&b.removeClass("not-match");N.removeClass("show")}c=l(!0),c&&(f.removeClass("active"),u(c).addClass("active"))}),E.$render=function(){var a,b,c=E.$modelValue,d=L.children(),e=d.length;if("undefined"==typeof c)for(a=0;e>a;a++)d.eq(a).hasClass("nya-bs-option")&&d.eq(a).removeClass("selected");else for(a=0;e>a;a++)d.eq(a).hasClass("nya-bs-option")&&(b=x(d.eq(a)),I?n(c,b)?d.eq(a).addClass("selected"):d.eq(a).removeClass("selected"):v(c,b)?d.eq(a).addClass("selected"):d.eq(a).removeClass("selected"));console.log(F.id+" render end"),z()},f.on("keydown",function(a){var b=a.keyCode;if(27===b||13===b||38===b||40===b){if(a.preventDefault(),G)return void a.stopPropagation();var c,d,e,h,i=p(a.target,f[0],J[0]);"true"===g.liveSearch?d=p(a.target,f[0],M[0]):c=p(a.target,f[0],K[0]),i?(console.log("toggleButton"),13!==b&&38!==b&&40!==b||f.hasClass("open")||(a.stopPropagation(),f.addClass("open"),"undefined"==typeof B&&A(),"true"===g.liveSearch?(M.children().eq(0)[0].focus(),h=l(!0),h&&(L.children().removeClass("active"),u(h).addClass("active"))):(h=l(!0),h&&k(h)))):c?27===b?(J[0].focus(),f.removeClass("open"),a.stopPropagation()):38===b?(a.stopPropagation(),h=m(a.target.parentNode,"previousSibling"),h?k(h):(h=l(!1),h&&k(h))):40===b?(a.stopPropagation(),h=m(a.target.parentNode,"nextSibling"),h?k(h):(h=l(!0),h&&k(h))):13===b&&(a.stopPropagation(),e=u(a.target.parentNode),e.hasClass("nya-bs-option")&&(q(e),I||J[0].focus())):d&&(27===b?(J[0].focus(),f.removeClass("open"),a.stopPropagation()):38===b?(a.stopPropagation(),e=j(),e&&(h=m(e[0],"previousSibling"),h?(e.removeClass("active"),u(h).addClass("active")):(h=l(!1),h&&(e.removeClass("active"),u(h).addClass("active"))))):40===b?(a.stopPropagation(),e=j(),e&&(h=m(e[0],"nextSibling"),h?(e.removeClass("active"),u(h).addClass("active")):(h=l(!0),h&&(e.removeClass("active"),u(h).addClass("active"))))):13===b&&(e=j(),e&&(q(e),I||J[0].focus())))}})}}}}]),x.directive("nyaBsOption",["$parse",function(a){var b=/^\s*(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/;return{restrict:"A",transclude:"element",priority:1e3,terminal:!0,require:["^nyaBsSelect","^ngModel"],compile:function(c,i){var j=i.nyaBsOption,o=document.createComment(" end nyaBsOption: "+j+" "),p=j.match(b);if(!p)throw new Error("invalid expression");var q,r,s,t,w,x=i.value,y=x?a(x):null,z=p[3]||p[1],A=p[2],B=p[4],C=p[5]?a(p[5]):null,D=p[6],E={$id:f},F={};return D?t=a(D):(q=function(a,b){return f(b)},r=function(a){return a}),function(a,b,c,f,i){function j(a){var c,f,j,t,x,y,B,C,E,F,H,J,K,L,M=b[0],N=e(),O=[];if(w&&(J=[]),d(a))y=a,x=s||q;else{x=s||r,y=[];for(var P in a)a.hasOwnProperty(P)&&"$"!=P.charAt(0)&&y.push(P);y.sort()}for(B=y.length,C=new Array(B),c=0;B>c;c++)if(f=a===y?c:y[c],j=a[f],t=x(f,j,c),L={},A&&(L[A]=f),L[z]=j,O.push(L),w&&(F=w(f,j),-1===J.indexOf(F)&&F&&J.push(F)),I[t])E=I[t],delete I[t],w&&(E.group=F),E.key=f,E.value=j,N[t]=E,C[c]=E;else{if(N[t])throw C.forEach(function(a){a&&a.scope&&(I[a.id]=a)}),new Error("Duplicates in a select are not allowed. Use 'track by' expression to specify unique keys.");C[c]={id:t,scope:void 0,clone:void 0,key:f,value:j},N[t]=!0,F&&(C[c].group=F)}J&&J.length>0&&(C=g(C,J,"group"));for(var Q in I)E=I[Q],h(E.clone).remove(),E.scope.$destroy();for(c=0;B>c;c++)E=C[c],E.scope?(H=M,k(E)!=H&&u(M).after(E.clone),M=l(E),m(E.scope,c,z,E.value,A,E.key,B,E.group)):i(function(a,b){E.scope=b;var d=o.cloneNode(!1);a[a.length++]=d,u(M).after(a),a.addClass("nya-bs-option"),j=p?p(E.key,E.value):E.value||E.key,D.isMultiple?Array.isArray(G.$modelValue)&&n(G.$modelValue,j)&&a.addClass("selected"):v(j,G.$modelValue)&&a.addClass("selected"),M=d,E.clone=a,N[E.id]=E,m(E.scope,c,z,E.value,A,E.key,B,E.group)}),J&&(K&&K===E.group?E.clone.removeClass("first-in-group"):E.clone.addClass("first-in-group"),K=E.group,E.clone.addClass("group-item"));I=N,D.onCollectionChange(O)}var p,D=f[0],G=f[1],H={};t&&(s=function(b,c,d){return A&&(E[A]=b),E[z]=c,E.$index=d,t(a,E)}),C&&(w=function(b,c){return A&&(F[A]=b),F[z]=c,C(a,F)}),A&&(D.keyIdentifier=A),z&&(D.valueIdentifier=z),y&&(D.valueExp=x,p=function(b,c){return A&&(H[A]=b),H[z]=c,y(a,H)});var I=e();"true"===c.deepWatch?a.$watch(B,j,!0):a.$watchCollection(B,j)}}}}])}(); \ No newline at end of file diff --git a/docs/dist/css/main.css b/docs/dist/css/main.css index cea304b..2b36ae4 100644 --- a/docs/dist/css/main.css +++ b/docs/dist/css/main.css @@ -1,5 +1,5 @@ /** - * nya-bootstrap-select v2.0.4 + * nya-bootstrap-select v2.0.5 * Copyright 2014 Nyasoft * Licensed under MIT license */ diff --git a/docs/dist/css/nya-bs-select.css b/docs/dist/css/nya-bs-select.css index 3baad05..b9eb024 100644 --- a/docs/dist/css/nya-bs-select.css +++ b/docs/dist/css/nya-bs-select.css @@ -1,5 +1,5 @@ /** - * nya-bootstrap-select v2.0.4 + * nya-bootstrap-select v2.0.5 * Copyright 2014 Nyasoft * Licensed under MIT license */ @@ -179,6 +179,11 @@ .nya-bs-select .bs-searchbox input.form-control { margin-bottom: 0; width: 100%; + float: none; + z-index: inherit; + display: block; + position: static; + border-radius: 4px; } .nya-bs-select.fit-width .btn .filter-option { position: static; diff --git a/docs/dist/js/nya-bs-select.js b/docs/dist/js/nya-bs-select.js index 2ead510..7468a93 100644 --- a/docs/dist/js/nya-bs-select.js +++ b/docs/dist/js/nya-bs-select.js @@ -1,5 +1,5 @@ /** - * nya-bootstrap-select v2.0.4 + * nya-bootstrap-select v2.0.5 * Copyright 2014 Nyasoft * Licensed under MIT license */ @@ -390,7 +390,7 @@ nyaBsSelect.directive('nyaBsSelect', ['$parse', '$document', '$timeout', functio // dropdownToggle.addClass(className); //} - if(className = 'form-control') { + if(className === 'form-control') { dropdownToggle.addClass(className); } }); @@ -586,6 +586,7 @@ nyaBsSelect.directive('nyaBsSelect', ['$parse', '$document', '$timeout', functio searchBox.children().eq(0)[0].focus(); nyaBsOptionNode = findFocus(true); if(nyaBsOptionNode) { + dropdownMenu.children().removeClass('active'); jqLite(nyaBsOptionNode).addClass('active'); } } else if($element.hasClass('open')) { @@ -736,6 +737,9 @@ nyaBsSelect.directive('nyaBsSelect', ['$parse', '$document', '$timeout', functio // find the focusable node but we will use active nyaBsOptionNode = findFocus(true); if(nyaBsOptionNode) { + // remove previous active state + dropdownMenu.children().removeClass('active'); + // set active to first focusable element jqLite(nyaBsOptionNode).addClass('active'); } } else { @@ -1242,7 +1246,14 @@ nyaBsSelect.directive('nyaBsOption', ['$parse', function($parse){ // hasOwnProperty. var lastBlockMap = createMap(); - $scope.$watchCollection(collectionExp, function nyaBsOptionAction(collection) { + // deepWatch will impact performance. use with caution. + if($attr.deepWatch === 'true') { + $scope.$watch(collectionExp, nyaBsOptionAction, true); + } else { + $scope.$watchCollection(collectionExp, nyaBsOptionAction); + } + + function nyaBsOptionAction(collection) { var index, previousNode = $element[0], // node that cloned nodes should be inserted after @@ -1425,7 +1436,7 @@ nyaBsSelect.directive('nyaBsOption', ['$parse', function($parse){ lastBlockMap = nextBlockMap; nyaBsSelectCtrl.onCollectionChange(values); - }); + } }; } } diff --git a/docs/src/content/api/nya-bs-option.md b/docs/src/content/api/nya-bs-option.md index c3414a3..1ef26bc 100644 --- a/docs/src/content/api/nya-bs-option.md +++ b/docs/src/content/api/nya-bs-option.md @@ -75,7 +75,8 @@ as attribute: ```html
  • + [value=""] + [deep-watch=""]> ... @@ -158,5 +159,14 @@ as attribute:

    + + deep-watch + string + + When set to true, enable a deep watch to collection_expression. `nya-bs-option` will use $watch(exp, listener, true) to make a deep watch. Turn on this feature will impact the performance. even cause expection. + It is not recommended. + By default. `nya-bs-option` will use $watchCollection to watch the collection_expression. + + diff --git a/package.json b/package.json index cad69af..d363d7e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nya-bootstrap-select", - "version": "2.0.4", + "version": "2.0.5", "description": "An angular directive wraps bootstrap-select", "repository": { "type": "git",