import { ThemeManager } from "./modules/theme.js"; import { lang, LangFile, loadLangSelector } from "./modules/lang.js"; import { Modal } from "./modules/modal.js"; import { Tabs, Tab } from "./modules/tabs.js"; import { inviteList, createInvite } from "./modules/invites.js"; import { accountsList } from "./modules/accounts.js"; import { settingsList } from "./modules/settings.js"; import { activityList } from "./modules/activity.js"; import { ProfileEditor, reloadProfileNames } from "./modules/profiles.js"; import { _get, _post, notificationBox, whichAnimationEvent, bindManualDropdowns } from "./modules/common.js"; import { Updater } from "./modules/update.js"; import { Login } from "./modules/login.js"; const theme = new ThemeManager(document.getElementById("button-theme")); window.lang = new lang(window.langFile as LangFile); loadLangSelector("admin"); // _get(`/lang/admin/${window.language}.json`, null, (req: XMLHttpRequest) => { // if (req.readyState == 4 && req.status == 200) { // langLoaded = true; // window.lang = new lang(req.response as LangFile); // } // }); window.animationEvent = whichAnimationEvent(); window.token = ""; window.availableProfiles = window.availableProfiles || []; // load modals (() => { window.modals = {} as Modals; window.modals.login = new Modal(document.getElementById('modal-login'), true); window.modals.addUser = new Modal(document.getElementById('modal-add-user')); window.modals.about = new Modal(document.getElementById('modal-about')); (document.getElementById('setting-about') as HTMLSpanElement).onclick = window.modals.about.toggle; window.modals.modifyUser = new Modal(document.getElementById('modal-modify-user')); window.modals.deleteUser = new Modal(document.getElementById('modal-delete-user')); window.modals.settingsRestart = new Modal(document.getElementById('modal-restart')); window.modals.settingsRefresh = new Modal(document.getElementById('modal-refresh')); window.modals.ombiProfile = new Modal(document.getElementById('modal-ombi-profile')); document.getElementById('form-ombi-defaults').addEventListener('submit', window.modals.ombiProfile.close); window.modals.jellyseerrProfile = new Modal(document.getElementById('modal-jellyseerr-profile')); document.getElementById('form-jellyseerr-defaults').addEventListener('submit', window.modals.jellyseerrProfile.close); window.modals.profiles = new Modal(document.getElementById("modal-user-profiles")); window.modals.addProfile = new Modal(document.getElementById("modal-add-profile")); window.modals.announce = new Modal(document.getElementById("modal-announce")); window.modals.editor = new Modal(document.getElementById("modal-editor")); window.modals.customizeEmails = new Modal(document.getElementById("modal-customize")); window.modals.extendExpiry = new Modal(document.getElementById("modal-extend-expiry")); window.modals.updateInfo = new Modal(document.getElementById("modal-update")); window.modals.matrix = new Modal(document.getElementById("modal-matrix")); window.modals.logs = new Modal(document.getElementById("modal-logs")); window.modals.backedUp = new Modal(document.getElementById("modal-backed-up")); window.modals.backups = new Modal(document.getElementById("modal-backups")); if (window.telegramEnabled) { window.modals.telegram = new Modal(document.getElementById("modal-telegram")); } if (window.discordEnabled) { window.modals.discord = new Modal(document.getElementById("modal-discord")); } if (window.linkResetEnabled) { window.modals.sendPWR = new Modal(document.getElementById("modal-send-pwr")); } if (window.referralsEnabled) { window.modals.enableReferralsUser = new Modal(document.getElementById("modal-enable-referrals-user")); window.modals.enableReferralsProfile = new Modal(document.getElementById("modal-enable-referrals-profile")); } })(); var inviteCreator = new createInvite(); var accounts = new accountsList(); var activity = new activityList(); window.invites = new inviteList(); var settings = new settingsList(); var profiles = new ProfileEditor(); window.notifications = new notificationBox(document.getElementById('notification-box') as HTMLDivElement, 5); /*const modifySettingsSource = function () { const profile = document.getElementById('radio-use-profile') as HTMLInputElement; const user = document.getElementById('radio-use-user') as HTMLInputElement; const profileSelect = document.getElementById('modify-user-profiles') as HTMLDivElement; const userSelect = document.getElementById('modify-user-users') as HTMLDivElement; (user.nextElementSibling as HTMLSpanElement).classList.toggle('@low'); (user.nextElementSibling as HTMLSpanElement).classList.toggle('@high'); (profile.nextElementSibling as HTMLSpanElement).classList.toggle('@low'); (profile.nextElementSibling as HTMLSpanElement).classList.toggle('@high'); profileSelect.classList.toggle('unfocused'); userSelect.classList.toggle('unfocused'); }*/ // Determine if url references an invite or account let isInviteURL = window.invites.isInviteURL(); let isAccountURL = accounts.isAccountURL(); // load tabs const tabs: { id: string, url: string, reloader: () => void }[] = [ { id: "invites", url: "", reloader: () => window.invites.reload(() => { if (isInviteURL) { window.invites.loadInviteURL(); // Don't keep loading the same item on every tab refresh isInviteURL = false; } }), }, { id: "accounts", url: "accounts", reloader: () => accounts.reload(() => { if (isAccountURL) { accounts.loadAccountURL(); // Don't keep loading the same item on every tab refresh isAccountURL = false; } }), }, { id: "activity", url: "activity", reloader: activity.reload }, { id: "settings", url: "settings", reloader: settings.reload } ]; const defaultTab = tabs[0]; window.tabs = new Tabs(); for (let tab of tabs) { window.tabs.addTab(tab.id, tab.url, null, tab.reloader); } let matchedTab = false for (let tab of tabs) { if (window.location.pathname.startsWith(window.URLBase + "/" + tab.url)) { window.tabs.switch(tab.url, true); matchedTab = true; } } // Default tab // if ((window.URLBase + "/").includes(window.location.pathname)) { if (!matchedTab) { window.tabs.switch("", true); } const login = new Login(window.modals.login as Modal, "/", window.loginAppearance); login.onLogin = () => { console.log("Logged in."); window.updater = new Updater(); // FIXME: Decide whether to autoload activity or not reloadProfileNames(); setInterval(() => { window.invites.reload(); accounts.reload(); }, 30*1000); // Triggers pre and post funcs, even though we're already on that page window.tabs.switch(window.tabs.current); } bindManualDropdowns(); login.bindLogout(document.getElementById("logout-button")); login.login("", "");