Skip to content

Commit 05e4fdf

Browse files
committed
UX: Remove custom focus traps in dialog components photoprism#5145 photoprism#5307
Signed-off-by: Michael Mayer <[email protected]>
1 parent 9a8621d commit 05e4fdf

File tree

4 files changed

+0
-78
lines changed

4 files changed

+0
-78
lines changed

frontend/src/component/confirm/dialog.vue

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
@keyup.enter.exact="confirm"
1313
@after-enter="afterEnter"
1414
@after-leave="afterLeave"
15-
@focusout="onFocusOut"
1615
>
1716
<v-card ref="content" tabindex="-1">
1817
<v-card-title class="d-flex justify-start align-center ga-3">
@@ -66,25 +65,6 @@ export default {
6665
afterLeave() {
6766
this.$view.leave(this);
6867
},
69-
onFocusOut(ev) {
70-
if (!this.$view.isActive(this)) {
71-
return;
72-
}
73-
74-
const el = this.$refs.content?.$el;
75-
76-
if (!ev || !ev.target || !(ev.target instanceof HTMLElement) || !(el instanceof HTMLElement)) {
77-
return;
78-
}
79-
80-
const next = ev.relatedTarget;
81-
const leavingDialog = !next || !(next instanceof Node) || !el.contains(next);
82-
83-
if (leavingDialog) {
84-
el.focus();
85-
ev.preventDefault();
86-
}
87-
},
8868
close() {
8969
this.$emit("close");
9070
},

frontend/src/component/lightbox.vue

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
class="p-dialog p-lightbox v-dialog--lightbox no-transition"
1515
@after-enter="afterEnter"
1616
@after-leave="afterLeave"
17-
@focusout="onFocusOut"
1817
@keydown.space.exact="onKeyDown"
1918
@keydown.left.exact="onKeyDown"
2019
@keydown.right.exact="onKeyDown"
@@ -331,31 +330,6 @@ export default {
331330
this.$event.publish("lightbox.leave");
332331
this.$emit("leave");
333332
},
334-
// Traps the focus inside the lightbox dialog.
335-
onFocusOut(ev) {
336-
if (this.debug) {
337-
this.log(`dialog.${ev.type}`, { ev });
338-
}
339-
340-
if (!this.$view.isActive(this)) {
341-
return;
342-
}
343-
344-
// Keep content element focused.
345-
if (this.$refs.content && this.$refs.content instanceof HTMLElement) {
346-
if (
347-
(ev.target &&
348-
ev.target instanceof HTMLElement &&
349-
(!ev.target.closest(".v-dialog--lightbox") || ev.target?.tabIndex < 0 || ev.target.disabled)) ||
350-
(ev.relatedTarget &&
351-
ev.relatedTarget instanceof HTMLElement &&
352-
(!ev.relatedTarget.closest(".v-dialog--lightbox") || ev.relatedTarget.tabIndex < 0))
353-
) {
354-
this.focusContent(ev);
355-
ev.preventDefault();
356-
}
357-
}
358-
},
359333
focusContent(ev) {
360334
if (
361335
this.$refs.content &&

frontend/src/component/photo/edit/dialog.vue

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
@keydown.left.exact="onKeyLeft"
1313
@keydown.right.exact="onKeyRight"
1414
@keydown.esc.stop="onClose"
15-
@focusout="onFocusOut"
1615
>
1716
<v-card ref="content" tabindex="-1" :tile="$vuetify.display.smAndDown">
1817
<v-toolbar flat color="navigation" :density="$vuetify.display.smAndDown ? 'compact' : 'comfortable'">
@@ -203,21 +202,6 @@ export default {
203202
this.ready = false;
204203
this.$view.leave(this);
205204
},
206-
onFocusOut(ev) {
207-
if (!this.$view.isActive(this)) {
208-
return;
209-
}
210-
211-
if (ev.target && ev.target instanceof HTMLElement && this.$refs.content?.$el instanceof HTMLElement) {
212-
if (
213-
document.activeElement !== this.$refs.content.$el &&
214-
(!ev.target.closest(".p-photo-edit-dialog") || ev.target?.disabled)
215-
) {
216-
this.$refs.content?.$el.focus();
217-
ev.preventDefault();
218-
}
219-
}
220-
},
221205
onUpdate(ev, data) {
222206
if (!data || !data.entities || !Array.isArray(data.entities) || this.loading || !this.model || !this.model.UID) {
223207
return;

frontend/src/component/upload/dialog.vue

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
@after-enter="afterEnter"
1111
@after-leave="afterLeave"
1212
@keydown.esc.exact="onClose"
13-
@focusout="onFocusOut"
1413
>
1514
<v-form ref="form" class="p-photo-upload" validate-on="invalid-input" tabindex="-1" @submit.prevent="onSubmit">
1615
<input ref="upload" type="file" multiple :accept="accept" class="d-none input-upload" @change.stop="onUpload()" />
@@ -222,21 +221,6 @@ export default {
222221
afterLeave() {
223222
this.$view.leave(this);
224223
},
225-
onFocusOut(ev) {
226-
if (!this.$view.isActive(this)) {
227-
return;
228-
}
229-
230-
if (ev.target && ev.target instanceof HTMLElement && this.$refs.form?.$el instanceof HTMLElement) {
231-
if (
232-
document.activeElement !== this.$refs.form.$el &&
233-
(!ev.target.closest(".p-upload-dialog") || ev.target?.disabled)
234-
) {
235-
this.$refs.form?.$el.focus();
236-
ev.preventDefault();
237-
}
238-
}
239-
},
240224
removeSelection(index) {
241225
this.selectedAlbums.splice(index, 1);
242226
},

0 commit comments

Comments
 (0)