@@ -57,8 +57,10 @@ const Default = {
57
57
maxDate : null ,
58
58
minDate : null ,
59
59
range : true ,
60
- startDate : null ,
60
+ selectAdjacementDays : false ,
61
61
selectEndDate : false ,
62
+ showAdjacementDays : true ,
63
+ startDate : null ,
62
64
weekdayFormat : 2
63
65
}
64
66
@@ -72,8 +74,10 @@ const DefaultType = {
72
74
maxDate : '(date|string|null)' ,
73
75
minDate : '(date|string|null)' ,
74
76
range : 'boolean' ,
75
- startDate : '(date|string|null) ' ,
77
+ selectAdjacementDays : 'boolean ' ,
76
78
selectEndDate : 'boolean' ,
79
+ showAdjacementDays : 'boolean' ,
80
+ startDate : '(date|string|null)' ,
77
81
weekdayFormat : '(number|string)'
78
82
}
79
83
@@ -116,7 +120,23 @@ class Calendar extends BaseComponent {
116
120
_addEventListeners ( ) {
117
121
EventHandler . on ( this . _element , 'click' , SELECTOR_CALENDAR_CELL_INNER , event => {
118
122
event . preventDefault ( )
123
+ if ( event . target . parentElement . classList . contains ( 'disabled' ) ) {
124
+ return
125
+ }
126
+
127
+ if ( ( event . target . parentElement . classList . contains ( 'next' ) || event . target . parentElement . classList . contains ( 'previous' ) ) && ! this . _config . selectAdjacementDays ) {
128
+ return
129
+ }
130
+
119
131
if ( event . target . classList . contains ( 'day' ) ) {
132
+ const date = new Date ( Manipulator . getDataAttribute ( event . target , 'date' ) )
133
+ const calendarIndex = Manipulator . getDataAttribute ( event . target . closest ( '.calendar-panel' ) , 'calendar-index' )
134
+ if ( calendarIndex ) {
135
+ this . _setCalendarDate ( new Date ( date . setMonth ( date . getMonth ( ) - calendarIndex ) ) )
136
+ } else {
137
+ this . _setCalendarDate ( date )
138
+ }
139
+
120
140
this . _selectDate ( Manipulator . getDataAttribute ( event . target , 'date' ) )
121
141
}
122
142
@@ -139,6 +159,10 @@ class Calendar extends BaseComponent {
139
159
return
140
160
}
141
161
162
+ if ( ( event . target . parentElement . classList . contains ( 'next' ) || event . target . parentElement . classList . contains ( 'previous' ) ) && ! this . _config . selectAdjacementDays ) {
163
+ return
164
+ }
165
+
142
166
this . _hoverDate = new Date ( Manipulator . getDataAttribute ( event . target , 'date' ) )
143
167
144
168
EventHandler . trigger ( this . _element , EVENT_CELL_HOVER , {
@@ -274,6 +298,8 @@ class Calendar extends BaseComponent {
274
298
const calendarPanelEl = document . createElement ( 'div' )
275
299
calendarPanelEl . classList . add ( 'calendar-panel' )
276
300
301
+ Manipulator . setDataAttribute ( calendarPanelEl , 'calendar-index' , addMonths )
302
+
277
303
// Create navigation
278
304
const navigationElement = document . createElement ( 'div' )
279
305
navigationElement . classList . add ( 'calendar-nav' )
@@ -330,11 +356,13 @@ class Calendar extends BaseComponent {
330
356
<tbody>
331
357
${ this . _view === 'days' ? monthDetails . map ( week => (
332
358
`<tr>${ week . map ( ( { date, month } ) => (
333
- `<td class="calendar-cell ${ this . _dayClassNames ( date , month ) } ">
334
- <div class="calendar-cell-inner day" data-coreui-date="${ date } ">
335
- ${ date . toLocaleDateString ( this . _config . locale , { day : 'numeric' } ) }
336
- </div>
337
- </td>`
359
+ month === 'current' || this . _config . showAdjacementDays ?
360
+ `<td class="calendar-cell ${ this . _dayClassNames ( date , month ) } ">
361
+ <div class="calendar-cell-inner day" data-coreui-date="${ date } ">
362
+ ${ date . toLocaleDateString ( this . _config . locale , { day : 'numeric' } ) }
363
+ </div>
364
+ </td>` :
365
+ '<td></td>'
338
366
) ) . join ( '' ) } </tr>`
339
367
) ) . join ( '' ) : '' }
340
368
${ this . _view === 'months' ? listOfMonths . map ( ( row , index ) => (
@@ -386,6 +414,7 @@ class Calendar extends BaseComponent {
386
414
today : isToday ( date ) ,
387
415
disabled : isDateDisabled ( date , this . _config . minDate , this . _config . maxDate , this . _config . disabledDates ) ,
388
416
[ month ] : true ,
417
+ clickable : month !== 'current' && this . _config . selectAdjacementDays ,
389
418
last : isLastDayOfMonth ( date ) ,
390
419
range : month === 'current' && isDateInRange ( date , this . _startDate , this . _endDate ) ,
391
420
'range-hover' : month === 'current' && ( this . _hoverDate && this . _selectEndDate ?
0 commit comments