Merge pull request #2635 from SillyTavern/independent-WI-disable Split WI Entry 'disable' into separate toggle

9af640cdf86841b46ebdb91a42bddd98bb197c19

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
4 files changed, +40 -41Showing whitespace changes
public/css/world-info.css+12 -0
@@ -120,6 +120,14 @@
120120 flex-wrap: wrap;
121121}
122122
123+.world_entry .inline-drawer-header {
124+ cursor: initial;
125+}
126+
127+.world_entry .killSwitch {
128+ cursor: pointer;
129+}
130+
123131.world_entry_form_control input[type=button] {
124132 cursor: pointer;
125133}
@@ -173,6 +181,10 @@
173181 width: 7em;
174182}
175183
184+.world_entry .killSwitch.fa-toggle-on {
185+ color: var(--SmartThemeQuoteColor);
186+}
187+
176188.wi-card-entry {
177189 border: 1px solid;
178190 border-color: var(--SmartThemeBorderColor);
public/index.html+5 -4
@@ -5298,21 +5298,22 @@
52985298 <div class="world_entry">
52995299 <form class="world_entry_form wi-card-entry">
53005300 <div class="inline-drawer wide100p">
53015301 <div class="inline-drawer-toggle inline-drawer-header gap5px padding0">
53025302 <span class="drag-handle">&#9776;</span>
53035303 <div class="gap5px world_entry_thin_controls wide100p alignitemscenter">
53045304 <div class="inline-drawer-toggle fa-fw fa-solid fa-circle-chevron-down inline-drawer-icon down"></div>
5305+ <div class="fa-solid fa-toggle-on killSwitch" name="entryKillSwitch" title="Toggle entry's active state."></div>
53055306 <div class="flex-container alignitemscenter wide100p">
5307+
53065308 <div class="WIEntryTitleAndStatus flex-container flex1 alignitemscenter">
5309+
53075310 <div class="flex-container flex1">
53085311 <textarea class="text_pole" rows="1" name="comment" maxlength="5000" data-i18n="[placeholder]Entry Title/Memo" placeholder="Entry Title/Memo"></textarea>
53095312 </div>
5310- <!-- <span class="world_entry_form_position_value"></span> -->
53115313 <select data-i18n="[title]WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized❌ Disabled" title="WI Entry Status:&#13;🔵 Constant&#13;🟢 Normal&#13;🔗 Vectorized&#13;❌ Disabled" name="entryStateSelector" class="text_pole widthNatural margin0">
53125314 <option value="constant" title="Constant" data-i18n="[title]WI_Entry_Status_Constant">🔵</option>
53135315 <option value="normal" title="Normal" data-i18n="[title]WI_Entry_Status_Normal">🟢</option>
53145316 <option value="vectorized" title="Vectorized" data-i18n="[title]WI_Entry_Status_Vectorized">🔗</option>
5315- <option value="disabled" title="Disabled" data-i18n="[title]WI_Entry_Status_Disabled">❌</option>
53165317 </select>
53175318 </div>
53185319 <div class="WIEnteryHeaderControls flex-container">
public/scripts/templates/worldInfoKeywordHeaders.html+1 -1
@@ -1,6 +1,6 @@
11<div id="WIEntryHeaderTitlesPC" class="flex-container wide100p spaceBetween justifyCenter textAlignCenter" style="padding:0 4.5em;">
22 <small class="flex1" data-i18n="Title/Memo">Title/Memo</small>
33 <small style="width: calc(3.5em + 15px)" data-i18n="StatusStrategy">StatusStrategy</small>
44 <small style="width: calc(3.5em + 30px)" data-i18n="Position">Position</small>
55 <small style="width: calc(3.5em + 20px)" data-i18n="Depth">Depth</small>
66 <small style="width: calc(3.5em + 20px)" data-i18n="Order">Order</small>
public/scripts/world-info.js+22 -36
@@ -2859,21 +2859,7 @@ async function getWorldEntry(name, data, entry) {
28592859 //add UID above content box (less important doesn't need to be always visible)
28602860 template.find('.world_entry_form_uid_value').text(`(UID: ${entry.uid})`);
28612861
2862- // disable
2862+ //new tri-state selector for constant/normal/vectorized
2863- /*
2864- const disableInput = template.find('input[name="disable"]');
2865- disableInput.data("uid", entry.uid);
2866- disableInput.on("input", async function () {
2867- const uid = $(this).data("uid");
2868- const value = $(this).prop("checked");
2869- data.entries[uid].disable = value;
2870- setOriginalDataValue(data, uid, "enabled", !data.entries[uid].disable);
2871- await saveWorldInfo(name, data);
2872- });
2873- disableInput.prop("checked", entry.disable).trigger("input");
2874- */
2875-
2876- //new tri-state selector for constant/normal/disabled
28772863 const entryStateSelector = template.find('select[name="entryStateSelector"]');
28782864 entryStateSelector.data('uid', entry.uid);
28792865 entryStateSelector.on('click', function (event) {
@@ -2886,49 +2872,43 @@ async function getWorldEntry(name, data, entry) {
28862872 switch (value) {
28872873 case 'constant':
28882874 data.entries[uid].constant = true;
2889- data.entries[uid].disable = false;
28902875 data.entries[uid].vectorized = false;
2891- setWIOriginalDataValue(data, uid, 'enabled', true);
28922876 setWIOriginalDataValue(data, uid, 'constant', true);
28932877 setWIOriginalDataValue(data, uid, 'extensions.vectorized', false);
2894- template.removeClass('disabledWIEntry');
28952878 break;
28962879 case 'normal':
28972880 data.entries[uid].constant = false;
2898- data.entries[uid].disable = false;
28992881 data.entries[uid].vectorized = false;
2900- setWIOriginalDataValue(data, uid, 'enabled', true);
29012882 setWIOriginalDataValue(data, uid, 'constant', false);
29022883 setWIOriginalDataValue(data, uid, 'extensions.vectorized', false);
2903- template.removeClass('disabledWIEntry');
29042884 break;
29052885 case 'vectorized':
29062886 data.entries[uid].constant = false;
2907- data.entries[uid].disable = false;
29082887 data.entries[uid].vectorized = true;
2909- setWIOriginalDataValue(data, uid, 'enabled', true);
29102888 setWIOriginalDataValue(data, uid, 'constant', false);
29112889 setWIOriginalDataValue(data, uid, 'extensions.vectorized', true);
2912- template.removeClass('disabledWIEntry');
2913- break;
2914- case 'disabled':
2915- data.entries[uid].constant = false;
2916- data.entries[uid].disable = true;
2917- data.entries[uid].vectorized = false;
2918- setWIOriginalDataValue(data, uid, 'enabled', false);
2919- setWIOriginalDataValue(data, uid, 'constant', false);
2920- setWIOriginalDataValue(data, uid, 'extensions.vectorized', false);
2921- template.addClass('disabledWIEntry');
29222890 break;
29232891 }
29242892 await saveWorldInfo(name, data);
29252893
29262894 });
29272895
2896+ const entryKillSwitch = template.find('div[name="entryKillSwitch"]');
2897+ entryKillSwitch.data('uid', entry.uid);
2898+ entryKillSwitch.on('click', async function (event) {
2899+ const uid = entry.uid;
2900+ data.entries[uid].disable = !data.entries[uid].disable;
2901+ const isActive = !data.entries[uid].disable;
2902+ setWIOriginalDataValue(data, uid, 'enabled', isActive);
2903+ template.toggleClass('disabledWIEntry', !isActive);
2904+ entryKillSwitch.toggleClass('fa-toggle-off', !isActive);
2905+ entryKillSwitch.toggleClass('fa-toggle-on', isActive);
2906+ await saveWorldInfo(name, data);
2907+
2908+ });
2909+
29282910 const entryState = function () {
29292911 if (entry.disableconstant === true) {
2930- return 'disabled';
2931- } else if (entry.constant === true) {
29322912 return 'constant';
29332913 } else if (entry.vectorized === true) {
29342914 return 'vectorized';
@@ -2936,6 +2916,12 @@ async function getWorldEntry(name, data, entry) {
29362916 return 'normal';
29372917 }
29382918 };
2919+
2920+ const isActive = !entry.disable;
2921+ template.toggleClass('disabledWIEntry', !isActive);
2922+ entryKillSwitch.toggleClass('fa-toggle-off', !isActive);
2923+ entryKillSwitch.toggleClass('fa-toggle-on', isActive);
2924+
29392925 template
29402926 .find(`select[name="entryStateSelector"] option[value=${entryState()}]`)
29412927 .prop('selected', true)