From 2519f686bff24962798ef5b7d0f9b13d56590678 Mon Sep 17 00:00:00 2001 From: Arkerthan <arkerthan@gmail.com> Date: Mon, 1 Mar 2021 00:14:50 +0100 Subject: [PATCH] Simplify fsDeco and fix options callback --- src/futureSocieties/fsDecoration.js | 98 +++++++++-------------------- src/gui/options/optionsGroup.js | 19 +++--- 2 files changed, 42 insertions(+), 75 deletions(-) diff --git a/src/futureSocieties/fsDecoration.js b/src/futureSocieties/fsDecoration.js index 789d1f662bb..a8521b78cbf 100644 --- a/src/futureSocieties/fsDecoration.js +++ b/src/futureSocieties/fsDecoration.js @@ -3,6 +3,9 @@ */ App.UI.facilityRedecoration = function() { const el = new DocumentFragment(); + /** + * @type {Map<string, string>} + */ const activeFacilities = new Map([]); const options = new App.UI.OptionsGroup(); const arc = V.arcologies[0]; @@ -60,67 +63,16 @@ App.UI.facilityRedecoration = function() { activeFacilities.set(V.masterSuiteName, "masterSuiteDecoration"); } - options.addOption(`Change style for all facilities`) - .addCustomDOM(modifyAll()); - - for (const [name, decoration] of activeFacilities) { - options.addOption(`The decoration style of ${name} is`) - .addCustomDOM(createPulldown(decoration)); - } - el.append(options.render()); - - return el; - - function createPulldown(variable) { - const select = document.createElement("select"); - select.classList.add("rajs-list"); - - // Standard decorations - const choice = App.UI.DOM.appendNewElement("option", select, "Standard"); - choice.value = "standard"; - if (V[variable] === "standard") { - choice.selected = true; - } - - // FS decorations - for (const decorationName of decorationNames) { - const choice = App.UI.DOM.makeElement("option", decorationName); - if (V[variable] === decorationName) { - choice.selected = true; - } - select.append(choice); - } - - select.onchange = () => { - const O = select.options[select.selectedIndex]; - if (O.value !== "standard") { - cashX(-5000, "capEx"); - } - V[variable] = O.value; - App.UI.reload(); - }; - return select; - } - - function modifyAll() { - const select = document.createElement("select"); - select.classList.add("rajs-list"); - - // Standard decorations - const standard = App.UI.DOM.appendNewElement("option", select, "Standard"); - standard.value = "standard"; - - // FS decorations - for (const decorationName of decorationNames) { - App.UI.DOM.appendNewElement("option", select, decorationName); - } - - // Round Robin - App.UI.DOM.appendNewElement("option", select, "Distribute Evenly"); - - select.onchange = () => { - const O = select.options[select.selectedIndex]; - if (O.value === "Distribute Evenly") { // Cycles through the list of available FS decorations, and distributes them to facilities round robin style. + // dummy variable to make sure the first option is selected by default + const currentSelected = {value: "none"}; + options.addOption(`The decoration style of ${name} is`, "value", currentSelected) + .addValue("(Select option)", "none") + .addValue("Standard", "standard") + .addValueList(decorationNames) + .addValue("Distribute Evenly", "even") + .addCallbackToEach(value => { + console.log(value); + if (value === "even") { // Cycles through the list of available FS decorations, and distributes them to facilities round robin style. let i = 0; for (const decoration of activeFacilities.values()) { cashX(-5000, "capEx"); @@ -132,17 +84,29 @@ App.UI.facilityRedecoration = function() { } } else { for (const decoration of activeFacilities.values()) { - if (O.value !== "standard") { + if (value !== "standard") { cashX(-5000, "capEx"); } - V[decoration] = O.value; + V[decoration] = value; } } - App.UI.reload(); - }; - select.selectedIndex = -1; - return select; + }) + .pulldown(); + + for (const [name, decoration] of activeFacilities) { + options.addOption(`The decoration style of ${name} is`, decoration) + .addValue("Standard", "standard") + .addValueList(decorationNames) + .addCallbackToEach(value => { + if (value !== "standard") { + cashX(-5000, "capEx"); + } + }) + .pulldown(); } + el.append(options.render()); + + return el; }; /** diff --git a/src/gui/options/optionsGroup.js b/src/gui/options/optionsGroup.js index 60fea477428..c56a48914f4 100644 --- a/src/gui/options/optionsGroup.js +++ b/src/gui/options/optionsGroup.js @@ -37,9 +37,10 @@ App.UI.OptionsGroup = (function() { } /** - * @param {*} name - * @param {*} [value=name] - * @param {Function} [callback] + * @template {any} T + * @param {string} name + * @param {T|string} [value=name] + * @param {function(T|string):void} [callback] * @returns {Option} */ addValue(name, value = name, callback = undefined) { @@ -113,7 +114,7 @@ App.UI.OptionsGroup = (function() { * Adds a button that executes the callback when clicked AND reloads the passage * * @param {string} name - * @param {Function} callback + * @param {function():void} callback * @param {string} passage */ customButton(name, callback, passage) { @@ -147,7 +148,7 @@ App.UI.OptionsGroup = (function() { } /** - * @param {Function} callback gets executed on every button click. Selected value is given as argument. + * @param {function(any):void} callback gets executed on every button click. Selected value is given as argument. */ addCallback(callback) { this.valuePairs.last().callback = callback; @@ -155,7 +156,9 @@ App.UI.OptionsGroup = (function() { } /** - * @param {Function} callback gets executed on every button click. Selected value is given as argument. + * TODO Replace with a global callback + * + * @param {function(any):void} callback gets executed on every button click. Selected value is given as argument. */ addCallbackToEach(callback) { this.valuePairs.forEach(pair => pair.callback = callback); @@ -263,7 +266,7 @@ App.UI.OptionsGroup = (function() { button.onclick = () => { this.object[this.property] = value.value; if (value.callback) { - value.callback(); + value.callback(value.value); } App.UI.reload(); }; @@ -296,7 +299,7 @@ App.UI.OptionsGroup = (function() { } const originalObj = this.valuePairs.find(obj => obj.name === O.textContent); if (originalObj && typeof originalObj.callback === "function") { - originalObj.callback(); + originalObj.callback(originalObj.value); } App.UI.reload(); }; -- GitLab