Skip to content

Commit 4caab6f

Browse files
Add Shift+up/down/left/right for switching year/month
1 parent ae5011f commit 4caab6f

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
- Use `rem` for sizing the DatePicker
55
- Make the DatePicker slightly larger
66
- Make the calendar tabbable
7+
- Add `Shift/Alt+Up/Down` shortcut for changing year
8+
- Add `Shift/Alt+Left/Right` shortcut for changing month
79
- Fix styling issue for languages with long month names
810

911
## 1.3.0 - 2021 Jan 4

src/lib/DatePicker.svelte

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,27 @@
108108
const maxDate = new Date(max.getFullYear(), max.getMonth(), max.getDate())
109109
return date >= minDate && date <= maxDate
110110
}
111+
function shiftKeydown(e: KeyboardEvent) {
112+
if (e.shiftKey && e.key === 'ArrowUp') {
113+
setYear(year - 1)
114+
} else if (e.shiftKey && e.key === 'ArrowDown') {
115+
setYear(year + 1)
116+
} else if (e.shiftKey && e.key === 'ArrowLeft') {
117+
setMonth(month - 1)
118+
} else if (e.shiftKey && e.key === 'ArrowRight') {
119+
setMonth(month + 1)
120+
} else {
121+
return false
122+
}
123+
e.preventDefault()
124+
return true
125+
}
111126
function yearKeydown(e: KeyboardEvent) {
112-
if (e.key === 'ArrowUp') {
127+
let shift = e.shiftKey || e.altKey
128+
if (shift) {
129+
shiftKeydown(e)
130+
return
131+
} else if (e.key === 'ArrowUp') {
113132
setYear(year - 1)
114133
} else if (e.key === 'ArrowDown') {
115134
setYear(year + 1)
@@ -118,12 +137,17 @@
118137
} else if (e.key === 'ArrowRight') {
119138
setMonth(month + 1)
120139
} else {
140+
shiftKeydown(e)
121141
return
122142
}
123143
e.preventDefault()
124144
}
125145
function monthKeydown(e: KeyboardEvent) {
126-
if (e.key === 'ArrowUp') {
146+
let shift = e.shiftKey || e.altKey
147+
if (shift) {
148+
shiftKeydown(e)
149+
return
150+
} else if (e.key === 'ArrowUp') {
127151
setMonth(month - 1)
128152
} else if (e.key === 'ArrowDown') {
129153
setMonth(month + 1)
@@ -132,16 +156,20 @@
132156
} else if (e.key === 'ArrowRight') {
133157
setMonth(month + 1)
134158
} else {
159+
shiftKeydown(e)
135160
return
136161
}
137162
e.preventDefault()
138163
}
139164
function keydown(e: KeyboardEvent) {
165+
let shift = e.shiftKey || e.altKey
140166
if ((e.target as HTMLElement)?.tagName === 'SELECT') {
141167
return
142168
}
143-
144-
if (e.key === 'ArrowUp') {
169+
if (shift) {
170+
shiftKeydown(e)
171+
return
172+
} else if (e.key === 'ArrowUp') {
145173
updateValue((value) => {
146174
value.setDate(value.getDate() - 7)
147175
return value

0 commit comments

Comments
 (0)