From e12bb78720b7567b434d12ec963809bdc91d756c Mon Sep 17 00:00:00 2001
From: lowercasedonkey <lowercasedonkey@gmail.com>
Date: Mon, 12 Oct 2020 23:48:51 -0400
Subject: [PATCH] handle choices a little more locally

---
 src/interaction/siRules.js     | 98 ++++++++++++++++++++++------------
 src/interaction/siUtilities.js | 11 +---
 2 files changed, 64 insertions(+), 45 deletions(-)

diff --git a/src/interaction/siRules.js b/src/interaction/siRules.js
index 7a7a5b77210..091da886cfb 100644
--- a/src/interaction/siRules.js
+++ b/src/interaction/siRules.js
@@ -331,58 +331,86 @@ App.UI.SlaveInteract.rules = function(slave) {
 
 		function smartSettings(slave) {
 			let el = document.createElement('div');
-
-			const {His} = getPronouns(slave);
-			const bodyPart = [];
-			const BDSM = [];
-			const gender = [];
-			const level = [];
 			const usingBulletVibe = slave.vaginalAccessory === "smart bullet vibrator" || slave.dickAccessory === "smart bullet vibrator";
 
 			if (slave.clitPiercing === 3 || usingBulletVibe) {
+				const level = new Map();
+				const bodyPart = new Map();
+				const BDSM = new Map();
+				const gender = new Map();
+
 				// Level
-				level.push({text: `No sex`, updateSlave: {clitSetting: `none`}});
-				level.push({text: `All sex`, updateSlave: {clitSetting: `all`}});
+				level.set(`No sex`, `none`);
+				level.set(`All sex`, `all`);
 
 				// Body part
-				bodyPart.push({text: `Vanilla`, updateSlave: {clitSetting: `vanilla`}});
-				bodyPart.push({text: `Oral`, updateSlave: {clitSetting: `oral`}});
-				bodyPart.push({text: `Anal`, updateSlave: {clitSetting: `anal`}});
-				bodyPart.push({text: `Boobs`, updateSlave: {clitSetting: `boobs`}});
+				bodyPart.set(`Vanilla`, `vanilla`);
+				bodyPart.set(`Oral`, `oral`);
+				bodyPart.set(`Anal`, `anal`);
+				bodyPart.set(`Boobs`, `boobs`);
 				if (V.seePreg !== 0) {
-					bodyPart.push({text: `Preg`, updateSlave: {clitSetting: `pregnancy`}});
+					bodyPart.set(`Preg`, `pregnancy`);
 				}
 				// BDSM
-				BDSM.push({text: `Sub`, updateSlave: {clitSetting: `submissive`}});
-				BDSM.push({text: `Dom`, updateSlave: {clitSetting: `dom`}});
-				BDSM.push({text: `Masochism`, updateSlave: {clitSetting: `masochist`}});
-				BDSM.push({text: `Sadism`, updateSlave: {clitSetting: `sadist`}});
-				BDSM.push({text: `Humiliation`, updateSlave: {clitSetting: `humiliation`}});
+				BDSM.set(`Sub`, `submissive`);
+				BDSM.set(`Dom`, `dom`);
+				BDSM.set(`Masochism`, `masochist`);
+				BDSM.set(`Sadism`, `sadist`);
+				BDSM.set(`Humiliation`, `humiliation`);
 
 				// Gender
-				gender.push({text: `Men`, updateSlave: {clitSetting: `men`}});
-				gender.push({text: `Women`, updateSlave: {clitSetting: `women`}});
-				gender.push({text: `Anti-men`, updateSlave: {clitSetting: `anti-men`}});
-				gender.push({text: `Anti-women`, updateSlave: {clitSetting: `anti-women`}});
-			}
-
-			let label = null;
-			if (slave.clitPiercing === 3) {
-				label = `${His} smart ${slave.dick < 1 ? "clit" : "frenulum"} piercing `;
-				label += (usingBulletVibe) ? `and smart bullet vibrator are set to: ` : `is set to: `;
-			}
-			if (label) {
+				gender.set(`Men`, `men`);
+				gender.set(`Women`, `women`);
+				gender.set(`Anti-men`, `anti-men`);
+				gender.set(`Anti-women`, `anti-women`);
+				let label = null;
+				if (slave.clitPiercing === 3) {
+					label = `Smart ${slave.dick < 1 ? "clit" : "frenulum"} piercing `;
+					label += (usingBulletVibe) ? `and smart bullet vibrator setting: ` : `setting: `;
+				} else if (usingBulletVibe) {
+					label = `Smart bullet vibrator setting: `;
+				}
 				let title = App.UI.DOM.appendNewElement('div', el, label);
 				let selected = App.UI.DOM.appendNewElement('span', title, `${slave.clitSetting}. `);
 				selected.style.fontWeight = "bold";
-			}
 
-			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Level", level, slave, refresh);
-			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Body part", bodyPart, slave, refresh);
-			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "BDSM", BDSM, slave, refresh);
-			App.UI.SlaveInteract.appendLabeledChoiceRow(el, "Gender", gender, slave, refresh);
+				choices("Level", level);
+				choices("Body part", bodyPart);
+				choices("Body part", BDSM);
+				choices("Gender", gender);
+			}
 
 			return el;
+
+			function choices(title, map) {
+				const row = document.createElement("div");
+				row.classList.add("choices");
+				row.append(`${title}: `);
+
+				const linkArray = [];
+				for (const [text, value] of map) {
+					if (slave.clitSetting === value) {
+						linkArray.push(
+							App.UI.DOM.disabledLink(
+								text,
+								["Currently selected"]
+							)
+						);
+					} else {
+						linkArray.push(
+							App.UI.DOM.link(
+								text,
+								() => {
+									slave.clitSetting = value;
+									refresh();
+								}
+							)
+						);
+					}
+				}
+				row.append(App.UI.DOM.generateLinksStrip(linkArray));
+				el.append(row);
+			}
 		}
 		function refresh() {
 			jQuery("#si-rules").empty().append(rulesContent());
diff --git a/src/interaction/siUtilities.js b/src/interaction/siUtilities.js
index ef2ea4748f6..017d7ff0e79 100644
--- a/src/interaction/siUtilities.js
+++ b/src/interaction/siUtilities.js
@@ -75,16 +75,7 @@ App.UI.SlaveInteract.generateRows = function(array, slave, category, accessCheck
 		}
 		if (accessCheck === false || unlocked) {
 			// is it just text?
-			let updateKeys;
-			let value;
-			if (!jQuery.isEmptyObject(array[i].updateSlave)) {
-				updateKeys = Object.keys(array[i].updateSlave); // ["clitsettings", ...]
-				value = array[i].updateSlave[updateKeys[0]];
-			}
-
-			if (updateKeys && slave[updateKeys[0]] === value) {
-				link = App.UI.DOM.disabledLink(array[i].text, ["Currently selected"]);
-			} else if (array[i].disabled) {
+			if (array[i].disabled) {
 				link = App.UI.DOM.disabledLink(array[i].text, [array[i].disabled]);
 			} else if (typeof unlocked === 'string') {
 				link = App.UI.DOM.disabledLink(array[i].text, [unlocked]);
-- 
GitLab