Skip to content

Commit 60cbfca

Browse files
committed
Add open-on-focus option to datepicker popup
This change is based on angular-ui#2515, except it uses scope.$apply instead of $timeout, and adds datepickerPopupConfig.openOnFocus instead of scope variable @openOnFocus.
1 parent e9b9eb0 commit 60cbfca

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

src/datepicker/datepicker.js

+19-4
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,8 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
457457
closeText: 'Done',
458458
closeOnDateSelection: true,
459459
appendToBody: false,
460-
showButtonBar: true
460+
showButtonBar: true,
461+
openOnFocus: false
461462
})
462463

463464
.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig',
@@ -476,7 +477,8 @@ function ($compile, $parse, $document, $position, dateFilter, dateParser, datepi
476477
link: function(scope, element, attrs, ngModel) {
477478
var dateFormat,
478479
closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection,
479-
appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;
480+
appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody,
481+
openOnFocus = angular.isDefined(attrs.datepickerOpenOnFocus) ? scope.$parent.$eval(attrs.datepickerOpenOnFocus) : datepickerPopupConfig.openOnFocus;
480482

481483
scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;
482484

@@ -642,9 +644,11 @@ function ($compile, $parse, $document, $position, dateFilter, dateParser, datepi
642644
element.val(date);
643645
ngModel.$setViewValue(date);
644646

645-
if ( closeOnDateSelection ) {
647+
if (closeOnDateSelection) {
646648
scope.isOpen = false;
647-
element[0].focus();
649+
if (!openOnFocus) {
650+
element[0].focus();
651+
}
648652
}
649653
};
650654

@@ -677,6 +681,16 @@ function ($compile, $parse, $document, $position, dateFilter, dateParser, datepi
677681
scope.isOpen = true;
678682
}
679683
};
684+
685+
var focus = function() {
686+
scope.$apply(function () {
687+
scope.isOpen = true;
688+
});
689+
};
690+
691+
if (openOnFocus) {
692+
element.bind('focus', focus);
693+
}
680694

681695
scope.$watch('isOpen', function(value) {
682696
if (value) {
@@ -721,6 +735,7 @@ function ($compile, $parse, $document, $position, dateFilter, dateParser, datepi
721735
scope.$on('$destroy', function() {
722736
$popup.remove();
723737
element.unbind('keydown', keydown);
738+
element.unbind('focus', focus);
724739
$document.unbind('click', documentClickBind);
725740
});
726741
}

0 commit comments

Comments
 (0)