From 48e809e80286bc46effd6bf5b42999477f535d3c Mon Sep 17 00:00:00 2001 From: lowercasedonkey <lowercasedonkey@gmail.com> Date: Sun, 20 Dec 2020 03:20:43 -0500 Subject: [PATCH] restore old tooltips --- src/interaction/siWardrobe.js | 137 ++++++++++++++++++++++++++-------- 1 file changed, 107 insertions(+), 30 deletions(-) diff --git a/src/interaction/siWardrobe.js b/src/interaction/siWardrobe.js index 11659c0b6c4..56d6db6a332 100644 --- a/src/interaction/siWardrobe.js +++ b/src/interaction/siWardrobe.js @@ -42,7 +42,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.clothes !== `choosing her own clothes`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: ` Let ${him} choose`, updateSlave: {clothes: `choosing her own clothes`, choosesOwnClothes: 1}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "clothes", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "clothes", false, refresh)); } el.appendChild(label); @@ -85,14 +85,14 @@ App.UI.SlaveInteract.wardrobe = function(slave) { links = document.createElement('div'); links.className = "choices"; links.append(`Nice: `); - links.appendChild(App.UI.SlaveInteract.generateRows(niceOptionsArray, slave, "clothes", true, refresh)); + links.appendChild(generateRows(niceOptionsArray, slave, "clothes", true, refresh)); el.appendChild(links); // Harsh options links = document.createElement('div'); links.className = "choices"; links.append(`Harsh: `); - links.appendChild(App.UI.SlaveInteract.generateRows(harshOptionsArray, slave, "clothes", true, refresh)); + links.appendChild(generateRows(harshOptionsArray, slave, "clothes", true, refresh)); el.appendChild(links); } if (slave.fuckdoll !== 0 || slave.clothes === "restrictive latex" || slave.clothes === "a latex catsuit" || slave.clothes === "a cybersuit" || slave.clothes === "a comfortable bodysuit") { @@ -123,7 +123,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.collar !== `none`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: ` None`, updateSlave: {collar: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "collar", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "collar", false, refresh)); } el.appendChild(label); @@ -159,14 +159,14 @@ App.UI.SlaveInteract.wardrobe = function(slave) { let links = document.createElement('div'); links.className = "choices"; links.append(`Nice: `); - links.appendChild(App.UI.SlaveInteract.generateRows(niceOptionsArray, slave, "collar", true, refresh)); + links.appendChild(generateRows(niceOptionsArray, slave, "collar", true, refresh)); el.appendChild(links); // Harsh options links = document.createElement('div'); links.className = "choices"; links.append(`Harsh: `); - links.appendChild(App.UI.SlaveInteract.generateRows(harshOptionsArray, slave, "collar", true, refresh)); + links.appendChild(generateRows(harshOptionsArray, slave, "collar", true, refresh)); el.appendChild(links); return el; @@ -186,7 +186,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.faceAccessory !== `none`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: ` None`, updateSlave: {faceAccessory: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "faceAccessory", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "faceAccessory", false, refresh)); } el.appendChild(label); @@ -208,7 +208,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(array, slave, "faceAccessory", true, refresh)); + links.appendChild(generateRows(array, slave, "faceAccessory", true, refresh)); el.appendChild(links); if (slave.eyewear === "corrective glasses" || slave.eyewear === "glasses" || slave.eyewear === "blurring glasses" || slave.faceAccessory === "porcelain mask") { @@ -241,7 +241,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.mouthAccessory !== `none`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: ` None`, updateSlave: {mouthAccessory: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "mouthAccessory", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "mouthAccessory", false, refresh)); } el.appendChild(label); @@ -264,7 +264,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(array, slave, "mouthAccessory", true, refresh)); + links.appendChild(generateRows(array, slave, "mouthAccessory", true, refresh)); el.appendChild(links); return el; @@ -286,7 +286,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Choose her own if (slave.armAccessory !== "none") { array.push({text: ` None`, updateSlave: {armAccessory: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(array, slave, "armAccessory", false, refresh)); + label.appendChild(generateRows(array, slave, "armAccessory", false, refresh)); } el.appendChild(label); @@ -297,7 +297,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { {text: "Hand gloves", updateSlave: {armAccessory: "hand gloves"}}, {text: "Elbow gloves", updateSlave: {armAccessory: "elbow gloves"}} ]; - links.appendChild(App.UI.SlaveInteract.generateRows(array, slave, "armAccessory", false, refresh)); + links.appendChild(generateRows(array, slave, "armAccessory", false, refresh)); el.appendChild(links); return el; @@ -318,7 +318,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.shoes !== `none`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: `None`, updateSlave: {shoes: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "shoes", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "shoes", false, refresh)); } */ el.appendChild(label); @@ -341,7 +341,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Options let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, slave, "shoes", true, refresh)); + links.appendChild(generateRows(optionsArray, slave, "shoes", true, refresh)); el.appendChild(links); if (V.seeImages === 1 && V.imageChoice === 1 && slave.shoes !== "none") { @@ -371,7 +371,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Choose her own if (slave.legAccessory !== "none") { array.push({text: ` None`, updateSlave: {legAccessory: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(array, slave, "legAccessory", false, refresh)); + label.appendChild(generateRows(array, slave, "legAccessory", false, refresh)); } el.appendChild(label); @@ -382,7 +382,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { {text: "Short stockings", updateSlave: {legAccessory: "short stockings"}}, {text: "Long stockings", updateSlave: {legAccessory: "long stockings"}} ]; - links.appendChild(App.UI.SlaveInteract.generateRows(array, slave, "legAccessory", false, refresh)); + links.appendChild(generateRows(array, slave, "legAccessory", false, refresh)); el.appendChild(links); return el; @@ -420,7 +420,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Choose her own if (slave.bellyAccessory !== `none`) { - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "bellyAccessory", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "bellyAccessory", false, refresh)); } el.appendChild(label); @@ -428,7 +428,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Options let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, slave, "bellyAccessory", true, refresh)); + links.appendChild(generateRows(optionsArray, slave, "bellyAccessory", true, refresh)); if (slave.pregKnown === 1) { let note = document.createElement('span'); note.className = "note"; @@ -454,7 +454,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.buttplug !== `none`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: ` None`, updateSlave: {buttplug: `none`, buttplugAttachment: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "buttplug", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "buttplug", false, refresh)); } el.appendChild(label); @@ -479,7 +479,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Options let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, slave, "buttplug", true, refresh)); + links.appendChild(generateRows(optionsArray, slave, "buttplug", true, refresh)); el.appendChild(links); return el; @@ -501,7 +501,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.buttplugAttachment !== `none`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: ` None`, updateSlave: {buttplugAttachment: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "buttplugAttachment", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "buttplugAttachment", false, refresh)); } el.appendChild(label); @@ -526,7 +526,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Options let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, slave, "buttplugAttachment", true, refresh)); + links.appendChild(generateRows(optionsArray, slave, "buttplugAttachment", true, refresh)); el.appendChild(links); return el; @@ -547,7 +547,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.vaginalAccessory !== `none`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: ` None`, updateSlave: {vaginalAccessory: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "vaginalAccessory", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "vaginalAccessory", false, refresh)); } el.appendChild(label); @@ -572,7 +572,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Options let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, slave, "vaginalAccessory", true, refresh)); + links.appendChild(generateRows(optionsArray, slave, "vaginalAccessory", true, refresh)); el.appendChild(links); return el; @@ -594,7 +594,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.vaginalAttachment !== `none`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: ` None`, updateSlave: {vaginalAttachment: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "vaginalAttachment", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "vaginalAttachment", false, refresh)); } el.appendChild(label); @@ -619,7 +619,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Options let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, slave, "vaginalAttachment", true, refresh)); + links.appendChild(generateRows(optionsArray, slave, "vaginalAttachment", true, refresh)); el.appendChild(links); return el; @@ -638,7 +638,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { if (slave.dickAccessory !== `none`) { let choiceOptionsArray = []; choiceOptionsArray.push({text: ` None`, updateSlave: {dickAccessory: `none`}}); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "dickAccessory", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "dickAccessory", false, refresh)); } el.appendChild(label); @@ -663,7 +663,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Options let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, slave, "dickAccessory", true, refresh)); + links.appendChild(generateRows(optionsArray, slave, "dickAccessory", true, refresh)); el.appendChild(links); return el; @@ -713,7 +713,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { chastityVagina: 0 } }); - label.appendChild(App.UI.SlaveInteract.generateRows(choiceOptionsArray, slave, "chastity", false, refresh)); + label.appendChild(generateRows(choiceOptionsArray, slave, "chastity", false, refresh)); } el.appendChild(label); @@ -739,7 +739,7 @@ App.UI.SlaveInteract.wardrobe = function(slave) { // Options let links = document.createElement('div'); links.className = "choices"; - links.appendChild(App.UI.SlaveInteract.generateRows(optionsArray, slave, "chastity", true, refresh)); + links.appendChild(generateRows(optionsArray, slave, "chastity", true, refresh)); el.appendChild(links); return el; @@ -975,4 +975,81 @@ App.UI.SlaveInteract.wardrobe = function(slave) { } } } + /** @typedef RowItem + * @type {object} + * @property {FC.FutureSociety} [FS] - FS requirement, if any + * @property {string} [text] - link text + * @property {object} [updateSlave] - properties to be merged onto the slave + * @property {object} [update] - properties to be merged into global state + * @property {string} [disabled] - text indicating why the option is unavailable + * @property {string} [note] + * @property {string} [slutty] + * @property {string} [humiliating] + */ + + /** Generate a row of choices + * @param {RowItem[]} array + * @param {App.Entity.SlaveState} slave + * @param {string} [category] - should be in the form of slave.category, the thing we want to update. + * @param {boolean} [accessCheck=false] + * @param {Function} refresh + * @returns {HTMLSpanElement} + */ + function generateRows(array, slave, category, accessCheck = false, refresh) { + const linkArray = []; + for (const item of array) { + let link; + // Some items will never be in App.Data.slaveWear, especially "none" if it falls in between harsh and nice data sets. Trying to look it up would cause an error, which is what access check works around. + const itemName = (category === "chastity") ? item.text.toLowerCase() : item.updateSlave[category]; // Yucky. Category name does not match for chastity (since it sets multiple kinds of chastity at once). Compare using a lowercase name instead. + const unlocked = (accessCheck === true) ? isItemAccessible.entry(itemName, category, slave) : false; + if (accessCheck === false || unlocked) { + // is it just text? + if (item.disabled) { + link = App.UI.DOM.disabledLink(item.text, [item.disabled]); + } else if (typeof unlocked === 'string') { + link = App.UI.DOM.disabledLink(item.text, [unlocked]); + } else { + link = document.createElement('span'); + + // Set up the link + link.appendChild( + App.UI.DOM.link( + `${item.text} `, + () => { click(item); }, + [], + "", + clothTooltip(itemName) + ) + ); + + if (item.FS) { + let FS = App.UI.DOM.disabledLink(`FS`, [FutureSocieties.displayAdj(item.FS)]); + FS.style.fontStyle = "italic"; + link.appendChild(FS); + } + + // add a note node if required + if (item.note) { + link.appendChild(App.UI.DOM.makeElement('span', ` ${item.note}`, 'note')); + } + } + linkArray.push(link); + } + } + + return App.UI.DOM.generateLinksStrip(linkArray); + + /** @param {RowItem} arrayOption */ + function click(arrayOption) { + if (arrayOption.updateSlave) { + for (const slaveProperty in arrayOption.updateSlave) { + _.set(slave, slaveProperty, arrayOption.updateSlave[slaveProperty]); + } + } + if (arrayOption.update) { + Object.assign(V, arrayOption.update); + } + refresh(); + } + } }; -- GitLab