Skip to content

Commit ea9a7d8

Browse files
committed
perf: 添加对快捷键提交代码的支持
之前计时组件只监听通过点击提交按钮进行的提交 如果是通过快捷键进行提交则无法触发计时器相关的功能 现在添加对于快捷键的支持 并且尊重用户对于力扣页面中是否开启全局快捷键提交的设置
1 parent 427aca0 commit ea9a7d8

File tree

1 file changed

+51
-3
lines changed

1 file changed

+51
-3
lines changed

src/content/pages/problems/Clock.tsx

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,9 @@ const Clock: FC = () => {
124124

125125
void (async function () {
126126
const submitBtn = await findElement('.submit__-6u9')
127-
console.log('submitBtn: ', submitBtn)
128-
const handleClick: EventListenerOrEventListenerObject = async () => {
127+
const editEl = await findElement('.euyvu2f0')
128+
129+
const handleClick = async () => {
129130
log.debug('提交开始')
130131
const submissionId = await getSubmissionId()
131132
log.debug('获取 submissionId %s', submissionId)
@@ -151,10 +152,57 @@ const Clock: FC = () => {
151152
setHidden(false)
152153
}
153154
}
155+
156+
const isMac = () => {
157+
return (
158+
navigator.platform.indexOf('Mac') === 0 ||
159+
navigator.platform === 'iPhone'
160+
)
161+
}
162+
const isSubmit = (e: KeyboardEvent) => {
163+
// 检查全局提交快捷键是否开启
164+
const globalDisabledSubmitCode = localStorage.getItem(
165+
'global_disabled_submit_code'
166+
)
167+
168+
if (globalDisabledSubmitCode === 'false') return false
169+
170+
let mate = false
171+
172+
// 检查是否按下对应的快捷键,如果是 Mac 电脑为 mate 键,Window 或 Linux 为 Ctrl 键
173+
if (isMac()) {
174+
if (e.metaKey === true && e.ctrlKey === false) mate = true
175+
} else {
176+
if (e.ctrlKey === true) mate = true
177+
}
178+
179+
if (
180+
mate &&
181+
e.code === 'Enter' &&
182+
e.altKey === false &&
183+
e.shiftKey === false
184+
) {
185+
return true
186+
}
187+
188+
return false
189+
}
190+
const keydownHandle = (e: KeyboardEvent) => {
191+
if (isSubmit(e)) {
192+
log.debug('使用快捷键提交')
193+
handleClick()
194+
}
195+
}
196+
154197
if (cancel.current === 'unmount') return // 当前组件已经被卸载,就不需要挂载事件
155198

156199
submitBtn.addEventListener('click', handleClick)
157-
cancel.current = () => submitBtn.removeEventListener('click', handleClick)
200+
editEl.addEventListener('keydown', keydownHandle, { capture: true })
201+
202+
cancel.current = () => {
203+
submitBtn.removeEventListener('click', handleClick)
204+
editEl.removeEventListener('keydown', keydownHandle, { capture: true })
205+
}
158206
})()
159207

160208
return () => {

0 commit comments

Comments
 (0)