Skip to content

Commit 91f8183

Browse files
committed
fix(datepicker): fix broken weekStart handling, rename option to startWeek (fixes mgcrea#449)
1 parent 106507b commit 91f8183

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

src/datepicker/datepicker.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ angular.module('mgcrea.ngStrap.datepicker', ['mgcrea.ngStrap.helpers.dateParser'
2323
maxDate: +Infinity,
2424
startView: 0,
2525
minView: 0,
26-
weekStart: 0
26+
startWeek: 0
2727
};
2828

2929
this.$get = function($window, $document, $rootScope, $sce, $locale, dateFilter, datepickerViews, $tooltip) {
@@ -233,7 +233,7 @@ angular.module('mgcrea.ngStrap.datepicker', ['mgcrea.ngStrap.helpers.dateParser'
233233

234234
// Directive options
235235
var options = {scope: scope, controller: controller};
236-
angular.forEach(['placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'template', 'autoclose', 'dateType', 'dateFormat', 'useNative', 'lang', 'startView', 'minView'], function(key) {
236+
angular.forEach(['placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'template', 'autoclose', 'dateType', 'dateFormat', 'startWeek', 'useNative', 'lang', 'startView', 'minView'], function(key) {
237237
if(angular.isDefined(attr[key])) options[key] = attr[key];
238238
});
239239

@@ -351,8 +351,8 @@ angular.module('mgcrea.ngStrap.datepicker', ['mgcrea.ngStrap.helpers.dateParser'
351351
var options = picker.$options;
352352

353353
var weekDaysMin = $locale.DATETIME_FORMATS.SHORTDAY;
354-
var weekDaysLabels = weekDaysMin.slice(options.weekStart).concat(weekDaysMin.slice(0, options.weekStart));
355-
var dayLabelHtml = $sce.trustAsHtml('<th class="dow text-center">' + weekDaysLabels.join('</th><th class="dow text-center">') + '</th>');
354+
var weekDaysLabels = weekDaysMin.slice(options.startWeek).concat(weekDaysMin.slice(0, options.startWeek));
355+
var weekDaysLabelsHtml = $sce.trustAsHtml('<th class="dow text-center">' + weekDaysLabels.join('</th><th class="dow text-center">') + '</th>');
356356

357357
var startDate = picker.$date || new Date();
358358
var viewDate = {year: startDate.getFullYear(), month: startDate.getMonth(), date: startDate.getDate()};
@@ -373,14 +373,14 @@ angular.module('mgcrea.ngStrap.datepicker', ['mgcrea.ngStrap.helpers.dateParser'
373373
},
374374
build: function() {
375375
var firstDayOfMonth = new Date(viewDate.year, viewDate.month, 1);
376-
var firstDate = new Date(+firstDayOfMonth - (firstDayOfMonth.getDay() - options.weekStart) * 864e5);
376+
var firstDate = new Date(+firstDayOfMonth - (firstDayOfMonth.getDay() + options.startWeek) * 864e5);
377377
var days = [], day;
378378
for(var i = 0; i < 42; i++) { // < 7 * 6
379379
day = new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() + i);
380380
days.push({date: day, label: dateFilter(day, this.format), selected: picker.$date && this.isSelected(day), muted: day.getMonth() !== viewDate.month, disabled: this.isDisabled(day)});
381381
}
382382
scope.title = dateFilter(firstDayOfMonth, 'MMMM yyyy');
383-
scope.labels = dayLabelHtml;
383+
scope.labels = weekDaysLabelsHtml;
384384
scope.rows = split(days, this.split);
385385
this.built = true;
386386
},

src/datepicker/docs/datepicker.demo.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ <h4>This module supports exotic placement options!</h4>
195195
</td>
196196
</tr>
197197
<tr>
198-
<td>weekStart</td>
198+
<td>startWeek</td>
199199
<td>number</td>
200200
<td>1</td>
201201
<td>
@@ -215,7 +215,7 @@ <h4>Default options</h4>
215215
.config(function($datepickerProvider) {
216216
angular.extend($datepickerProvider.defaults, {
217217
dateFormat: 'dd/MM/yyyy',
218-
weekStart: 1
218+
startWeek: 1
219219
});
220220
})
221221
</code>

src/datepicker/test/datepicker.spec.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ describe('datepicker', function() {
5959
element: '<input type="text" ng-model="selectedDate" data-date-format="yyyy-MM-dd" bs-datepicker>'
6060
},
6161
'options-minDate': {
62-
scope: {selectedDate: new Date('02/22/86'), minDate: '02/20/86'},
62+
scope: {selectedDate: new Date(1986, 1, 22), minDate: '02/20/86'},
6363
element: '<input type="text" ng-model="selectedDate" data-min-date="{{minDate}}" bs-datepicker>'
6464
},
6565
'options-minDate-today': {
@@ -71,9 +71,13 @@ describe('datepicker', function() {
7171
element: '<input type="text" ng-model="selectedDate" data-max-date="today" bs-datepicker>'
7272
},
7373
'options-maxDate': {
74-
scope: {selectedDate: new Date('02/22/86'), maxDate: '02/24/86'},
74+
scope: {selectedDate: new Date(1986, 1, 22), maxDate: '02/24/86'},
7575
element: '<input type="text" ng-model="selectedDate" data-max-date="{{maxDate}}" bs-datepicker>'
7676
},
77+
'options-startWeek': {
78+
scope: {selectedDate: new Date(2015, 1, 22), startWeek: 1},
79+
element: '<input type="text" ng-model="selectedDate" data-start-week="{{startWeek}}" bs-datepicker>'
80+
},
7781
'options-autoclose': {
7882
element: '<input type="text" ng-model="selectedDate" data-autoclose="1" bs-datepicker>'
7983
},
@@ -118,7 +122,7 @@ describe('datepicker', function() {
118122
expect(sandboxEl.find('.dropdown-menu thead button:eq(1)').text()).toBe(dateFilter(today, 'MMMM yyyy'));
119123
var todayDate = today.getDate();
120124
var firstDate = sandboxEl.find('.dropdown-menu tbody .btn:eq(0)').text() * 1;
121-
expect(new Date(today.getFullYear(), today.getMonth() - (firstDate !== 1 ? 1 : 0), firstDate).getDay()).toBe($datepicker.defaults.weekStart);
125+
expect(new Date(today.getFullYear(), today.getMonth() - (firstDate !== 1 ? 1 : 0), firstDate).getDay()).toBe($datepicker.defaults.startWeek);
122126
});
123127

124128
it('should correctly display active date', function() {
@@ -418,6 +422,17 @@ describe('datepicker', function() {
418422

419423
});
420424

425+
describe('startWeek', function() {
426+
427+
it('should support a dynamic startWeek', function() {
428+
var elm = compileDirective('options-startWeek');
429+
angular.element(elm[0]).triggerHandler('focus');
430+
expect(sandboxEl.find('.dropdown-menu thead tr:eq(1) th:eq(0)').text()).toBe('Mon');
431+
expect(sandboxEl.find('.dropdown-menu tbody button:eq(0)').text()).toBe('31');
432+
});
433+
434+
});
435+
421436
describe('useNative', function() {
422437

423438
it('should correctly compile template according to useNative', function() {

0 commit comments

Comments
 (0)