8
8
* --------------------------------------------------------------------------
9
9
*/
10
10
11
- import { defineJQueryPlugin , isElement , typeCheckConfig } from './util/index'
11
+ import { defineJQueryPlugin , typeCheckConfig } from './util/index'
12
12
import EventHandler from './dom/event-handler'
13
13
import Manipulator from './dom/manipulator'
14
14
import {
@@ -24,7 +24,6 @@ import {
24
24
isStartDate ,
25
25
isEndDate } from './util/calendar'
26
26
import BaseComponent from './base-component'
27
- // import CalendarTimepicker from './time-picker'
28
27
29
28
/**
30
29
* ------------------------------------------------------------------------
@@ -58,10 +57,10 @@ const Default = {
58
57
locale : navigator . language ,
59
58
maxDate : null ,
60
59
minDate : null ,
61
- order : 'first' ,
62
60
range : true ,
63
61
startDate : null ,
64
- selectEndDate : false
62
+ selectEndDate : false ,
63
+ weekdayLength : 2
65
64
}
66
65
67
66
const DefaultType = {
@@ -72,10 +71,10 @@ const DefaultType = {
72
71
locale : 'string' ,
73
72
maxDate : '(date|string|null)' ,
74
73
minDate : '(date|string|null)' ,
75
- order : 'string' ,
76
74
range : 'boolean' ,
77
75
startDate : '(date|string|null)' ,
78
- selectEndDate : 'boolean'
76
+ selectEndDate : 'boolean' ,
77
+ weekdayLength : 'number'
79
78
}
80
79
81
80
/**
@@ -117,10 +116,6 @@ class Calendar extends BaseComponent {
117
116
EventHandler . on ( this . _element , 'click' , SELECTOR_CALENDAR_CELL_INNER , event => {
118
117
event . preventDefault ( )
119
118
if ( event . target . classList . contains ( 'day' ) ) {
120
- if ( event . target . parentElement . classList . contains ( 'disabled' ) ) {
121
- return
122
- }
123
-
124
119
this . _selectDate ( Manipulator . getDataAttribute ( event . target , 'date' ) )
125
120
}
126
121
@@ -221,59 +216,74 @@ class Calendar extends BaseComponent {
221
216
this . _updateCalendar ( )
222
217
}
223
218
219
+ _setEndDate ( date , selectEndDate = false ) {
220
+ this . _endDate = new Date ( date )
221
+ EventHandler . trigger ( this . _element , EVENT_END_DATE_CHANGE , {
222
+ date : this . _endDate ,
223
+ selectEndDate
224
+ } )
225
+ }
226
+
227
+ _setStartDate ( date , selectEndDate = true ) {
228
+ this . _startDate = new Date ( date )
229
+ EventHandler . trigger ( this . _element , EVENT_START_DATE_CHANGE , {
230
+ date : this . _startDate ,
231
+ selectEndDate
232
+ } )
233
+ }
234
+
224
235
_selectDate ( date ) {
225
- if ( this . _selectEndDate ) {
226
- this . _endDate = new Date ( date )
227
- this . _selectEndDate = false
228
- EventHandler . trigger ( this . _element , EVENT_END_DATE_CHANGE , {
229
- date : this . _endDate ,
230
- selectEndDate : this . _selectEndDate
231
- } )
236
+ if ( isDisabled ( date , this . _config . minDate , this . _config . maxDate , this . _config . disabledDates ) ) {
232
237
return
233
238
}
234
239
235
240
if ( this . _config . range ) {
236
- this . _selectEndDate = true
241
+ if ( this . _selectEndDate ) {
242
+ if ( this . _startDate && this . _startDate > new Date ( date ) ) {
243
+ this . _setEndDate ( this . _startDate )
244
+ this . _setStartDate ( date )
245
+ } else {
246
+ this . _setEndDate ( date )
247
+ }
248
+ } else {
249
+ this . _setStartDate ( date , true )
250
+ }
251
+ } else {
252
+ this . _setStartDate ( date )
237
253
}
238
-
239
- this . _startDate = new Date ( date )
240
- EventHandler . trigger ( this . _element , EVENT_START_DATE_CHANGE , {
241
- date : this . _startDate ,
242
- selectEndDate : this . _selectEndDate
243
- } )
244
254
}
245
255
246
256
_createCalendar ( ) {
247
- const { firstDayOfWeek, locale } = this . _config
257
+ const { firstDayOfWeek, locale, weekdayLength } = this . _config
248
258
const year = this . _calendarDate . getFullYear ( )
249
259
const month = this . _calendarDate . getMonth ( )
250
260
251
261
// Create navigation
252
262
const navigationElement = document . createElement ( 'div' )
253
- navigationElement . classList . add ( 'calendar-navigation ' )
263
+ navigationElement . classList . add ( 'calendar-nav ' )
254
264
navigationElement . innerHTML = `
255
- <div class="calendar-navigation -prev">
265
+ <div class="calendar-nav -prev">
256
266
<button class="btn btn-transparent btn-sm btn-double-prev">
257
- <span class="double-prev -icon"></span>
267
+ <span class="calendar-nav -icon calendar-nav-icon-double-prev "></span>
258
268
</button>
259
269
<button class="btn btn-transparent btn-sm btn-prev">
260
- <span class="prev- icon"></span>
270
+ <span class="calendar-nav- icon calendar-nav-icon-prev "></span>
261
271
</button>
262
272
</div>
263
- <div class="calendar-navigation -date">
273
+ <div class="calendar-nav -date">
264
274
<button class="btn btn-transparent btn-sm btn-month">
265
275
${ this . _calendarDate . toLocaleDateString ( locale , { month : 'long' } ) }
266
276
</button>
267
277
<button class="btn btn-transparent btn-sm btn-year">
268
278
${ this . _calendarDate . toLocaleDateString ( locale , { year : 'numeric' } ) }
269
279
</button>
270
280
</div>
271
- <div class="calendar-navigation -next">
281
+ <div class="calendar-nav -next">
272
282
<button class="btn btn-transparent btn-sm btn-next">
273
- <span class="next- icon"></span>
283
+ <span class="calendar-nav- icon calendar-nav-icon-next "></span>
274
284
</button>
275
285
<button class="btn btn-transparent btn-sm btn-double-next">
276
- <span class="double-next -icon"></span>
286
+ <span class="calendar-nav -icon calendar-nav-icon-double-next "></span>
277
287
</button>
278
288
</div>
279
289
`
@@ -288,7 +298,13 @@ class Calendar extends BaseComponent {
288
298
${ this . _view === 'days' ? `
289
299
<thead>
290
300
<tr>
291
- ${ weekDays . map ( ( { date } ) => ( `<th class="calendar-cell">${ date . toLocaleDateString ( locale , { weekday : 'narrow' } ) } </th>` ) ) . join ( '' ) }
301
+ ${ weekDays . map ( ( { date } ) => (
302
+ `<th class="calendar-cell">
303
+ <div class="calendar-header-cell-inner">
304
+ ${ date . toLocaleDateString ( locale , { weekday : 'long' } ) . slice ( 0 , weekdayLength ) }
305
+ </div>
306
+ </th>`
307
+ ) ) . join ( '' ) }
292
308
</tr>
293
309
</thead>` : '' }
294
310
<tbody>
@@ -330,7 +346,6 @@ class Calendar extends BaseComponent {
330
346
_updateCalendar ( ) {
331
347
this . _element . innerHTML = ''
332
348
this . _createCalendar ( )
333
- // this._createCalendarTimepicker()
334
349
}
335
350
336
351
_dayClassNames ( date , month ) {
@@ -354,15 +369,7 @@ class Calendar extends BaseComponent {
354
369
...config
355
370
}
356
371
357
- typeCheckConfig ( NAME , config , this . constructor . DefaultType )
358
-
359
- if ( typeof config . reference === 'object' && ! isElement ( config . reference ) &&
360
- typeof config . reference . getBoundingClientRect !== 'function'
361
- ) {
362
- // Popper virtual elements require a getBoundingClientRect method
363
- throw new TypeError ( `${ NAME . toUpperCase ( ) } : Option "reference" provided type "object" without a required "getBoundingClientRect" method.` )
364
- }
365
-
372
+ typeCheckConfig ( NAME , config , DefaultType )
366
373
return config
367
374
}
368
375
0 commit comments