diff --git a/game/03-JavaScript/UI.js b/game/03-JavaScript/UI.js index 2ebf80dec0f4ec7dc5caa98f97791ff2a5fdd29b..7155d022789bc4363c39afa87cb9ae65b74d1bd5 100644 --- a/game/03-JavaScript/UI.js +++ b/game/03-JavaScript/UI.js @@ -429,50 +429,33 @@ window.settingsNamedNpcBreastSize = function (id, persist) { }); } -window.settingsNamedNpcGenderUpdate = function () { - let updateButtonsActive = () => { - jQuery('[id*=radiobutton-npcname-npcidpenissize]').prop("disabled", V.NPCName[T.npcId].gender == "f"); - }; - - jQuery(document).ready(() => { - updateButtonsActive(); - jQuery('[id*=radiobutton-npcname-npcidgender]').on('change', function (e) { updateButtonsActive(); }); - }); -} - -window.settingsPersistentNpcGenderUpdate = function () { - let updateButtonsActive = () => { - jQuery('[id*=radiobutton-' + Util.slugify('$per_npc[_pNPCId].penissize') + ']').prop("disabled", V.per_npc[T.pNPCId].gender == "f"); - jQuery('[id*=radiobutton-' + Util.slugify('$per_npc[_pNPCId].pronoun') + ']').prop("disabled", V.per_npc[T.pNPCId].pronoun == "i"); - }; - - jQuery(document).ready(() => { - updateButtonsActive(); - jQuery('[id*=radiobutton-' + Util.slugify('$per_npc[_pNPCId].gender') + ']').on('change', function (e) { updateButtonsActive(); }); - }); -} - -window.settingsPCGenderUpdate = function () { - let updateButtonsActive = () => { - jQuery('[id*=radiobutton-penissize]').prop("disabled", V.player.gender == "f"); - jQuery('[id*=radiobutton-playerballsexist]').prop("disabled", V.player.gender !== "h"); - jQuery('[id*=radiobutton-background-8]').prop("disabled", V.player.gender == "h"); - }; - - jQuery(document).ready(() => { - updateButtonsActive(); - jQuery('.playergender [id*=radiobutton-playergender]').on('change', function (e) { updateButtonsActive(); }); - }); -} - -window.settingsDoubleAnalToggleGreyOut = function() { - let updateButtonsActive = () => { - jQuery('[id*=checkbox-analdoubledisable]').prop("disabled", V.analdisable == "t"); - }; - - jQuery(document).ready(() => { - updateButtonsActive(); - jQuery('[id*=checkbox-analdisable]').on('change', function (e) { updateButtonsActive(); }); +// Checks current settings page for data attributes +// Run only when settings tab is changed (probably in "displaySettings" widget) +//data-target is the target element that needs to be clicked for the value to be updated +//data-disabledif is the conditional statement (e.g. data-disabledif="V.per_npc[T.pNPCId].gender==='f'") +//Conditional statement uses V and T instead of $ and _ + +window.settingsDisableElement = function() { + $(document).ready(() => { + $("[data-target]").each(function(){ + let updateButtonsActive = () => { + $(document).ready(() => { + try{ + let cond = eval(disabledif); + let style = cond ? "var(--500)" : ""; + orig.css("color", style).children().css("color", style); + orig.find("input").prop("disabled", cond); + } + catch(e){ console.log(e); } + }); + }; + let orig = $(this); + let disabledif = orig.data("disabledif"); + if(orig.data("target") && disabledif){ + updateButtonsActive(); + $(document).on("click.evt", "[name*='" + Util.slugify(orig.data("target")) + "']", function(){ updateButtonsActive(); }); + } + }); }); } diff --git a/game/base-system/settings.twee b/game/base-system/settings.twee index e665e5636788d85c6d8ad00f0c8cfa9b667a5c1c..dc158d56fc041a70da5c2aa577c5025bb0376b7e 100644 --- a/game/base-system/settings.twee +++ b/game/base-system/settings.twee @@ -137,6 +137,7 @@ <<if $currentSettings isnot "importConfirmDetails">> <<unset $importString>> <</if>> +<<run settingsDisableElement()>> <</widget>> <<widget "displaySubsection">> @@ -439,7 +440,6 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <label>Hermaphrodite <<radiobutton "$player.gender" "h" autocheck>></label> <br><br> </div> - <<run settingsPCGenderUpdate()>> <span class="gold">Natural features</span> <br> @@ -456,12 +456,12 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <br><br> <</if>> - <span class="gold">Penis size</span> - if applicable - <br> + <span data-target="player.gender" data-disabledif="V.player.gender==='f'"> + <span class="gold">Penis size</span> - if applicable<br> <label>Tiny <<radiobutton "$player.penissize" 0 autocheck>></label> | <label>Small <<radiobutton "$player.penissize" 1 autocheck>></label> | <label>Normal <<radiobutton "$player.penissize" 2 autocheck>></label> - <br><br> + </span><br><br> <span class="gold">Breast size</span> <br> @@ -480,11 +480,11 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <label>Cushioned <<radiobutton "$player.bottomsize" 3 autocheck>></label> <br><br> - <span class="gold">Testes</span> - applicable only if hermaphrodite - <br> + <span data-target="player.gender" data-disabledif="V.player.gender!=='h'"> + <span class="gold">Testes</span> - applicable only if hermaphrodite<br> <label>Yes <<radiobutton "$player.ballsExist" true autocheck>></label> | <label>No <<radiobutton "$player.ballsExist" false autocheck>></label> | - <br><br> + </span><br><br> <span class="gold">Chest sensitivity</span> <br> @@ -621,7 +621,7 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <br> <label><span class="lewd">Beautiful</span> <<radiobutton "$background" "beautiful" autocheck>> - You turn heads. <i>Not recommended for beginners.</i></label> <br> - <label><span class="lewd">Crossdresser</span> <<radiobutton "$background" "crossdresser" autocheck>> - You've taken a liking to the clothing of the opposite sex. Does nothing for hermaphrodites.</label> + <label data-target="player.gender" data-disabledif="V.player.gender==='h'"><span class="lewd">Crossdresser</span> <<radiobutton "$background" "crossdresser" autocheck>> - You've taken a liking to the clothing of the opposite sex. Does nothing for hermaphrodites.</label> <br> <label><span class="lewd">Lustful</span> <<radiobutton "$background" "lustful" autocheck>> - Arousal increases over time, and needs to be managed.</label> /*<br> @@ -758,7 +758,6 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <label><div class="settingsToggle"> <<checkbox "$analdisable" "t" "f" autocheck>> Enable anal </div></label> - <<run settingsDoubleAnalToggleGreyOut()>> <div class="settingsToggle" role="group" aria-labelledby="settingsAnalingusHead"> <span id="settingsAnalingusHead">Analingus:</span> <label> @@ -773,7 +772,7 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <label> <<checkbox "$vaginaldoubledisable" "t" "f" autocheck>> Vaginal </label> - <label> + <label data-target="analdisable" data-disabledif="V.analdisable==='t'"> <<checkbox "$analdoubledisable" "t" "f" autocheck>> Anal </label> <mouse class="tooltip linkBlue">(?)<span>Note that double anal requires anal to be enabled. @@ -1576,7 +1575,6 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <label><<radiobutton "$NPCName[_npcId].gender" "f" autocheck>> Vagina</label> | <label><<radiobutton "$NPCName[_npcId].gender" "m" autocheck>> Penis</label> <<if $debug is 1>>| <label><<radiobutton "$NPCName[_npcId].gender" "h" autocheck>> Both</label><</if>> - <<run settingsNamedNpcGenderUpdate()>> <<else>> Unable to change the npc genitals due to their pregnancy. <</if>> @@ -1584,6 +1582,7 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh Penis size - if applicable: <br> <<set _penisNames to ["", "Tiny", "Average", "Thick", "Huge"]>> /* the empty first element is necessary because _j starts at 1 */ + <span data-target="npcname-npcidgender" data-disabledif="V.NPCName[T.npcId].gender==='f'"> <<for _j to 1; _j lt _penisNames.length; _j++>> <label> <<radiobutton "$NPCName[_npcId].penissize" _j autocheck>> @@ -1591,6 +1590,7 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh </label> <<if _j isnot _penisNames.length -1>>|<</if>> <</for>> + </span> <br><br> <div class="settingsToggle" style="display: inline-flex;"> @@ -1637,6 +1637,7 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <</for>> <br><br> <</if>> +<<run settingsDisableElement()>> <</widget>> <<widget "perNPCSettingsMenu">> @@ -1695,16 +1696,18 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <</link>> <</if>> <br> + <span data-disabledif="V.per_npc[T.pNPCId].pronoun==='i'"> <label><<radiobutton "$per_npc[_pNPCId].pronoun" "f" autocheck>> Female</label> | <label><<radiobutton "$per_npc[_pNPCId].pronoun" "m" autocheck>> Male</label> + </span> <br> <label><<radiobutton "$per_npc[_pNPCId].gender" "f" autocheck>> Vagina</label> | <label><<radiobutton "$per_npc[_pNPCId].gender" "m" autocheck>> Penis</label> - <<run settingsPersistentNpcGenderUpdate()>> <br><br> Penis size - if applicable: <br> <<set _penisNames to ["", "Tiny", "Average", "Thick", "Huge"]>> /* the empty first element is necessary because _j starts at 1 */ + <span data-target="pernpc-npcidgender" data-disabledif="V.per_npc[T.pNPCId].gender==='f'"> <<for _j to 1; _j lt _penisNames.length; _j++>> <label> <<radiobutton "$per_npc[_pNPCId].penissize" _j autocheck>> @@ -1712,6 +1715,7 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh </label> <<if _j isnot _penisNames.length -1>>|<</if>> <</for>> + </span> <br><br> <div class="settingsToggle" style="display: inline-flex;"> Breast size @@ -1722,6 +1726,7 @@ Values above 5 can lead to errors when creating new saves! Make sure you know wh <div style="clear:both;"> /*Keep at end of toggles*/ </div> +<<run settingsDisableElement()>> <</widget>>