import { characters, getCharacters, handleDeleteCharacter, callPopup } from '../script.js'; import { BulkEditOverlay, BulkEditOverlayState } from './BulkEditOverlay.js'; let is_bulk_edit = false; const enableBulkEdit = () => { enableBulkSelect(); (new BulkEditOverlay()).selectState(); // show the delete button $('#bulkDeleteButton').show(); is_bulk_edit = true; }; const disableBulkEdit = () => { disableBulkSelect(); (new BulkEditOverlay()).browseState(); // hide the delete button $('#bulkDeleteButton').hide(); is_bulk_edit = false; }; const toggleBulkEditMode = (isBulkEdit) => { if (isBulkEdit) { disableBulkEdit(); } else { enableBulkEdit(); } }; (new BulkEditOverlay()).addStateChangeCallback((state) => { if (state === BulkEditOverlayState.select) enableBulkEdit(); if (state === BulkEditOverlayState.browse) disableBulkEdit(); }); /** * Toggles bulk edit mode on/off when the edit button is clicked. */ function onEditButtonClick() { console.log('Edit button clicked'); toggleBulkEditMode(is_bulk_edit); } /** * Deletes the character with the given chid. * * @param {string} this_chid - The chid of the character to delete. */ async function deleteCharacter(this_chid) { await handleDeleteCharacter('del_ch', this_chid, false); } /** * Deletes all characters that have been selected via the bulk checkboxes. */ async function onDeleteButtonClick() { console.log('Delete button clicked'); // Create a mapping of chid to avatar let toDelete = []; $('.bulk_select_checkbox:checked').each((i, el) => { const chid = $(el).parent().attr('chid'); const avatar = characters[chid].avatar; // Add the avatar to the list of avatars to delete toDelete.push(avatar); }); const confirm = await callPopup('

Are you sure you want to delete these characters?

You would need to delete the chat files manually.
', 'confirm'); if (!confirm) { console.log('User cancelled delete'); return; } // Delete the characters for (const avatar of toDelete) { console.log(`Deleting character with avatar ${avatar}`); await getCharacters(); //chid should be the key of the character with the given avatar const chid = Object.keys(characters).find((key) => characters[key].avatar === avatar); console.log(`Deleting character with chid ${chid}`); await deleteCharacter(chid); } } /** * Enables bulk selection by adding a checkbox next to each character. */ function enableBulkSelect() { $('#rm_print_characters_block .character_select').each((i, el) => { const checkbox = $(''); checkbox.on('change', () => { // Do something when the checkbox is changed }); $(el).prepend(checkbox); }); $('#rm_print_characters_block').addClass('bulk_select'); // We also need to disable the default click event for the character_select divs $(document).on('click', '.bulk_select_checkbox', function (event) { event.stopImmediatePropagation(); }); } /** * Disables bulk selection by removing the checkboxes. */ function disableBulkSelect() { $('.bulk_select_checkbox').remove(); $('#rm_print_characters_block').removeClass('bulk_select'); } /** * Entry point that runs on page load. */ jQuery(() => { $('#bulkEditButton').on('click', onEditButtonClick); $('#bulkDeleteButton').on('click', onDeleteButtonClick); });