Skip to content
This repository was archived by the owner on May 29, 2019. It is now read-only.

Commit e283cea

Browse files
committed
fix(datepicker): stop event bubbling from buttons
- Stop event bubbling from clicks in popup Closes #5400 Fixes #5347 BREAKING CHANGE: This requires $event to be passed in the second argument of the select function and in the close argument for the popup template
1 parent 853d302 commit e283cea

File tree

3 files changed

+62
-7
lines changed

3 files changed

+62
-7
lines changed

src/datepicker/datepicker.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -939,7 +939,9 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
939939
}
940940
};
941941

942-
scope.select = function(date) {
942+
scope.select = function(date, evt) {
943+
evt.stopPropagation();
944+
943945
if (date === 'today') {
944946
var today = new Date();
945947
if (angular.isDate(scope.date)) {
@@ -952,7 +954,9 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
952954
scope.dateSelection(date);
953955
};
954956

955-
scope.close = function() {
957+
scope.close = function(evt) {
958+
evt.stopPropagation();
959+
956960
scope.isOpen = false;
957961
element[0].focus();
958962
};

src/datepicker/test/datepicker.spec.js

+51
Original file line numberDiff line numberDiff line change
@@ -1638,6 +1638,57 @@ describe('datepicker', function() {
16381638
});
16391639
});
16401640

1641+
describe('basic popup', function() {
1642+
var wrapElement, inputEl, dropdownEl;
1643+
1644+
function assignElements(wrapElement) {
1645+
inputEl = wrapElement.find('input');
1646+
dropdownEl = wrapElement.find('ul');
1647+
element = dropdownEl.find('table');
1648+
}
1649+
1650+
beforeEach(function() {
1651+
$rootScope.date = new Date('September 30, 2010 15:30:00');
1652+
$rootScope.isopen = true;
1653+
wrapElement = $compile('<div><input ng-model="date" uib-datepicker-popup is-open="isopen"></div>')($rootScope);
1654+
$rootScope.$digest();
1655+
assignElements(wrapElement);
1656+
});
1657+
1658+
it('should stop click event from bubbling from today button', function() {
1659+
var bubbled = false;
1660+
wrapElement.on('click', function() {
1661+
bubbled = true;
1662+
});
1663+
1664+
wrapElement.find('.uib-datepicker-current').trigger('click');
1665+
1666+
expect(bubbled).toBe(false);
1667+
});
1668+
1669+
it('should stop click event from bubbling from clear button', function() {
1670+
var bubbled = false;
1671+
wrapElement.on('click', function() {
1672+
bubbled = true;
1673+
});
1674+
1675+
wrapElement.find('.uib-clear').trigger('click');
1676+
1677+
expect(bubbled).toBe(false);
1678+
});
1679+
1680+
it('should stop click event from bubbling from close button', function() {
1681+
var bubbled = false;
1682+
wrapElement.on('click', function() {
1683+
bubbled = true;
1684+
});
1685+
1686+
wrapElement.find('.uib-close').trigger('click');
1687+
1688+
expect(bubbled).toBe(false);
1689+
});
1690+
});
1691+
16411692
describe('ngModelOptions allowInvalid', function() {
16421693
var $sniffer, inputEl;
16431694

template/datepicker/popup.html

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
<ul class="uib-datepicker-popup dropdown-menu" dropdown-nested ng-if="isOpen" ng-style="{top: position.top+'px', left: position.left+'px'}" ng-keydown="keydown($event)" ng-click="$event.stopPropagation()">
33
<li ng-transclude></li>
44
<li ng-if="showButtonBar" class="uib-button-bar">
5-
<span class="btn-group pull-left">
6-
<button type="button" class="btn btn-sm btn-info uib-datepicker-current" ng-click="select('today')" ng-disabled="isDisabled('today')">{{ getText('current') }}</button>
7-
<button type="button" class="btn btn-sm btn-danger uib-clear" ng-click="select(null)">{{ getText('clear') }}</button>
8-
</span>
9-
<button type="button" class="btn btn-sm btn-success pull-right uib-close" ng-click="close()">{{ getText('close') }}</button>
5+
<span class="btn-group pull-left">
6+
<button type="button" class="btn btn-sm btn-info uib-datepicker-current" ng-click="select('today', $event)" ng-disabled="isDisabled('today')">{{ getText('current') }}</button>
7+
<button type="button" class="btn btn-sm btn-danger uib-clear" ng-click="select(null, $event)">{{ getText('clear') }}</button>
8+
</span>
9+
<button type="button" class="btn btn-sm btn-success pull-right uib-close" ng-click="close($event)">{{ getText('close') }}</button>
1010
</li>
1111
</ul>
1212
</div>

0 commit comments

Comments
 (0)