diff --git a/src/npc/surgery/organFarm.js b/src/npc/surgery/organFarm.js index 1148e486468c7a8e3271253347cf02224a9c5f9e..29679aea6e2241b58e8ebd38fc9854d31123a895 100644 --- a/src/npc/surgery/organFarm.js +++ b/src/npc/surgery/organFarm.js @@ -1,6 +1,6 @@ /** * @param {App.Entity.SlaveState} slave - * @returns {HTMLDivElement} + * @returns {DocumentFragment} */ App.Medicine.OrganFarm.growActions = function(slave) { const el = new DocumentFragment(); @@ -32,7 +32,7 @@ App.Medicine.OrganFarm.growActions = function(slave) { } } - let div = document.createElement("div"); + const div = document.createElement("div"); div.classList.add("grid-2columns-auto"); // create entries for each organ @@ -41,18 +41,10 @@ App.Medicine.OrganFarm.growActions = function(slave) { O.forEach((organ, key) => { if (slaveOrgans[key] === 0) { if (organ.canGrow(slave)) { - const array = []; - array.push(App.UI.DOM.makeElement("div", App.UI.DOM.passageLink(organ.name, "Remote Surgery", () => { - App.Medicine.OrganFarm.growOrgan(slave, key); - }))); - - const tooltip = typeof organ.tooltip === "string" ? organ.tooltip : organ.tooltip(slave); - array.push(App.UI.DOM.makeElement("div", `Costs ${cashFormat(organ.cost)}${tooltip !== "" ? ` and ${tooltip}` : ""}.`, "detail")); - if (organ.implantActions.some((o) => { return o.canImplant(slave); })) { - canImplant.push(...array); + canImplant.push(key); } else { - cantImplant.push(...array); + cantImplant.push(key); } } any = true; @@ -75,23 +67,54 @@ App.Medicine.OrganFarm.growActions = function(slave) { App.UI.DOM.appendNewElement("div", div, growing[i].text); } } + const chosenOption = App.UI.DOM.makeElement("div"); if (canImplant.length > 0) { - App.UI.DOM.appendNewElement("div", div, "Can implant immediately", "bold"); - App.UI.DOM.appendNewElement("div", div); - canImplant.forEach(c => div.append(c)); + App.UI.DOM.appendNewElement("div", div, "Can implant immediately"); + div.append(makePulldown(canImplant)); } if (cantImplant.length > 0) { - App.UI.DOM.appendNewElement("div", div, "Can't implant immediately", "bold"); - App.UI.DOM.appendNewElement("div", div); - cantImplant.forEach(c => div.append(c)); + App.UI.DOM.appendNewElement("div", div, "Can't implant immediately"); + div.append(makePulldown(cantImplant)); } el.append(div); + el.append(chosenOption); if (any) { - return div; + return el; } else { return null; } + + function makePulldown(array) { + const selDiv = document.createElement("div"); + const select = App.UI.DOM.appendNewElement("select", selDiv); + array.forEach(key => { + const option = App.UI.DOM.appendNewElement("option", select); + option.textContent = O.get(key).name; + option.value = key; + }); + select.onchange = () => { + const O = select.options[select.selectedIndex]; + const organ = App.Medicine.OrganFarm.Organs.get(O.value); + const frag = new DocumentFragment(); + const tooltip = typeof organ.tooltip === "string" ? organ.tooltip : organ.tooltip(slave); + + App.UI.DOM.appendNewElement( + "div", + frag, + App.UI.DOM.passageLink( + organ.name, "Remote Surgery", () => { + App.Medicine.OrganFarm.growOrgan(slave, O.value); + } + ) + ); + + App.UI.DOM.appendNewElement("div", frag, `Costs ${cashFormat(organ.cost)}${tooltip !== "" ? ` and ${tooltip}` : ""}.`, "detail"); + jQuery(chosenOption).empty().append(frag); + }; + select.selectedIndex = -1; + return selDiv; + } }; /** @@ -319,8 +342,7 @@ App.Medicine.OrganFarm.currentlyGrowing = function() { if (o.weeksToCompletion <= 0) { finishLines.push(`${tank.slaveName}'s ${App.Medicine.OrganFarm.Organs.get(o.type).name}.`); } else { - growLines.push(`${tank.slaveName}'s ${App.Medicine.OrganFarm.Organs.get(o.type).name}, ${ - weeksToCompletion(o.weeksToCompletion)} week(s) left.`); + growLines.push(`${tank.slaveName}'s ${App.Medicine.OrganFarm.Organs.get(o.type).name}, ${weeksToCompletion(o.weeksToCompletion)} week(s) left.`); } } else { growLines.push(App.UI.DOM.makeElement("span", `ERROR: No tank with ID ${o.ID} found.`, "error"));