mirror of
https://github.com/Nystik-gh/ignis.git
synced 2026-06-17 04:35:53 +00:00
118 lines
3.0 KiB
JavaScript
118 lines
3.0 KiB
JavaScript
const generalTab = require("./general-tab");
|
|
const serverPluginsTab = require("./server-plugins-tab");
|
|
const { createNavEl, createTab, createGroup } = require("./settings-ui");
|
|
const {
|
|
setupPluginTabs,
|
|
reconcilePluginTabs,
|
|
hideIgnisFromCommunityPlugins,
|
|
restoreCommunityPlugins,
|
|
clearOwnedPluginIds,
|
|
} = require("./plugin-tabs");
|
|
|
|
function removeExistingIgnisGroups(tabHeadersEl) {
|
|
const groups = tabHeadersEl.querySelectorAll(".vertical-tab-header-group");
|
|
|
|
for (const g of groups) {
|
|
const title = g.querySelector(".vertical-tab-header-group-title");
|
|
|
|
if (
|
|
title?.textContent === "Ignis" ||
|
|
title?.textContent === "Ignis Core Plugins"
|
|
) {
|
|
g.remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
// All ignis-managed nav elements (both Ignis group and Ignis Core Plugins group).
|
|
// Collected here so the openTab patch can manage is-active across all of them.
|
|
const allIgnisNavEls = new Map(); // tab id -> nav element
|
|
|
|
function patchOpenTab(setting) {
|
|
if (setting._ignisOpenTabPatched) {
|
|
return;
|
|
}
|
|
|
|
const original = setting.openTab.bind(setting);
|
|
|
|
setting.openTab = function (tab) {
|
|
// Clear is-active from all ignis nav items.
|
|
for (const [, el] of allIgnisNavEls) {
|
|
el.removeClass("is-active");
|
|
}
|
|
|
|
original(tab);
|
|
|
|
// If the opened tab is one of ours, highlight it.
|
|
const navEl = allIgnisNavEls.get(tab.id);
|
|
|
|
if (navEl) {
|
|
navEl.addClass("is-active");
|
|
}
|
|
};
|
|
|
|
setting._ignisOpenTabPatched = true;
|
|
}
|
|
|
|
function injectIgnisSettings(setting, app) {
|
|
removeExistingIgnisGroups(setting.tabHeadersEl);
|
|
clearOwnedPluginIds();
|
|
allIgnisNavEls.clear();
|
|
|
|
patchOpenTab(setting);
|
|
|
|
const ignis = createGroup("Ignis");
|
|
|
|
const tabs = [
|
|
createTab("ignis-general", "General", generalTab.display, app, "flame"),
|
|
createTab(
|
|
"ignis-core-plugins",
|
|
"Core plugins",
|
|
serverPluginsTab.display,
|
|
app,
|
|
"blocks",
|
|
),
|
|
];
|
|
|
|
for (const tab of tabs) {
|
|
tab.navEl = createNavEl(tab, setting);
|
|
ignis.items.appendChild(tab.navEl);
|
|
allIgnisNavEls.set(tab.id, tab.navEl);
|
|
}
|
|
|
|
setting.tabHeadersEl.appendChild(ignis.group);
|
|
|
|
const corePlugins = createGroup("Ignis Core Plugins");
|
|
setting.tabHeadersEl.appendChild(corePlugins.group);
|
|
|
|
hideIgnisFromCommunityPlugins(setting);
|
|
setupPluginTabs(setting, corePlugins.items, allIgnisNavEls);
|
|
}
|
|
|
|
function patchSettingsModal(plugin) {
|
|
const original = plugin.app.setting.onOpen;
|
|
const app = plugin.app;
|
|
plugin._originalOnOpen = original;
|
|
|
|
plugin.app.setting.onOpen = function () {
|
|
original.call(this);
|
|
injectIgnisSettings(this, app);
|
|
};
|
|
}
|
|
|
|
function unpatchSettingsModal(plugin) {
|
|
if (plugin._originalOnOpen) {
|
|
plugin.app.setting.onOpen = plugin._originalOnOpen;
|
|
}
|
|
|
|
delete plugin.app.setting._ignisOpenTabPatched;
|
|
|
|
restoreCommunityPlugins(plugin.app.setting);
|
|
clearOwnedPluginIds();
|
|
}
|
|
|
|
window.__ignisReconcilePluginTabs = (setting) =>
|
|
reconcilePluginTabs(setting, allIgnisNavEls);
|
|
|
|
module.exports = { patchSettingsModal, unpatchSettingsModal, reconcilePluginTabs };
|