diff --git a/devTools/FC.d.ts b/devTools/FC.d.ts index 11e6183b2c1279fdd5b98073730d96011e78de4e..eb7ac658dbd241587293bbdc19858b57ad70f37c 100644 --- a/devTools/FC.d.ts +++ b/devTools/FC.d.ts @@ -186,6 +186,8 @@ declare namespace App { removeLabel: string; skinColor: string; inflationType: string; + brandTarget: string; + brandDesign: string; } class Rule { diff --git a/src/js/rulesAssistantOptions.js b/src/js/rulesAssistantOptions.js index 9a9dd9c6035d16ec87dd4a511a432c0dfab2341f..050e909e70c465d879bd1e039ba2dd9d018a927d 100644 --- a/src/js/rulesAssistantOptions.js +++ b/src/js/rulesAssistantOptions.js @@ -178,16 +178,19 @@ window.rulesAssistantOptions = (function() { /** * * @param {string} prefix - * @param {Array} [data] - * @param {boolean} [allowNullValue] - * @param {boolean} [editor] + * @param {Array} [data=[]] + * @param {boolean} [allowNullValue=true] + * @param {boolean} [editor=false] + * @param {boolean} [capitalizeShortcuts] * @param {...any} args */ - constructor(prefix, data = [], allowNullValue = true, editor = false, ...args) { + constructor(prefix, data = [], allowNullValue = true, editor = false, capitalizeShortcuts = false, ...args) { super(`${prefix}: `, editor, ...args); this.selectedItem = null; /** @protected */ this._allowNullValue = allowNullValue; + /** @private */ + this._capitalizeShortcuts = capitalizeShortcuts; if (allowNullValue) { this.appendChild(new ListItem("No default setting", null)); } @@ -248,7 +251,11 @@ window.rulesAssistantOptions = (function() { * @returns {ListItem} */ _createListItem(display, data) { - return new ListItem(display, data); + if (this._capitalizeShortcuts) { + return new ListItem(capFirstChar(display), data); + } else { + return new ListItem(display, data); + } } } @@ -282,15 +289,6 @@ window.rulesAssistantOptions = (function() { } } - /** - * Automatically capitalizes shortcut labels - */ - class EditorWithShortcutsCapitalized extends EditorWithShortcuts { - _createListItem(display, data) { - return super._createListItem(capFirstChar(display), data); - } - } - class ListSelector extends Element { constructor(prefix, data = [], allowNullValue = true) { super(`${prefix}: `, data, allowNullValue); @@ -344,8 +342,8 @@ window.rulesAssistantOptions = (function() { } class List extends EditorWithShortcuts { - constructor(prefix, data = [], allowNullValue = true, textinput = false) { - super(prefix, data, allowNullValue, textinput); + constructor(prefix, data = [], allowNullValue = true, textinput = false, capitalizeShortcuts = true) { + super(prefix, data, allowNullValue, textinput, capitalizeShortcuts); this.values = new Map(); if (allowNullValue) { this.values.set(null, "no default setting"); @@ -388,16 +386,7 @@ window.rulesAssistantOptions = (function() { } } - /** - * Automatically capitalizes shortcut labels - */ - class ListCapitalized extends List { - _createListItem(display, data) { - return super._createListItem(capFirstChar(display), data !== undefined ? data : display); - } - } - - class NumberRange extends EditorWithShortcutsCapitalized { + class NumberRange extends EditorWithShortcuts { /** * @param {string} prefix * @param {Array} [data=[]] @@ -407,7 +396,7 @@ window.rulesAssistantOptions = (function() { * @param {boolean} [spinBox=false] */ constructor(prefix, data = [], allowNullValue = true, min = 0, max = 100, spinBox = false) { - super(prefix, data, allowNullValue, spinBox, min, max); + super(prefix, data, allowNullValue, spinBox, true, min, max); } createEditor(min, max) { @@ -435,7 +424,7 @@ window.rulesAssistantOptions = (function() { this.inputEdited(); }; this.numEditor.onkeypress = (e) => { - if (returnP(e)) this.inputEdited(); + if (returnP(e)) { this.inputEdited(); } }; const res = document.createElement("span"); @@ -1068,14 +1057,14 @@ window.rulesAssistantOptions = (function() { } } - class SpecialInclusion extends ListCapitalized { + class SpecialInclusion extends List { constructor() { const items = [ ["include", -1], ["exclude", 0], ["only", 1] ]; - super("Special slaves", items); + super("Special slaves", items, true, false, true); this.setValue(current_rule.condition.specialSlaves); this.onchange = (value) => current_rule.condition.specialSlaves = value; } @@ -1536,26 +1525,26 @@ window.rulesAssistantOptions = (function() { } } - class LeggingsList extends ListCapitalized { + class LeggingsList extends List { constructor() { const items = [ ["none"], ["short stockings"], ["long stockings"], ]; - super("Leg accessory", items); + super("Leg accessory", items, true, false, true); this.setValue(current_rule.set.legAccessory); this.onchange = (value) => current_rule.set.legAccessory = value; } } - class VagChastityList extends ListCapitalized { + class VagChastityList extends List { constructor() { const chaste = [ ["none", 0], ["chastity", 1], ]; - super("Vaginal chastity", chaste); + super("Vaginal chastity", chaste, true, false, true); this.setValue(current_rule.set.chastityVagina); this.onchange = (value) => current_rule.set.chastityVagina = value; } @@ -1625,13 +1614,13 @@ window.rulesAssistantOptions = (function() { } } - class DickChastityList extends ListCapitalized { + class DickChastityList extends List { constructor() { const items = [ ["none", 0], ["chastity cage", 1], ]; - super("Penile chastity", items); + super("Penile chastity", items, true, false, true); this.setValue(current_rule.set.chastityPenis); this.onchange = (value) => current_rule.set.chastityPenis = value; } @@ -1653,13 +1642,13 @@ window.rulesAssistantOptions = (function() { } } - class AnalChastityList extends ListCapitalized { + class AnalChastityList extends List { constructor() { const items = [ ["none", 0], ["chastity", 1], ]; - super("Anal chastity", items); + super("Anal chastity", items, true, false, true); this.setValue(current_rule.set.chastityAnus); this.onchange = (value) => current_rule.set.chastityAnus = value; } @@ -1735,37 +1724,37 @@ window.rulesAssistantOptions = (function() { } } - class AutosurgerySwitch extends ListCapitalized { + class AutosurgerySwitch extends List { constructor() { const pairs = [ ["on", 1], ["off", 0], ]; - super("Assistant-applied implants (Autosurgery global switch)", pairs, false); + super("Assistant-applied implants (Autosurgery global switch)", pairs, false, false, true); this.setValue(current_rule.set.autoSurgery); this.onchange = (value) => current_rule.set.autoSurgery = value; } } - class IntensiveGrowthSwitch extends ListCapitalized { + class IntensiveGrowthSwitch extends List { constructor() { const pairs = [ ["no", 0], ["yes", 1], ]; - super("Use intensive growth drugs for healthy slaves", pairs, false); + super("Use intensive growth drugs for healthy slaves", pairs, false, false, true); this.setValue(current_rule.set.growth.intensity); this.onchange = (value) => current_rule.set.growth.intensity = value; } } - class HyperGrowthSwitch extends ListCapitalized { + class HyperGrowthSwitch extends List { constructor() { const pairs = [ ["no", 0], ["yes", 1], ]; - super("Use hyper growth drugs", pairs, false); + super("Use hyper growth drugs", pairs, false, false, true); this.setValue(current_rule.set.hyper_drugs); this.onchange = (value) => current_rule.set.hyper_drugs = value; } @@ -1930,14 +1919,14 @@ window.rulesAssistantOptions = (function() { } } - class CurrativesList extends ListCapitalized { + class CurrativesList extends List { constructor() { const pairs = [ ["none", 0], ["preventatives", 1], ["curatives", 2], ]; - super("Health drugs", pairs); + super("Health drugs", pairs, true, false, true); this.setValue(current_rule.set.curatives); this.onchange = (value) => current_rule.set.curatives = value; } @@ -1957,13 +1946,13 @@ window.rulesAssistantOptions = (function() { } } - class ContraceptiveList extends ListCapitalized { + class ContraceptiveList extends List { constructor() { const drugs = [ ["contraceptives", true], ["fertile", false], ]; - super("Contraceptives for fertile slaves", drugs); + super("Contraceptives for fertile slaves", drugs, true, false, true); this.setValue(current_rule.set.preg); this.onchange = (value) => current_rule.set.preg = value; } @@ -2157,13 +2146,13 @@ window.rulesAssistantOptions = (function() { } } - class DietGrowthList extends ListCapitalized { + class DietGrowthList extends List { constructor() { const pairs = [ ["on", 1], ["off", 0] ]; - super("Diet support for growth drugs", pairs, false); + super("Diet support for growth drugs", pairs, false, false, true); this.setValue(current_rule.set.dietGrowthSupport); this.onchange = (value) => current_rule.set.dietGrowthSupport = value; } @@ -2195,13 +2184,13 @@ window.rulesAssistantOptions = (function() { } } - class DietSolidFoodList extends ListCapitalized { + class DietSolidFoodList extends List { constructor() { const pairs = [ ["permitted", 0], ["forbidden", 1], ]; - super("Solid food access", pairs); + super("Solid food access", pairs, true, false, true); this.setValue(current_rule.set.onDiet); this.onchange = (value) => current_rule.set.onDiet = value; } @@ -2371,39 +2360,39 @@ window.rulesAssistantOptions = (function() { } } - class SpeechList extends ListCapitalized { + class SpeechList extends List { constructor() { const pairs = [ ["permissive"], ["suppress accents", "accent elimination"], ["restrictive"] ]; - super("Speech rules", pairs); + super("Speech rules", pairs, true, false, true); this.setValue(current_rule.set.speechRules); this.onchange = (value) => current_rule.set.speechRules = value; } } - class RelationshipList extends ListCapitalized { + class RelationshipList extends List { constructor() { const pairs = [ ["permissive"], ["just friends"], ["restrictive"] ]; - super("Relationship rules", pairs); + super("Relationship rules", pairs, true, false, true); this.setValue(current_rule.set.relationshipRules); this.onchange = (value) => current_rule.set.relationshipRules = value; } } - class PornBroadcastStatus extends ListCapitalized { + class PornBroadcastStatus extends List { constructor() { const pairs = [ ["disabled", 0], ["enabled", 1] ]; - super("Porn Broadcasting Status", pairs); + super("Porn Broadcasting Status", pairs, true, false, true); this.setValue(current_rule.set.pornFeed); this.onchange = (value) => current_rule.set.pornFeed = value; } @@ -2531,7 +2520,7 @@ window.rulesAssistantOptions = (function() { } } - class EarwearList extends ListCapitalized { + class EarwearList extends List { constructor() { const pairs = [ ["none"], @@ -2539,7 +2528,7 @@ window.rulesAssistantOptions = (function() { ["muffle with ear plugs"], ["deafen with ear plugs"] ]; - super("Earwear", pairs); + super("Earwear", pairs, true, false, true); this.setValue(current_rule.set.earwear); this.onchange = (value) => current_rule.set.earwear = value; } @@ -2580,7 +2569,7 @@ window.rulesAssistantOptions = (function() { } } - class HairLengthList extends ListCapitalized { + class HairLengthList extends List { constructor() { const pairs = [ ["very short", 5], @@ -2590,19 +2579,19 @@ window.rulesAssistantOptions = (function() { ["very long", 100], ["floor length", 150] ]; - super("Hair length", pairs); + super("Hair length", pairs, true, false, true); this.setValue(current_rule.set.hLength); this.onchange = (value) => current_rule.set.hLength = value; } } - class HaircutsList extends ListCapitalized { + class HaircutsList extends List { constructor() { const pairs = [ ["maintain hair length", 1], ["do not maintain hair length", 0] ]; - super("Hair length maintenance", pairs); + super("Hair length maintenance", pairs, true, false, true); this.setValue(current_rule.set.haircuts); this.onchange = (value) => current_rule.set.haircuts = value; } @@ -2760,14 +2749,14 @@ window.rulesAssistantOptions = (function() { } } - class MarkingsList extends ListCapitalized { + class MarkingsList extends List { constructor() { const pairs = [ ["remove beauty marks"], ["remove birthmarks"], ["remove both"] ]; - super("Facial markings", pairs); + super("Facial markings", pairs, true, false, true); this.setValue(current_rule.set.markings); this.onchange = (value) => current_rule.set.markings = value; } @@ -2941,13 +2930,13 @@ window.rulesAssistantOptions = (function() { } } - class AreolaPiercingList extends ListCapitalized { + class AreolaPiercingList extends List { constructor() { const pairs = [ ["none", 0], ["studded", 1] ]; - super("Areola studs", pairs); + super("Areola studs", pairs, true, false, true); this.setValue(current_rule.set.areolaePiercing); this.onchange = (value) => current_rule.set.areolaePiercing = value; } @@ -3001,25 +2990,25 @@ window.rulesAssistantOptions = (function() { } } - class CorsetPiercingList extends ListCapitalized { + class CorsetPiercingList extends List { constructor() { const pairs = [ ["none", 0], ["applied", 1] ]; - super("Corset piercings", pairs); + super("Corset piercings", pairs, true, false, true); this.setValue(current_rule.set.corsetPiercing); this.onchange = (value) => current_rule.set.corsetPiercing = value; } } - class AutoBrandingList extends ListCapitalized { + class AutoBrandingList extends List { constructor() { const pairs = [ ["on", 1], ["off", 0], ]; - super("Automatic branding", pairs, false); + super("Automatic branding", pairs, false, false, true); this.setValue(current_rule.set.autoBrand); this.onchange = (value) => current_rule.set.autoBrand = value; } @@ -3380,98 +3369,98 @@ window.rulesAssistantOptions = (function() { } } - class VisionSurgeryList extends ListCapitalized { + class VisionSurgeryList extends List { constructor() { const items = [ ["fixed", 1], ["blurred", -1], ]; - super("Vision correction", items); + super("Vision correction", items, true, false, true); this.setValue(current_rule.set.surgery.eyes); this.onchange = (value) => current_rule.set.surgery.eyes = value; } } - class HearingSurgeryList extends ListCapitalized { + class HearingSurgeryList extends List { constructor() { const items = [ ["fixed", 0], ["muffled", -1], ]; - super("Hearing correction", items); + super("Hearing correction", items, true, false, true); this.setValue(current_rule.set.surgery.hears); this.onchange = (value) => current_rule.set.surgery.hears = value; } } - class SmellSurgeryList extends ListCapitalized { + class SmellSurgeryList extends List { constructor() { const items = [ ["fixed", 0], ["disabled", -1], ]; - super("Olfactory correction", items); + super("Olfactory correction", items, true, false, true); this.setValue(current_rule.set.surgery.smells); this.onchange = (value) => current_rule.set.surgery.smells = value; } } - class TasteSurgeryList extends ListCapitalized { + class TasteSurgeryList extends List { constructor() { const items = [ ["fixed", 0], ["disabled", -1], ]; - super("Gustatory correction", items); + super("Gustatory correction", items, true, false, true); this.setValue(current_rule.set.surgery.tastes); this.onchange = (value) => current_rule.set.surgery.tastes = value; } } - class LactationSurgeryList extends ListCapitalized { + class LactationSurgeryList extends List { constructor() { const items = [ ["implanted", 1], ["removed", 0], ]; - super("Lactation drug implants", items); + super("Lactation drug implants", items, true, false, true); this.setValue(current_rule.set.surgery.lactation); this.onchange = (value) => current_rule.set.surgery.lactation = value; } } - class SemenSurgeryList extends ListCapitalized { + class SemenSurgeryList extends List { constructor() { const items = [ ["implanted", 1], ["removed", 0], ]; - super("Prostate production enhancing drug implants", items); + super("Prostate production enhancing drug implants", items, true, false, true); this.setValue(current_rule.set.surgery.prostate); this.onchange = (value) => current_rule.set.surgery.prostate = value; } } - class VasectomyList extends ListCapitalized { + class VasectomyList extends List { constructor() { const items = [ ["apply vasectomy", true], ["undo vasectomy", false], ]; - super("Apply or undo vasectomy for slaves with testicles", items); + super("Apply or undo vasectomy for slaves with testicles", items, true, false, true); this.setValue(current_rule.set.surgery.vasectomy); this.onchange = (value) => current_rule.set.surgery.vasectomy = value; } } - class CosmeticSurgeryList extends ListCapitalized { + class CosmeticSurgeryList extends List { constructor() { const items = [ ["none", 0], ["subtle", 1], ["invasive", 2], ]; - super("Cosmetic Surgery", items); + super("Cosmetic Surgery", items, true, false, true); this.setValue(current_rule.set.surgery.cosmetic); this.onchange = (value) => current_rule.set.surgery.cosmetic = value; } @@ -3523,49 +3512,49 @@ window.rulesAssistantOptions = (function() { } } - class TighteningSurgeryList extends ListCapitalized { + class TighteningSurgeryList extends List { constructor() { const items = [ ["tightening", 1], ["virginity restoration", 2], ]; - super("Orifice Tightening", items); + super("Orifice Tightening", items, true, false, true); this.setValue(current_rule.set.surgery.holes); this.onchange = (value) => current_rule.set.surgery.holes = value; } } - class TummyTuckSurgeryList extends ListCapitalized { + class TummyTuckSurgeryList extends List { constructor() { const items = [ ["tuck", 1], ]; - super("Tummy Tuck", items); + super("Tummy Tuck", items, true, false, true); this.setValue(current_rule.set.surgery.tummy); this.onchange = (value) => current_rule.set.surgery.tummy = value; } } - class BodyHairSurgeryList extends ListCapitalized { + class BodyHairSurgeryList extends List { constructor() { const items = [ ["keep", 1], ["removal", 2], ]; - super("Body Hair", items); + super("Body Hair", items, true, false, true); this.setValue(current_rule.set.surgery.bodyhair); this.onchange = (value) => current_rule.set.surgery.bodyhair = value; } } - class HairSurgeryList extends ListCapitalized { + class HairSurgeryList extends List { constructor() { const items = [ ["keep", 1], ["removal", 2], ]; - super("Hair", items); + super("Hair", items, true, false, true); this.setValue(current_rule.set.surgery.hair); this.onchange = (value) => current_rule.set.surgery.hair = value; } @@ -3630,13 +3619,13 @@ window.rulesAssistantOptions = (function() { } } - class BellyImplantList extends ListCapitalized { + class BellyImplantList extends List { constructor() { const items = [ ["install", "install"], ["remove", "remove"], ]; - super("Belly implant", items); + super("Belly implant", items, true, false, true); this.setValue(current_rule.set.surgery.bellyImplant); this.onchange = (value) => current_rule.set.surgery.bellyImplant = value; }