aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Utility/html.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Utility/html.ts')
-rw-r--r--src/lib/Utility/html.ts141
1 files changed, 71 insertions, 70 deletions
diff --git a/src/lib/Utility/html.ts b/src/lib/Utility/html.ts
index 7e0f04c6..10d52971 100644
--- a/src/lib/Utility/html.ts
+++ b/src/lib/Utility/html.ts
@@ -1,97 +1,98 @@
-import settings from '$stores/settings';
-import { get } from 'svelte/store';
+import settings from "$stores/settings";
+import { get } from "svelte/store";
-export const nbsp = (str: string) => str.replace(/ /g, ' ');
+export const nbsp = (str: string) => str.replace(/ /g, " ");
export const createHeightObserver = (details = true) => {
- const observedElements = new Set<HTMLElement>();
- const resizeObservers = new Map<HTMLElement, ResizeObserver>();
- const detailObservers = new Map<HTMLElement, MutationObserver>();
+ const observedElements = new Set<HTMLElement>();
+ const resizeObservers = new Map<HTMLElement, ResizeObserver>();
+ const detailObservers = new Map<HTMLElement, MutationObserver>();
- const applyHeightLimit = (target: HTMLElement) => {
- if (!get(settings).displayLimitListHeight) {
- target.style.height = 'auto';
+ const applyHeightLimit = (target: HTMLElement) => {
+ if (!get(settings).displayLimitListHeight) {
+ target.style.height = "auto";
- return;
- }
+ return;
+ }
- target.style.height = 'auto';
+ target.style.height = "auto";
- const elementBound = target.getBoundingClientRect();
- const height = window.innerHeight - elementBound.top - 2.5 * 16;
+ const elementBound = target.getBoundingClientRect();
+ const height = window.innerHeight - elementBound.top - 2.5 * 16;
- if (elementBound.height > height) target.style.height = `${height}px`;
- };
+ if (elementBound.height > height) target.style.height = `${height}px`;
+ };
- const observeElement = (element: HTMLElement) => {
- if (element.dataset.observed) return;
+ const observeElement = (element: HTMLElement) => {
+ if (element.dataset.observed) return;
- const resizeObserver = new ResizeObserver((entries) => {
- entries.forEach((entry) => {
- const target = entry.target as HTMLElement;
+ const resizeObserver = new ResizeObserver((entries) => {
+ entries.forEach((entry) => {
+ const target = entry.target as HTMLElement;
- applyHeightLimit(target);
- });
- });
+ applyHeightLimit(target);
+ });
+ });
- resizeObserver.observe(element);
- resizeObservers.set(element, resizeObserver);
+ resizeObserver.observe(element);
+ resizeObservers.set(element, resizeObserver);
- if (details) {
- const detailsObserver = new MutationObserver((mutations) => {
- mutations.forEach((mutation) => {
- const target = mutation.target as HTMLDetailsElement;
+ if (details) {
+ const detailsObserver = new MutationObserver((mutations) => {
+ mutations.forEach((mutation) => {
+ const target = mutation.target as HTMLDetailsElement;
- if (target.tagName === 'DETAILS' && !target.open) target.style.height = 'auto';
- });
- });
+ if (target.tagName === "DETAILS" && !target.open)
+ target.style.height = "auto";
+ });
+ });
- detailsObserver.observe(element, { attributes: true });
- detailObservers.set(element, detailsObserver);
- }
+ detailsObserver.observe(element, { attributes: true });
+ detailObservers.set(element, detailsObserver);
+ }
- element.dataset.observed = 'true';
+ element.dataset.observed = "true";
- observedElements.add(element);
- applyHeightLimit(element);
- };
+ observedElements.add(element);
+ applyHeightLimit(element);
+ };
- document.querySelectorAll<HTMLElement>('.list').forEach(observeElement);
+ document.querySelectorAll<HTMLElement>(".list").forEach(observeElement);
- const mutationObserver = new MutationObserver((mutations) => {
- mutations.forEach((mutation) => {
- mutation.addedNodes.forEach((node) => {
- if (!(node instanceof HTMLElement)) return;
+ const mutationObserver = new MutationObserver((mutations) => {
+ mutations.forEach((mutation) => {
+ mutation.addedNodes.forEach((node) => {
+ if (!(node instanceof HTMLElement)) return;
- if (node.matches('.list')) observeElement(node);
+ if (node.matches(".list")) observeElement(node);
- node.querySelectorAll<HTMLElement>('.list').forEach(observeElement);
- });
- });
- });
+ node.querySelectorAll<HTMLElement>(".list").forEach(observeElement);
+ });
+ });
+ });
- mutationObserver.observe(document.body, { childList: true, subtree: true });
+ mutationObserver.observe(document.body, { childList: true, subtree: true });
- const unsubscribeSettings = settings.subscribe(() => {
- observedElements.forEach((element) => {
- applyHeightLimit(element);
- });
- });
+ const unsubscribeSettings = settings.subscribe(() => {
+ observedElements.forEach((element) => {
+ applyHeightLimit(element);
+ });
+ });
- return () => {
- unsubscribeSettings();
- mutationObserver.disconnect();
- resizeObservers.forEach((observer) => {
- observer.disconnect();
- });
- detailObservers.forEach((observer) => {
- observer.disconnect();
- });
+ return () => {
+ unsubscribeSettings();
+ mutationObserver.disconnect();
+ resizeObservers.forEach((observer) => {
+ observer.disconnect();
+ });
+ detailObservers.forEach((observer) => {
+ observer.disconnect();
+ });
- observedElements.forEach((element) => {
- element.style.height = 'auto';
+ observedElements.forEach((element) => {
+ element.style.height = "auto";
- delete element.dataset.observed;
- });
- };
+ delete element.dataset.observed;
+ });
+ };
};