Add an equal, searchable directory of 214 contributors and translate its shared navigation and copy. Complete the Greek website edition (1728/1728 messages), preserving source examples, protected commands and evidence. Publish refreshed contributor snapshots atomically and cover partial writes, denied replacement and staging cleanup with failure regressions. Validation: complete website checks and 16 maintenance tests, strict Greek coverage, desktop/mobile and no-JavaScript journeys, selected PR CI and Greptile follow-up. Codex automated review was unavailable because its quota was exhausted. No analysis-provider behavior or production website publication is included. Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> Assisted-by: Suika (gensokyo-skills:suika-scatter-gather-planning) Assisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing) Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
32 lines
1.1 KiB
JavaScript
32 lines
1.1 KiB
JavaScript
import { t } from "./i18n.js";
|
|
|
|
const search = document.querySelector("[data-contributors-search]");
|
|
const input = document.getElementById("contributor-search");
|
|
const status = document.querySelector("[data-contributors-status]");
|
|
const empty = document.querySelector("[data-contributors-empty]");
|
|
const people = Array.from(document.querySelectorAll("[data-contributor]"));
|
|
|
|
if (search && input && status && empty) {
|
|
function filterContributors() {
|
|
const query = input.value.trim().replace(/^@/, "").toLowerCase();
|
|
let count = 0;
|
|
for (const person of people) {
|
|
const matches = person
|
|
.getAttribute("data-contributor")
|
|
.toLowerCase()
|
|
.includes(query);
|
|
person.hidden = !matches;
|
|
if (matches) count += 1;
|
|
}
|
|
status.textContent = t("Contributors: {count}", {
|
|
count: new Intl.NumberFormat(document.documentElement.lang).format(count),
|
|
});
|
|
empty.hidden = count !== 0;
|
|
}
|
|
|
|
input.addEventListener("input", filterContributors);
|
|
input.addEventListener("search", filterContributors);
|
|
filterContributors();
|
|
search.hidden = false;
|
|
}
|