From e0eb1bce3794c52733140330b8d6b0a8e6eae2a8 Mon Sep 17 00:00:00 2001 From: Tasos Bekos Date: Sat, 19 Apr 2014 12:36:57 +0300 Subject: [PATCH] fix(datepicker): parse input using dateParser Fixes #1289 Closes #2085 --- src/datepicker/datepicker.js | 9 ++++----- src/datepicker/docs/demo.js | 2 +- src/datepicker/test/datepicker.spec.js | 13 +++++++++++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 09c1cff706..691f6e05bd 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -1,4 +1,4 @@ -angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.position']) +angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position']) .constant('datepickerConfig', { formatDay: 'dd', @@ -430,8 +430,8 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.position']) showButtonBar: true }) -.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'datepickerPopupConfig', -function ($compile, $parse, $document, $position, dateFilter, datepickerPopupConfig) { +.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig', +function ($compile, $parse, $document, $position, dateFilter, dateParser, datepickerPopupConfig) { return { restrict: 'EA', require: 'ngModel', @@ -489,7 +489,6 @@ function ($compile, $parse, $document, $position, dateFilter, datepickerPopupCon datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })'); } - // TODO: reverse from dateFilter string to Date object function parseDate(viewValue) { if (!viewValue) { ngModel.$setValidity('date', true); @@ -498,7 +497,7 @@ function ($compile, $parse, $document, $position, dateFilter, datepickerPopupCon ngModel.$setValidity('date', true); return viewValue; } else if (angular.isString(viewValue)) { - var date = new Date(viewValue); + var date = dateParser.parse(viewValue, dateFormat) || new Date(viewValue); if (isNaN(date)) { ngModel.$setValidity('date', false); return undefined; diff --git a/src/datepicker/docs/demo.js b/src/datepicker/docs/demo.js index c9e7a64442..deff596a56 100644 --- a/src/datepicker/docs/demo.js +++ b/src/datepicker/docs/demo.js @@ -31,6 +31,6 @@ var DatepickerDemoCtrl = function ($scope) { }; $scope.initDate = new Date('2016-15-20'); - $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'shortDate']; + $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate']; $scope.format = $scope.formats[0]; }; diff --git a/src/datepicker/test/datepicker.spec.js b/src/datepicker/test/datepicker.spec.js index a4bc60d29d..d0eedd28d6 100644 --- a/src/datepicker/test/datepicker.spec.js +++ b/src/datepicker/test/datepicker.spec.js @@ -1351,6 +1351,19 @@ describe('datepicker directive', function () { }); }); + describe('european format', function () { + it('dd.MM.yyyy', function() { + var wrapElement = $compile('
')($rootScope); + $rootScope.$digest(); + assignElements(wrapElement); + + changeInputValueTo(inputEl, '11.08.2013'); + expect($rootScope.date.getFullYear()).toEqual(2013); + expect($rootScope.date.getMonth()).toEqual(7); + expect($rootScope.date.getDate()).toEqual(11); + }); + }); + describe('`close-on-date-selection` attribute', function () { beforeEach(inject(function() { $rootScope.close = false;