From 80b0b267053b3f3b19ddc04f69ac25c706c5db11 Mon Sep 17 00:00:00 2001
From: Yasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>
Date: Tue, 3 Nov 2026 23:51:31 +0900
Subject: parks: 未確認の公園を絞り込み・表示できるように
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
「未確認のみ」フィルタ、名称横の「未確認」バッジ、地図上の「?」バッジと凡例を追加した。
---
src/components/ParksTable.astro | 35 +++++++++++++++++++++++++++++++++--
1 file changed, 33 insertions(+), 2 deletions(-)
(limited to 'src/components/ParksTable.astro')
diff --git a/src/components/ParksTable.astro b/src/components/ParksTable.astro
index 03aacb3..f2f9748 100644
--- a/src/components/ParksTable.astro
+++ b/src/components/ParksTable.astro
@@ -227,6 +227,17 @@ function searchIndex(p: Park): string {
.join(" ")
.toLowerCase();
}
+
+// 名称・住所などが未確認の公園
+function isUnconfirmed(p: Park): boolean {
+ if (p["施設"] === "1") return false;
+ return (
+ (p["備考"] || "").includes("未確認") ||
+ (p["住所"] || "").includes("未確認") ||
+ (p["状態"] || "").includes("未確認") ||
+ (p["公園名"] || "").includes("未確認")
+ );
+}
---
@@ -267,6 +278,7 @@ function searchIndex(p: Park): string {
data-name={park["公園名"]}
data-fac={facTokens(park)}
data-search={searchIndex(park)}
+ data-unconfirmed={isUnconfirmed(park) ? "1" : undefined}
>
{mappedNames.has(park["公園名"]) ? (
@@ -291,6 +303,9 @@ function searchIndex(p: Park): string {
{park["状態"] === "閉鎖" ? (
閉鎖
) : null}
+ {isUnconfirmed(park) ? (
+ 未確認
+ ) : null}
{park["設置者"] && park["設置者"] !== "小平市" ? (
("[data-fac-filter]"),
);
+ const unconfirmedBox = document.querySelector(
+ "[data-parks-unconfirmed]",
+ );
const sortButtons = Array.from(root.querySelectorAll("[data-sort]"));
if (!tbody) return;
@@ -716,6 +739,7 @@ function searchIndex(p: Park): string {
const town = select ? select.value : "";
const query = search ? search.value.trim().toLowerCase() : "";
const wanted = checks.filter((c) => c.checked).map((c) => c.value);
+ const onlyUnconfirmed = Boolean(unconfirmedBox?.checked);
let shown = 0;
allRows().forEach((row) => {
const facs = (row.dataset.fac || "").split(" ");
@@ -724,7 +748,8 @@ function searchIndex(p: Park): string {
const okText = !query || (row.dataset.search || "").includes(query);
const okFac = wanted.every((token) => facs.includes(token));
const okSelected = !selectedName || row.dataset.name === selectedName;
- const ok = okKind && okTown && okText && okFac && okSelected;
+ const okUnconfirmed = !onlyUnconfirmed || row.dataset.unconfirmed === "1";
+ const ok = okKind && okTown && okText && okFac && okSelected && okUnconfirmed;
row.classList.toggle("is-hidden", !ok);
if (ok) shown += 1;
});
@@ -740,7 +765,9 @@ function searchIndex(p: Park): string {
new CustomEvent("park:filter", {
detail: {
names: visibleNames,
- active: Boolean(kind || town || query || wanted.length || selectedName),
+ active: Boolean(
+ kind || town || query || wanted.length || selectedName || onlyUnconfirmed,
+ ),
fromMap,
},
}),
@@ -790,6 +817,10 @@ function searchIndex(p: Park): string {
applyFilter();
}),
);
+ unconfirmedBox?.addEventListener("change", () => {
+ clearSelected();
+ applyFilter();
+ });
// 地図のポリゴンクリックなどから、公園名で1件だけ絞り込む。
document.addEventListener("park:filter-name", (e: Event) => {
--
cgit v1.3.1
|