mirror of
https://github.com/SilenceLurker/ST-Amily2-Chat-Optimisation.git
synced 2026-06-06 17:05:50 +00:00
Update bindings.js
This commit is contained in:
212
ui/bindings.js
212
ui/bindings.js
@@ -99,14 +99,11 @@ function updateApiProviderUI() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function bindAmily2ModalWorldBookSettings() {
|
function bindAmily2ModalWorldBookSettings() {
|
||||||
|
if (!extension_settings[extensionName]) {
|
||||||
|
extension_settings[extensionName] = {};
|
||||||
|
}
|
||||||
const settings = extension_settings[extensionName];
|
const settings = extension_settings[extensionName];
|
||||||
|
|
||||||
// Initialize settings with unique keys
|
|
||||||
if (settings.amily2_wb_enabled === undefined) settings.amily2_wb_enabled = false;
|
|
||||||
if (settings.amily2_wb_source === undefined) settings.amily2_wb_source = 'character';
|
|
||||||
if (settings.amily2_wb_selected_worldbooks === undefined) settings.amily2_wb_selected_worldbooks = [];
|
|
||||||
if (settings.amily2_wb_selected_entries === undefined) settings.amily2_wb_selected_entries = {};
|
|
||||||
|
|
||||||
const enabledCheckbox = document.getElementById('amily2_wb_enabled');
|
const enabledCheckbox = document.getElementById('amily2_wb_enabled');
|
||||||
const optionsContainer = document.getElementById('amily2_wb_options_container');
|
const optionsContainer = document.getElementById('amily2_wb_options_container');
|
||||||
const sourceRadios = document.querySelectorAll('input[name="amily2_wb_source"]');
|
const sourceRadios = document.querySelectorAll('input[name="amily2_wb_source"]');
|
||||||
@@ -119,27 +116,23 @@ function bindAmily2ModalWorldBookSettings() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const saveSelectedEntries = () => {
|
// Ensure settings objects exist before reading
|
||||||
const selected = {};
|
if (settings.modal_amily2_wb_selected_worldbooks === undefined) {
|
||||||
entryListContainer.querySelectorAll('input[type="checkbox"]:checked').forEach(cb => {
|
settings.modal_amily2_wb_selected_worldbooks = [];
|
||||||
const book = cb.dataset.book;
|
|
||||||
const uid = cb.dataset.uid;
|
|
||||||
if (!selected[book]) {
|
|
||||||
selected[book] = [];
|
|
||||||
}
|
}
|
||||||
selected[book].push(uid);
|
if (settings.modal_amily2_wb_selected_entries === undefined) {
|
||||||
});
|
settings.modal_amily2_wb_selected_entries = {};
|
||||||
settings.amily2_wb_selected_entries = selected;
|
}
|
||||||
saveSettingsDebounced();
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderWorldBookEntries = async () => {
|
const renderWorldBookEntries = async () => {
|
||||||
|
|
||||||
entryListContainer.innerHTML = '<p class="notes">Loading entries...</p>';
|
entryListContainer.innerHTML = '<p class="notes">Loading entries...</p>';
|
||||||
const source = settings.amily2_wb_source || 'character';
|
const source = settings.modal_wbSource || 'character';
|
||||||
let bookNames = [];
|
let bookNames = [];
|
||||||
|
|
||||||
if (source === 'manual') {
|
if (source === 'manual') {
|
||||||
bookNames = settings.amily2_wb_selected_worldbooks || [];
|
bookNames = settings.modal_amily2_wb_selected_worldbooks || [];
|
||||||
} else {
|
} else {
|
||||||
if (this_chid !== undefined && this_chid >= 0 && characters[this_chid]) {
|
if (this_chid !== undefined && this_chid >= 0 && characters[this_chid]) {
|
||||||
try {
|
try {
|
||||||
@@ -189,7 +182,7 @@ function bindAmily2ModalWorldBookSettings() {
|
|||||||
checkbox.dataset.book = entry.bookName;
|
checkbox.dataset.book = entry.bookName;
|
||||||
checkbox.dataset.uid = entry.uid;
|
checkbox.dataset.uid = entry.uid;
|
||||||
|
|
||||||
const isChecked = settings.amily2_wb_selected_entries[entry.bookName]?.includes(String(entry.uid));
|
const isChecked = settings.modal_amily2_wb_selected_entries[entry.bookName]?.includes(String(entry.uid));
|
||||||
checkbox.checked = !!isChecked;
|
checkbox.checked = !!isChecked;
|
||||||
|
|
||||||
const label = document.createElement('label');
|
const label = document.createElement('label');
|
||||||
@@ -224,19 +217,7 @@ function bindAmily2ModalWorldBookSettings() {
|
|||||||
checkbox.style.marginRight = '5px';
|
checkbox.style.marginRight = '5px';
|
||||||
checkbox.id = `amily2-wb-check-${bookName}`;
|
checkbox.id = `amily2-wb-check-${bookName}`;
|
||||||
checkbox.value = bookName;
|
checkbox.value = bookName;
|
||||||
checkbox.checked = settings.amily2_wb_selected_worldbooks.includes(bookName);
|
checkbox.checked = settings.modal_amily2_wb_selected_worldbooks.includes(bookName);
|
||||||
|
|
||||||
checkbox.addEventListener('change', () => {
|
|
||||||
if (checkbox.checked) {
|
|
||||||
if (!settings.amily2_wb_selected_worldbooks.includes(bookName)) {
|
|
||||||
settings.amily2_wb_selected_worldbooks.push(bookName);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
settings.amily2_wb_selected_worldbooks = settings.amily2_wb_selected_worldbooks.filter(name => name !== bookName);
|
|
||||||
}
|
|
||||||
saveSettingsDebounced();
|
|
||||||
renderWorldBookEntries();
|
|
||||||
});
|
|
||||||
|
|
||||||
const label = document.createElement('label');
|
const label = document.createElement('label');
|
||||||
label.htmlFor = `amily2-wb-check-${bookName}`;
|
label.htmlFor = `amily2-wb-check-${bookName}`;
|
||||||
@@ -261,7 +242,7 @@ function bindAmily2ModalWorldBookSettings() {
|
|||||||
optionsContainer.style.display = isEnabled ? 'block' : 'none';
|
optionsContainer.style.display = isEnabled ? 'block' : 'none';
|
||||||
|
|
||||||
if (isEnabled) {
|
if (isEnabled) {
|
||||||
const isManual = settings.amily2_wb_source === 'manual';
|
const isManual = settings.modal_wbSource === 'manual';
|
||||||
manualSelectWrapper.style.display = isManual ? 'block' : 'none';
|
manualSelectWrapper.style.display = isManual ? 'block' : 'none';
|
||||||
renderWorldBookEntries();
|
renderWorldBookEntries();
|
||||||
if (isManual) {
|
if (isManual) {
|
||||||
@@ -271,36 +252,171 @@ function bindAmily2ModalWorldBookSettings() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Initial state setup
|
// Initial state setup
|
||||||
enabledCheckbox.checked = settings.amily2_wb_enabled;
|
enabledCheckbox.checked = settings.modal_wbEnabled ?? false;
|
||||||
|
const source = settings.modal_wbSource ?? 'character';
|
||||||
sourceRadios.forEach(radio => {
|
sourceRadios.forEach(radio => {
|
||||||
radio.checked = radio.value === settings.amily2_wb_source;
|
radio.checked = radio.value === source;
|
||||||
});
|
});
|
||||||
updateVisibility();
|
updateVisibility();
|
||||||
|
|
||||||
// Event Listeners
|
// Event Listeners
|
||||||
enabledCheckbox.addEventListener('change', () => {
|
$(enabledCheckbox).off('change.amily2_wb').on('change.amily2_wb', () => {
|
||||||
settings.amily2_wb_enabled = enabledCheckbox.checked;
|
extension_settings[extensionName].modal_wbEnabled = enabledCheckbox.checked;
|
||||||
saveSettingsDebounced();
|
saveSettingsDebounced();
|
||||||
updateVisibility();
|
updateVisibility();
|
||||||
});
|
});
|
||||||
|
|
||||||
sourceRadios.forEach(radio => {
|
$(sourceRadios).off('change.amily2_wb').on('change.amily2_wb', (event) => {
|
||||||
radio.addEventListener('change', () => {
|
if (event.target.checked) {
|
||||||
if (radio.checked) {
|
extension_settings[extensionName].modal_wbSource = event.target.value;
|
||||||
settings.amily2_wb_source = radio.value;
|
|
||||||
saveSettingsDebounced();
|
saveSettingsDebounced();
|
||||||
updateVisibility();
|
updateVisibility();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(bookListContainer).off('change.amily2_wb').on('change.amily2_wb', (event) => {
|
||||||
|
if (event.target.type === 'checkbox' && event.target.id.startsWith('amily2-wb-check-')) {
|
||||||
|
const checkbox = event.target;
|
||||||
|
const bookName = checkbox.value;
|
||||||
|
|
||||||
|
if (!settings.modal_amily2_wb_selected_worldbooks) {
|
||||||
|
settings.modal_amily2_wb_selected_worldbooks = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checkbox.checked) {
|
||||||
|
if (!settings.modal_amily2_wb_selected_worldbooks.includes(bookName)) {
|
||||||
|
settings.modal_amily2_wb_selected_worldbooks.push(bookName);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const index = settings.modal_amily2_wb_selected_worldbooks.indexOf(bookName);
|
||||||
|
if (index > -1) {
|
||||||
|
settings.modal_amily2_wb_selected_worldbooks.splice(index, 1);
|
||||||
|
}
|
||||||
|
if (settings.modal_amily2_wb_selected_entries) {
|
||||||
|
delete settings.modal_amily2_wb_selected_entries[bookName];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
saveSettingsDebounced();
|
||||||
|
renderWorldBookEntries();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
entryListContainer.addEventListener('change', (event) => {
|
$(entryListContainer).off('change.amily2_wb').on('change.amily2_wb', (event) => {
|
||||||
if (event.target.type === 'checkbox') {
|
if (event.target.type === 'checkbox') {
|
||||||
saveSelectedEntries();
|
const checkbox = event.target;
|
||||||
|
const book = checkbox.dataset.book;
|
||||||
|
const uid = checkbox.dataset.uid;
|
||||||
|
|
||||||
|
if (!settings.modal_amily2_wb_selected_entries) {
|
||||||
|
settings.modal_amily2_wb_selected_entries = {};
|
||||||
}
|
}
|
||||||
|
if (!settings.modal_amily2_wb_selected_entries[book]) {
|
||||||
|
settings.modal_amily2_wb_selected_entries[book] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const entryIndex = settings.modal_amily2_wb_selected_entries[book].indexOf(uid);
|
||||||
|
|
||||||
|
if (checkbox.checked) {
|
||||||
|
if (entryIndex === -1) {
|
||||||
|
settings.modal_amily2_wb_selected_entries[book].push(uid);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entryIndex > -1) {
|
||||||
|
settings.modal_amily2_wb_selected_entries[book].splice(entryIndex, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings.modal_amily2_wb_selected_entries[book].length === 0) {
|
||||||
|
delete settings.modal_amily2_wb_selected_entries[book];
|
||||||
|
}
|
||||||
|
|
||||||
|
saveSettingsDebounced();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Search and Select/Deselect All Logic
|
||||||
|
const bookSearchInput = document.getElementById('amily2_wb_book_search');
|
||||||
|
const bookSelectAllBtn = document.getElementById('amily2_wb_book_select_all');
|
||||||
|
const bookDeselectAllBtn = document.getElementById('amily2_wb_book_deselect_all');
|
||||||
|
const entrySearchInput = document.getElementById('amily2_wb_entry_search');
|
||||||
|
const entrySelectAllBtn = document.getElementById('amily2_wb_entry_select_all');
|
||||||
|
const entryDeselectAllBtn = document.getElementById('amily2_wb_entry_deselect_all');
|
||||||
|
|
||||||
|
bookSearchInput.addEventListener('input', () => {
|
||||||
|
const searchTerm = bookSearchInput.value.toLowerCase();
|
||||||
|
const items = bookListContainer.querySelectorAll('.checkbox-item');
|
||||||
|
items.forEach(item => {
|
||||||
|
const label = item.querySelector('label');
|
||||||
|
if (label.textContent.toLowerCase().includes(searchTerm)) {
|
||||||
|
item.style.display = 'flex';
|
||||||
|
} else {
|
||||||
|
item.style.display = 'none';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
entrySearchInput.addEventListener('input', () => {
|
||||||
|
const searchTerm = entrySearchInput.value.toLowerCase();
|
||||||
|
const items = entryListContainer.querySelectorAll('.checkbox-item');
|
||||||
|
items.forEach(item => {
|
||||||
|
const label = item.querySelector('label');
|
||||||
|
if (label.textContent.toLowerCase().includes(searchTerm)) {
|
||||||
|
item.style.display = 'flex';
|
||||||
|
} else {
|
||||||
|
item.style.display = 'none';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
bookSelectAllBtn.addEventListener('click', () => {
|
||||||
|
const checkboxes = bookListContainer.querySelectorAll('.checkbox-item input[type="checkbox"]');
|
||||||
|
checkboxes.forEach(checkbox => {
|
||||||
|
if (checkbox.parentElement.style.display !== 'none' && !checkbox.checked) {
|
||||||
|
$(checkbox).prop('checked', true).trigger('change');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
bookDeselectAllBtn.addEventListener('click', () => {
|
||||||
|
const checkboxes = bookListContainer.querySelectorAll('.checkbox-item input[type="checkbox"]');
|
||||||
|
checkboxes.forEach(checkbox => {
|
||||||
|
if (checkbox.parentElement.style.display !== 'none' && checkbox.checked) {
|
||||||
|
$(checkbox).prop('checked', false).trigger('change');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
entrySelectAllBtn.addEventListener('click', () => {
|
||||||
|
const checkboxes = entryListContainer.querySelectorAll('.checkbox-item input[type="checkbox"]');
|
||||||
|
checkboxes.forEach(checkbox => {
|
||||||
|
if (checkbox.parentElement.style.display !== 'none' && !checkbox.checked) {
|
||||||
|
$(checkbox).prop('checked', true).trigger('change');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
entryDeselectAllBtn.addEventListener('click', () => {
|
||||||
|
const checkboxes = entryListContainer.querySelectorAll('.checkbox-item input[type="checkbox"]');
|
||||||
|
checkboxes.forEach(checkbox => {
|
||||||
|
if (checkbox.parentElement.style.display !== 'none' && checkbox.checked) {
|
||||||
|
$(checkbox).prop('checked', false).trigger('change');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('[Amily2 Modal] World book settings bound successfully.');
|
console.log('[Amily2 Modal] World book settings bound successfully.');
|
||||||
|
|
||||||
|
document.addEventListener('renderAmily2WorldBook', () => {
|
||||||
|
console.log('[Amily2 Modal] Received render event from state update.');
|
||||||
|
updateVisibility();
|
||||||
|
});
|
||||||
|
|
||||||
|
eventSource.on(event_types.CHAT_CHANGED, () => {
|
||||||
|
console.log('[Amily2 Modal] Chat changed, re-rendering world book entries.');
|
||||||
|
if (document.getElementById('amily2_wb_options_container')?.style.display === 'block') {
|
||||||
|
renderWorldBookEntries();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function bindModalEvents() {
|
export function bindModalEvents() {
|
||||||
@@ -342,7 +458,7 @@ export function bindModalEvents() {
|
|||||||
if (!extension_settings[extensionName]) {
|
if (!extension_settings[extensionName]) {
|
||||||
extension_settings[extensionName] = {};
|
extension_settings[extensionName] = {};
|
||||||
}
|
}
|
||||||
extension_settings[extensionName] = { ...extension_settings[extensionName], [key]: value };
|
extension_settings[extensionName][key] = value;
|
||||||
saveSettingsDebounced();
|
saveSettingsDebounced();
|
||||||
console.log(`[Amily-谕令镌刻] [${key}] 的新状态已保存。`);
|
console.log(`[Amily-谕令镌刻] [${key}] 的新状态已保存。`);
|
||||||
};
|
};
|
||||||
@@ -598,7 +714,7 @@ container
|
|||||||
.off("change.amily2.checkbox")
|
.off("change.amily2.checkbox")
|
||||||
.on(
|
.on(
|
||||||
"change.amily2.checkbox",
|
"change.amily2.checkbox",
|
||||||
'input[type="checkbox"][id^="amily2_"]',
|
'input[type="checkbox"][id^="amily2_"]:not([id^="amily2_wb_enabled"])',
|
||||||
function (event) {
|
function (event) {
|
||||||
if (!pluginAuthStatus.authorized) return;
|
if (!pluginAuthStatus.authorized) return;
|
||||||
|
|
||||||
@@ -666,7 +782,7 @@ container
|
|||||||
.off("change.amily2.radio")
|
.off("change.amily2.radio")
|
||||||
.on(
|
.on(
|
||||||
"change.amily2.radio",
|
"change.amily2.radio",
|
||||||
'input[type="radio"][name^="amily2_"]:not([name="amily2_icon_location"])',
|
'input[type="radio"][name^="amily2_"]:not([name="amily2_icon_location"]):not([name="amily2_wb_source"])',
|
||||||
function () {
|
function () {
|
||||||
if (!pluginAuthStatus.authorized) return;
|
if (!pluginAuthStatus.authorized) return;
|
||||||
const key = snakeToCamel(this.name.replace("amily2_", ""));
|
const key = snakeToCamel(this.name.replace("amily2_", ""));
|
||||||
|
|||||||
Reference in New Issue
Block a user