PageSourceSearch

https://dailyseop.com/assets/bb7cbd258df/shell/home.js

js dailyseop.com collected 2026-10-02 10:50:18 UTC 1,771 bytes, 18 lines download raw bytes

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.