145 lines
4.2 KiB
JavaScript
145 lines
4.2 KiB
JavaScript
import { loadCardDeck } from "./quickmenu/carddeck.js";
|
||
import { loadEvents } from "./quickmenu/events.js";
|
||
import { loadHeroBonus } from "./quickmenu/hero-bonus.js";
|
||
import { loadSealedLeague } from "./quickmenu/sealed-league.js";
|
||
import { loadSummoner } from "./quickmenu/summoner.js";
|
||
import { loadOnlinebonus } from "./quickmenu/onlinebonus.js";
|
||
import { loadActions } from "./quickmenu/actions.js";
|
||
import { loadBazaar } from "./quickmenu/bazaar.js";
|
||
import { loadBoosterAction } from "./quickmenu/booster-action.js";
|
||
import { loadBoosterHunt } from "./quickmenu/booster-hunt.js";
|
||
|
||
/* Popup-ID → Loader Funktion */
|
||
const popupLoaders = {
|
||
"qm-popup-carddeck": loadCardDeck,
|
||
"qm-popup-events": loadEvents,
|
||
"qm-popup-heldenbonus": loadHeroBonus,
|
||
"qm-popup-sealedliga": loadSealedLeague,
|
||
"qm-popup-beschwoerer": loadSummoner,
|
||
"qm-popup-onlinebonus": loadOnlinebonus,
|
||
"qm-popup-aktionen": loadActions,
|
||
"qm-popup-basar": loadBazaar,
|
||
"qm-popup-boosteraktion": loadBoosterAction,
|
||
"qm-popup-boosterjagd": loadBoosterHunt,
|
||
};
|
||
|
||
/* ================================
|
||
Quick Menu – Toggle
|
||
================================ */
|
||
|
||
const panel = document.getElementById("quickmenu-panel");
|
||
const overlay = document.getElementById("qm-overlay");
|
||
|
||
/* ================================
|
||
Quick Menu – Popups öffnen
|
||
================================ */
|
||
|
||
document.querySelectorAll(".qm-slot").forEach((slot) => {
|
||
slot.addEventListener("click", () => {
|
||
const id = slot.dataset.popup;
|
||
if (!id) return;
|
||
|
||
const popup = document.getElementById(id);
|
||
if (!popup) return;
|
||
|
||
// Popup zurück zur Mitte setzen
|
||
popup.style.transform = "translate(-50%, -50%) scale(1)";
|
||
popup.style.left = "50%";
|
||
popup.style.top = "50%";
|
||
|
||
overlay.classList.add("active");
|
||
popup.classList.add("active");
|
||
|
||
// Zugehörigen Loader aufrufen
|
||
const loader = popupLoaders[id];
|
||
if (loader) loader();
|
||
});
|
||
});
|
||
|
||
/* ================================
|
||
Quick Menu – Popups verschiebbar
|
||
================================ */
|
||
|
||
document.querySelectorAll(".qm-popup").forEach((popup) => {
|
||
const header = popup.querySelector(".qm-popup-header");
|
||
if (!header) return;
|
||
|
||
let isDragging = false;
|
||
let startX, startY, startLeft, startTop;
|
||
|
||
header.style.cursor = "grab";
|
||
|
||
header.addEventListener("mousedown", (e) => {
|
||
if (e.target.classList.contains("qm-popup-close")) return;
|
||
|
||
isDragging = true;
|
||
header.style.cursor = "grabbing";
|
||
|
||
const rect = popup.getBoundingClientRect();
|
||
startX = e.clientX;
|
||
startY = e.clientY;
|
||
startLeft = rect.left;
|
||
startTop = rect.top;
|
||
|
||
// transform zurücksetzen auf konkrete px-Werte
|
||
popup.style.transform = "none";
|
||
popup.style.left = startLeft + "px";
|
||
popup.style.top = startTop + "px";
|
||
|
||
e.preventDefault();
|
||
});
|
||
|
||
document.addEventListener("mousemove", (e) => {
|
||
if (!isDragging) return;
|
||
popup.style.left = (startLeft + (e.clientX - startX)) + "px";
|
||
popup.style.top = (startTop + (e.clientY - startY)) + "px";
|
||
});
|
||
|
||
document.addEventListener("mouseup", () => {
|
||
if (!isDragging) return;
|
||
isDragging = false;
|
||
header.style.cursor = "grab";
|
||
});
|
||
});
|
||
|
||
/* ================================
|
||
Quick Menu – Popups schließen
|
||
================================ */
|
||
|
||
function isBoosterSpinning() {
|
||
// Nur sperren wenn das Events-Popup gerade offen UND der Slot dreht
|
||
const eventsPopup = document.getElementById("qm-popup-events");
|
||
if (!eventsPopup || !eventsPopup.classList.contains("active")) return false;
|
||
|
||
const ui = document.getElementById("booster-ui");
|
||
if (!ui || ui.style.display === "none") return false;
|
||
|
||
return !!ui.querySelector(".booster-slot.spinning");
|
||
}
|
||
|
||
document.querySelectorAll(".qm-popup-close").forEach((btn) => {
|
||
btn.addEventListener("click", closeAllPopups);
|
||
});
|
||
|
||
overlay.addEventListener("click", closeAllPopups);
|
||
|
||
function closeAllPopups() {
|
||
if (isBoosterSpinning()) return; // Slot dreht → sperren
|
||
|
||
document.querySelectorAll(".qm-popup").forEach((p) => {
|
||
p.classList.remove("active");
|
||
});
|
||
overlay.classList.remove("active");
|
||
}
|
||
|
||
document.addEventListener("keydown", (e) => {
|
||
if (e.key === "Escape") {
|
||
if (isBoosterSpinning()) {
|
||
e.stopPropagation();
|
||
e.preventDefault();
|
||
return;
|
||
}
|
||
closeAllPopups();
|
||
}
|
||
});
|