|
60 | 60 | let unlistenFind: UnlistenFn | undefined; |
61 | 61 | let unlistenFindNext: UnlistenFn | undefined; |
62 | 62 | let unlistenFindPrevious: UnlistenFn | undefined; |
| 63 | + let unlistenDeleteProject: UnlistenFn | undefined; |
63 | 64 | let unlistenZoomIn: UnlistenFn | undefined; |
64 | 65 | let unlistenZoomOut: UnlistenFn | undefined; |
65 | 66 | let unlistenZoomReset: UnlistenFn | undefined; |
|
138 | 139 | return true; |
139 | 140 | } |
140 | 141 |
|
| 142 | + function isTextInputActive(): boolean { |
| 143 | + const target = document.activeElement; |
| 144 | + if (!(target instanceof HTMLElement)) return false; |
| 145 | + if (target.isContentEditable) return true; |
| 146 | + return ( |
| 147 | + target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.tagName === 'SELECT' |
| 148 | + ); |
| 149 | + } |
| 150 | +
|
| 151 | + function requestDeleteCurrentProject(): boolean { |
| 152 | + if (isTextInputActive()) return false; |
| 153 | + if (navigation.currentRoute.kind !== 'project') return false; |
| 154 | +
|
| 155 | + const event = new CustomEvent('staged:delete-current-project', { cancelable: true }); |
| 156 | + window.dispatchEvent(event); |
| 157 | + return event.defaultPrevented; |
| 158 | + } |
| 159 | +
|
141 | 160 | async function logUpdater(message: string) { |
142 | 161 | console.warn(message); |
143 | 162 | try { |
|
261 | 280 | unlistenFindPrevious = listenToEvent('menu:find-previous', () => { |
262 | 281 | if (!triggerShortcut('search-find-previous')) runSearchShortcut('previous'); |
263 | 282 | }); |
| 283 | + unlistenDeleteProject = listenToEvent('menu:delete-project', () => { |
| 284 | + triggerShortcut('app-delete-project'); |
| 285 | + }); |
264 | 286 | unlistenZoomIn = listenToEvent('menu:zoom-in', () => { |
265 | 287 | if (!triggerShortcut('view-increase-size')) increaseSize(); |
266 | 288 | }); |
|
340 | 362 | modifiers: { meta: true }, |
341 | 363 | handler: navigateBack, |
342 | 364 | }, |
| 365 | + { |
| 366 | + id: 'app-delete-project', |
| 367 | + description: 'Remove current project', |
| 368 | + category: 'app', |
| 369 | + keys: ['Backspace', 'Delete'], |
| 370 | + modifiers: { meta: true }, |
| 371 | + handler: requestDeleteCurrentProject, |
| 372 | + }, |
343 | 373 | { |
344 | 374 | id: 'search-find', |
345 | 375 | description: 'Find in open note/session', |
|
449 | 479 | unlistenFind?.(); |
450 | 480 | unlistenFindNext?.(); |
451 | 481 | unlistenFindPrevious?.(); |
| 482 | + unlistenDeleteProject?.(); |
452 | 483 | unlistenZoomIn?.(); |
453 | 484 | unlistenZoomOut?.(); |
454 | 485 | unlistenZoomReset?.(); |
|
0 commit comments