From 6344de0abb4484e070caadfbe71fe18b76d4296a Mon Sep 17 00:00:00 2001
From: DCoded <dicoded@email.com>
Date: Mon, 7 Feb 2022 00:12:31 -0500
Subject: [PATCH] Fixes and cleanup

---
 src/facilities/farmyard/animals/animals.js | 58 +++++++++++++++-------
 1 file changed, 40 insertions(+), 18 deletions(-)

diff --git a/src/facilities/farmyard/animals/animals.js b/src/facilities/farmyard/animals/animals.js
index 99b82156d14..ad5ad519e6b 100644
--- a/src/facilities/farmyard/animals/animals.js
+++ b/src/facilities/farmyard/animals/animals.js
@@ -348,12 +348,7 @@ App.Facilities.Farmyard.animals = function() {
 					animal.setName(value);
 					animalName = animal.name;
 
-					App.UI.DOM.replace(typeDiv, type);
-					App.UI.DOM.replace(rarityDiv, rarity);
-					App.UI.DOM.replace(articleDiv, article);
-					App.UI.DOM.replace(dickDiv, dick);
-					App.UI.DOM.replace(deadlinessDiv, deadliness);
-					App.UI.DOM.replace(addDiv, add());
+					refresh();
 				}),
 			);
 
@@ -366,7 +361,7 @@ App.Facilities.Farmyard.animals = function() {
 				App.UI.DOM.makeTextBox(animal.species || '', value => {
 					animal.setSpecies(value);
 
-					App.UI.DOM.replace(addDiv, add());
+					refresh();
 				}),
 			);
 
@@ -374,7 +369,7 @@ App.Facilities.Farmyard.animals = function() {
 		}
 
 		function type() {
-			const options = new App.UI.OptionsGroup();
+			const options = new App.UI.OptionsGroup().customRefresh(refresh);
 			options.addOption(null, "type", animal)
 				.addValue('Canine', 'canine')
 				.addValue('Hooved', 'hooved')
@@ -392,7 +387,7 @@ App.Facilities.Farmyard.animals = function() {
 		}
 
 		function rarity() {
-			const options = new App.UI.OptionsGroup();
+			const options = new App.UI.OptionsGroup().customRefresh(refresh);
 			options.addOption(null, "rarity", animal)
 				.addValue('Domestic', 'domestic')
 				.addValue('Exotic', 'exotic');
@@ -407,7 +402,7 @@ App.Facilities.Farmyard.animals = function() {
 		}
 
 		function article() {
-			const options = new App.UI.OptionsGroup();
+			const options = new App.UI.OptionsGroup().customRefresh(refresh);
 			options.addOption(null, "articleAn", animal)
 				.addValue('Yes', 'an')
 				.addValue('No', 'a');
@@ -426,7 +421,7 @@ App.Facilities.Farmyard.animals = function() {
 				const dickSizeDiv = document.createElement("div");
 
 				dickSizeDiv.append(
-					`How large is ${animal.name ? `${animal.articleAn} male ${animal.name}` : `a male`}'s penis? `,
+					`How large is a male${animal.name ? ` ${animalName}` : ``}'s penis? `,
 					App.UI.DOM.makeTextBox(animal.dick.size || 2, value => {
 						animal.setDick(value, animal.dick.desc || null);
 
@@ -470,8 +465,6 @@ App.Facilities.Farmyard.animals = function() {
 		function add() {
 			const disabledReasons = [];
 
-			let link;
-
 			if (!animal.name) {
 				disabledReasons.push(`Animal must have a name.`);
 			}
@@ -481,19 +474,48 @@ App.Facilities.Farmyard.animals = function() {
 			}
 
 			if (disabledReasons.length > 0) {
-				link = App.UI.DOM.disabledLink(`Add`, disabledReasons);
+				App.UI.DOM.appendNewElement("div", addDiv, App.UI.DOM.disabledLink(`Add`, disabledReasons), ['margin-top']);
 			} else {
-				link = App.UI.DOM.link(`Add`, () => {
+				App.UI.DOM.appendNewElement("div", addDiv, App.UI.DOM.link(`Add`, () => {
 					App.Data.animals.push(animal);
 
 					App.UI.DOM.replace(addDiv, addAnimal());
-				});
+				}), ['margin-top']);
 			}
 
-			addDiv.append(link);
-
 			return addDiv;
 		}
+
+		/**
+		 * @typedef {'name'|'species'|'type'|'rarity'|'article'|'dick'|'deadliness'|'add'} Exclude
+		 * @param {Exclude[]} [exclude] One of 'name', 'species', 'type', 'rarity', 'article', 'dick', 'deadliness', or 'add'.
+		 */
+		function refresh(exclude = []) {
+			if (!exclude.includes('name')) {
+				App.UI.DOM.replace(nameDiv, name);
+			}
+			if (!exclude.includes('species')) {
+				App.UI.DOM.replace(speciesDiv, species);
+			}
+			if (!exclude.includes('type')) {
+				App.UI.DOM.replace(typeDiv, type);
+			}
+			if (!exclude.includes('rarity')) {
+				App.UI.DOM.replace(rarityDiv, rarity);
+			}
+			if (!exclude.includes('article')) {
+				App.UI.DOM.replace(articleDiv, article);
+			}
+			if (!exclude.includes('dick')) {
+				App.UI.DOM.replace(dickDiv, dick);
+			}
+			if (!exclude.includes('deadliness')) {
+				App.UI.DOM.replace(deadlinessDiv, deadliness);
+			}
+			if (!exclude.includes('add')) {
+				App.UI.DOM.replace(addDiv, add);
+			}
+		}
 	}
 };
 
-- 
GitLab