From 50ea018252ce69542eab6a107b99ea8179810d1e Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Fri, 11 Apr 2025 16:33:59 +0200 Subject: refactor: introduce lex-serve package --- assets/logo.svg | 1 - assets/script.js | 56 -------------------------------------------------------- assets/style.css | 40 ---------------------------------------- 3 files changed, 97 deletions(-) delete mode 100644 assets/logo.svg delete mode 100644 assets/script.js delete mode 100644 assets/style.css (limited to 'assets') diff --git a/assets/logo.svg b/assets/logo.svg deleted file mode 100644 index 45de364..0000000 --- a/assets/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/script.js b/assets/script.js deleted file mode 100644 index 95b8393..0000000 --- a/assets/script.js +++ /dev/null @@ -1,56 +0,0 @@ -const searchInput = document.getElementById('search'); -const suggestionsDiv = document.getElementById('suggestions'); - -async function enableAutocomplete() { - const res = await fetch('/laws.json'); - const laws = await res.json(); - // TODO: strip accents before searching - - searchInput.addEventListener('input', (e) => { - if (searchInput.value == '') { - suggestionsDiv.innerHTML = ''; - return; - } - - const titleRegex = new RegExp(searchInput.value, 'i'); - const abbrRegex = new RegExp('^' + searchInput.value, 'i'); - const suggestions = []; - - laws.map(l => { - const titleMatch = titleRegex.exec(l.title); - const abbrMatch = abbrRegex.exec(l.abbr); - - return { - law: l, - titleScore: titleMatch ? titleMatch.index : Number.MAX_VALUE, - abbrScore: abbrMatch ? abbrMatch.index: Number.MAX_VALUE, - } - }) - .filter(l => l.titleScore < Number.MAX_VALUE || l.abbrScore < Number.MAX_VALUE) - .sort((a,b) => { - let abbrDiff = a.abbrScore - b.abbrScore; - if (a.law.abbr && b.law.abbr && abbrDiff == 0 && a.abbrScore != Number.MAX_VALUE) { - abbrDiff = a.law.abbr.length - b.law.abbr.length; - } - return abbrDiff || a.titleScore - b.titleScore; - }) - .slice(0, 30) - .forEach(x => { - const l = x.law; - const a = document.createElement('a'); - if (l.redir) - a.href = '/' + l.redir; - else - a.href = l.url; - a.textContent = l.title; - const li = document.createElement('li'); - li.appendChild(a); - suggestions.push(li); - }); - - suggestionsDiv.replaceChildren(...suggestions); - }); -} - -if ('json' in searchInput.dataset) - enableAutocomplete(); \ No newline at end of file diff --git a/assets/style.css b/assets/style.css deleted file mode 100644 index 3b064c2..0000000 --- a/assets/style.css +++ /dev/null @@ -1,40 +0,0 @@ -body { - font-family: Roboto, Helvetica, Arial, sans-serif; - max-width: 500px; - margin: 0.5em auto; - text-align: center; -} - -.countries { - text-align: left; - border: 1px solid #ccc; - border-radius: 5px; - - display: grid; - grid-template-columns: repeat(auto-fit, minmax(50px, 1fr)); -} - -.cc-link { - display: inline-block; - line-height: 50px; - text-align: center; - color: inherit; - text-decoration: navajowhite; - font-size: 1.2em; - border: 2px solid transparent; - box-sizing: border-box; -} - -.cc-link:hover { - background: #e6f3ff; - border-radius: 5px; -} - -h2 { - font-weight: normal; - margin-top: 0.5em; -} - -#suggestions { - text-align: left; -} \ No newline at end of file -- cgit v1.2.3