Add hotkeys
This commit is contained in:
196
src/ts/hotkey.ts
196
src/ts/hotkey.ts
@@ -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'){
|
||||
|
||||
Reference in New Issue
Block a user