Hooks.on("init", () => {
|
|
game.settings.register("theripper-premium-hub", "autoCheck", {
|
|
name: "Check for Updates on Startup",
|
|
hint: "Automatically check on world load if any of my premium modules have updates.",
|
|
scope: "world",
|
|
config: true,
|
|
type: Boolean,
|
|
default: true,
|
|
});
|
|
|
|
game.settings.register("theripper-premium-hub", "checkDisabled", {
|
|
name: "Check Modules not Enabled",
|
|
hint: "Check for updates on modules that are installed but not enabled.",
|
|
scope: "world",
|
|
config: true,
|
|
type: Boolean,
|
|
default: true,
|
|
});
|
|
|
|
game.settings.register("theripper-premium-hub", "viewedAnnouncements", {
|
|
scope: "world",
|
|
config: false,
|
|
type: String,
|
|
default: "",
|
|
});
|
|
|
|
game.settings.register("theripper-premium-hub", "viewedUpdates", {
|
|
scope: "world",
|
|
config: false,
|
|
type: Object,
|
|
default: {},
|
|
});
|
|
|
|
game.settings.register("theripper-premium-hub", "prevEnabledModules", {
|
|
scope: "world",
|
|
config: false,
|
|
type: Array,
|
|
default: [],
|
|
});
|
|
const prevEnabledModules = game.settings.get("theripper-premium-hub", "prevEnabledModules");
|
|
async function reEnableModules() {
|
|
if (game.user.isGM && prevEnabledModules.length > 0) {
|
|
const confirm = await Dialog.confirm({
|
|
title: "TheRipper93 Premium HUB",
|
|
content: "Would you like to re-enable your previously enabled modules?<br>Choose 'No' to disable this prompt, you will have to manually re-enable modules in the module management menu.<br>Close this prompt to be asked again on next refresh.",
|
|
yes: () => {
|
|
return true;
|
|
},
|
|
no: () => {
|
|
return false;
|
|
},
|
|
defaultYes: true,
|
|
});
|
|
if(confirm === false) await game.settings.set("theripper-premium-hub", "prevEnabledModules", []);
|
|
if (!confirm) return;
|
|
const modulesSetting = game.settings.get("core", ModuleManagement.CONFIG_SETTING);
|
|
for (const [k, v] of Object.entries(modulesSetting)) {
|
|
if (prevEnabledModules.includes(k)) {
|
|
modulesSetting[k] = true;
|
|
}
|
|
}
|
|
await game.settings.set("theripper-premium-hub", "prevEnabledModules", []);
|
|
await game.settings.set("core", ModuleManagement.CONFIG_SETTING, modulesSetting);
|
|
debouncedReload();
|
|
}
|
|
}
|
|
Hooks.once("ready", () => {
|
|
reEnableModules();
|
|
});
|
|
});
|
|
|
|
Hooks.on("renderSettingsConfig", (app, html, data) => {
|
|
if (!game.user.isGM) return;
|
|
|
|
function generateSupportReport(moduleId) {
|
|
const supportInfo = SupportDetails.generateSupportReport();
|
|
const supportOutput = {
|
|
"Core Version": supportInfo.coreVersion,
|
|
System: supportInfo.systemVersion,
|
|
Client: supportInfo.client,
|
|
GPU: supportInfo.gpu,
|
|
"Module Count": supportInfo.activeModuleCount,
|
|
};
|
|
const module = game.modules.get(moduleId);
|
|
supportOutput[module.title] = module.version;
|
|
const dependencies = game.theripperpremiumhub.getDependencies(moduleId);
|
|
dependencies.forEach((m) => {
|
|
supportOutput[m.title] = m.version;
|
|
});
|
|
|
|
const tableHtml = Object.keys(supportOutput)
|
|
.map((key) => {
|
|
return `<tr><td>${key}</td><td>${supportOutput[key]}</td></tr>`;
|
|
})
|
|
.join("");
|
|
const html = `<table>${tableHtml}</table>`;
|
|
|
|
Dialog.prompt({
|
|
title: "Support Report",
|
|
content: html,
|
|
label: "Copy to Clipboard",
|
|
callback: (html) => {
|
|
const text = Object.entries(supportOutput)
|
|
.map(([k, v]) => `${k}: ${v}`)
|
|
.join("\n");
|
|
game.clipboard.copyPlainText("```" + text + "```");
|
|
ui.notifications.info("Copied to Clipboard, please paste it along with your support request on discord.");
|
|
},
|
|
});
|
|
}
|
|
|
|
//Add wiki buttons
|
|
|
|
html[0].querySelectorAll(".tab.category").forEach((el) => {
|
|
const moduleId = el.getAttribute("data-tab");
|
|
const module = game.modules.get(moduleId);
|
|
if (!module) return;
|
|
if (!Array.from(module.authors).some((a) => a.name === "theripper93")) return;
|
|
const title = el.querySelector("h2");
|
|
title.style.display = "flex";
|
|
const wikiButton = document.createElement("a");
|
|
wikiButton.style.marginLeft = "auto";
|
|
wikiButton.classList.add("wiki-button");
|
|
const status = module.download ? "free" : "paid";
|
|
wikiButton.setAttribute("href", `https://api.theripper93.com/modulewiki/${moduleId}/${status}`);
|
|
wikiButton.setAttribute("target", "_blank");
|
|
wikiButton.innerHTML = `<i data-tooltip="Open Documentation" class="fas fa-book"></i>`;
|
|
title.appendChild(wikiButton);
|
|
|
|
const supportButton = document.createElement("a");
|
|
supportButton.style.marginLeft = "0.5rem";
|
|
supportButton.classList.add("wiki-button");
|
|
supportButton.innerHTML = `<i data-tooltip="Generate Support Report" class="fas fa-question-circle"></i>`;
|
|
supportButton.addEventListener("click", (e) => {
|
|
e.preventDefault();
|
|
generateSupportReport(moduleId);
|
|
});
|
|
title.appendChild(supportButton);
|
|
|
|
const troubleshootButton = document.createElement("a");
|
|
troubleshootButton.style.marginLeft = "0.5rem";
|
|
troubleshootButton.classList.add("wiki-button");
|
|
troubleshootButton.innerHTML = `<i data-tooltip="Troubleshoot" class="fas fa-tools"></i>`;
|
|
troubleshootButton.addEventListener("click", (e) => {
|
|
e.preventDefault();
|
|
game.theripperpremiumhub.troubleshoot(moduleId);
|
|
});
|
|
title.appendChild(troubleshootButton);
|
|
});
|
|
|
|
const menuSetting = html.find(`input[name="theripper-premium-hub.checkDisabled"]`).closest(".form-group");
|
|
const button = $(`
|
|
${game.theripperpremiumhub.announcementsHtml}
|
|
<div class="form-group">
|
|
<a style="text-align: center;" href="https://theripper93.com/" target="_blank" rel="nofollow" title="https://theripper93.com/"><i class="fas fa-globe"></i> Visit my Website</a>
|
|
<button type="button">
|
|
<i class="fas fa-cogs"></i>
|
|
<label>Check for Updates</label>
|
|
</button>
|
|
</div>
|
|
`);
|
|
button.find("button").click((e) => {
|
|
e.preventDefault();
|
|
game.theripperpremiumhub.displayOutdated(true);
|
|
});
|
|
menuSetting.after(button);
|
|
|
|
html[0].querySelectorAll(".item.category-tab").forEach((el) => {
|
|
const modId = el.dataset.tab;
|
|
const outdated = game.theripperpremiumhub.outdatedModules[modId];
|
|
if (!outdated) return;
|
|
el.innerHTML = el.innerHTML.replace(outdated.title, `<span><i style="color: var(--color-level-warning)" class="fas fa-circle-info"></i> ${outdated.title}</span>`);
|
|
el.dataset.tooltip = game.i18n.format("SETUP.UpdateAvailable", { channel: outdated.title, version: outdated.version });
|
|
});
|
|
});
|