import { characterGroupOverlay } from '../script.js'; import { BulkEditOverlay, BulkEditOverlayState } from './BulkEditOverlay.js'; let is_bulk_edit = false; const enableBulkEdit = () => { enableBulkSelect(); characterGroupOverlay.selectState(); // show the bulk edit option buttons $('.bulkEditOptionElement').show(); is_bulk_edit = true; characterGroupOverlay.updateSelectedCount(0); }; const disableBulkEdit = () => { disableBulkSelect(); characterGroupOverlay.browseState(); // hide the bulk edit option buttons $('.bulkEditOptionElement').hide(); is_bulk_edit = false; characterGroupOverlay.updateSelectedCount(0); }; const toggleBulkEditMode = (isBulkEdit) => { if (isBulkEdit) { disableBulkEdit(); } else { enableBulkEdit(); } }; /** * Toggles bulk edit mode on/off when the edit button is clicked. */ function onEditButtonClick() { console.log('Edit button clicked'); toggleBulkEditMode(is_bulk_edit); } /** * Toggles the select state of all characters in bulk edit mode to selected. If all are selected, they'll be deselected. */ function onSelectAllButtonClick() { console.log('Bulk select all button clicked'); const characters = Array.from(document.querySelectorAll('#' + BulkEditOverlay.containerId + ' .' + BulkEditOverlay.characterClass)); let atLeastOneSelected = false; for (const character of characters) { const checked = $(character).find('.bulk_select_checkbox:checked').length > 0; if (!checked && character instanceof HTMLElement) { characterGroupOverlay.toggleSingleCharacter(character); atLeastOneSelected = true; } } if (!atLeastOneSelected) { // If none was selected, trigger click on all to deselect all of them for(const character of characters) { const checked = $(character).find('.bulk_select_checkbox:checked') ?? false; if (checked && character instanceof HTMLElement) { characterGroupOverlay.toggleSingleCharacter(character); } } } } /** * Deletes all characters that have been selected via the bulk checkboxes. */ async function onDeleteButtonClick() { console.log('Delete button clicked'); // We just let the button trigger the context menu delete option await characterGroupOverlay.handleContextMenuDelete(); } /** * Enables bulk selection by adding a checkbox next to each character. */ function enableBulkSelect() { $('#rm_print_characters_block .character_select').each((i, el) => { // Prevent checkbox from adding multiple times (because of stage change callback) if ($(el).find('.bulk_select_checkbox').length > 0) { return; } const checkbox = $(''); checkbox.on('change', () => { // Do something when the checkbox is changed }); $(el).prepend(checkbox); }); $('#rm_print_characters_block.group_overlay_mode_select .bogus_folder_select, #rm_print_characters_block.group_overlay_mode_select .group_select') .addClass('disabled'); $('#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.group_overlay_mode_select .bogus_folder_select, #rm_print_characters_block.group_overlay_mode_select .group_select') .removeClass('disabled'); $('#rm_print_characters_block').removeClass('bulk_select'); } /** * Entry point that runs on page load. */ export function initBulkEdit() { characterGroupOverlay.addStateChangeCallback((state) => { if (state === BulkEditOverlayState.select) enableBulkEdit(); if (state === BulkEditOverlayState.browse) disableBulkEdit(); }); $('#bulkEditButton').on('click', onEditButtonClick); $('#bulkSelectAllButton').on('click', onSelectAllButtonClick); $('#bulkDeleteButton').on('click', onDeleteButtonClick); }