1/* í ê²ì = ê³µê° ë구 ì¹´ëì ëí í´ë¼ì´ì¸í¸ íí°. ê²ìì´ë¥¼ ìë²ì ë³´ë´ì§ ìê³ URL ì ë£ì§ ìëë¤. */ 2const q = document.getElementById('ds-find'); if (q) { 3 const cards = Array.from(document.querySelectorAll('#ds-all .card, #ds-quick .card')); 4 const idx = cards.map((c) => ({ c, k: (c.textContent + ' ' + (c.className.match(/cat-(\w+)/) || ['', ''])[1]).toLowerCase().replace(/\s+/g, '') })); 5 const SYN = { 'ì¬ì§': 'ì´ë¯¸ì§', 'jpg': 'ì´ë¯¸ì§', 'png': 'ì´ë¯¸ì§', 'heic': 'heic', 'ì©ë': 'ì©ë', 'ìì¶': 'ì©ë', '리ì¬ì´ì¦': 'í¬ê¸°', 'í©ì¹ê¸°': 'í©ì¹', 'ë¶í ': 'ëë', 'ëë기': 'ëë', 'ë³í': 'ë³í', 'íì': 'qr', 'qr': 'qr', 'ìë§': 'ìë§', 'txt': 'í ì¤í¸', 'ìë': 'í ì¤í¸', 'ì´ë¦': 'íì¼ëª ', 'ìì´ì½': 'íë¹ì½', 'exif': 'ìì¹ì ë³´', 'ìì¹': 'ìì¹ì ë³´', 'ìí¸': 'ë¹ë°ë²í¸' }; 6 const none = document.getElementById('ds-find-none'); const quick = document.getElementById('quick'); 7 const apply = () => { 8 let v = q.value.trim().toLowerCase().replace(/\s+/g, ''); if (v && SYN[v]) v = SYN[v]; 9 const terms = v ? [v] : []; for (const k in SYN) if (v.includes(k) && !terms.includes(SYN[k])) terms.push(SYN[k]); 10 let hits = 0; 11 for (const it of idx) { const show = !v || terms.some((t) => it.k.includes(t)); it.c.classList.toggle('hide', !show); if (show && it.c.closest('#ds-all')) hits++; } 12 if (none) none.hidden = !(v && hits === 0); 13 if (quick) quick.hidden = !!v; 14 const h = document.querySelector('#all h2'); if (h) h.textContent = v ? `ê²ì ê²°ê³¼ ${hits}ê°` : 'ì ì²´ ë구'; 15 }; 16 q.addEventListener('input', apply); if (q.value) apply(); 17 q.form && q.form.addEventListener('submit', (e) => e.preventDefault()); 18}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.