2023-08-04 13:41:00 +02:00
import { characters , getCharacters , handleDeleteCharacter , callPopup } from "../../../script.js" ;
2023-08-03 06:15:09 +02:00
let is _bulk _edit = false ;
/ * *
* Toggles bulk edit mode on / off when the edit button is clicked .
* /
function onEditButtonClick ( ) {
console . log ( "Edit button clicked" ) ;
// toggle bulk edit mode
if ( is _bulk _edit ) {
disableBulkSelect ( ) ;
// hide the delete button
$ ( "#bulkDeleteButton" ) . hide ( ) ;
is _bulk _edit = false ;
} else {
enableBulkSelect ( ) ;
// show the delete button
$ ( "#bulkDeleteButton" ) . show ( ) ;
is _bulk _edit = true ;
}
}
/ * *
* Deletes the character with the given chid .
*
* @ param { string } this _chid - The chid of the character to delete .
* /
async function deleteCharacter ( this _chid ) {
2023-08-04 13:41:00 +02:00
await handleDeleteCharacter ( "del_ch" , this _chid , false ) ;
2023-08-03 06:15:09 +02:00
}
/ * *
* 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 ) ;
} ) ;
2023-08-04 13:41:00 +02:00
const confirm = await callPopup ( '<h3>Are you sure you want to delete these characters?</h3>You would need to delete the chat files manually.<br>' , 'confirm' ) ;
if ( ! confirm ) {
console . log ( 'User cancelled delete' ) ;
return ;
}
2023-08-03 06:15:09 +02:00
// 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 ) ;
}
}
/ * *
* Adds the bulk edit and delete buttons to the UI .
* /
function addButtons ( ) {
const editButton = $ (
"<i id='bulkEditButton' class='fa-solid fa-edit menu_button bulkEditButton' title='Bulk edit characters'></i>"
) ;
const deleteButton = $ (
"<i id='bulkDeleteButton' class='fa-solid fa-trash menu_button bulkDeleteButton' title='Bulk delete characters' style='display: none;'></i>"
) ;
$ ( "#charListGridToggle" ) . after ( editButton , deleteButton ) ;
$ ( "#bulkEditButton" ) . on ( "click" , onEditButtonClick ) ;
$ ( "#bulkDeleteButton" ) . on ( "click" , onDeleteButtonClick ) ;
}
/ * *
* Enables bulk selection by adding a checkbox next to each character .
* /
function enableBulkSelect ( ) {
2023-08-04 13:41:00 +02:00
$ ( "#rm_print_characters_block .character_select" ) . each ( ( i , el ) => {
2023-08-03 06:15:09 +02:00
const character = $ ( el ) . text ( ) ;
const checkbox = $ ( "<input type='checkbox' class='bulk_select_checkbox'>" ) ;
checkbox . on ( "change" , ( ) => {
// Do something when the checkbox is changed
} ) ;
$ ( el ) . prepend ( checkbox ) ;
} ) ;
2023-08-04 13:41:00 +02:00
$ ( "#rm_print_characters_block" ) . addClass ( "bulk_select" ) ;
2023-08-03 06:15:09 +02:00
// 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 ( ) ;
2023-08-04 13:41:00 +02:00
$ ( "#rm_print_characters_block" ) . removeClass ( "bulk_select" ) ;
2023-08-03 06:15:09 +02:00
}
/ * *
* Entry point that runs on page load .
* /
jQuery ( async ( ) => {
addButtons ( ) ;
2023-08-03 18:30:19 +02:00
// loadSettings();
2023-08-03 06:15:09 +02:00
} ) ;