diff --git a/src/js/rulesAssistantOptions.tw b/src/js/rulesAssistantOptions.tw index ef112e33fe664e7fccf15a4a2ede7ccd9f0d7be9..963f2397d22ae291e9949f9b188e9bbfbd7260dc 100644 --- a/src/js/rulesAssistantOptions.tw +++ b/src/js/rulesAssistantOptions.tw @@ -21,12 +21,134 @@ window.rulesAssistantOptions = (function() { let tmp = document.createElement("div") tmp.classList.add("passage") + tmp.classList.add("rules-assistant-options") document.getElementById("passages").appendChild(tmp) - const root = new Element(tmp) - tmp = document.createElement("p") - tmp.innerHTML = `<em>${properTitle()}, I will review your slaves and make changes that will have a beneficial effect. Apologies, ${properTitle()}, but this function is... not fully complete. It may have some serious limitations. Please use the 'no default setting' option to identify areas I should not address.</em>` - root.appendChild(new Element(tmp)) + const root = new Root(tmp) + } + + function newRule(root) { + const id = V.defaultRules.length === 0? 1: V.defaultRules[V.defaultRules.length-1].ID + 1 + v.defaultRules.push({ + ID: id, + name: `Rule ${id}`, + condition: { + function: false, + data: {}, + excludeSpecialSlaves: false, + assignment: [], + excludeAssignment: [], + selectedSlaves: [], + excludedSlaves: [], + facility: [], + excludeFacility: [], + }, + set: { + releaseRules: "no default setting", + clitSetting: "no default setting", + clitSettingXY: "no default setting", + clitSettingXX: "no default setting", + clitSettingEnergy: "no default setting", + speechRules: "no default setting", + clothes: "no default setting", + collar: "no default setting", + shoes: "no default setting", + virginAccessory: "no default setting", + aVirginAccessory: "no default setting", + vaginalAccessory: "no default setting", + aVirginDickAccessory: "no default setting", + dickAccessory: "no default setting", + bellyAccessory: "no default setting", + aVirginButtplug: "no default setting", + buttplug: "no default setting", + eyeColor: "no default setting", + makeup: "no default setting", + nails: "no default setting", + hColor: "no default setting", + hLength: "no default setting", + hStyle: "no default setting", + pubicHColor: "no default setting", + pubicHStyle: "no default setting", + nipplesPiercing: "no default setting", + areolaePiercing: "no default setting", + clitPiercing: "no default setting", + vaginaLube: "no default setting", + vaginaPiercing: "no default setting", + dickPiercing: "no default setting", + anusPiercing: "no default setting", + lipsPiercing: "no default setting", + tonguePiercing: "no default setting", + earPiercing: "no default setting", + nosePiercing: "no default setting", + eyebrowPiercing: "no default setting", + navelPiercing: "no default setting", + corsetPiercing: "no default setting", + boobsTat: "no default setting", + buttTat: "no default setting", + vaginaTat: "no default setting", + dickTat: "no default setting", + lipsTat: "no default setting", + anusTat: "no default setting", + shouldersTat: "no default setting", + armsTat: "no default setting", + legsTat: "no default setting", + backTat: "no default setting", + stampTat: "no default setting", + curatives: "no default setting", + livingRules: "no default setting", + relationshipRules: "no default setting", + standardPunishment: "no default setting", + standardReward: "no default setting", + diet: "no default setting", + dietCum: "no default setting", + dietMilk: "no default setting", + muscles: "no default setting", + XY: "no default setting", + XX: "no default setting", + gelding: "no default setting", + preg: "no default setting", + growth_boobs: "no default setting", + growth_butt: "no default setting", + growth_lips: "no default setting", + growth_dick: "no default setting", + growth_balls: "no default setting", + aphrodisiacs: "no default setting", + autoSurgery: 0, + autoBrand: 0, + pornFameSpending: "no default setting", + dietGrowthSupport: 0, + eyewear: "no default setting", + setAssignment: "no default setting", + facilityRemove: false, + removalAssignment: "rest", + surgery_eyes: "no default setting", + surgery_lactation: "no default setting", + surgery_prostate: "no default setting", + surgery_cosmetic: "no default setting", + surgery_accent: "no default setting", + surgery_shoulders: "no default setting", + surgery_shouldersImplant: "no default setting", + surgery_boobs: "no default setting", + surgery_hips: "no default setting", + surgery_hipsImplant: "no default setting", + surgery_butt: "no default setting", + surgery_faceShape: "no default setting", + surgery_lips: "no default setting", + surgery_holes: "not default setting", + underArmHColor: "no default setting", + underArmHStyle: "no default setting", + drug: "no default setting", + eyes: "no default setting", + pregSpeed: "no default setting", + bellyImplantVol: -1, + } + }) + reload(root) + } + + function reload(root) { + root.element.remove() + rulesAssistantOptions() } // the Element class wraps around a DOM element and adds extra functionality @@ -108,7 +230,6 @@ window.rulesAssistantOptions = (function() { if (this.onchange instanceof Function) this.onchange(this.getValue()) } - } // a clickable item of a list @@ -132,6 +253,7 @@ window.rulesAssistantOptions = (function() { this.parent.selectItem(this) this.elem.classList.add("selected") this.selected = true + return true } deselect() { @@ -155,5 +277,89 @@ window.rulesAssistantOptions = (function() { } } + class Options extends Element { + constructor(elements=[]) { + elements.forEach(element => { this.appendChild(element) }) + } + + render() { + const elem = document.createElement("div") + elem.classList.add("rajs-list") + return elem + } + } + + class OptionsItem extends Element { + constructor(label, onclick) { + super(label) + this.onclick = onclick + } + render(label, onclick) { + const elem = document.createElement("span") + elem.classList.add("rajs-listitem") + elem.innerHTML = label + elem.onclick = () => { return this.onclick() } + return elem + } + } + + class NewRuleField extends Element { + constructor(root) { + super() + this.root = root + } + + render() { + const container = document.createElement("div") + const textarea = document.createElmenet("textarea") + textarea.placeholder = "Paste your rule here" + container.appendChild(textarea) + this.textarea = textarea + const button = document.createElement("button") + button.name = "Load" + button.onclick = () => { this.loadNewRule() } + container.appendChild(button) + return container + } + + loadNewRule() { + const text = this.textarea.value + try { + const rule = JSON.parse(text) + rule.ID = V.defaultRules.length === 0? rule.ID: V.defaultRules[V.defaultRules.length-1].ID + 1 + reload(this.root) + } catch (e) { + alert(e) + } + } + } + + class Root extends Element { + render(element) { + const greeting = document.createElement("p") + greeting.innerHTML = `<em>${properTitle()}, I will review your slaves and make changes that will have a beneficial effect. Apologies, ${properTitle()}, but this function is... not fully complete. It may have some serious limitations. Please use the 'no default setting' option to identify areas I should not address.</em>` + element.appendChild(greeting) + + if(V.defaultRules.length === 0) { + const paragraph = document.createElement("p") + paragraph.innerHTML = "<strong>No rules</strong>" + element.appendChild(paragraph) + element.appendChild(new NoRules(root)) + return element + } + } + } + + class NoRules extends Options { + constructor(root) { + super() + this.root = root + const newrule = new OptionsItem("Add a new rule", () => { newRule(this.root) }) + this.appendChild(newrule) + const importrule = new OptionsItem("Import a rule", () => { this.root.appendChild(new NewRuleField()) }) + this.appendChild(importrule) + } + } + return rulesAssistantOptions })()