Spaces:
Paused
Paused
| 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 = $('<input type=\'checkbox\' class=\'bulk_select_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); | |
| } | |