From 0e24d7284f12c50d3a0e0a313e843258c5d382ce Mon Sep 17 00:00:00 2001
From: lowercasedonkey <lowercasedonkey@gmail.com>
Date: Thu, 20 Feb 2020 00:19:30 -0500
Subject: [PATCH] vaginalAccessory

---
 js/003-data/miscData.js            | 34 +++++++++++---
 src/js/itemAvailability.js         |  2 +-
 src/js/wardrobeUse.js              | 72 +++++++++++++++++++++++++-----
 src/uncategorized/slaveInteract.tw | 24 +---------
 4 files changed, 93 insertions(+), 39 deletions(-)

diff --git a/js/003-data/miscData.js b/js/003-data/miscData.js
index 546660ce627..e257949a12a 100644
--- a/js/003-data/miscData.js
+++ b/js/003-data/miscData.js
@@ -2395,7 +2395,12 @@ App.Data.misc = {
 		},
 		{
 			name: "Smart bullet vibrator",
-			value: "smart bullet vibrator"
+			value: "smart bullet vibrator",
+			unlock: function(slave) {
+				if (V.toysBoughtSmartVibes > 0) {
+					return true;
+				}
+			}
 		},
 		{
 			name: "Dildo",
@@ -2408,7 +2413,9 @@ App.Data.misc = {
 			unlock: function(slave) {
 				if (V.buyBigDildos > 0) {
 					if (slave) {
-						if (slave.belly < 1500 && slave.weight < 130) {
+						if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+							return "Elites frown on this";
+						} else {
 							return true;
 						}
 					} else {
@@ -2428,7 +2435,9 @@ App.Data.misc = {
 			unlock: function(slave) {
 				if (V.buyBigDildos > 0) {
 					if (slave) {
-						if (slave.belly < 1500 && slave.weight < 130) {
+						if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+							return "Elites frown on this";
+						} else {
 							return true;
 						}
 					} else {
@@ -2439,7 +2448,18 @@ App.Data.misc = {
 		},
 		{
 			name: "Huge dildo",
-			value: "huge dildo"
+			value: "huge dildo",
+			unlock: function(slave) {
+				if (slave) {
+					if (slave.vagina < 2) {
+						return `Slave's vagina is too small for this right now`;
+					} else {
+						return true;
+					}
+				} else {
+					return true;
+				}
+			}
 		},
 		{
 			name: "Long, huge dildo",
@@ -2448,7 +2468,11 @@ App.Data.misc = {
 			unlock: function(slave) {
 				if (V.buyBigDildos > 0) {
 					if (slave) {
-						if (slave.belly < 1500 && slave.weight < 130) {
+						if (!(slave.breedingMark !== 1 || V.propOutcome === 0 || V.eugenicsFullControl === 1 || V.arcologies[0].FSRestart === "unset")) {
+							return "Elites frown on this";
+						} else if (slave.vagina < 2) {
+							return `Slave's vagina is too small for this right now`;
+						} else {
 							return true;
 						}
 					} else {
diff --git a/src/js/itemAvailability.js b/src/js/itemAvailability.js
index 18a4cb35330..25f9012c30e 100644
--- a/src/js/itemAvailability.js
+++ b/src/js/itemAvailability.js
@@ -250,7 +250,7 @@ window.isClothingAccessible = (function() {
 			case "shoes":
 				niceDB = App.Data.misc.shoes;
 				break;
-			//case "chastity":
+			// case "chastity":
 				//	niceDB = App.Data.misc.vaginalAccessories; //this is going to be weird, they aren't in App.Data.Misc
 				// break;
 			default:
diff --git a/src/js/wardrobeUse.js b/src/js/wardrobeUse.js
index 98f74851562..ebbf024f6de 100644
--- a/src/js/wardrobeUse.js
+++ b/src/js/wardrobeUse.js
@@ -466,6 +466,65 @@ App.UI.Wardrobe.buttplugAttachment = function(slave) {
 	return jQuery('#buttplugAttachment').empty().append(el);
 };
 
+App.UI.Wardrobe.vaginalAccessory = function(slave) {
+	if (slave.fuckdoll !== 0) {
+		return;
+	}
+
+	const
+		{
+			// eslint-disable-next-line no-unused-vars
+			he, him, his, hers, himself, boy, He, His
+		} = getPronouns(slave);
+
+	let el = document.createElement('div');
+
+	let label = document.createElement('div');
+	label.append(`Vaginal accessory: `);
+
+	let choice = document.createElement('span');
+	choice.style.fontWeight = "bold";
+	choice.textContent = (`${slave.vaginalAccessory} `);
+	label.appendChild(choice);
+
+	if (slave.vaginalAccessory !== `none`) {
+		let choiceOptionsArray = [];
+		choiceOptionsArray.push({text: `None`, updateSlave: {vaginalAccessory: `none`}});
+		label.appendChild(App.UI.Wardrobe.generateRows(choiceOptionsArray, "vaginalAccessory", slave, false));
+	}
+	el.appendChild(label);
+
+	let optionsArray = [];
+
+	let clothingOption;
+	App.Data.misc.vaginalAccessories.forEach(item => {
+		clothingOption = {
+			text: item.name,
+			updateSlave: {vaginalAccessory: item.value}
+		};
+		if (item.fs) {
+			clothingOption.FS = item.fs;
+		}
+
+		if (item.value !== "none") {
+			// skip none in set, we set the link elsewhere.
+			optionsArray.push(clothingOption);
+		}
+	});
+
+	// Sort
+	// No sort here since we want small -> large.  optionsArray = optionsArray.sort((a, b) => (a.text > b.text) ? 1 : -1);
+
+	// Options
+	let links = document.createElement('div');
+	links.className = "choices";
+	links.appendChild(App.UI.Wardrobe.generateRows(optionsArray, "vaginalAccessory", slave, true));
+	el.appendChild(links);
+
+	return jQuery('#vaginalAccessory').empty().append(el);
+};
+
+
 
 App.UI.Wardrobe.generateRows = function(array, category, slave, accessCheck=false) { // category should be in the form of slave.category, the thing we want to update.
 	let row = document.createElement('span');
@@ -552,21 +611,12 @@ App.UI.Wardrobe.refreshAll = function(slave) {
 	App.UI.Wardrobe.bellyAccessory(slave);
 	App.UI.Wardrobe.buttplug(slave);
 	App.UI.Wardrobe.buttplugAttachment(slave);
+	App.UI.Wardrobe.vaginalAccessory(slave);
+	
 	return;
 };
 
 /*
-	if (isItemAccessible("tail") && slave.buttplug !== "none") {
-		<br>
-		&nbsp;&nbsp;&nbsp;&nbsp;Anal accessory attachment: ''<span id="buttplugAttach">slave.buttplugAttachment</span>.''
-		<<link "None">>slave.buttplugAttachment = "none";<</link>>
-		if (V.toysBoughtButtPlugTails === 1) {
-			<<link "Tail">>slave.buttplugAttachment = "tail";<</link>>
-			<<link "Cat tail">>slave.buttplugAttachment = "cat tail";<</link>>
-			<<link "Fox tail">>slave.buttplugAttachment = "fox tail";<</link>>
-			<<link "Cow tail">>slave.buttplugAttachment = "cow tail";<</link>>
-		}
-	}
 
 	if (slave.vagina > -1) {
 		<br>Vaginal accessory: ''<span id="vaginalAccessory">slave.vaginalAccessory</span>.''
diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw
index c451a7d7d37..6c3bba5ed1a 100644
--- a/src/uncategorized/slaveInteract.tw
+++ b/src/uncategorized/slaveInteract.tw
@@ -225,28 +225,8 @@
 	<</if>>
 
 	<<if $activeSlave.vagina > -1>>
-		<br>Vaginal accessory: ''<span id="vaginalAccessory">$activeSlave.vaginalAccessory</span>.''
-		<<link "None">><<set $activeSlave.vaginalAccessory = "none">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><<run App.UI.SlaveInteract.refreshAll($activeSlave)>><</link>>
-		<<if isItemAccessible("bullet vibrator")>>
-			| <<link "Bullet vibrator">><<set $activeSlave.vaginalAccessory = "bullet vibrator">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<</if>>
-		<<if isItemAccessible("smart bullet vibrator") && $toysBoughtSmartVibes == 1>>
-			| <<link "Smart bullet vibrator">><<set $activeSlave.vaginalAccessory = "smart bullet vibrator">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<</if>>
-		| <<link "Dildo">><<set $activeSlave.vaginalAccessory = "dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<<if isItemAccessible("long dildo") && ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-			| <<link "Long dildo">><<set $activeSlave.vaginalAccessory = "long dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<</if>>
-		| <<link "Large dildo">><<set $activeSlave.vaginalAccessory = "large dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<<if isItemAccessible("long, large dildo") && ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-			| <<link "Large and long dildo">><<set $activeSlave.vaginalAccessory = "long, large dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-		<</if>>
-		<<if $activeSlave.vagina >= 2>>
-			| <<link "Huge dildo">><<set $activeSlave.vaginalAccessory = "huge dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-			<<if isItemAccessible("long, huge dildo") && ($activeSlave.breedingMark != 1 || $propOutcome == 0 || $eugenicsFullControl == 1 || $arcologies[0].FSRestart == "unset")>>
-				| <<link "Huge and long dildo">><<set $activeSlave.vaginalAccessory = "long, huge dildo">><<replace "#vaginalAccessory">>$activeSlave.vaginalAccessory<</replace>><</link>>
-			<</if>>
-		<</if>>
+		<span id="vaginalAccessory"></span>
+		<script>App.UI.Wardrobe.vaginalAccessory(V.activeSlave)</script>
 		<<if isItemAccessible("vibrator") && ($activeSlave.vaginalAccessory != "none" && $activeSlave.vaginalAccessory != "bullet vibrator" && $activeSlave.vaginalAccessory != "smart bullet vibrator") && $toysBoughtVaginalAttachments == 1>>
 			<br>
 			&nbsp;&nbsp;&nbsp;&nbsp;Vaginal accessory attachment:
-- 
GitLab