aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/components/ParksTable.astro
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/ParksTable.astro')
-rw-r--r--src/components/ParksTable.astro35
1 files changed, 33 insertions, 2 deletions
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("未確認")
+ );
+}
---
<div class="parks" data-parks>
@@ -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}
>
<td class="is-name" data-label="名称">
{mappedNames.has(park["公園名"]) ? (
@@ -291,6 +303,9 @@ function searchIndex(p: Park): string {
{park["状態"] === "閉鎖" ? (
<span class="parks-status" title="閉鎖中">閉鎖</span>
) : null}
+ {isUnconfirmed(park) ? (
+ <span class="parks-status parks-unconfirmed" title="名称・住所などが未確認です">未確認</span>
+ ) : null}
{park["設置者"] && park["設置者"] !== "小平市" ? (
<span
class:list={["parks-owner", ownerClass(park["設置者"])]}
@@ -519,6 +534,11 @@ function searchIndex(p: Park): string {
vertical-align: 0.08em;
white-space: nowrap;
}
+ .parks-unconfirmed {
+ border-color: #bdbdbd;
+ background: #f5f5f5;
+ color: #424242;
+ }
.park-name-link {
display: inline-block;
max-width: 100%;
@@ -689,6 +709,9 @@ function searchIndex(p: Park): string {
const checks = Array.from(
document.querySelectorAll<HTMLInputElement>("[data-fac-filter]"),
);
+ const unconfirmedBox = document.querySelector<HTMLInputElement>(
+ "[data-parks-unconfirmed]",
+ );
const sortButtons = Array.from(root.querySelectorAll<HTMLButtonElement>("[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) => {