From 70a77e189a09d180fd42d5f0cdceb7e0cbd903ce Mon Sep 17 00:00:00 2001
From: Yasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>
Date: Sat, 7 Nov 2026 13:17:22 +0900
Subject: kodaira-parks.json:
「テーブル」を「野外卓」に改名し、フィルタとアイコンを更新
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 草地広場フィルタは草地広場のみを対象にし、「野外卓/縁台」を追加
- 市内・周辺公園データと編集画面の「テーブル」を「野外卓」に統一
- じゃぶじゃぶ池を水色の水滴+波紋アイコンに変更
- 野外卓はキャンプテーブル、ペットは犬のアイコンに変更
- フィルタ時に非該当の公園ポリゴンを消さず点滅表示を維持
---
src/components/ParkMap.astro | 67 +++++++++++++++++++++------------
src/components/ParksFilters.astro | 4 ++
src/components/ParksTable.astro | 19 +++-------
src/content/docs/kodaira-data/parks.mdx | 4 +-
src/data/kodaira-nearby-parks.json | 2 +-
src/data/kodaira-parks.json | 2 +-
src/data/park-icons.ts | 6 ++-
src/data/parks-rows.ts | 4 +-
8 files changed, 62 insertions(+), 46 deletions(-)
(limited to 'src')
diff --git a/src/components/ParkMap.astro b/src/components/ParkMap.astro
index b7ac130..a0a26e6 100644
--- a/src/components/ParkMap.astro
+++ b/src/components/ParkMap.astro
@@ -132,20 +132,20 @@
align-items: center;
justify-content: center;
box-sizing: border-box;
- width: 16px;
- height: 16px;
+ width: 18px;
+ height: 18px;
border: 1px solid #c8e6c9;
border-radius: 4px;
background: #e8f5e9;
color: #2e7d32;
- font-size: 10px;
+ font-size: 11px;
font-weight: 700;
line-height: 1;
}
:global(.park-popup-ico svg) {
display: block;
- width: 12px;
- height: 12px;
+ width: 14px;
+ height: 14px;
}
:global(.park-popup-ico-water) {
border-color: #90caf9;
@@ -160,7 +160,12 @@
:global(.park-popup-ico-pond) {
border-color: #81d4fa;
background: #e1f5fe;
- color: #0277bd;
+ color: #29b6f6;
+ }
+ :global(.park-popup-ico-pet) {
+ border-color: #ffcc80;
+ background: #fff3e0;
+ color: #ef6c00;
}
:global(.park-popup-meta) {
margin-top: 0.1rem;
@@ -630,7 +635,7 @@
color: #f9a825;
}
:global(.park-play-pond) {
- color: #0277bd;
+ color: #29b6f6;
}
:global(.park-play-rope) {
color: #00838f;
@@ -1071,8 +1076,18 @@
.filter((s) => DISASTER_KEEP.test(s))
.join("、");
const waterRaw = String(rec?.["水飲み場"] || "").trim();
- // 水飲み場は数量ではなく有無だけを示す。
- const water = waterRaw ? (/[??]/.test(waterRaw) ? "あり?" : "あり") : "なし";
+ // 水飲み場は数量ではなく有無だけを、分かるように表示する。
+ const water = waterRaw
+ ? /[??]/.test(waterRaw)
+ ? "水飲み場あり?"
+ : "水飲み場あり"
+ : "水飲み場なし";
+ // ○/〇 などの表記は「〜あり」にして意味が分かるようにする。
+ const presence = (label: string, value: unknown) => {
+ const v = String(value ?? "").trim();
+ if (!v) return "";
+ return /^[○〇◯あり有1]+$/.test(v) ? `${label}あり` : v;
+ };
// ボール遊びは、試合形式の可否を括弧書きで添える。
const ballText = String(rec?.["ボール遊び"] || "").trim();
const matchText = String(rec?.["試合形式のボール遊び"] || "").trim();
@@ -1084,14 +1099,14 @@
トイレ: "便",
水飲み場: WATER_DROP_ICON,
"ベンチ・椅子": PARK_ICONS.bench.svg,
- テーブル: "台",
+ 野外卓: PARK_ICONS.picnic.svg,
"シェルター等": "屋",
草地広場: "草",
多目的広場: "広",
- 築山: "山",
+ 築山: PARK_ICONS.mountain.svg,
じゃぶじゃぶ池: PARK_ICONS.pond.svg,
- ボール遊び: "球",
- ペット: "犬",
+ ボール遊び: PARK_ICONS.ball.svg,
+ ペット: PARK_ICONS.dog.svg,
時計: "時",
防災用具: "災",
};
@@ -1100,15 +1115,15 @@
["トイレ", rec?.["トイレ"]],
["水飲み場", water],
["ベンチ・椅子", rec?.["ベンチ・椅子"]],
- ["テーブル", rec?.["テーブル"]],
+ ["野外卓", rec?.["野外卓"]],
["シェルター等", rec?.["シェルター等"]],
- ["草地広場", rec?.["草地広場"]],
- ["多目的広場", rec?.["多目的広場"]],
- ["築山", rec?.["築山"]],
- ["じゃぶじゃぶ池", rec?.["じゃぶじゃぶ池"]],
+ ["草地広場", presence("草地広場", rec?.["草地広場"])],
+ ["多目的広場", presence("多目的広場", rec?.["多目的広場"])],
+ ["築山", presence("築山", rec?.["築山"])],
+ ["じゃぶじゃぶ池", presence("じゃぶじゃぶ池", rec?.["じゃぶじゃぶ池"])],
["ボール遊び", ball],
["ペット", rec?.["ペット"]],
- ["時計", rec?.["時計"]],
+ ["時計", presence("時計", rec?.["時計"])],
["防災用具", disaster],
].filter(([, value]) => value && String(value).trim());
const detailHtml = rows
@@ -1121,7 +1136,9 @@
? "park-popup-ico park-popup-ico-bench"
: labelText === "じゃぶじゃぶ池"
? "park-popup-ico park-popup-ico-pond"
- : "park-popup-ico";
+ : labelText === "ペット"
+ ? "park-popup-ico park-popup-ico-pet"
+ : "park-popup-ico";
return `
`;
})
.join("");
@@ -1879,7 +1896,7 @@
} else {
lyr.setStyle(name ? MATCHED_STYLE : UNMATCHED_STYLE);
markSelected(lyr, false);
- markBlink(lyr, false);
+ markBlink(lyr, true);
}
});
nearbyEntries.forEach(({ name, layer: lyr }) => {
@@ -1909,9 +1926,10 @@
markBlink(lyr, false);
lyr.bringToFront?.();
} else {
- lyr.setStyle(DIM_STYLE);
+ // 該当しない公園も「すべて」のときと同じ点滅表示のままにする。
+ lyr.setStyle(name ? MATCHED_STYLE : UNMATCHED_STYLE);
markSelected(lyr, false);
- markBlink(lyr, false);
+ markBlink(lyr, true);
}
});
@@ -1927,8 +1945,9 @@
markSelected(lyr, true);
lyr.bringToFront?.();
} else {
- lyr.setStyle(NEARBY_DIM_STYLE);
+ lyr.setStyle(nearbyBaseStyle(lyr));
markSelected(lyr, false);
+ markBlink(lyr, true);
}
});
diff --git a/src/components/ParksFilters.astro b/src/components/ParksFilters.astro
index 5675eb9..88b78eb 100644
--- a/src/components/ParksFilters.astro
+++ b/src/components/ParksFilters.astro
@@ -61,6 +61,10 @@ const facilityTypes = [
草地広場
+