From f6c455a9f4b821037e9d782f0a6f19ade1bbe2c9 Mon Sep 17 00:00:00 2001 From: qcrao Date: Sat, 26 Aug 2023 00:00:56 +0800 Subject: [PATCH] refactor add checkbox logic --- .gitignore | 4 ++- addCheckboxes.js | 52 ++++++++++++++++++++------------------ bulkDeleteConversations.js | 2 +- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index cd3c65e..379ee61 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,6 @@ # Dependency directories (remove the comment below to include it) # vendor/ -.DS_Store \ No newline at end of file +.DS_Store + +.idea \ No newline at end of file diff --git a/addCheckboxes.js b/addCheckboxes.js index 1cf69b5..6cf59ba 100644 --- a/addCheckboxes.js +++ b/addCheckboxes.js @@ -1,32 +1,36 @@ +function toggleCheckbox(event) { + // 从标题元素获取其前一个兄弟元素,即复选框 + const checkbox = event.currentTarget.parentElement.querySelector('.conversation-checkbox'); + if (checkbox && checkbox.type === 'checkbox') { + checkbox.checked = !checkbox.checked; + } + event.stopPropagation(); +} + +function preventEventPropagation(event) { + event.stopPropagation(); +} + function addCheckboxes() { - const conversations = document.querySelectorAll('.flex.py-3.px-3.items-center.gap-3.relative.rounded-md'); - - conversations.forEach((conversation, index) => { + const conversationSelectors = '.flex.py-3.px-3.items-center.gap-3.relative.rounded-md'; + const titleSelectors = '.flex-1.text-ellipsis.max-h-5.overflow-hidden.break-all.relative'; + const conversations = document.querySelectorAll(conversationSelectors); + + for (const [index, conversation] of conversations.entries()) { const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.className = 'conversation-checkbox'; checkbox.dataset.index = index; - + conversation.insertAdjacentElement('afterbegin', checkbox); - - // Add click event listener to the conversation title - const titleElement = conversation.querySelector('.flex-1.text-ellipsis.max-h-5.overflow-hidden.break-all.relative'); + + const titleElement = conversation.querySelector(titleSelectors); if (titleElement) { - titleElement.style.cursor = 'default'; // Ensure the cursor is the default arrow pointer - titleElement.addEventListener('click', function(event) { - // Toggle the checkbox state - checkbox.checked = !checkbox.checked; - // Prevent the event from propagating further - event.stopPropagation(); - }); - - // Ensure the checkbox click doesn't trigger the title's click event - checkbox.addEventListener('click', function(event) { - event.stopPropagation(); - }); + titleElement.style.cursor = 'default'; + titleElement.addEventListener('click', toggleCheckbox); + checkbox.addEventListener('click', preventEventPropagation); } - }); - } - - addCheckboxes(); - \ No newline at end of file + } +} + +addCheckboxes(); diff --git a/bulkDeleteConversations.js b/bulkDeleteConversations.js index 95b3492..5c0b40e 100644 --- a/bulkDeleteConversations.js +++ b/bulkDeleteConversations.js @@ -32,7 +32,7 @@ async function bulkDeleteConversations() { conversationElement.click(); // Click the conversation first await new Promise(resolve => setTimeout(resolve, 500)); // Add a delay of 0.5 second - const deleteButton = document.querySelector('.absolute.flex.right-1.z-10.text-gray-300.visible button:nth-child(2)'); // Updated delete button selector + const deleteButton = document.querySelector('.absolute.flex.right-1.z-10.text-gray-300.visible button:nth-child(3)'); // Updated delete button selector if (deleteButton) { console.log("点击删除按钮1...")