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

Commit 63ae06c

Browse files
bekospkozlowski-opensource
authored andcommitted
fix(datepicker): correct datepicker-mode binding for popup
Fixes #2180 Closes #2184
1 parent 5cd6f4a commit 63ae06c

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

Diff for: src/datepicker/datepicker.js

+17-5
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
3030
self[key] = angular.isDefined($attrs[key]) ? (index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key];
3131
});
3232

33-
// Watchable attributes
33+
// Watchable date attributes
3434
angular.forEach(['minDate', 'maxDate'], function( key ) {
3535
if ( $attrs[key] ) {
3636
$scope.$parent.$watch($parse($attrs[key]), function(value) {
@@ -477,12 +477,24 @@ function ($compile, $parse, $document, $position, dateFilter, dateParser, datepi
477477
});
478478
}
479479

480-
angular.forEach(['minDate', 'maxDate'], function( key ) {
480+
scope.watchData = {};
481+
angular.forEach(['minDate', 'maxDate', 'datepickerMode'], function( key ) {
481482
if ( attrs[key] ) {
482-
scope.$parent.$watch($parse(attrs[key]), function(value){
483-
scope[key] = value;
483+
var getAttribute = $parse(attrs[key]);
484+
scope.$parent.$watch(getAttribute, function(value){
485+
scope.watchData[key] = value;
484486
});
485-
datepickerEl.attr(cameltoDash(key), key);
487+
datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
488+
489+
// Propagate changes from datepicker to outside
490+
if ( key === 'datepickerMode' ) {
491+
var setAttribute = getAttribute.assign;
492+
scope.$watch('watchData.' + key, function(value, oldvalue) {
493+
if ( value !== oldvalue ) {
494+
setAttribute(scope.$parent, value);
495+
}
496+
});
497+
}
486498
}
487499
});
488500
if (attrs.dateDisabled) {

Diff for: src/datepicker/docs/demo.js

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ angular.module('ui.bootstrap.demo').controller('DatepickerDemoCtrl', function ($
3030
startingDay: 1
3131
};
3232

33-
$scope.initDate = new Date('2016-15-20');
3433
$scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
3534
$scope.format = $scope.formats[0];
3635
});

Diff for: src/datepicker/test/datepicker.spec.js

+19
Original file line numberDiff line numberDiff line change
@@ -1597,6 +1597,25 @@ describe('datepicker directive', function () {
15971597
}
15981598
});
15991599
});
1600+
1601+
describe('`datepicker-mode`', function () {
1602+
beforeEach(inject(function() {
1603+
$rootScope.date = new Date('August 11, 2013');
1604+
$rootScope.mode = 'month';
1605+
wrapElement = $compile('<div><input ng-model="date" datepicker-popup datepicker-mode="mode"></div>')($rootScope);
1606+
$rootScope.$digest();
1607+
assignElements(wrapElement);
1608+
}));
1609+
1610+
it('shows the correct title', function() {
1611+
expect(getTitle()).toBe('2013');
1612+
});
1613+
1614+
it('updates binding', function() {
1615+
clickTitleButton();
1616+
expect($rootScope.mode).toBe('year');
1617+
});
1618+
});
16001619
});
16011620

16021621
describe('with empty initial state', function () {

0 commit comments

Comments
 (0)