Skip to content

Commit 08ff6a7

Browse files
committed
feat: allow Escape key to dismiss settings page
resolves #249
1 parent 4f63c4c commit 08ff6a7

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

app/pages/settings.vue

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,37 @@ const availableLocales = computed(() =>
88
locales.value.map(l => (typeof l === 'string' ? { code: l, name: l } : l)),
99
)
1010
11+
/**
12+
* Check if it's safe to navigate back (previous page was same origin).
13+
* Uses document.referrer to verify the user came from this site.
14+
*/
15+
function canGoBack(): boolean {
16+
if (import.meta.server) return false
17+
if (window.history.length <= 1) return false
18+
const referrer = document.referrer
19+
if (!referrer) return false
20+
try {
21+
return new URL(referrer).origin === window.location.origin
22+
} catch {
23+
return false
24+
}
25+
}
26+
1127
function goBack() {
12-
router.back()
28+
if (canGoBack()) {
29+
router.back()
30+
} else {
31+
router.push('/')
32+
}
1333
}
1434
35+
onKeyStroke('Escape', e => {
36+
const target = e.target as HTMLElement
37+
if (!['INPUT', 'SELECT', 'TEXTAREA'].includes(target?.tagName)) {
38+
goBack()
39+
}
40+
})
41+
1542
useSeoMeta({
1643
title: 'Settings - npmx',
1744
})

0 commit comments

Comments
 (0)