Add hotkeys

This commit is contained in:
kwaroran
2025-03-20 14:37:12 +09:00
parent 4c67ce4410
commit f5f05bdf99
6 changed files with 377 additions and 77 deletions

View File

@@ -4,59 +4,132 @@ import { changeToPreset as changeToPreset2, getDatabase } from "./storage/datab
import { alertStore, MobileGUIStack, MobileSideBar, openPersonaList, openPresetList, SafeModeStore, selectedCharID, settingsOpen } from "./stores.svelte"
import { language } from "src/lang"
import { updateTextThemeAndCSS } from "./gui/colorscheme"
import { defaultHotkeys } from "./defaulthotkeys"
export function initHotkey(){
document.addEventListener('keydown', (ev) => {
if(ev.ctrlKey){
if(
!ev.ctrlKey &&
!ev.altKey &&
!ev.shiftKey &&
['INPUT', 'TEXTAREA'].includes(document.activeElement.tagName)
){
return
}
if(ev.altKey){
switch(ev.key){
case "r":{
ev.preventDefault()
clickQuery('.button-icon-reroll')
return
}
case "f":{
ev.preventDefault()
clickQuery('.button-icon-unreroll')
return
}
case "t":{
ev.preventDefault()
clickQuery('.button-icon-translate')
return
}
case "d":{
ev.preventDefault()
clickQuery('.button-icon-remove')
return
}
case 'e':{
ev.preventDefault()
clickQuery('.button-icon-edit')
setTimeout(() => {
focusQuery('.message-edit-area')
}, 100)
return
}
case 'c':{
ev.preventDefault()
clickQuery('.button-icon-copy')
return
}
case 'i':{
ev.preventDefault()
focusQuery('.text-input-area')
return
}
case 'Enter':{
ev.preventDefault()
clickQuery('.button-icon-send')
return
}
const database = getDatabase()
const hotKeys = database?.hotkeys ?? defaultHotkeys
let hotkeyRan = false
for(const hotkey of hotKeys){
let hotKeyRanThisTime = true
hotkey.ctrl = hotkey.ctrl ?? false
hotkey.alt = hotkey.alt ?? false
hotkey.shift = hotkey.shift ?? false
if(hotkey.key === ev.key){
console.log(`Hotkey: "${hotkey.key}" ${hotkey.ctrl} ${hotkey.alt} ${hotkey.shift}`)
console.log(`Event: "${ev.key}" ${ev.ctrlKey} ${ev.altKey} ${ev.shiftKey}`)
}
if(hotkey.ctrl !== ev.ctrlKey){
continue
}
if(hotkey.alt !== ev.altKey){
continue
}
if(hotkey.shift !== ev.shiftKey){
continue
}
if(hotkey.key !== ev.key){
continue
}
if(!hotkey.ctrl && !hotkey.alt && !hotkey.shift){
if(['INPUT', 'TEXTAREA'].includes(document.activeElement.tagName)){
continue
}
}
switch(hotkey.action){
case 'reroll':{
clickQuery('.button-icon-reroll')
break
}
case 'unreroll':{
clickQuery('.button-icon-unreroll')
break
}
case 'translate':{
clickQuery('.button-icon-translate')
break
}
case 'remove':{
clickQuery('.button-icon-remove')
break
}
case 'edit':{
clickQuery('.button-icon-edit')
setTimeout(() => {
focusQuery('.message-edit-area')
}, 100)
break
}
case 'copy':{
clickQuery('.button-icon-copy')
break
}
case 'focusInput':{
focusQuery('.text-input-area')
break
}
case 'send':{
clickQuery('.button-icon-send')
break
}
case 'settings':{
settingsOpen.set(!get(settingsOpen))
break
}
case 'home':{
selectedCharID.set(-1)
break
}
case 'presets':{
openPresetList.set(!get(openPresetList))
break
}
case 'persona':{
openPersonaList.set(!get(openPersonaList))
break
}
case 'toggleCSS':{
SafeModeStore.set(!get(SafeModeStore))
updateTextThemeAndCSS()
break
}
default:{
hotKeyRanThisTime = false
}
}
if(hotKeyRanThisTime){
hotkeyRan = true
break
}
}
if(hotkeyRan){
ev.preventDefault()
ev.stopPropagation()
return
}
if(ev.ctrlKey){
switch (ev.key){
case "1":{
changeToPreset(0)
@@ -112,37 +185,6 @@ export function initHotkey(){
ev.stopPropagation()
break
}
case 's':{
settingsOpen.set(!get(settingsOpen))
ev.preventDefault()
ev.stopPropagation()
break
}
case 'h':{
selectedCharID.set(-1)
ev.preventDefault()
ev.stopPropagation()
break
}
case 'p':{
openPresetList.set(!get(openPresetList))
ev.preventDefault()
ev.stopPropagation()
break
}
case 'e':{
openPersonaList.set(!get(openPersonaList))
ev.preventDefault()
ev.stopPropagation()
break
}
case '.':{
SafeModeStore.set(!get(SafeModeStore))
updateTextThemeAndCSS()
ev.preventDefault()
ev.stopPropagation()
break
}
}
}
if(ev.key === 'Escape'){