From 9f593baf0cd608c64d230c15406fb32352f00e12 Mon Sep 17 00:00:00 2001 From: RobJacobs Date: Mon, 20 Jul 2015 08:08:55 -0400 Subject: [PATCH] refactor(datepicker): move popup document click bind Moved the datepicker popup document click bind to a timeout so having preventDefault and stopPropagation on the element click event triggering the popup to be open is no longer necessary. Closes #3972 Fixes #3705 --- src/datepicker/datepicker.js | 3 +-- src/datepicker/docs/demo.js | 3 --- src/datepicker/test/datepicker.spec.js | 6 ++++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 9523a95fce..99acc7a87d 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -710,10 +710,9 @@ function ($compile, $parse, $document, $position, dateFilter, dateParser, datepi scope.position = appendToBody ? $position.offset(element) : $position.position(element); scope.position.top = scope.position.top + element.prop('offsetHeight'); - $document.bind('click', documentClickBind); - $timeout(function() { scope.$broadcast('datepicker.focus'); + $document.bind('click', documentClickBind); }, 0, false); } else { $document.unbind('click', documentClickBind); diff --git a/src/datepicker/docs/demo.js b/src/datepicker/docs/demo.js index 1412d392c4..b01af2277c 100644 --- a/src/datepicker/docs/demo.js +++ b/src/datepicker/docs/demo.js @@ -19,9 +19,6 @@ angular.module('ui.bootstrap.demo').controller('DatepickerDemoCtrl', function ($ $scope.toggleMin(); $scope.open = function($event) { - $event.preventDefault(); - $event.stopPropagation(); - $scope.opened = true; }; diff --git a/src/datepicker/test/datepicker.spec.js b/src/datepicker/test/datepicker.spec.js index 03909d89cd..9ebb52e0bf 100644 --- a/src/datepicker/test/datepicker.spec.js +++ b/src/datepicker/test/datepicker.spec.js @@ -1184,7 +1184,7 @@ describe('datepicker directive', function () { }); describe('as popup', function () { - var inputEl, dropdownEl, $document, $sniffer; + var inputEl, dropdownEl, $document, $sniffer, $timeout; function assignElements(wrapElement) { inputEl = wrapElement.find('input'); @@ -1221,9 +1221,10 @@ describe('datepicker directive', function () { describe('initially opened', function () { var wrapElement; - beforeEach(inject(function(_$document_, _$sniffer_) { + beforeEach(inject(function(_$document_, _$sniffer_, _$timeout_) { $document = _$document_; $sniffer = _$sniffer_; + $timeout = _$timeout_; $rootScope.isopen = true; $rootScope.date = new Date('September 30, 2010 15:30:00'); wrapElement = $compile('
')($rootScope); @@ -1295,6 +1296,7 @@ describe('datepicker directive', function () { it('closes when click outside of calendar', function() { expect(dropdownEl.length).toBe(1); + $timeout.flush(0); $document.find('body').click(); assignElements(wrapElement); expect(dropdownEl.length).toBe(0);