From 5d7766d5fd3df0204f64eb15f938cb2a459897ad Mon Sep 17 00:00:00 2001 From: Daniel Dada Date: Sat, 22 Nov 2025 05:19:46 +0300 Subject: [PATCH] fix: update badge when textarea text changes --- src/content/HighlightEngine.ts | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/content/HighlightEngine.ts b/src/content/HighlightEngine.ts index 19bb54e..18c018c 100644 --- a/src/content/HighlightEngine.ts +++ b/src/content/HighlightEngine.ts @@ -392,6 +392,49 @@ export class HighlightEngine { closeBtn?.addEventListener('click', () => popup.remove()); }); } + const updateBadge = () => { + const text = input.value; + let matchCount = 0; + pattern.lastIndex = 0; + let match; + while ((match = pattern.exec(text)) !== null) { + matchCount++; + } + const oldBadge = input.parentElement?.querySelector('.goose-highlighter-textarea-badge'); + if (oldBadge) oldBadge.remove(); + if (matchCount > 0) { + const badge = document.createElement('div'); + badge.className = 'goose-highlighter-textarea-badge'; + badge.textContent = matchCount.toString(); + badge.setAttribute('data-round', matchCount > 9 ? 'false' : 'true'); + badge.style.position = 'absolute'; + badge.style.left = '4px'; + badge.style.top = '4px'; + badge.style.zIndex = '10000'; + const parent = input.parentElement; + if (parent && window.getComputedStyle(parent).position === 'static') { + parent.style.position = 'relative'; + } + parent?.appendChild(badge); + badge.addEventListener('click', () => { + document.querySelectorAll('.goose-highlighter-textarea-popup').forEach(p => p.remove()); + const popup = document.createElement('div'); + popup.className = 'goose-highlighter-textarea-popup'; + popup.innerHTML = ` +
+ +
+
${renderHighlighted(text)}
+ `; + document.body.appendChild(popup); + const closeBtn = popup.querySelector('.gh-popup-close'); + closeBtn?.addEventListener('click', () => popup.remove()); + }); + } + }; + updateBadge(); + input.removeEventListener('input', updateBadge); + input.addEventListener('input', updateBadge); } }