mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-06 03:34:40 +00:00
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
import {
|
|
changeSettingsClicked,
|
|
closeExtensionPopup,
|
|
SettingsClicked,
|
|
} from "../Closers/closeExtensionPopup";
|
|
import renderSvelte from "@/interface/main";
|
|
import { SettingsResizer } from "@/seqta/ui/SettingsResizer";
|
|
import Settings from "@/interface/pages/settings.svelte";
|
|
|
|
let isSettingsRendered = false;
|
|
|
|
function extensionOutsideClickHandler(extensionPopup: HTMLElement) {
|
|
return (event: MouseEvent) => {
|
|
if (!SettingsClicked) return;
|
|
|
|
if (!(event.target as HTMLElement).closest("#AddedSettings")) {
|
|
if (event.target == extensionPopup) return;
|
|
changeSettingsClicked(closeExtensionPopup());
|
|
}
|
|
};
|
|
}
|
|
|
|
export function addExtensionSettings() {
|
|
if (document.getElementById("ExtensionPopup")) return;
|
|
|
|
const extensionPopup = document.createElement("div");
|
|
extensionPopup.classList.add("outside-container", "hide");
|
|
extensionPopup.id = "ExtensionPopup";
|
|
|
|
const extensionContainer =
|
|
document.querySelector("#container") ?? document.getElementById("container");
|
|
const mountParent = extensionContainer ?? document.body;
|
|
mountParent.appendChild(extensionPopup);
|
|
|
|
new SettingsResizer();
|
|
|
|
const handler = extensionOutsideClickHandler(extensionPopup);
|
|
(extensionContainer ?? document.body).addEventListener("click", handler, false);
|
|
}
|
|
|
|
export function renderSettingsIfNeeded() {
|
|
if (isSettingsRendered) return;
|
|
|
|
const extensionPopup = document.getElementById("ExtensionPopup");
|
|
if (!extensionPopup) return;
|
|
|
|
try {
|
|
const shadow = extensionPopup.attachShadow({ mode: "open" });
|
|
if ('requestIdleCallback' in window) {
|
|
requestIdleCallback(() => renderSvelte(Settings, shadow));
|
|
} else {
|
|
renderSvelte(Settings, shadow);
|
|
}
|
|
isSettingsRendered = true;
|
|
} catch (err) {
|
|
console.error(err);
|
|
}
|
|
}
|