From 1e037c7cf8ec7e1937c30afa5350cd635b533bba Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Mon, 22 Jun 2015 13:24:49 +1000 Subject: [PATCH 01/14] Update datepicker.js --- src/datepicker/datepicker.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index a98b48dc7e..4e05828ef8 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -43,6 +43,16 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst } }); + angular.forEach(['minMode', 'maxMode'], function( key ) { + if ( $attrs[key] ) { + $scope.$parent.$watch($parse($attrs[key]), function(value) { + self[key] = value; + }); + } else { + self[key] = datepickerConfig[key] || null; + } + }); + $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode; $scope.maxMode = self.maxMode; $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000); From b798baab0769f3b518a0981807bb8f6a656ece4a Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Mon, 22 Jun 2015 15:32:32 +1000 Subject: [PATCH 02/14] Update datepicker.js --- src/datepicker/datepicker.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 4e05828ef8..c489e8dea6 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -27,8 +27,8 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst // Configuration attributes angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle', - 'minMode', 'maxMode', 'showWeeks', 'startingDay', 'yearRange', 'shortcutPropagation'], function( key, index ) { - self[key] = angular.isDefined($attrs[key]) ? (index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key]; + 'showWeeks', 'startingDay', 'yearRange', 'shortcutPropagation'], function( key, index ) { + self[key] = angular.isDefined($attrs[key]) ? (index < 6 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key]; }); // Watchable date attributes @@ -54,7 +54,6 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst }); $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode; - $scope.maxMode = self.maxMode; $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000); if(angular.isDefined($attrs.initDate)) { From 22ce695b5f0e6c2382b4545b945f22d3fcac4abc Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Mon, 22 Jun 2015 15:49:59 +1000 Subject: [PATCH 03/14] Update datepicker.js --- src/datepicker/datepicker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index c489e8dea6..049bf5f9df 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -46,7 +46,7 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst angular.forEach(['minMode', 'maxMode'], function( key ) { if ( $attrs[key] ) { $scope.$parent.$watch($parse($attrs[key]), function(value) { - self[key] = value; + self[key] = angular.isDefined(value) ? value : $attrs[key]; }); } else { self[key] = datepickerConfig[key] || null; From 02ab748accd3ca2a198a70d0fd78907ce1c276d3 Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Tue, 23 Jun 2015 10:29:40 +1000 Subject: [PATCH 04/14] Update datepicker.js --- src/datepicker/datepicker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 049bf5f9df..96fdee2e00 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -47,6 +47,7 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst if ( $attrs[key] ) { $scope.$parent.$watch($parse($attrs[key]), function(value) { self[key] = angular.isDefined(value) ? value : $attrs[key]; + $scope[key] = self[key]; }); } else { self[key] = datepickerConfig[key] || null; From 1add89c431da9c5c78b996e7f64b695309fb88af Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Tue, 23 Jun 2015 10:42:23 +1000 Subject: [PATCH 05/14] Update datepicker.js --- src/datepicker/datepicker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 96fdee2e00..82b44a1a80 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -47,11 +47,11 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst if ( $attrs[key] ) { $scope.$parent.$watch($parse($attrs[key]), function(value) { self[key] = angular.isDefined(value) ? value : $attrs[key]; - $scope[key] = self[key]; }); } else { self[key] = datepickerConfig[key] || null; } + $scope[key] = self[key]; }); $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode; From ae9371d12f28efd5fa6c51770a00fca346655dba Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Tue, 23 Jun 2015 10:50:32 +1000 Subject: [PATCH 06/14] Update datepicker.js --- src/datepicker/datepicker.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 82b44a1a80..3e54c5f236 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -47,11 +47,12 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst if ( $attrs[key] ) { $scope.$parent.$watch($parse($attrs[key]), function(value) { self[key] = angular.isDefined(value) ? value : $attrs[key]; + $scope[key] = self[key]; }); } else { self[key] = datepickerConfig[key] || null; + $scope[key] = self[key]; } - $scope[key] = self[key]; }); $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode; From 7269f7fb35f45dfab99e2c103ff311ff40aee7fb Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Tue, 14 Jul 2015 15:19:20 +1000 Subject: [PATCH 07/14] Update datepicker.js --- src/datepicker/datepicker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 3e54c5f236..86114ca082 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -557,7 +557,7 @@ function ($compile, $parse, $document, $position, dateFilter, dateParser, datepi } scope.watchData = {}; - angular.forEach(['minDate', 'maxDate', 'datepickerMode', 'initDate', 'shortcutPropagation'], function( key ) { + angular.forEach(['minMode', 'maxMode', 'minDate', 'maxDate', 'datepickerMode', 'initDate', 'shortcutPropagation'], function( key ) { if ( attrs[key] ) { var getAttribute = $parse(attrs[key]); scope.$parent.$watch(getAttribute, function(value){ From 5d3c023a8cbc513587db3f328f5a7c2cfd65cfdd Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Tue, 14 Jul 2015 15:26:58 +1000 Subject: [PATCH 08/14] Update datepicker.js --- src/datepicker/datepicker.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 86114ca082..489878c825 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -47,11 +47,9 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst if ( $attrs[key] ) { $scope.$parent.$watch($parse($attrs[key]), function(value) { self[key] = angular.isDefined(value) ? value : $attrs[key]; - $scope[key] = self[key]; }); } else { self[key] = datepickerConfig[key] || null; - $scope[key] = self[key]; } }); From 126b6476876dbb2e95e09c8aab99823b35f83ef6 Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Tue, 14 Jul 2015 15:32:02 +1000 Subject: [PATCH 09/14] Update datepicker.js --- src/datepicker/datepicker.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 489878c825..0b0c213a9d 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -47,9 +47,11 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst if ( $attrs[key] ) { $scope.$parent.$watch($parse($attrs[key]), function(value) { self[key] = angular.isDefined(value) ? value : $attrs[key]; + $scope[key] = self[key]; }); } else { self[key] = datepickerConfig[key] || null; + $scope[key] = self[key]; } }); From e3c53ac96872ddf88f45991bcc48f556905869f0 Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Mon, 20 Jul 2015 13:59:48 +1000 Subject: [PATCH 10/14] Update datepicker.js --- src/datepicker/datepicker.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js index 0b0c213a9d..e9f29a6e2d 100644 --- a/src/datepicker/datepicker.js +++ b/src/datepicker/datepicker.js @@ -48,6 +48,9 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst $scope.$parent.$watch($parse($attrs[key]), function(value) { self[key] = angular.isDefined(value) ? value : $attrs[key]; $scope[key] = self[key]; + if ((key == 'minMode' && self.modes.indexOf( $scope.datepickerMode ) < self.modes.indexOf( self[key] )) || (key == 'maxMode' && self.modes.indexOf( $scope.datepickerMode ) > self.modes.indexOf( self[key] ))) { + $scope.datepickerMode = self[key]; + } }); } else { self[key] = datepickerConfig[key] || null; From 27d5f1924a0da2c3acdec00a3257a3f7e703100e Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Mon, 20 Jul 2015 14:18:24 +1000 Subject: [PATCH 11/14] Update datepicker.spec.js --- src/datepicker/test/datepicker.spec.js | 32 ++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/datepicker/test/datepicker.spec.js b/src/datepicker/test/datepicker.spec.js index 09aa37e26b..53166d3003 100644 --- a/src/datepicker/test/datepicker.spec.js +++ b/src/datepicker/test/datepicker.spec.js @@ -2054,7 +2054,8 @@ describe('datepicker directive', function () { beforeEach(inject(function() { $rootScope.date = new Date('August 11, 2013'); $rootScope.mode = 'month'; - element = $compile('')($rootScope); + $rootScope.minMode = 'month'; + element = $compile('')($rootScope); $rootScope.$digest(); })); @@ -2064,13 +2065,23 @@ describe('datepicker directive', function () { expect(getTitle()).toBe('2013'); clickTitleButton(); expect(getTitle()).toBe('2001 - 2020'); + $rootScope.minMode = 'year'; + clickOption( 5 ); + expect(getTitle()).toBe('2001 - 2020'); }); + + it('updates current mode if necessary', function() { + expect(getTitle()).toBe('2013'); + $rootScope.minMode = 'year'; + expect(getTitle()).toBe('2001 - 2020'); + } }); describe('`max-mode`', function () { beforeEach(inject(function() { $rootScope.date = new Date('August 11, 2013'); - element = $compile('')($rootScope); + $rootScope.maxMode = 'month'; + element = $compile('')($rootScope); $rootScope.$digest(); })); @@ -2080,6 +2091,11 @@ describe('datepicker directive', function () { expect(getTitle()).toBe('2013'); clickTitleButton(); expect(getTitle()).toBe('2013'); + clickOption( 10 ); + expect(getTitle()).toBe('September 2013'); + $rootScope.maxMode = 'day'; + clickTitleButton(); + expect(getTitle()).toBe('September 2013'); }); it('disables the title button at it', function() { @@ -2088,7 +2104,19 @@ describe('datepicker directive', function () { expect(getTitleButton().prop('disabled')).toBe(true); clickTitleButton(); expect(getTitleButton().prop('disabled')).toBe(true); + clickOption( 10 ); + expect(getTitleButton().prop('disabled')).toBe(false); + $rootScope.maxMode = 'day'; + expect(getTitleButton().prop('disabled')).toBe(true); }); + + it('updates current mode if necessary', function() { + expect(getTitle()).toBe('August 2013'); + clickTitleButton(); + expect(getTitle()).toBe('2013'); + $rootScope.maxMode = 'day'; + expect(getTitle()).toBe('August 2013'); + } }); describe('with an ngModelController having formatters and parsers', function() { From ad2c9029d2d1251d67c259ed7ad3fb8fa30469d8 Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Mon, 20 Jul 2015 14:22:56 +1000 Subject: [PATCH 12/14] Update datepicker.spec.js --- src/datepicker/test/datepicker.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/datepicker/test/datepicker.spec.js b/src/datepicker/test/datepicker.spec.js index 53166d3003..bbaae21451 100644 --- a/src/datepicker/test/datepicker.spec.js +++ b/src/datepicker/test/datepicker.spec.js @@ -2074,7 +2074,7 @@ describe('datepicker directive', function () { expect(getTitle()).toBe('2013'); $rootScope.minMode = 'year'; expect(getTitle()).toBe('2001 - 2020'); - } + }); }); describe('`max-mode`', function () { @@ -2116,7 +2116,7 @@ describe('datepicker directive', function () { expect(getTitle()).toBe('2013'); $rootScope.maxMode = 'day'; expect(getTitle()).toBe('August 2013'); - } + }); }); describe('with an ngModelController having formatters and parsers', function() { From 7791099458c6840b6d5f9076889d8742708884c8 Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Mon, 20 Jul 2015 14:42:13 +1000 Subject: [PATCH 13/14] Update datepicker.spec.js --- src/datepicker/test/datepicker.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/datepicker/test/datepicker.spec.js b/src/datepicker/test/datepicker.spec.js index bbaae21451..b6d20c1453 100644 --- a/src/datepicker/test/datepicker.spec.js +++ b/src/datepicker/test/datepicker.spec.js @@ -2092,10 +2092,10 @@ describe('datepicker directive', function () { clickTitleButton(); expect(getTitle()).toBe('2013'); clickOption( 10 ); - expect(getTitle()).toBe('September 2013'); + expect(getTitle()).toBe('November 2013'); $rootScope.maxMode = 'day'; clickTitleButton(); - expect(getTitle()).toBe('September 2013'); + expect(getTitle()).toBe('November 2013'); }); it('disables the title button at it', function() { From e47079d5170df9cae5e2546a979ec744a04eac26 Mon Sep 17 00:00:00 2001 From: Slimmmo Date: Mon, 20 Jul 2015 14:45:55 +1000 Subject: [PATCH 14/14] Update datepicker.spec.js --- src/datepicker/test/datepicker.spec.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/datepicker/test/datepicker.spec.js b/src/datepicker/test/datepicker.spec.js index b6d20c1453..4ffa5f1a20 100644 --- a/src/datepicker/test/datepicker.spec.js +++ b/src/datepicker/test/datepicker.spec.js @@ -2066,6 +2066,7 @@ describe('datepicker directive', function () { clickTitleButton(); expect(getTitle()).toBe('2001 - 2020'); $rootScope.minMode = 'year'; + $rootScope.$digest(); clickOption( 5 ); expect(getTitle()).toBe('2001 - 2020'); }); @@ -2073,6 +2074,7 @@ describe('datepicker directive', function () { it('updates current mode if necessary', function() { expect(getTitle()).toBe('2013'); $rootScope.minMode = 'year'; + $rootScope.$digest(); expect(getTitle()).toBe('2001 - 2020'); }); }); @@ -2094,6 +2096,7 @@ describe('datepicker directive', function () { clickOption( 10 ); expect(getTitle()).toBe('November 2013'); $rootScope.maxMode = 'day'; + $rootScope.$digest(); clickTitleButton(); expect(getTitle()).toBe('November 2013'); }); @@ -2107,6 +2110,7 @@ describe('datepicker directive', function () { clickOption( 10 ); expect(getTitleButton().prop('disabled')).toBe(false); $rootScope.maxMode = 'day'; + $rootScope.$digest(); expect(getTitleButton().prop('disabled')).toBe(true); }); @@ -2115,6 +2119,7 @@ describe('datepicker directive', function () { clickTitleButton(); expect(getTitle()).toBe('2013'); $rootScope.maxMode = 'day'; + $rootScope.$digest(); expect(getTitle()).toBe('August 2013'); }); });