From 1ca8e2d449275937ca09c987927f2afc06e96e39 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Thu, 21 May 2020 16:36:34 +0200
Subject: [PATCH] improve occupancyReport()

---
 src/004-base/facility.js                      | 15 +++++--
 src/facilities/armory/armoryFramework.js      | 14 +-----
 .../headGirlSuite/headGirlSuiteFramework.js   | 13 +++++-
 .../masterSuite/masterSuiteFramework.js       |  1 +
 src/facilities/nursery/nurseryFramework.js    |  4 +-
 src/facilities/pit/pitFramework.js            |  2 +-
 src/gui/quicklinks.js                         | 44 ++++++++++++-------
 7 files changed, 57 insertions(+), 36 deletions(-)

diff --git a/src/004-base/facility.js b/src/004-base/facility.js
index 6348f7d78f1..f5bc2c16b88 100644
--- a/src/004-base/facility.js
+++ b/src/004-base/facility.js
@@ -231,6 +231,11 @@ App.Entity.Facilities.ManagingJob = class extends App.Entity.Facilities.Job {
 	get _facilityHasFreeSpace() {
 		return true;
 	}
+
+	/** @returns {string} */
+	get positionAbbreviation() {
+		return this.desc.positionAbbreviation || "L";
+	}
 };
 
 App.Entity.Facilities.Facility = class {
@@ -527,10 +532,14 @@ App.Entity.Facilities.Facility = class {
 	 * @returns {string}
 	 */
 	occupancyReport(long) {
+		if (this.jobs.length === 0) {
+			return this.manager && this.manager.currentEmployee ? this.manager.positionAbbreviation : "";
+		}
 		const nonEmployees = this.nonEmployeeOccupantsCount;
-		return `(${this.hostedSlaves}${nonEmployees ? `+${nonEmployees}` : ""}/${this.capacity}${long
-			? ` ${this.job().desc.position}s${this.manager && this.manager.currentEmployee ? `, ${this.manager.desc.position}` : ""}`
-			: this.manager && this.manager.currentEmployee ? ", L" : ""})`;
+		const managerStr = this.manager && this.manager.currentEmployee ? (
+			long ? `, ${this.manager.desc.position}` : `, ${this.manager.positionAbbreviation}`) : "";
+		const slavesStr = long ? ` ${this.job().desc.position}${this.capacity !== 1 ? 's' : ''}` : "";
+		return `${this.hostedSlaves}${nonEmployees ? `+${nonEmployees}` : ""}/${this.capacity}${slavesStr}${managerStr}`;
 	}
 
 	/**
diff --git a/src/facilities/armory/armoryFramework.js b/src/facilities/armory/armoryFramework.js
index c38797f641f..a219e606db7 100644
--- a/src/facilities/armory/armoryFramework.js
+++ b/src/facilities/armory/armoryFramework.js
@@ -5,6 +5,7 @@ App.Data.Facilities.armory = {
 	defaultJob: null,
 	manager: {
 		position: "bodyguard",
+		positionAbbreviation: "BG",
 		assignment: Job.BODYGUARD,
 		careers: App.Data.misc.bodyguardCareers,
 		skill: "bodyguard",
@@ -21,15 +22,4 @@ App.Data.Facilities.armory = {
 	}
 };
 
-App.Entity.Facilities.Armory = class extends App.Entity.Facilities.Facility {
-	constructor() {
-		super(App.Data.Facilities.armory);
-	}
-
-	/** @override */
-	occupancyReport(long) {
-		return this.manager.currentEmployee ? "(BG)" : "";
-	}
-};
-
-App.Entity.facilities.armory = new App.Entity.Facilities.Armory();
+App.Entity.facilities.armory = new App.Entity.Facilities.Facility(App.Data.Facilities.armory);
diff --git a/src/facilities/headGirlSuite/headGirlSuiteFramework.js b/src/facilities/headGirlSuite/headGirlSuiteFramework.js
index 6f0c0f246b3..6a059b0541c 100644
--- a/src/facilities/headGirlSuite/headGirlSuiteFramework.js
+++ b/src/facilities/headGirlSuite/headGirlSuiteFramework.js
@@ -38,10 +38,19 @@ App.Entity.Facilities.HeadGirlSuite = class extends App.Entity.Facilities.Single
 		super(App.Data.Facilities.headGirlSuite);
 	}
 
+	/** @override */
+	get UIName() {
+		const nameCaps = this.nameCaps;
+		return nameCaps === "The Head Girl Suite" ? "Head Girl Suite"  : nameCaps;
+	}
+
 	/** @override */
 	occupancyReport(long) {
-		return this.manager.currentEmployee ? `(HG${
-			this.hostedSlaves ? long ? " and slave" : ", 1" : ""})` : "";
+		return this.manager.currentEmployee
+			? `HG${this.hostedSlaves ? long
+				? ` and ${getPronouns(this.manager.currentEmployee).his} slave`
+				: ", 1" : ""}`
+			: "";
 	}
 };
 
diff --git a/src/facilities/masterSuite/masterSuiteFramework.js b/src/facilities/masterSuite/masterSuiteFramework.js
index e94886e242a..be55b6008cd 100644
--- a/src/facilities/masterSuite/masterSuiteFramework.js
+++ b/src/facilities/masterSuite/masterSuiteFramework.js
@@ -17,6 +17,7 @@ App.Data.Facilities.masterSuite = {
 	defaultJob: "fucktoy",
 	manager: {
 		position: "concubine",
+		positionAbbreviation: "C",
 		assignment: Job.CONCUBINE,
 		careers: [],
 		skill: null,
diff --git a/src/facilities/nursery/nurseryFramework.js b/src/facilities/nursery/nurseryFramework.js
index 2c7ed603499..61e2a148d3f 100644
--- a/src/facilities/nursery/nurseryFramework.js
+++ b/src/facilities/nursery/nurseryFramework.js
@@ -64,8 +64,8 @@ App.Entity.Facilities.Nursery = class extends App.Entity.Facilities.SingleJobFac
 	/** @override */
 	occupancyReport(long) {
 		return long
-			? `(${V.nurseryBabies}/${V.nursery} babies, ${this.nursery.hostedSlaves}/${V.nurseryNannies} nannies${this.manager.currentEmployee ? ", attendant" : ""}`
-			: `(${V.nurseryBabies}/${V.nursery}, ${this.nursery.hostedSlaves}/${V.nurseryNannies}${this.manager.currentEmployee ? ", L" : ""}`;
+			? `${V.nurseryBabies}/${V.nursery} babies, ${this.nursery.hostedSlaves}/${V.nurseryNannies} nannies${this.manager.currentEmployee ? `, ${this.manager.desc.position}` : ""}`
+			: `${V.nurseryBabies}/${V.nursery}, ${this.nursery.hostedSlaves}/${V.nurseryNannies}${this.manager.currentEmployee ? ", L" : ""}`;
 	}
 };
 
diff --git a/src/facilities/pit/pitFramework.js b/src/facilities/pit/pitFramework.js
index b68554b2a0a..df3b2e7fda0 100644
--- a/src/facilities/pit/pitFramework.js
+++ b/src/facilities/pit/pitFramework.js
@@ -48,7 +48,7 @@ App.Entity.Facilities.Pit = class extends App.Entity.Facilities.SingleJobFacilit
 
 	/** @override */
 	occupancyReport(long) {
-		return `(${this.hostedSlaves}${long ? ` ${this.job().desc.position}s` : ""})`;
+		return `${this.hostedSlaves}${long ? ` ${this.job().desc.position}s` : ""}`;
 	}
 };
 
diff --git a/src/gui/quicklinks.js b/src/gui/quicklinks.js
index 9b8d71fbbf3..5493e5cf969 100644
--- a/src/gui/quicklinks.js
+++ b/src/gui/quicklinks.js
@@ -149,22 +149,22 @@ App.UI.quickMenu = (function() {
 	// extra information behind the link, is a function
 	const f = App.Entity.facilities;
 	const extraInfo = cleanPassageMapping({
-		Arcade:         () => f.arcade      .occupancyReport(V.abbreviateSidebar === 2),
-		"BG Select":    () => f.armory      .occupancyReport(V.abbreviateSidebar === 2),
-		Brothel:        () => f.brothel     .occupancyReport(V.abbreviateSidebar === 2),
-		Cellblock:      () => f.cellblock   .occupancyReport(V.abbreviateSidebar === 2),
-		Clinic:         () => f.clinic      .occupancyReport(V.abbreviateSidebar === 2),
-		Club:           () => f.club        .occupancyReport(V.abbreviateSidebar === 2),
-		Dairy:          () => f.dairy       .occupancyReport(V.abbreviateSidebar === 2),
-		Farmyard:       () => f.farmyard    .occupancyReport(V.abbreviateSidebar === 2),
-		"Head Girl Suite": () => f.headGirlSuite.occupancyReport(V.abbreviateSidebar === 2),
-		Incubator:      () => f.incubator   .occupancyReport(V.abbreviateSidebar === 2),
-		"Master Suite": () => f.masterSuite .occupancyReport(V.abbreviateSidebar === 2),
-		Nursery:        () => f.nursery     .occupancyReport(V.abbreviateSidebar === 2),
-		Pit:            () => f.pit         .occupancyReport(V.abbreviateSidebar === 2),
-		Schoolroom:     () => f.schoolroom  .occupancyReport(V.abbreviateSidebar === 2),
-		"Servants' Quarters": () => f.servantsQuarters.occupancyReport(V.abbreviateSidebar === 2),
-		Spa:            () => f.spa         .occupancyReport(V.abbreviateSidebar === 2),
+		Arcade: () => occupancy(f.arcade),
+		"BG Select": () => occupancy(f.armory),
+		Brothel: () => occupancy(f.brothel),
+		Cellblock: () => occupancy(f.cellblock),
+		Clinic: () => occupancy(f.clinic),
+		Club: () => occupancy(f.club),
+		Dairy: () => occupancy(f.dairy),
+		Farmyard: () => occupancy(f.farmyard),
+		"Head Girl Suite": () => occupancy(f.headGirlSuite),
+		Incubator: () => occupancy(f.incubator),
+		"Master Suite": () => occupancy(f.masterSuite),
+		Nursery: () => occupancy(f.nursery),
+		Pit: () => occupancy(f.pit),
+		Schoolroom: () => occupancy(f.schoolroom),
+		"Servants' Quarters": () => occupancy(f.servantsQuarters),
+		Spa: () => occupancy(f.spa),
 	});
 
 	// true shows a notification symbol
@@ -475,6 +475,18 @@ App.UI.quickMenu = (function() {
 		}
 	}
 
+	/**
+	 * @param {App.Entity.Facilities.Facility} facility
+	 * @returns {string}
+	 */
+	function occupancy(facility) {
+		const desc = facility.occupancyReport(V.abbreviateSidebar === 2);
+		if (desc === "") {
+			return "";
+		}
+		return `(${desc})`;
+	}
+
 	/**
 	 * Cleans out all mappings that are not contained in jumpTo and therefore not considered safe.
 	 *
-- 
GitLab