From a40fa70552abbcbd4424dd94acf6c7df00ec5c61 Mon Sep 17 00:00:00 2001 From: Hidenari Nozaki Date: Wed, 1 Oct 2014 21:33:02 +1300 Subject: [PATCH] Fix just released update input field and update to v0.0.24 --- angucomplete-alt.js | 6 ++++++ bower.json | 2 +- dist/angucomplete-alt.min.js | 2 +- test/angucomplete-alt.spec.js | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/angucomplete-alt.js b/angucomplete-alt.js index b991e204..d0b36f8e 100644 --- a/angucomplete-alt.js +++ b/angucomplete-alt.js @@ -265,6 +265,12 @@ angular.module('angucomplete-alt', [] ).directive('angucompleteAlt', ['$q', '$pa updateInputField(); }); } + else if (scope.currentIndex === 0) { + scope.$apply(function() { + scope.currentIndex = -1; + inputField.val(scope.searchStr); + }); + } } else if (which === KEY_TAB && scope.results && scope.results.length > 0) { if (scope.currentIndex === -1 && scope.showDropdown) { scope.selectResult(scope.results[0]); diff --git a/bower.json b/bower.json index bacc6110..7fdc32cd 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angucomplete-alt", - "version": "0.0.23", + "version": "0.0.24", "homepage": "http://ghiden.github.io/angucomplete-alt/", "authors": [ "Hidenari Nozaki " diff --git a/dist/angucomplete-alt.min.js b/dist/angucomplete-alt.min.js index b1731e92..0573da8d 100644 --- a/dist/angucomplete-alt.min.js +++ b/dist/angucomplete-alt.min.js @@ -1,2 +1,2 @@ /*! Copyright (c) 2014 Hidenari Nozaki and contributors | Licensed under the MIT license */ -"use strict";angular.module("angucomplete-alt",[]).directive("angucompleteAlt",["$q","$parse","$http","$sce","$timeout",function(a,b,c,d,e){var f=40,g=39,h=38,i=37,j=27,k=13,l=9,m=3,n=500,o=200,p="autocomplete-required",q="Searching...",r="No results found";return{restrict:"EA",require:"^?form",scope:{selectedObject:"=",disableInput:"=",initialValue:"@",localData:"=",remoteUrlRequestFormatter:"=",remoteUrlResponseFormatter:"=",remoteUrlErrorCallback:"=",id:"@",placeholder:"@",remoteUrl:"@",remoteUrlDataField:"@",titleField:"@",descriptionField:"@",imageField:"@",inputClass:"@",pause:"@",searchFields:"@",minlength:"@",matchClass:"@",clearSelected:"@",overrideSuggestions:"@",fieldRequired:"@",fieldRequiredClass:"@",inputChanged:"=",autoMatch:"@",focusOut:"&",focusIn:"&"},template:'
{{ result.title }}
{{result.description}}
',link:function(b,s,t,u){function v(a){return a.which?a.which:a.keyCode}function w(a){"function"==typeof b.selectedObject?b.selectedObject(a):b.selectedObject=a,C(!0)}function x(a){return function(c){return b[a]?b[a](c):c}}function y(a){w({originalObject:a}),b.clearSelected&&(b.searchStr=null),L()}function z(a){return b.titleField.split(",").map(function(b){return A(a,b)}).join(" ")}function A(a,b){var c,d;return b?(c=b.split("."),d=a,c.forEach(function(a){d=d[a]})):d=a,d}function B(a,c){var e,f,g=new RegExp(c,"i");if(a)return f=a.match(g),e=f?a.replace(g,''+f[0]+""):a,d.trustAsHtml(e)}function C(a){X=b.searchStr,b.fieldRequired&&u&&u.$setValidity(W,a)}function D(a){var c=v(a);c!==i&&c!==g&&(c===h||c===k?a.preventDefault():c===f?(a.preventDefault(),!b.showDropdown&&b.searchStr.length>=U&&(M(),b.searching=!0,P(b.searchStr))):c===j?(L(),b.$apply(function(){T.val(b.searchStr)})):(b.searchStr&&""!==b.searchStr?b.searchStr.length>=U&&(M(),V&&e.cancel(V),b.searching=!0,V=e(function(){P(b.searchStr)},b.pause)):b.showDropdown=!1,X&&X!==b.searchStr&&(w(void 0),C(!1))))}function E(a){b.overrideSuggestions&&(b.selectedObject&&b.selectedObject.originalObject===b.searchStr||(a.preventDefault(),y(b.searchStr)))}function F(){var a=b.results[b.currentIndex];T.val(b.matchClass?z(a.originalObject):a.title)}function G(a){var c=v(a);c===k&&b.results?(b.currentIndex>=0&&b.currentIndex=1&&b.$apply(function(){b.currentIndex--,F()})):c===l&&b.results&&b.results.length>0&&-1===b.currentIndex&&b.showDropdown&&(b.selectResult(b.results[0]),b.$apply())}function H(a){return function(c){b.searching=!1,Q(A(S(c),b.remoteUrlDataField),a)}}function I(a,c,d,e){0!==c&&(b.remoteUrlErrorCallback?b.remoteUrlErrorCallback(a,c,d,e):console&&console.error&&console.error("http error"))}function J(){Y&&Y.resolve()}function K(d){var e={},f=b.remoteUrl+d;b.remoteUrlRequestFormatter&&(e={params:b.remoteUrlRequestFormatter(d)},f=b.remoteUrl),J(),Y=a.defer(),e.timeout=Y.promise,c.get(f,e).success(H(d)).error(I)}function L(){b.showDropdown=!1,b.results=[]}function M(){b.showDropdown=!0,b.currentIndex=-1,b.results=[]}function N(a){var c,d,e,f,g=b.searchFields.split(","),h=[];for(c=0;c=0;d&&(h[h.length]=b.localData[c])}b.searching=!1,Q(h,a)}function O(a,c,d){for(var e in c)if(c[e].toLowerCase()===d.toLowerCase())return void b.selectResult(a)}function P(a){a.length0)for(b.results=[],d=0;d
{{ result.title }}
{{result.description}}
',link:function(b,s,t,u){function v(a){return a.which?a.which:a.keyCode}function w(a){"function"==typeof b.selectedObject?b.selectedObject(a):b.selectedObject=a,C(!0)}function x(a){return function(c){return b[a]?b[a](c):c}}function y(a){w({originalObject:a}),b.clearSelected&&(b.searchStr=null),L()}function z(a){return b.titleField.split(",").map(function(b){return A(a,b)}).join(" ")}function A(a,b){var c,d;return b?(c=b.split("."),d=a,c.forEach(function(a){d=d[a]})):d=a,d}function B(a,c){var e,f,g=new RegExp(c,"i");if(a)return f=a.match(g),e=f?a.replace(g,''+f[0]+""):a,d.trustAsHtml(e)}function C(a){X=b.searchStr,b.fieldRequired&&u&&u.$setValidity(W,a)}function D(a){var c=v(a);c!==i&&c!==g&&(c===h||c===k?a.preventDefault():c===f?(a.preventDefault(),!b.showDropdown&&b.searchStr.length>=U&&(M(),b.searching=!0,P(b.searchStr))):c===j?(L(),b.$apply(function(){T.val(b.searchStr)})):(b.searchStr&&""!==b.searchStr?b.searchStr.length>=U&&(M(),V&&e.cancel(V),b.searching=!0,V=e(function(){P(b.searchStr)},b.pause)):b.showDropdown=!1,X&&X!==b.searchStr&&(w(void 0),C(!1))))}function E(a){b.overrideSuggestions&&(b.selectedObject&&b.selectedObject.originalObject===b.searchStr||(a.preventDefault(),y(b.searchStr)))}function F(){var a=b.results[b.currentIndex];T.val(b.matchClass?z(a.originalObject):a.title)}function G(a){var c=v(a);c===k&&b.results?(b.currentIndex>=0&&b.currentIndex=1?b.$apply(function(){b.currentIndex--,F()}):0===b.currentIndex&&b.$apply(function(){b.currentIndex=-1,T.val(b.searchStr)})):c===l&&b.results&&b.results.length>0&&-1===b.currentIndex&&b.showDropdown&&(b.selectResult(b.results[0]),b.$apply())}function H(a){return function(c){b.searching=!1,Q(A(S(c),b.remoteUrlDataField),a)}}function I(a,c,d,e){0!==c&&(b.remoteUrlErrorCallback?b.remoteUrlErrorCallback(a,c,d,e):console&&console.error&&console.error("http error"))}function J(){Y&&Y.resolve()}function K(d){var e={},f=b.remoteUrl+d;b.remoteUrlRequestFormatter&&(e={params:b.remoteUrlRequestFormatter(d)},f=b.remoteUrl),J(),Y=a.defer(),e.timeout=Y.promise,c.get(f,e).success(H(d)).error(I)}function L(){b.showDropdown=!1,b.results=[]}function M(){b.showDropdown=!0,b.currentIndex=-1,b.results=[]}function N(a){var c,d,e,f,g=b.searchFields.split(","),h=[];for(c=0;c=0;d&&(h[h.length]=b.localData[c])}b.searching=!1,Q(h,a)}function O(a,c,d){for(var e in c)if(c[e].toLowerCase()===d.toLowerCase())return void b.selectResult(a)}function P(a){a.length0)for(b.results=[],d=0;d'); + $scope.selectedPerson = undefined; + $scope.people = [ + {firstName: 'Emma', middleName: 'C.D.', surname: 'Watson'}, + {firstName: 'Elvis', middleName: 'A.', surname: 'Presly'}, + {firstName: 'John', middleName: 'A.', surname: 'Elway'} + ]; + $compile(element)($scope); + $scope.$digest(); + + var inputField = element.find('#ex1_value'); + var eKeydown = $.Event('keydown'); + var eKeyup = $.Event('keyup'); + + inputField.val('e'); + inputField.trigger('input'); + eKeyup.which = 101;// letter e + inputField.trigger(eKeyup); + $timeout.flush(); + + // Down arrow 2 times + eKeydown.which = KEY_DW; + inputField.trigger(eKeydown); + inputField.trigger(eKeydown); + expect(inputField.val()).toEqual('Elvis Presly'); + + // Up arrow 2 time and go back to original input + eKeydown.which = KEY_UP; + inputField.trigger(eKeydown); + inputField.trigger(eKeydown); + expect(inputField.val()).toEqual('e'); + }); + it('should reset input field when ESC key is pressed after up/down arrow key is pressed', function() { var element = angular.element('
'); $scope.selectedPerson = undefined;