|
@@ -1,35 +1,35 @@
|
|
|
-import { getResourceUrl, warn, type TrLocale, initTranslations, setLocale, t } from "../utils";
|
|
|
-import { getFeatures, setFeatures } from "../config";
|
|
|
-import { siteEvents } from "../siteEvents";
|
|
|
+import { getResourceUrl, initTranslations, setLocale, t, warn, type TrLocale } from "../utils";
|
|
|
+import { BytmDialog } from "../components";
|
|
|
+import { openCfgMenu } from "../menu/menu_old";
|
|
|
import { scriptInfo } from "../constants";
|
|
|
-import { openCfgMenu } from "./menu_old";
|
|
|
-import locales from "../../assets/locales.json" assert { type: "json" };
|
|
|
+import { getFeatures, setFeatures } from "../config";
|
|
|
+import { getChangelogDialog } from ".";
|
|
|
import pkg from "../../package.json" assert { type: "json" };
|
|
|
-import "./welcomeMenu.css";
|
|
|
-import { getChangelogDialog } from "src/dialogs";
|
|
|
-
|
|
|
-//#MARKER menu
|
|
|
-
|
|
|
-let isWelcomeMenuOpen = false;
|
|
|
-
|
|
|
-/** Adds the welcome menu to the DOM */
|
|
|
-export async function addWelcomeMenu() {
|
|
|
- //#SECTION backdrop & menu container
|
|
|
- const backgroundElem = document.createElement("div");
|
|
|
- backgroundElem.id = "bytm-welcome-menu-bg";
|
|
|
- backgroundElem.classList.add("bytm-menu-bg");
|
|
|
- backgroundElem.style.visibility = "hidden";
|
|
|
- backgroundElem.style.display = "none";
|
|
|
-
|
|
|
- const menuContainer = document.createElement("div");
|
|
|
- menuContainer.ariaLabel = menuContainer.title = ""; // prevent bg title from propagating downwards
|
|
|
- menuContainer.classList.add("bytm-menu");
|
|
|
- menuContainer.id = "bytm-welcome-menu";
|
|
|
+import locales from "../../assets/locales.json" assert { type: "json" };
|
|
|
|
|
|
- //#SECTION title bar
|
|
|
- const headerElem = document.createElement("div");
|
|
|
- headerElem.classList.add("bytm-menu-header");
|
|
|
+let welcomeDialog: BytmDialog | null = null;
|
|
|
+
|
|
|
+/** Creates and/or returns the import dialog */
|
|
|
+export async function getWelcomeDialog() {
|
|
|
+ if(!welcomeDialog) {
|
|
|
+ welcomeDialog = new BytmDialog({
|
|
|
+ id: "welcome",
|
|
|
+ width: 700,
|
|
|
+ height: 500,
|
|
|
+ closeBtnEnabled: true,
|
|
|
+ closeOnBgClick: true,
|
|
|
+ closeOnEscPress: true,
|
|
|
+ destroyOnClose: true,
|
|
|
+ renderHeader,
|
|
|
+ renderBody,
|
|
|
+ renderFooter,
|
|
|
+ });
|
|
|
+ welcomeDialog.on("render", retranslateWelcomeMenu);
|
|
|
+ }
|
|
|
+ return welcomeDialog;
|
|
|
+}
|
|
|
|
|
|
+async function renderHeader() {
|
|
|
const titleWrapperElem = document.createElement("div");
|
|
|
titleWrapperElem.id = "bytm-welcome-menu-title-wrapper";
|
|
|
|
|
@@ -40,55 +40,17 @@ export async function addWelcomeMenu() {
|
|
|
|
|
|
const titleElem = document.createElement("h2");
|
|
|
titleElem.id = "bytm-welcome-menu-title";
|
|
|
- titleElem.className = "bytm-menu-title";
|
|
|
+ titleElem.classList.add("bytm-dialog-title");
|
|
|
titleElem.role = "heading";
|
|
|
titleElem.ariaLevel = "1";
|
|
|
|
|
|
titleWrapperElem.appendChild(titleLogoElem);
|
|
|
titleWrapperElem.appendChild(titleElem);
|
|
|
|
|
|
- headerElem.appendChild(titleWrapperElem);
|
|
|
-
|
|
|
- //#SECTION footer
|
|
|
- const footerCont = document.createElement("div");
|
|
|
- footerCont.id = "bytm-welcome-menu-footer-cont";
|
|
|
- footerCont.className = "bytm-menu-footer-cont";
|
|
|
-
|
|
|
- const openCfgElem = document.createElement("button");
|
|
|
- openCfgElem.id = "bytm-welcome-menu-open-cfg";
|
|
|
- openCfgElem.classList.add("bytm-btn");
|
|
|
- openCfgElem.addEventListener("click", () => {
|
|
|
- closeWelcomeMenu();
|
|
|
- openCfgMenu();
|
|
|
- });
|
|
|
-
|
|
|
- const openChangelogElem = document.createElement("button");
|
|
|
- openChangelogElem.id = "bytm-welcome-menu-open-changelog";
|
|
|
- openChangelogElem.classList.add("bytm-btn");
|
|
|
- openChangelogElem.addEventListener("click", async () => {
|
|
|
- const dlg = await getChangelogDialog();
|
|
|
- await dlg.mount();
|
|
|
- closeWelcomeMenu();
|
|
|
- await dlg.open();
|
|
|
- });
|
|
|
-
|
|
|
- const closeBtnElem = document.createElement("button");
|
|
|
- closeBtnElem.id = "bytm-welcome-menu-footer-close";
|
|
|
- closeBtnElem.classList.add("bytm-btn");
|
|
|
- closeBtnElem.addEventListener("click", async () => {
|
|
|
- closeWelcomeMenu();
|
|
|
- });
|
|
|
-
|
|
|
- const leftButtonsCont = document.createElement("div");
|
|
|
- leftButtonsCont.id = "bytm-menu-footer-left-buttons-cont";
|
|
|
-
|
|
|
- leftButtonsCont.appendChild(openCfgElem);
|
|
|
- leftButtonsCont.appendChild(openChangelogElem);
|
|
|
-
|
|
|
- footerCont.appendChild(leftButtonsCont);
|
|
|
- footerCont.appendChild(closeBtnElem);
|
|
|
+ return titleWrapperElem;
|
|
|
+}
|
|
|
|
|
|
- //#SECTION content
|
|
|
+async function renderBody() {
|
|
|
const contentWrapper = document.createElement("div");
|
|
|
contentWrapper.id = "bytm-welcome-menu-content-wrapper";
|
|
|
|
|
@@ -179,19 +141,9 @@ export async function addWelcomeMenu() {
|
|
|
textCont.appendChild(textElem);
|
|
|
contentWrapper.appendChild(textCont);
|
|
|
|
|
|
- //#SECTION finalize
|
|
|
- menuContainer.appendChild(headerElem);
|
|
|
- menuContainer.appendChild(contentWrapper);
|
|
|
- menuContainer.appendChild(footerCont);
|
|
|
-
|
|
|
- backgroundElem.appendChild(menuContainer);
|
|
|
-
|
|
|
- document.body.appendChild(backgroundElem);
|
|
|
- retranslateWelcomeMenu();
|
|
|
+ return contentWrapper;
|
|
|
}
|
|
|
|
|
|
-//#MARKER (re-)translate
|
|
|
-
|
|
|
/** Retranslates all elements inside the welcome menu */
|
|
|
function retranslateWelcomeMenu() {
|
|
|
const getLink = (href: string): [string, string] => {
|
|
@@ -231,53 +183,43 @@ function retranslateWelcomeMenu() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/** Closes the welcome menu if it is open. If a bubbling event is passed, its propagation will be prevented. */
|
|
|
-export function closeWelcomeMenu(evt?: MouseEvent | KeyboardEvent) {
|
|
|
- if(!isWelcomeMenuOpen)
|
|
|
- return;
|
|
|
- isWelcomeMenuOpen = false;
|
|
|
- evt?.bubbles && evt.stopPropagation();
|
|
|
-
|
|
|
- document.body.classList.remove("bytm-disable-scroll");
|
|
|
- document.querySelector("ytmusic-app")?.removeAttribute("inert");
|
|
|
- const menuBg = document.querySelector<HTMLElement>("#bytm-welcome-menu-bg");
|
|
|
-
|
|
|
- siteEvents.emit("welcomeMenuClosed");
|
|
|
-
|
|
|
- if(!menuBg)
|
|
|
- return warn("Couldn't find welcome menu background element");
|
|
|
-
|
|
|
- menuBg.style.visibility = "hidden";
|
|
|
- menuBg.style.display = "none";
|
|
|
-}
|
|
|
+async function renderFooter() {
|
|
|
+ const footerCont = document.createElement("div");
|
|
|
+ footerCont.id = "bytm-welcome-menu-footer-cont";
|
|
|
|
|
|
-//#MARKER open, show & close
|
|
|
+ const openCfgElem = document.createElement("button");
|
|
|
+ openCfgElem.id = "bytm-welcome-menu-open-cfg";
|
|
|
+ openCfgElem.classList.add("bytm-btn");
|
|
|
+ openCfgElem.addEventListener("click", () => {
|
|
|
+ welcomeDialog?.close();
|
|
|
+ openCfgMenu();
|
|
|
+ });
|
|
|
|
|
|
-/** Opens the welcome menu if it is closed */
|
|
|
-export function openWelcomeMenu() {
|
|
|
- if(isWelcomeMenuOpen)
|
|
|
- return;
|
|
|
- isWelcomeMenuOpen = true;
|
|
|
+ const openChangelogElem = document.createElement("button");
|
|
|
+ openChangelogElem.id = "bytm-welcome-menu-open-changelog";
|
|
|
+ openChangelogElem.classList.add("bytm-btn");
|
|
|
+ openChangelogElem.addEventListener("click", async () => {
|
|
|
+ const dlg = await getChangelogDialog();
|
|
|
+ await dlg.mount();
|
|
|
+ welcomeDialog?.close();
|
|
|
+ await dlg.open();
|
|
|
+ });
|
|
|
|
|
|
- document.body.classList.add("bytm-disable-scroll");
|
|
|
- document.querySelector("ytmusic-app")?.setAttribute("inert", "true");
|
|
|
- const menuBg = document.querySelector<HTMLElement>("#bytm-welcome-menu-bg");
|
|
|
+ const closeBtnElem = document.createElement("button");
|
|
|
+ closeBtnElem.id = "bytm-welcome-menu-footer-close";
|
|
|
+ closeBtnElem.classList.add("bytm-btn");
|
|
|
+ closeBtnElem.addEventListener("click", async () => {
|
|
|
+ welcomeDialog?.close();
|
|
|
+ });
|
|
|
|
|
|
- if(!menuBg)
|
|
|
- return warn("Couldn't find welcome menu background element");
|
|
|
+ const leftButtonsCont = document.createElement("div");
|
|
|
+ leftButtonsCont.id = "bytm-menu-footer-left-buttons-cont";
|
|
|
|
|
|
- menuBg.style.visibility = "visible";
|
|
|
- menuBg.style.display = "block";
|
|
|
-}
|
|
|
+ leftButtonsCont.appendChild(openCfgElem);
|
|
|
+ leftButtonsCont.appendChild(openChangelogElem);
|
|
|
|
|
|
-/** Shows the welcome menu and returns a promise that resolves when the menu is closed */
|
|
|
-export function showWelcomeMenu() {
|
|
|
- return new Promise<void>((resolve) => {
|
|
|
- const unsub = siteEvents.on("welcomeMenuClosed", () => {
|
|
|
- unsub();
|
|
|
- resolve();
|
|
|
- });
|
|
|
+ footerCont.appendChild(leftButtonsCont);
|
|
|
+ footerCont.appendChild(closeBtnElem);
|
|
|
|
|
|
- openWelcomeMenu();
|
|
|
- });
|
|
|
+ return footerCont;
|
|
|
}
|