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/ParkMap.astro | 10 ++++++++++ src/components/ParkMapHelp.astro | 5 +++++ src/components/ParksFilters.astro | 4 ++++ src/components/ParksTable.astro | 35 +++++++++++++++++++++++++++++++++-- 4 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/components/ParkMap.astro b/src/components/ParkMap.astro index 1a70ce2..3cccc7c 100644 --- a/src/components/ParkMap.astro +++ b/src/components/ParkMap.astro @@ -267,6 +267,11 @@ border: 1px solid #8e0000; border-radius: 50%; } + :global(.park-fac-unconfirmed) { + background: #616161; + border: 1px solid #212121; + border-radius: 50%; + } :global(.park-fac svg) { display: block; } @@ -935,6 +940,11 @@ '消', ); } + if ((p["備考"] || "").includes("未確認")) { + icons.push( + '?', + ); + } if (!icons.length) return; const center = centerOfLayer(lyr); L.marker([center.lat, center.lng], { diff --git a/src/components/ParkMapHelp.astro b/src/components/ParkMapHelp.astro index 7a545ee..5703b8c 100644 --- a/src/components/ParkMapHelp.astro +++ b/src/components/ParkMapHelp.astro @@ -18,6 +18,7 @@ ⏰時計(拡大時) 消消火栓(拡大時) 槽防火水槽(拡大時) + ?情報未確認(拡大時)

@@ -111,6 +112,10 @@ background: #1565c0; border-radius: 4px; } + .swatch-fac-unconfirmed { + background: #616161; + border-radius: 50%; + } .park-map-note { margin-top: 0.4rem; color: var(--sl-color-gray-2); diff --git a/src/components/ParksFilters.astro b/src/components/ParksFilters.astro index 8ee5d51..6ef52b5 100644 --- a/src/components/ParksFilters.astro +++ b/src/components/ParksFilters.astro @@ -40,6 +40,10 @@ const facilityTypes = [ キーワード +

設備・遊具で絞る 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