|
|
|
import { ThemeManager } from "./modules/theme.js";
|
|
|
|
import { lang, LangFile, loadLangSelector } from "./modules/lang.js";
|
|
|
|
import { Modal } from "./modules/modal.js";
|
|
|
|
import { Tabs } 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 } 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');
|
|
|
|
}*/
|
|
|
|
|
|
|
|
// load tabs
|
|
|
|
const tabs: { url: string, reloader: () => void }[] = [
|
|
|
|
{
|
|
|
|
url: "invites",
|
|
|
|
reloader: window.invites.reload
|
|
|
|
},
|
|
|
|
{
|
|
|
|
url: "accounts",
|
|
|
|
reloader: accounts.reload
|
|
|
|
},
|
|
|
|
{
|
|
|
|
url: "activity",
|
|
|
|
reloader: activity.reload
|
|
|
|
},
|
|
|
|
{
|
|
|
|
url: "settings",
|
|
|
|
reloader: settings.reload
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
const defaultTab = tabs[0];
|
|
|
|
|
|
|
|
window.tabs = new Tabs();
|
|
|
|
|
|
|
|
for (let tab of tabs) {
|
|
|
|
window.tabs.addTab(tab.url, null, tab.reloader);
|
|
|
|
if (window.location.pathname == window.URLBase + "/" + tab.url) {
|
|
|
|
window.tabs.switch(tab.url, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let isInviteURL = window.invites.isInviteURL();
|
|
|
|
let isAccountURL = accounts.isAccountURL();
|
|
|
|
|
|
|
|
// Default tab
|
|
|
|
if ((window.URLBase + "/").includes(window.location.pathname)) {
|
|
|
|
window.tabs.switch(defaultTab.url, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
document.addEventListener("tab-change", (event: CustomEvent) => {
|
|
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
|
|
const lang = urlParams.get('lang');
|
|
|
|
let tab = window.URLBase + "/" + event.detail;
|
|
|
|
if (event.detail == "") {
|
|
|
|
tab = window.location.pathname;
|
|
|
|
} else if (tab == window.URLBase + "/invites") {
|
|
|
|
if (window.location.pathname == window.URLBase + "/") {
|
|
|
|
tab = window.URLBase + "/";
|
|
|
|
} else if (window.URLBase) { tab = window.URLBase; }
|
|
|
|
else { tab = "../"; }
|
|
|
|
}
|
|
|
|
if (lang) {
|
|
|
|
tab += "?lang=" + lang
|
|
|
|
}
|
|
|
|
window.history.pushState(event.detail, "Admin - jfa-go", tab);
|
|
|
|
});
|
|
|
|
|
|
|
|
window.onpopstate = (event: PopStateEvent) => {
|
|
|
|
console.log(event.state);
|
|
|
|
window.tabs.switch(event.state);
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
setInterval(() => { window.invites.reload(); accounts.reload(); }, 30*1000);
|
|
|
|
const currentTab = window.tabs.current;
|
|
|
|
switch (currentTab) {
|
|
|
|
case "invites":
|
|
|
|
window.invites.reload();
|
|
|
|
break;
|
|
|
|
case "accounts":
|
|
|
|
accounts.reload();
|
|
|
|
break;
|
|
|
|
case "settings":
|
|
|
|
settings.reload();
|
|
|
|
break;
|
|
|
|
case "activity": // FIXME: fix URL clash with route
|
|
|
|
activity.reload();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
console.log(isAccountURL, isInviteURL);
|
|
|
|
if (isInviteURL) {
|
|
|
|
window.invites.reload(() => {
|
|
|
|
window.invites.loadInviteURL();
|
|
|
|
window.tabs.switch("invites", false, true);
|
|
|
|
});
|
|
|
|
} else if (isAccountURL) {
|
|
|
|
accounts.reload(() => {
|
|
|
|
accounts.loadAccountURL();
|
|
|
|
window.tabs.switch("accounts", false, true);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bindManualDropdowns();
|
|
|
|
|
|
|
|
login.bindLogout(document.getElementById("logout-button"));
|
|
|
|
|
|
|
|
login.login("", "");
|