prettify, sorry for the big ass commit

This commit is contained in:
Olivier Gagnon
2021-09-04 19:09:30 -04:00
parent 3d7cdb4ef9
commit a18bdd6afc
554 changed files with 91615 additions and 66138 deletions
+173 -121
View File
@@ -3,156 +3,208 @@ import { MainMenuLinks } from "./Links";
import { IPlayer } from "../../PersonObjects/IPlayer";
interface IMainMenuHeaders {
Hacking: HTMLElement | null;
Character: HTMLElement | null;
World: HTMLElement | null;
Help: HTMLElement | null;
Hacking: HTMLElement | null;
Character: HTMLElement | null;
World: HTMLElement | null;
Help: HTMLElement | null;
}
export const MainMenuHeaders: IMainMenuHeaders = {
Hacking: null,
Character: null,
World: null,
Help: null,
}
Hacking: null,
Character: null,
World: null,
Help: null,
};
// Implements collapsible toggle feature when a header is clicked
function toggleHeader(open: boolean, elems: HTMLElement[], links: HTMLElement[]): void {
for (let i = 0; i < elems.length; ++i) {
if (open) {
elems[i].style.opacity = "1";
elems[i].style.maxHeight = elems[i].scrollHeight + "px";
} else {
elems[i].style.opacity = "0";
elems[i].style.maxHeight = "";
}
function toggleHeader(
open: boolean,
elems: HTMLElement[],
links: HTMLElement[],
): void {
for (let i = 0; i < elems.length; ++i) {
if (open) {
elems[i].style.opacity = "1";
elems[i].style.maxHeight = elems[i].scrollHeight + "px";
} else {
elems[i].style.opacity = "0";
elems[i].style.maxHeight = "";
}
}
for (let i = 0; i < links.length; ++i) {
if (open) {
links[i].style.opacity = "1";
links[i].style.maxHeight = links[i].scrollHeight + "px";
links[i].style.pointerEvents = "auto";
} else {
links[i].style.opacity = "0";
links[i].style.maxHeight = "";
links[i].style.pointerEvents = "none";
}
for (let i = 0; i < links.length; ++i) {
if (open) {
links[i].style.opacity = "1";
links[i].style.maxHeight = links[i].scrollHeight + "px";
links[i].style.pointerEvents = "auto";
} else {
links[i].style.opacity = "0";
links[i].style.maxHeight = "";
links[i].style.pointerEvents = "none";
}
}
}
export function initializeMainMenuHeaders(p: IPlayer, dev = false): boolean {
function safeGetElement(id: string): HTMLElement {
const elem: HTMLElement | null = document.getElementById(id);
if (elem == null) {
throw new Error(`Failed to find element with id ${id} in initializeMainMenuHeaders()`);
}
return elem;
function safeGetElement(id: string): HTMLElement {
const elem: HTMLElement | null = document.getElementById(id);
if (elem == null) {
throw new Error(
`Failed to find element with id ${id} in initializeMainMenuHeaders()`,
);
}
try {
// Get references to the DOM elements
MainMenuHeaders.Hacking = safeGetElement("hacking-menu-header");
MainMenuHeaders.Character = safeGetElement("character-menu-header");
MainMenuHeaders.World = safeGetElement("world-menu-header");
MainMenuHeaders.Help = safeGetElement("help-menu-header");
return elem;
}
// Set click handlers to turn the headers into collapsibles
MainMenuHeaders.Hacking.onclick = function() {
const terminal: HTMLElement = safeGetElement("terminal-tab");
const createScript: HTMLElement = safeGetElement("create-script-tab");
const activeScripts: HTMLElement = safeGetElement("active-scripts-tab");
const createProgram: HTMLElement = safeGetElement("create-program-tab");
const createProgramNot: HTMLElement = safeGetElement("create-program-notification");
try {
// Get references to the DOM elements
MainMenuHeaders.Hacking = safeGetElement("hacking-menu-header");
MainMenuHeaders.Character = safeGetElement("character-menu-header");
MainMenuHeaders.World = safeGetElement("world-menu-header");
MainMenuHeaders.Help = safeGetElement("help-menu-header");
createProgram.style.display = p.firstProgramAvailable ? "list-item" : "none";
// Set click handlers to turn the headers into collapsibles
MainMenuHeaders.Hacking.onclick = function () {
const terminal: HTMLElement = safeGetElement("terminal-tab");
const createScript: HTMLElement = safeGetElement("create-script-tab");
const activeScripts: HTMLElement = safeGetElement("active-scripts-tab");
const createProgram: HTMLElement = safeGetElement("create-program-tab");
const createProgramNot: HTMLElement = safeGetElement(
"create-program-notification",
);
(this as any).classList.toggle("opened");
createProgram.style.display = p.firstProgramAvailable
? "list-item"
: "none";
const elems: HTMLElement[] = [terminal, createScript, activeScripts, createProgram];
const links: HTMLElement[] = [MainMenuLinks.Terminal, MainMenuLinks.ScriptEditor, MainMenuLinks.ActiveScripts, MainMenuLinks.CreateProgram];
if (terminal.style.maxHeight) {
toggleHeader(false, elems, links);
createProgramNot.style.display = "none";
} else {
toggleHeader(true, elems, links);
createProgramNot.style.display = "block"
}
}
(this as any).classList.toggle("opened");
MainMenuHeaders.Character.onclick = function() {
const stats: HTMLElement = safeGetElement("stats-tab");
const factions: HTMLElement = safeGetElement("factions-tab");
const augmentations: HTMLElement = safeGetElement("augmentations-tab");
const hacknetnodes: HTMLElement = safeGetElement("hacknet-nodes-tab");
const sleeves: HTMLElement = safeGetElement("sleeves-tab");
const elems: HTMLElement[] = [
terminal,
createScript,
activeScripts,
createProgram,
];
const links: HTMLElement[] = [
MainMenuLinks.Terminal,
MainMenuLinks.ScriptEditor,
MainMenuLinks.ActiveScripts,
MainMenuLinks.CreateProgram,
];
if (terminal.style.maxHeight) {
toggleHeader(false, elems, links);
createProgramNot.style.display = "none";
} else {
toggleHeader(true, elems, links);
createProgramNot.style.display = "block";
}
};
sleeves.style.display = p.sleeves.length > 0 ? "list-item" : "none";
MainMenuHeaders.Character.onclick = function () {
const stats: HTMLElement = safeGetElement("stats-tab");
const factions: HTMLElement = safeGetElement("factions-tab");
const augmentations: HTMLElement = safeGetElement("augmentations-tab");
const hacknetnodes: HTMLElement = safeGetElement("hacknet-nodes-tab");
const sleeves: HTMLElement = safeGetElement("sleeves-tab");
(this as any).classList.toggle("opened");
sleeves.style.display = p.sleeves.length > 0 ? "list-item" : "none";
const elems: HTMLElement[] = [stats, factions, augmentations, hacknetnodes, sleeves];
const links: HTMLElement[] = [MainMenuLinks.Stats, MainMenuLinks.Factions, MainMenuLinks.Augmentations, MainMenuLinks.HacknetNodes, MainMenuLinks.Sleeves];
if (stats.style.maxHeight) {
toggleHeader(false, elems, links);
} else {
toggleHeader(true, elems, links);
}
}
(this as any).classList.toggle("opened");
MainMenuHeaders.World.onclick = function() {
const city: HTMLElement = safeGetElement("city-tab");
const travel: HTMLElement = safeGetElement("travel-tab");
const job: HTMLElement = safeGetElement("job-tab");
const stockmarket: HTMLElement = safeGetElement("stock-market-tab");
const bladeburner: HTMLElement = safeGetElement("bladeburner-tab");
const corporation: HTMLElement = safeGetElement("corporation-tab");
const gang: HTMLElement = safeGetElement("gang-tab");
const elems: HTMLElement[] = [
stats,
factions,
augmentations,
hacknetnodes,
sleeves,
];
const links: HTMLElement[] = [
MainMenuLinks.Stats,
MainMenuLinks.Factions,
MainMenuLinks.Augmentations,
MainMenuLinks.HacknetNodes,
MainMenuLinks.Sleeves,
];
if (stats.style.maxHeight) {
toggleHeader(false, elems, links);
} else {
toggleHeader(true, elems, links);
}
};
// Determine whether certain links should show up
job.style.display = p.companyName !== "" ? "list-item" : "none";
stockmarket.style.display = p.hasWseAccount ? "list-item" : "none";
bladeburner.style.display = p.inBladeburner() ? "list-item" : "none";
corporation.style.display = p.hasCorporation() ? "list-item" : "none";
gang.style.display = p.inGang() ? "list-item" : "none";
MainMenuHeaders.World.onclick = function () {
const city: HTMLElement = safeGetElement("city-tab");
const travel: HTMLElement = safeGetElement("travel-tab");
const job: HTMLElement = safeGetElement("job-tab");
const stockmarket: HTMLElement = safeGetElement("stock-market-tab");
const bladeburner: HTMLElement = safeGetElement("bladeburner-tab");
const corporation: HTMLElement = safeGetElement("corporation-tab");
const gang: HTMLElement = safeGetElement("gang-tab");
(this as any).classList.toggle("opened");
// Determine whether certain links should show up
job.style.display = p.companyName !== "" ? "list-item" : "none";
stockmarket.style.display = p.hasWseAccount ? "list-item" : "none";
bladeburner.style.display = p.inBladeburner() ? "list-item" : "none";
corporation.style.display = p.hasCorporation() ? "list-item" : "none";
gang.style.display = p.inGang() ? "list-item" : "none";
const elems: HTMLElement[] = [city, travel, job, stockmarket, bladeburner, corporation, gang];
const links: HTMLElement[] = [MainMenuLinks.City, MainMenuLinks.Travel, MainMenuLinks.Job, MainMenuLinks.StockMarket, MainMenuLinks.Bladeburner, MainMenuLinks.Corporation, MainMenuLinks.Gang];
if (city.style.maxHeight) {
toggleHeader(false, elems, links);
} else {
toggleHeader(true, elems, links);
}
}
(this as any).classList.toggle("opened");
MainMenuHeaders.Help.onclick = function() {
const milestones: HTMLElement = safeGetElement("milestones-tab");
const tutorial: HTMLElement = safeGetElement("tutorial-tab");
const options: HTMLElement = safeGetElement("options-tab");
const elems: HTMLElement[] = [
city,
travel,
job,
stockmarket,
bladeburner,
corporation,
gang,
];
const links: HTMLElement[] = [
MainMenuLinks.City,
MainMenuLinks.Travel,
MainMenuLinks.Job,
MainMenuLinks.StockMarket,
MainMenuLinks.Bladeburner,
MainMenuLinks.Corporation,
MainMenuLinks.Gang,
];
if (city.style.maxHeight) {
toggleHeader(false, elems, links);
} else {
toggleHeader(true, elems, links);
}
};
(this as any).classList.toggle("opened");
MainMenuHeaders.Help.onclick = function () {
const milestones: HTMLElement = safeGetElement("milestones-tab");
const tutorial: HTMLElement = safeGetElement("tutorial-tab");
const options: HTMLElement = safeGetElement("options-tab");
const elems: HTMLElement[] = [milestones, tutorial, options];
const links: HTMLElement[] = [MainMenuLinks.Milestones, MainMenuLinks.Tutorial, MainMenuLinks.Options];
(this as any).classList.toggle("opened");
if (dev) {
elems.push(safeGetElement("dev-tab"));
links.push(safeGetElement("dev-menu-link"));
}
const elems: HTMLElement[] = [milestones, tutorial, options];
const links: HTMLElement[] = [
MainMenuLinks.Milestones,
MainMenuLinks.Tutorial,
MainMenuLinks.Options,
];
if (tutorial.style.maxHeight) {
toggleHeader(false, elems, links);
} else {
toggleHeader(true, elems, links);
}
}
if (dev) {
elems.push(safeGetElement("dev-tab"));
links.push(safeGetElement("dev-menu-link"));
}
return true;
} catch(e) {
console.error(`Failed to initialize Main Menu Headers: ${e}`);
return false;
}
if (tutorial.style.maxHeight) {
toggleHeader(false, elems, links);
} else {
toggleHeader(true, elems, links);
}
};
return true;
} catch (e) {
console.error(`Failed to initialize Main Menu Headers: ${e}`);
return false;
}
}
+83 -80
View File
@@ -3,94 +3,97 @@
import { clearEventListeners } from "../../../utils/uiHelpers/clearEventListeners";
interface IMainMenuLinks {
Terminal: HTMLElement;
ScriptEditor: HTMLElement;
ActiveScripts: HTMLElement;
CreateProgram: HTMLElement;
Stats: HTMLElement;
Factions: HTMLElement;
Augmentations: HTMLElement;
HacknetNodes: HTMLElement;
Sleeves: HTMLElement;
City: HTMLElement;
Travel: HTMLElement;
Job: HTMLElement;
StockMarket: HTMLElement;
Bladeburner: HTMLElement;
Corporation: HTMLElement;
Gang: HTMLElement;
Milestones: HTMLElement;
Tutorial: HTMLElement;
Options: HTMLElement;
DevMenu: HTMLElement;
Terminal: HTMLElement;
ScriptEditor: HTMLElement;
ActiveScripts: HTMLElement;
CreateProgram: HTMLElement;
Stats: HTMLElement;
Factions: HTMLElement;
Augmentations: HTMLElement;
HacknetNodes: HTMLElement;
Sleeves: HTMLElement;
City: HTMLElement;
Travel: HTMLElement;
Job: HTMLElement;
StockMarket: HTMLElement;
Bladeburner: HTMLElement;
Corporation: HTMLElement;
Gang: HTMLElement;
Milestones: HTMLElement;
Tutorial: HTMLElement;
Options: HTMLElement;
DevMenu: HTMLElement;
}
const emptyElement: HTMLElement = ((): HTMLElement => {
const elem = document.createElement('div');
if(elem === null) throw new Error("unable to create empty div element");
return elem;
const elem = document.createElement("div");
if (elem === null) throw new Error("unable to create empty div element");
return elem;
})();
export const MainMenuLinks: IMainMenuLinks = {
Terminal: emptyElement,
ScriptEditor: emptyElement,
ActiveScripts: emptyElement,
CreateProgram: emptyElement,
Stats: emptyElement,
Factions: emptyElement,
Augmentations: emptyElement,
HacknetNodes: emptyElement,
Sleeves: emptyElement,
City: emptyElement,
Travel: emptyElement,
Job: emptyElement,
StockMarket: emptyElement,
Bladeburner: emptyElement,
Corporation: emptyElement,
Gang: emptyElement,
Milestones: emptyElement,
Tutorial: emptyElement,
Options: emptyElement,
DevMenu: emptyElement,
}
Terminal: emptyElement,
ScriptEditor: emptyElement,
ActiveScripts: emptyElement,
CreateProgram: emptyElement,
Stats: emptyElement,
Factions: emptyElement,
Augmentations: emptyElement,
HacknetNodes: emptyElement,
Sleeves: emptyElement,
City: emptyElement,
Travel: emptyElement,
Job: emptyElement,
StockMarket: emptyElement,
Bladeburner: emptyElement,
Corporation: emptyElement,
Gang: emptyElement,
Milestones: emptyElement,
Tutorial: emptyElement,
Options: emptyElement,
DevMenu: emptyElement,
};
export function initializeMainMenuLinks(): boolean {
try {
function safeGetLink(id: string): HTMLElement {
const elem: HTMLElement | null = clearEventListeners(id);
if (elem == null) {
throw new Error(`clearEventListeners() failed for element with id: ${id}`);
}
try {
function safeGetLink(id: string): HTMLElement {
const elem: HTMLElement | null = clearEventListeners(id);
if (elem == null) {
throw new Error(
`clearEventListeners() failed for element with id: ${id}`,
);
}
return elem;
}
MainMenuLinks.Terminal = safeGetLink("terminal-menu-link");
MainMenuLinks.ScriptEditor = safeGetLink("create-script-menu-link");
MainMenuLinks.ActiveScripts = safeGetLink("active-scripts-menu-link");
MainMenuLinks.CreateProgram = safeGetLink("create-program-menu-link");
MainMenuLinks.Stats = safeGetLink("stats-menu-link");
MainMenuLinks.Factions = safeGetLink("factions-menu-link");
MainMenuLinks.Augmentations = safeGetLink("augmentations-menu-link");
MainMenuLinks.HacknetNodes = safeGetLink("hacknet-nodes-menu-link");
MainMenuLinks.Sleeves = safeGetLink("sleeves-menu-link");
MainMenuLinks.City = safeGetLink("city-menu-link");
MainMenuLinks.Travel = safeGetLink("travel-menu-link");
MainMenuLinks.Job = safeGetLink("job-menu-link");
MainMenuLinks.StockMarket = safeGetLink("stock-market-menu-link");
MainMenuLinks.Bladeburner = safeGetLink("bladeburner-menu-link");
MainMenuLinks.Corporation = safeGetLink("corporation-menu-link");
MainMenuLinks.Gang = safeGetLink("gang-menu-link");
MainMenuLinks.Milestones = safeGetLink("milestones-menu-link");
MainMenuLinks.Tutorial = safeGetLink("tutorial-menu-link");
const op: HTMLElement | null = document.getElementById("options-menu-link");
if(op === null) throw new Error(`Could not find element with id: "options-menu-link"`);
MainMenuLinks.Options = op; // This click listener is already set, so don't clear it
MainMenuLinks.DevMenu = safeGetLink("dev-menu-link");
return true;
} catch(e) {
console.error(`Failed to initialize Main Menu Links: ${e}`);
return false;
return elem;
}
MainMenuLinks.Terminal = safeGetLink("terminal-menu-link");
MainMenuLinks.ScriptEditor = safeGetLink("create-script-menu-link");
MainMenuLinks.ActiveScripts = safeGetLink("active-scripts-menu-link");
MainMenuLinks.CreateProgram = safeGetLink("create-program-menu-link");
MainMenuLinks.Stats = safeGetLink("stats-menu-link");
MainMenuLinks.Factions = safeGetLink("factions-menu-link");
MainMenuLinks.Augmentations = safeGetLink("augmentations-menu-link");
MainMenuLinks.HacknetNodes = safeGetLink("hacknet-nodes-menu-link");
MainMenuLinks.Sleeves = safeGetLink("sleeves-menu-link");
MainMenuLinks.City = safeGetLink("city-menu-link");
MainMenuLinks.Travel = safeGetLink("travel-menu-link");
MainMenuLinks.Job = safeGetLink("job-menu-link");
MainMenuLinks.StockMarket = safeGetLink("stock-market-menu-link");
MainMenuLinks.Bladeburner = safeGetLink("bladeburner-menu-link");
MainMenuLinks.Corporation = safeGetLink("corporation-menu-link");
MainMenuLinks.Gang = safeGetLink("gang-menu-link");
MainMenuLinks.Milestones = safeGetLink("milestones-menu-link");
MainMenuLinks.Tutorial = safeGetLink("tutorial-menu-link");
const op: HTMLElement | null = document.getElementById("options-menu-link");
if (op === null)
throw new Error(`Could not find element with id: "options-menu-link"`);
MainMenuLinks.Options = op; // This click listener is already set, so don't clear it
MainMenuLinks.DevMenu = safeGetLink("dev-menu-link");
return true;
} catch (e) {
console.error(`Failed to initialize Main Menu Links: ${e}`);
return false;
}
}