diff --git a/src/interaction/slaveInteract.js b/src/interaction/slaveInteract.js index 799636a324b0680d9f12e6c158f12535eb2bc305..6808ad215d49614d0dc9b05c265415f804f6ffdd 100644 --- a/src/interaction/slaveInteract.js +++ b/src/interaction/slaveInteract.js @@ -2287,78 +2287,25 @@ App.UI.SlaveInteract.smartSettings = function(slave) { App.UI.SlaveInteract.orgasm = function(slave) { let el = document.createElement('div'); - const masturbation = []; - const partner = []; - const family = []; - const slaves = []; - const master = []; - - // Masturbation - masturbation.push({text: `Allow`, updateSlave: {"rules.release.masturbation": 1}}); - masturbation.push({text: `Forbid`, updateSlave: {"rules.release.masturbation": 0}}); - - // Partner - partner.push({text: `Allow`, updateSlave: {"rules.release.partner": 1}}); - partner.push({text: `Forbid`, updateSlave: {"rules.release.partner": 0}}); - - // Family - family.push({text: `Allow`, updateSlave: {"rules.release.family": 1}}); - family.push({text: `Forbid`, updateSlave: {"rules.release.family": 0}}); - - // Slaves - slaves.push({text: `Allow`, updateSlave: {"rules.release.slaves": 1}}); - slaves.push({text: `Forbid`, updateSlave: {"rules.release.slaves": 0}}); - - // Master - master.push({text: `Grant`, updateSlave: {"rules.release.master": 1}}); - master.push({text: `Deny`, updateSlave: {"rules.release.master": 0}}); - let title = document.createElement('div'); title.textContent = `Non-assignment orgasm rules: `; el.append(title); - let links; - if (masturbation.length) { - links = document.createElement('div'); - links.append(`Masturbation: `); - status(slave.rules.release.masturbation); - links.appendChild(App.UI.SlaveInteract.generateRows(masturbation, slave)); - links.className = "choices"; - el.append(links); - } - - if (partner.length) { - links = document.createElement('div'); - links.append(`Partner: `); - status(slave.rules.release.partner); - links.appendChild(App.UI.SlaveInteract.generateRows(partner, slave)); - links.className = "choices"; - el.append(links); - } - - if (family.length) { - links = document.createElement('div'); - links.append(`Family: `); - status(slave.rules.release.family); - links.appendChild(App.UI.SlaveInteract.generateRows(family, slave)); - links.className = "choices"; - el.append(links); - } + makeLinks("Masturbation", "rules.release.masturbation"); + makeLinks("Partner", "rules.release.partner"); + makeLinks("Family", "rules.release.family"); + makeLinks("Other slaves", "rules.release.slaves"); + makeLinks("Master", "rules.release.master", true); - if (slaves.length) { - links = document.createElement('div'); - links.append(`Other slaves: `); - status(slave.rules.release.slaves); - links.appendChild(App.UI.SlaveInteract.generateRows(slaves, slave)); - links.className = "choices"; - el.append(links); - } + function makeLinks(text, setting, master=false) { + const options = + [{text: master ? `Grant` : `Allow`, updateSlave: {[setting]: 1}}, + {text: master ? `Deny` : `Forbid`, updateSlave: {[setting]: 0}}]; - if (master.length) { - links = document.createElement('div'); - links.append(`Master: `); - status(slave.rules.release.master, true); - links.appendChild(App.UI.SlaveInteract.generateRows(master, slave)); + let links = document.createElement('div'); + links.append(`${text}: `); + links.append(status(_.get(slave, setting), master)); + links.appendChild(App.UI.SlaveInteract.generateRows(options, slave)); links.className = "choices"; el.append(links); } @@ -2373,7 +2320,7 @@ App.UI.SlaveInteract.orgasm = function(slave) { text = setting ? "allowed" : "denied"; } selected.textContent = `${text}. `; - links.append(selected); + return selected; } return jQuery('#orgasm').empty().append(el); @@ -2382,7 +2329,6 @@ App.UI.SlaveInteract.orgasm = function(slave) { App.UI.SlaveInteract.custom = (function() { let el; let label; - let links; let result; let textbox; return custom; @@ -3288,7 +3234,7 @@ App.UI.SlaveInteract.generateRows = function(array, slave, category, accessCheck function click(arrayOption) { if (arrayOption.updateSlave) { for (const slaveProperty in arrayOption.updateSlave) { - setValue(slave, slaveProperty, arrayOption.updateSlave[slaveProperty]); + _.set(slave, slaveProperty, arrayOption.updateSlave[slaveProperty]); } } if (arrayOption.update) { @@ -3298,20 +3244,6 @@ App.UI.SlaveInteract.generateRows = function(array, slave, category, accessCheck App.UI.SlaveInteract.refreshAll(slave); return; } - - function setValue(obj, path, val) { - const ref = resolve(obj, path); - ref.obj[ref.prop] = val; - } - - function resolve(obj, path, separator = '.') { - const pathArray = Array.isArray(path) ? path : path.split(separator); - if (pathArray.length === 1) { - return {obj: obj, prop: pathArray[0]}; - } - const lastObj = pathArray.slice(0, pathArray.length - 1).reduce((prev, prop) => prev[prop], obj); - return {obj: lastObj, prop: pathArray.slice(pathArray.length - 1)}; - } }; App.UI.SlaveInteract.refreshAll = function(slave) {