From 43dcf49c80d3d06bb3b0f0008a4598d68d69994a Mon Sep 17 00:00:00 2001 From: piebev Date: Fri, 26 Aug 2016 10:27:57 +0200 Subject: [PATCH 1/4] make sure the focus has shifted before sending the activate event, prevents losing keystrokes --- src/uiSelectController.js | 10 ++++++---- src/uiSelectSingleDirective.js | 3 +-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/uiSelectController.js b/src/uiSelectController.js index 7ef150625..12b9a11b1 100644 --- a/src/uiSelectController.js +++ b/src/uiSelectController.js @@ -111,8 +111,6 @@ uis.controller('uiSelectCtrl', if (!ctrl.disabled && !ctrl.open) { if(!avoidReset) _resetSearchInput(); - $scope.$broadcast('uis:activate'); - ctrl.open = true; ctrl.activeIndex = ctrl.activeIndex >= ctrl.items.length ? 0 : ctrl.activeIndex; @@ -163,8 +161,12 @@ uis.controller('uiSelectCtrl', }; ctrl.focusSearchInput = function (initSearchValue) { - ctrl.search = initSearchValue || ctrl.search; + if (initSearchValue) { + ctrl.search = initSearchValue.val() || ctrl.search; + initSearchValue.val(''); + } ctrl.searchInput[0].focus(); + $scope.$broadcast('uis:activate'); }; ctrl.findGroupByName = function(name) { @@ -423,7 +425,7 @@ uis.controller('uiSelectCtrl', ctrl.close(skipFocusser); return; } - } + } _resetSearchInput(); $scope.$broadcast('uis:select', item); diff --git a/src/uiSelectSingleDirective.js b/src/uiSelectSingleDirective.js index 73abedd23..93ce43ec6 100644 --- a/src/uiSelectSingleDirective.js +++ b/src/uiSelectSingleDirective.js @@ -112,8 +112,7 @@ uis.directive('uiSelectSingle', ['$timeout','$compile', function($timeout, $comp return; } - $select.activate(focusser.val()); //User pressed some regular key, so we pass it to the search input - focusser.val(''); + $select.activate(focusser); //User pressed some regular key, so we pass it to the search input scope.$digest(); }); From 90ac6f59fc27691a681e43aef8f6bb0bf1c10756 Mon Sep 17 00:00:00 2001 From: piebev Date: Mon, 29 Aug 2016 21:45:55 +0200 Subject: [PATCH 2/4] fix(search): make sure no keystrokes are lost at start of search --- src/uiSelectController.js | 16 ++++++++-------- src/uiSelectSingleDirective.js | 6 +++++- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/uiSelectController.js b/src/uiSelectController.js index 12b9a11b1..7656c599f 100644 --- a/src/uiSelectController.js +++ b/src/uiSelectController.js @@ -129,13 +129,13 @@ uis.controller('uiSelectCtrl', // Only focus input after the animation has finished ctrl.$animate.off('removeClass', searchInput[0], animateHandler); $timeout(function () { - ctrl.focusSearchInput(initSearchValue); + ctrl.focusSearchInput(); }); } else if (phase === 'close') { // Only focus input after the animation has finished ctrl.$animate.off('enter', container[0], animateHandler); $timeout(function () { - ctrl.focusSearchInput(initSearchValue); + ctrl.focusSearchInput(); }); } }; @@ -147,7 +147,7 @@ uis.controller('uiSelectCtrl', } } else { $timeout(function () { - ctrl.focusSearchInput(initSearchValue); + ctrl.focusSearchInput(); if(!ctrl.tagging.isActivated && ctrl.items.length > 1) { _ensureHighlightVisible(); } @@ -160,11 +160,11 @@ uis.controller('uiSelectCtrl', } }; - ctrl.focusSearchInput = function (initSearchValue) { - if (initSearchValue) { - ctrl.search = initSearchValue.val() || ctrl.search; - initSearchValue.val(''); - } + ctrl.initSearch = function(searchValue) { + ctrl.search = searchValue || ctrl.search; + }; + + ctrl.focusSearchInput = function () { ctrl.searchInput[0].focus(); $scope.$broadcast('uis:activate'); }; diff --git a/src/uiSelectSingleDirective.js b/src/uiSelectSingleDirective.js index 93ce43ec6..931fcb26b 100644 --- a/src/uiSelectSingleDirective.js +++ b/src/uiSelectSingleDirective.js @@ -78,11 +78,15 @@ uis.directive('uiSelectSingle', ['$timeout','$compile', function($timeout, $comp $select.focus = true; }); }); + focusser.bind("blur", function(){ scope.$evalAsync(function(){ $select.focus = false; + $select.initSearch(focusser.val()); + focusser.val(''); }); }); + focusser.bind("keydown", function(e){ if (e.which === KEY.BACKSPACE) { @@ -112,7 +116,7 @@ uis.directive('uiSelectSingle', ['$timeout','$compile', function($timeout, $comp return; } - $select.activate(focusser); //User pressed some regular key, so we pass it to the search input + $select.activate(); //User pressed some regular key, so we activate the search input scope.$digest(); }); From 721a85b8135baf3aeaa86824e5af92a4e33e48ca Mon Sep 17 00:00:00 2001 From: piebev Date: Thu, 13 Apr 2017 15:16:00 +0200 Subject: [PATCH 3/4] fix the loss of the first character in IE --- src/uiSelectController.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/uiSelectController.js b/src/uiSelectController.js index 7656c599f..eef8105ba 100644 --- a/src/uiSelectController.js +++ b/src/uiSelectController.js @@ -166,6 +166,7 @@ uis.controller('uiSelectCtrl', ctrl.focusSearchInput = function () { ctrl.searchInput[0].focus(); + ctrl.focusser.trigger('blur'); // in all browsers but IE the focus causes a blur, for IEs sake force a blur $scope.$broadcast('uis:activate'); }; From e001aa084cd772a043f350b001401461667164a2 Mon Sep 17 00:00:00 2001 From: piebev Date: Thu, 13 Apr 2017 16:15:05 +0200 Subject: [PATCH 4/4] only blur the focusser if it is there --- src/uiSelectController.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/uiSelectController.js b/src/uiSelectController.js index eef8105ba..5432e46a0 100644 --- a/src/uiSelectController.js +++ b/src/uiSelectController.js @@ -166,7 +166,9 @@ uis.controller('uiSelectCtrl', ctrl.focusSearchInput = function () { ctrl.searchInput[0].focus(); - ctrl.focusser.trigger('blur'); // in all browsers but IE the focus causes a blur, for IEs sake force a blur + if (ctrl.focusser) { + ctrl.focusser.trigger('blur'); // in all browsers but IE the focus causes a blur, for IEs sake force a blur + } $scope.$broadcast('uis:activate'); };