Catch and wrap new tags dropdowns inside fancy tags editor

This commit is contained in:
koloml committed 2024-11-12 14:19:53 +04:00
1 parent e83d70fbd9
commit 5092dc7f6d
2 files changed
+37 -1

No files matched your search

+34
View File
@@ -1,6 +1,9 @@
import {BaseComponent} from "$lib/components/base/BaseComponent.js";
import MaintenanceProfile from "$entities/MaintenanceProfile.js";
import MaintenanceSettings from "$lib/extension/settings/MaintenanceSettings.js";
import {getComponent} from "$lib/components/base/ComponentUtils.js";
const isTagEditorProcessedKey = Symbol();
class TagDropdownWrapper extends BaseComponent {
/**
@@ -187,5 +190,36 @@ class TagDropdownWrapper extends BaseComponent {
}
export function wrapTagDropdown(element) {
// Skip initialization when tag component is already wrapped
if (getComponent(element)) {
return;
}
new TagDropdownWrapper(element).initialize();
}
export function watchTagDropdownsInTagsEditor() {
document.body.addEventListener('mouseover', event => {
/** @type {HTMLElement} */
const targetElement = event.target;
if (targetElement[isTagEditorProcessedKey]) {
return;
}
/** @type {HTMLElement|null} */
const closestTagEditor = targetElement.closest('#image_tags_and_source');
if (!closestTagEditor || closestTagEditor[isTagEditorProcessedKey]) {
targetElement[isTagEditorProcessedKey] = true;
return;
}
targetElement[isTagEditorProcessedKey] = true;
closestTagEditor[isTagEditorProcessedKey] = true;
for (const tagDropdownElement of closestTagEditor.querySelectorAll('.tag.dropdown')) {
wrapTagDropdown(tagDropdownElement);
}
})
}