summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2024-11-22 10:40:55 +0000
committerdakkar <dakkar@thenautilus.net>2024-11-22 10:40:55 +0000
commit9bf18546fc3688480ca66e8dfc1dffabef087748 (patch)
treefa16049dde7ff530342f4a8a1f6ecc3da015a5d5
parentmerge: Don't preview URLs to blocked hosts (!751) (diff)
parentSet horizontal margin for even better consistency (diff)
downloadsharkey-9bf18546fc3688480ca66e8dfc1dffabef087748.tar.gz
sharkey-9bf18546fc3688480ca66e8dfc1dffabef087748.tar.bz2
sharkey-9bf18546fc3688480ca66e8dfc1dffabef087748.zip
merge: keep popup elements on screen (!744)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/744 Approved-by: dakkar <dakkar@thenautilus.net> Approved-by: Marie <github@yuugi.dev> Approved-by: Hazelnoot <acomputerdog@gmail.com>
-rw-r--r--packages/frontend/src/components/MkUserPopup.vue2
-rw-r--r--packages/frontend/src/scripts/popup-position.ts14
2 files changed, 13 insertions, 3 deletions
diff --git a/packages/frontend/src/components/MkUserPopup.vue b/packages/frontend/src/components/MkUserPopup.vue
index c6f4699b3e..4ae23de62c 100644
--- a/packages/frontend/src/components/MkUserPopup.vue
+++ b/packages/frontend/src/components/MkUserPopup.vue
@@ -119,7 +119,7 @@ onMounted(() => {
}
const rect = props.source.getBoundingClientRect();
- const x = ((rect.left + (props.source.offsetWidth / 2)) - (300 / 2)) + window.scrollX;
+ const x = Math.max(1, ((rect.left + (props.source.offsetWidth / 2)) - (300 / 2)) + window.scrollX);
const y = rect.top + props.source.offsetHeight + window.scrollY;
top.value = y;
diff --git a/packages/frontend/src/scripts/popup-position.ts b/packages/frontend/src/scripts/popup-position.ts
index 3dad41a8b3..be49532cf8 100644
--- a/packages/frontend/src/scripts/popup-position.ts
+++ b/packages/frontend/src/scripts/popup-position.ts
@@ -15,6 +15,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
const contentWidth = el.offsetWidth;
const contentHeight = el.offsetHeight;
+ const HORIZONTAL_MARGIN = 1;
+
let rect: DOMRect;
if (props.anchorElement) {
@@ -36,9 +38,11 @@ export function calcPopupPosition(el: HTMLElement, props: {
left -= (el.offsetWidth / 2);
if (left + contentWidth - window.scrollX > window.innerWidth) {
- left = window.innerWidth - contentWidth + window.scrollX - 1;
+ left = window.innerWidth - contentWidth + window.scrollX - HORIZONTAL_MARGIN;
}
+ left = Math.max(HORIZONTAL_MARGIN, left);
+
return [left, top];
};
@@ -57,9 +61,11 @@ export function calcPopupPosition(el: HTMLElement, props: {
left -= (el.offsetWidth / 2);
if (left + contentWidth - window.scrollX > window.innerWidth) {
- left = window.innerWidth - contentWidth + window.scrollX - 1;
+ left = window.innerWidth - contentWidth + window.scrollX - HORIZONTAL_MARGIN;
}
+ left = Math.max(HORIZONTAL_MARGIN, left);
+
return [left, top];
};
@@ -75,6 +81,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
top = props.y;
}
+ left = Math.max(HORIZONTAL_MARGIN, left);
+
top -= (el.offsetHeight / 2);
if (top + contentHeight - window.scrollY > window.innerHeight) {
@@ -106,6 +114,8 @@ export function calcPopupPosition(el: HTMLElement, props: {
top -= (el.offsetHeight / 2);
}
+ left = Math.max(HORIZONTAL_MARGIN, left);
+
if (top + contentHeight - window.scrollY > window.innerHeight) {
top = window.innerHeight - contentHeight + window.scrollY - 1;
}