Refactor tag editing setup: improve event handler management for edit and save buttons

This commit is contained in:
Will Miao
2025-06-13 05:46:53 +08:00
parent 68fdb14cd6
commit 27ef1f1e71

View File

@@ -13,6 +13,9 @@ const PRESET_TAGS = [
'objects', 'animal' 'objects', 'animal'
]; ];
// Create a named function so we can remove it later
let saveTagsHandler = null;
/** /**
* Set up tag editing mode * Set up tag editing mode
*/ */
@@ -23,7 +26,13 @@ export function setupTagEditMode() {
// Store original tags for restoring on cancel // Store original tags for restoring on cancel
let originalTags = []; let originalTags = [];
editBtn.addEventListener('click', function() { // Remove any previously attached click handler
if (editBtn._hasClickHandler) {
editBtn.removeEventListener('click', editBtn._clickHandler);
}
// Create new handler and store reference
const editBtnClickHandler = function() {
const tagsSection = document.querySelector('.model-tags-container'); const tagsSection = document.querySelector('.model-tags-container');
const isEditMode = tagsSection.classList.toggle('edit-mode'); const isEditMode = tagsSection.classList.toggle('edit-mode');
const filePath = this.dataset.filePath; const filePath = this.dataset.filePath;
@@ -103,15 +112,28 @@ export function setupTagEditMode() {
delete this.dataset.skipRestore; delete this.dataset.skipRestore;
} }
} }
}); };
// Set up save button // Store the handler reference on the button itself
document.addEventListener('click', function(e) { editBtn._clickHandler = editBtnClickHandler;
editBtn._hasClickHandler = true;
editBtn.addEventListener('click', editBtnClickHandler);
// Clean up any previous document click handler
if (saveTagsHandler) {
document.removeEventListener('click', saveTagsHandler);
}
// Create new save handler and store reference
saveTagsHandler = function(e) {
if (e.target.classList.contains('save-tags-btn') || if (e.target.classList.contains('save-tags-btn') ||
e.target.closest('.save-tags-btn')) { e.target.closest('.save-tags-btn')) {
saveTags(); saveTags();
} }
}); };
// Add the new handler
document.addEventListener('click', saveTagsHandler);
} }
/** /**