fix(trigger-words): edit tag on double click

This commit is contained in:
Will Miao
2026-04-21 22:31:56 +08:00
parent 3c8acdb65e
commit 7fa40023b0
3 changed files with 113 additions and 6 deletions

View File

@@ -49,7 +49,7 @@ describe("TriggerWords HTML Escaping", () => {
expect(html).toContain('data-word="word'with'quotes"');
expect(html).toContain('data-word="<tag>"');
// Check for the onclick handler
expect(html).toContain('onclick="copyTriggerWord(this.dataset.word)"');
// Copy/edit handlers are attached by setupTriggerWordsEditMode, not inline HTML.
expect(html).not.toContain('onclick="copyTriggerWord');
});
});

View File

@@ -29,6 +29,7 @@ describe("TriggerWords inline editing", () => {
let renderTriggerWords;
let setupTriggerWordsEditMode;
let showToast;
let copyToClipboard;
beforeEach(async () => {
document.body.innerHTML = '';
@@ -46,6 +47,7 @@ describe("TriggerWords inline editing", () => {
renderTriggerWords = module.renderTriggerWords;
setupTriggerWordsEditMode = module.setupTriggerWordsEditMode;
showToast = uiHelpers.showToast;
copyToClipboard = uiHelpers.copyToClipboard;
});
async function enterEditMode(words = ["alpha", "beta"]) {
@@ -81,6 +83,24 @@ describe("TriggerWords inline editing", () => {
expect(document.querySelector('.trigger-word-edit-input')).toBeNull();
});
it("enters edit mode and edits the double-clicked tag from display mode without copying", async () => {
document.body.innerHTML = renderTriggerWords(["alpha", "beta"], "test.safetensors");
setupTriggerWordsEditMode();
const firstTag = document.querySelector('.trigger-word-tag');
firstTag.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
firstTag.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
firstTag.dispatchEvent(new MouseEvent('dblclick', { bubbles: true, cancelable: true }));
await vi.waitFor(() => {
expect(document.querySelector('.trigger-words').classList.contains('edit-mode')).toBe(true);
expect(firstTag.querySelector('.trigger-word-edit-input')).toBeTruthy();
});
await new Promise(resolve => setTimeout(resolve, 260));
expect(copyToClipboard).not.toHaveBeenCalled();
});
it("keeps the original word and shows a toast when editing to a duplicate", async () => {
await enterEditMode();