@@ -57,8 +57,10 @@ const Default = {
5757 maxDate : null ,
5858 minDate : null ,
5959 range : true ,
60- startDate : null ,
60+ selectAdjacementDays : false ,
6161 selectEndDate : false ,
62+ showAdjacementDays : true ,
63+ startDate : null ,
6264 weekdayFormat : 2
6365}
6466
@@ -72,8 +74,10 @@ const DefaultType = {
7274 maxDate : '(date|string|null)' ,
7375 minDate : '(date|string|null)' ,
7476 range : 'boolean' ,
75- startDate : '(date|string|null) ' ,
77+ selectAdjacementDays : 'boolean ' ,
7678 selectEndDate : 'boolean' ,
79+ showAdjacementDays : 'boolean' ,
80+ startDate : '(date|string|null)' ,
7781 weekdayFormat : '(number|string)'
7882}
7983
@@ -116,7 +120,23 @@ class Calendar extends BaseComponent {
116120 _addEventListeners ( ) {
117121 EventHandler . on ( this . _element , 'click' , SELECTOR_CALENDAR_CELL_INNER , event => {
118122 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+
119131 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+
120140 this . _selectDate ( Manipulator . getDataAttribute ( event . target , 'date' ) )
121141 }
122142
@@ -139,6 +159,10 @@ class Calendar extends BaseComponent {
139159 return
140160 }
141161
162+ if ( ( event . target . parentElement . classList . contains ( 'next' ) || event . target . parentElement . classList . contains ( 'previous' ) ) && ! this . _config . selectAdjacementDays ) {
163+ return
164+ }
165+
142166 this . _hoverDate = new Date ( Manipulator . getDataAttribute ( event . target , 'date' ) )
143167
144168 EventHandler . trigger ( this . _element , EVENT_CELL_HOVER , {
@@ -274,6 +298,8 @@ class Calendar extends BaseComponent {
274298 const calendarPanelEl = document . createElement ( 'div' )
275299 calendarPanelEl . classList . add ( 'calendar-panel' )
276300
301+ Manipulator . setDataAttribute ( calendarPanelEl , 'calendar-index' , addMonths )
302+
277303 // Create navigation
278304 const navigationElement = document . createElement ( 'div' )
279305 navigationElement . classList . add ( 'calendar-nav' )
@@ -330,11 +356,13 @@ class Calendar extends BaseComponent {
330356 <tbody>
331357 ${ this . _view === 'days' ? monthDetails . map ( week => (
332358 `<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>'
338366 ) ) . join ( '' ) } </tr>`
339367 ) ) . join ( '' ) : '' }
340368 ${ this . _view === 'months' ? listOfMonths . map ( ( row , index ) => (
@@ -386,6 +414,7 @@ class Calendar extends BaseComponent {
386414 today : isToday ( date ) ,
387415 disabled : isDateDisabled ( date , this . _config . minDate , this . _config . maxDate , this . _config . disabledDates ) ,
388416 [ month ] : true ,
417+ clickable : month !== 'current' && this . _config . selectAdjacementDays ,
389418 last : isLastDayOfMonth ( date ) ,
390419 range : month === 'current' && isDateInRange ( date , this . _startDate , this . _endDate ) ,
391420 'range-hover' : month === 'current' && ( this . _hoverDate && this . _selectEndDate ?
0 commit comments