File size: 3,659 Bytes
70023bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import { characters, getCharacters, handleDeleteCharacter, callPopup } from "../../../script.js";

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) {
    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('<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;
    }

    // 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() {
    $("#rm_print_characters_block .character_select").each((i, el) => {
        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);
    });
    $("#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(async () => {
    addButtons();
    // loadSettings();
});