Skip to content

Commit 87dcd80

Browse files
committed
Merge pull request uxsolutions#232 from camupod/develop
daysOfWeekDisabled option/method
2 parents f841408 + ae335b8 commit 87dcd80

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ Date. Default: End of time
128128

129129
The latest date that may be selected; all later dates will be disabled.
130130

131+
### daysOfWeekDisabled
132+
133+
String, Array. Default: '', []
134+
135+
Days of the week that should be disabled. Values are 0 (Sunday) to 6 (Saturday). Multiple values should be comma-separated. Example: disable weekends: `'0,6'` or `[0,6]`.
136+
131137
### autoclose
132138

133139
Boolean. Default: false
@@ -248,6 +254,21 @@ Omit endDate (or provide an otherwise falsey value) to unset the limit.
248254
$('#datepicker').datepicker('setEndDate');
249255
$('#datepicker').datepicker('setEndDate', null);
250256

257+
### setDaysOfWeekDisabled
258+
259+
Arguments:
260+
261+
* daysOfWeekDisabled (String|Array)
262+
263+
Sets the days of week that should be disabled.
264+
265+
$('#datepicker').datepicker('setDaysOfWeekDisabled', [0,6]);
266+
267+
Omit daysOfWeekDisabled (or provide an otherwise falsey value) to unset the disabled days.
268+
269+
$('#datepicker').datepicker('setDaysOfWeekDisabled');
270+
$('#datepicker').datepicker('setDaysOfWeekDisabled', null);
271+
251272
## Events
252273

253274
Datepicker class exposes a few events for manipulating the dates.

js/bootstrap-datepicker.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,10 @@
101101
this.weekEnd = ((this.weekStart + 6) % 7);
102102
this.startDate = -Infinity;
103103
this.endDate = Infinity;
104+
this.daysOfWeekDisabled = [];
104105
this.setStartDate(options.startDate||this.element.data('date-startdate'));
105106
this.setEndDate(options.endDate||this.element.data('date-enddate'));
107+
this.setDaysOfWeekDisabled(options.daysOfWeekDisabled||this.element.data('date-days-of-week-disabled'));
106108
this.fillDow();
107109
this.fillMonths();
108110
this.update();
@@ -252,6 +254,18 @@
252254
this.updateNavArrows();
253255
},
254256

257+
setDaysOfWeekDisabled: function(daysOfWeekDisabled){
258+
this.daysOfWeekDisabled = daysOfWeekDisabled||[];
259+
if (!$.isArray(this.daysOfWeekDisabled)) {
260+
this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/);
261+
}
262+
this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) {
263+
return parseInt(d, 10);
264+
});
265+
this.update();
266+
this.updateNavArrows();
267+
},
268+
255269
place: function(){
256270
var zIndex = parseInt(this.element.parents().filter(function() {
257271
return $(this).css('z-index') != 'auto';
@@ -344,7 +358,8 @@
344358
if (prevMonth.valueOf() == currentDate) {
345359
clsName += ' active';
346360
}
347-
if (prevMonth.valueOf() < this.startDate || prevMonth.valueOf() > this.endDate) {
361+
if (prevMonth.valueOf() < this.startDate || prevMonth.valueOf() > this.endDate ||
362+
this.daysOfWeekDisabled.indexOf(prevMonth.getUTCDay()) > -1) {
348363
clsName += ' disabled';
349364
}
350365
html.push('<td class="day'+clsName+'">'+prevMonth.getUTCDate() + '</td>');

tests/suites/options.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,24 @@ test('Today Highlight: today\'s date is highlighted when not active', patch_date
262262
ok(!target.hasClass('today'), 'Tomorrow is not marked with "today" class');
263263
}));
264264

265+
test('DaysOfWeekDisabled', function(){
266+
var input = $('<input />')
267+
.appendTo('#qunit-fixture')
268+
.val('2012-10-26')
269+
.datepicker({
270+
format: 'yyyy-mm-dd',
271+
daysOfWeekDisabled: '1,5'
272+
}),
273+
dp = input.data('datepicker'),
274+
picker = dp.picker,
275+
target;
276+
277+
278+
input.focus();
279+
target = picker.find('.datepicker-days tbody td:nth(22)');
280+
ok(target.hasClass('disabled'), 'Day of week is disabled');
281+
target = picker.find('.datepicker-days tbody td:nth(24)');
282+
ok(!target.hasClass('disabled'), 'Day of week is enabled');
283+
target = picker.find('.datepicker-days tbody td:nth(26)');
284+
ok(target.hasClass('disabled'), 'Day of week is disabled');
285+
});

0 commit comments

Comments
 (0)