From 0d53dfdc6369282ea478d0aec82cf112215ee77b Mon Sep 17 00:00:00 2001 From: Manuel Siggen Date: Thu, 26 Mar 2015 12:25:31 +0100 Subject: [PATCH 1/4] feat(typeahead): implement 'select on blur' option. --- src/typeahead/typeahead.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/typeahead/typeahead.js b/src/typeahead/typeahead.js index af786e010a..ccb99f6a40 100644 --- a/src/typeahead/typeahead.js +++ b/src/typeahead/typeahead.js @@ -55,6 +55,9 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap //a callback executed when a match is selected var onSelectCallback = $parse(attrs.typeaheadOnSelect); + //should it select highlighted popup value when losing focus? + var isSelectOnBlur = originalScope.$eval(attrs.typeaheadSelectOnBlur) == true; + var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined; var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false; @@ -311,6 +314,11 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap }); element.bind('blur', function (evt) { + if (isSelectOnBlur && scope.activeIdx >= 0) { + scope.$apply(function () { + scope.select(scope.activeIdx); + }); + } hasFocus = false; }); From e28acdda6bb4a0280647b011f4a0aa3a513b2608 Mon Sep 17 00:00:00 2001 From: Manuel Siggen Date: Thu, 26 Mar 2015 13:28:49 +0100 Subject: [PATCH 2/4] fix(typeahead): fix jshint warning. --- src/typeahead/typeahead.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typeahead/typeahead.js b/src/typeahead/typeahead.js index ccb99f6a40..3bb2bfacf9 100644 --- a/src/typeahead/typeahead.js +++ b/src/typeahead/typeahead.js @@ -56,7 +56,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap var onSelectCallback = $parse(attrs.typeaheadOnSelect); //should it select highlighted popup value when losing focus? - var isSelectOnBlur = originalScope.$eval(attrs.typeaheadSelectOnBlur) == true; + var isSelectOnBlur = angular.isDefined($attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false; var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined; From b7a3a69e6522e628a32e06c0dbb62d156413c104 Mon Sep 17 00:00:00 2001 From: Manuel Siggen Date: Thu, 26 Mar 2015 13:33:46 +0100 Subject: [PATCH 3/4] fix(typeahead): fix error introduced in last commit. --- src/typeahead/typeahead.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typeahead/typeahead.js b/src/typeahead/typeahead.js index 3bb2bfacf9..8609982743 100644 --- a/src/typeahead/typeahead.js +++ b/src/typeahead/typeahead.js @@ -56,7 +56,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap var onSelectCallback = $parse(attrs.typeaheadOnSelect); //should it select highlighted popup value when losing focus? - var isSelectOnBlur = angular.isDefined($attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false; + var isSelectOnBlur = angular.isDefined(attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false; var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined; From 7df3a87caa152022c687154131babda386155d73 Mon Sep 17 00:00:00 2001 From: Manuel Siggen Date: Thu, 26 Mar 2015 14:23:45 +0100 Subject: [PATCH 4/4] fix(typeahead): add tests for 'select-on-blur' option. --- src/typeahead/test/typeahead.spec.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/typeahead/test/typeahead.spec.js b/src/typeahead/test/typeahead.spec.js index 6dbdf38176..9e72bd7903 100644 --- a/src/typeahead/test/typeahead.spec.js +++ b/src/typeahead/test/typeahead.spec.js @@ -364,6 +364,32 @@ describe('typeahead tests', function () { expect(element).toBeClosed(); }); + it('should not select any match on blur without \'select-on-blur=true\' option', function () { + + var element = prepareInputEl('
'); + var inputEl = findInput(element); + + changeInputValueTo(element, 'b'); + inputEl.blur(); // input loses focus + + // no change + expect($scope.result).toEqual('b'); + expect(inputEl.val()).toEqual('b'); + }); + + it('should select a match on blur with \'select-on-blur=true\' option', function () { + + var element = prepareInputEl('
'); + var inputEl = findInput(element); + + changeInputValueTo(element, 'b'); + inputEl.blur(); // input loses focus + + // first element should be selected + expect($scope.result).toEqual('bar'); + expect(inputEl.val()).toEqual('bar'); + }); + it('should select match on click', function () { var element = prepareInputEl('
');