From 23cba2a9f4dc198ce935196166e737397da97a84 Mon Sep 17 00:00:00 2001
From: DCoded <dicoded@email.com>
Date: Sat, 5 Jun 2021 18:22:31 -0400
Subject: [PATCH] Facility methods now take functions as parameters

---
 css/facilities/facilities.css   |  4 ----
 src/facilities/Facility.js      | 36 +++++++++++++++++++++++----------
 src/facilities/clinic/clinic.js | 11 +++++-----
 src/facilities/utils.js         |  4 ++--
 4 files changed, 33 insertions(+), 22 deletions(-)

diff --git a/css/facilities/facilities.css b/css/facilities/facilities.css
index a875aba9176..f68e38b8f97 100644
--- a/css/facilities/facilities.css
+++ b/css/facilities/facilities.css
@@ -1,7 +1,3 @@
-.facility-rename {
-	margin-top: 1em;
-}
-
 .margin-top {
 	margin-top: 1em;
 }
diff --git a/src/facilities/Facility.js b/src/facilities/Facility.js
index a2fbd67b9e6..c85cdf96d80 100644
--- a/src/facilities/Facility.js
+++ b/src/facilities/Facility.js
@@ -12,6 +12,8 @@ App.Facilities.Facility = class {
 
 		/** @private */
 		this._frag = new DocumentFragment();
+		/** @private */
+		this._facilityNameCaps = capFirstChar(this.facility.name);
 	}
 
 	/**
@@ -21,14 +23,26 @@ App.Facilities.Facility = class {
 		return this._frag;
 	}
 
+	/**
+	 * Refreshes the facility onscreen.
+	 *
+	 * @private
+	 * @returns {void}
+	 */
+	refresh() {
+		this._facilityNameCaps = capFirstChar(this.facility.name);
+
+		this._frag = this.render();
+	}
+
 	/**
 	 * Sets up the intro scene.
 	 *
-	 * @param {HTMLDivElement} div
+	 * @param {() => HTMLDivElement} div
 	 * @returns {this}
 	 */
 	intro(div) {
-		this._frag.append(div);
+		this._frag.append(div());
 
 		return this;
 	}
@@ -36,11 +50,11 @@ App.Facilities.Facility = class {
 	/**
 	 * Handles facility expansion.
 	 *
-	 * @param {HTMLDivElement} div
+	 * @param {() => HTMLDivElement} div
 	 * @returns {this}
 	 */
 	expand(div) {
-		this._frag.append(div);
+		this._frag.append(div());
 
 		return this;
 	}
@@ -48,11 +62,11 @@ App.Facilities.Facility = class {
 	/**
 	 * Handles any upgrades the player can purchase.
 	 *
-	 * @param {HTMLDivElement} div
+	 * @param {() => HTMLDivElement} div
 	 * @returns {this}
 	 */
 	upgrades(div) {
-		this._frag.append(div);
+		this._frag.append(div());
 
 		return this;
 	}
@@ -60,11 +74,11 @@ App.Facilities.Facility = class {
 	/**
 	 * Handles any rules that can be set.
 	 *
-	 * @param {HTMLDivElement} div
+	 * @param {() => HTMLDivElement} div
 	 * @returns {this}
 	 */
 	rules(div) {
-		this._frag.append(div);
+		this._frag.append(div());
 
 		return this;
 	}
@@ -72,11 +86,11 @@ App.Facilities.Facility = class {
 	/**
 	 * Displays a list of slaves that can be assigned and removed.
 	 *
-	 * @param {HTMLDivElement} div
+	 * @param {() => HTMLDivElement} div
 	 * @returns {this}
 	 */
 	slaves(div) {
-		this._frag.append(div);
+		this._frag.append(div());
 
 		return this;
 	}
@@ -87,7 +101,7 @@ App.Facilities.Facility = class {
 	 * @returns {this}
 	 */
 	rename() {
-		this._frag.append(App.Facilities.rename(this.facility));
+		this._frag.append(App.Facilities.rename(this.facility, () => this.refresh()));
 
 		return this;
 	}
diff --git a/src/facilities/clinic/clinic.js b/src/facilities/clinic/clinic.js
index d00f9678371..608e614e480 100644
--- a/src/facilities/clinic/clinic.js
+++ b/src/facilities/clinic/clinic.js
@@ -17,11 +17,12 @@ App.Facilities.Clinic.clinic = function() {
 	V.returnTo = "Clinic";
 	V.encyclopedia = "Clinic";
 
-	clinic.intro(intro())
-		.expand(expand())
-		.upgrades(upgrades())
-		.rules(rules())
-		.slaves(slaves())
+	clinic
+		.intro(intro)
+		.expand(expand)
+		.upgrades(upgrades)
+		.rules(rules)
+		.slaves(slaves)
 		.rename();
 
 	return clinic.render();
diff --git a/src/facilities/utils.js b/src/facilities/utils.js
index 1cc245bb051..580e56e1a5a 100644
--- a/src/facilities/utils.js
+++ b/src/facilities/utils.js
@@ -6,8 +6,8 @@
  * @param {function():void} [handler] Any custom function to be run upon entering a new name.
  */
 App.Facilities.rename = function rename(facility, handler) {
-	const renameDiv = App.UI.DOM.makeElement("div", `Rename ${facility.name}: `, ["facility-rename"]);
-	const renameNote = App.UI.DOM.makeElement("span", ` Use a noun or similar short phrase`, ["note"]);
+	const renameDiv = App.UI.DOM.makeElement("div", `Rename ${facility.name}: `, ['margin-top']);
+	const renameNote = App.UI.DOM.makeElement("span", ` Use a noun or similar short phrase`, ['note']);
 
 	renameDiv.appendChild(App.UI.DOM.makeTextBox(facility.name, newName => {
 		facility.name = newName;
-- 
GitLab