Skip to content

Commit 0fd491e

Browse files
committed
feat (update): filter system
1 parent 5df49d0 commit 0fd491e

2 files changed

Lines changed: 39 additions & 10 deletions

File tree

js/dogs.js

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,35 @@ function parseLocation(breed) {
8686
return m ? m[1].trim() : '';
8787
}
8888

89+
/** Map specific campus locations to general area groups for filtering */
90+
const LOCATION_GROUP_MAP = {
91+
'Gate 1': 'Gate 1',
92+
'Gate 1/Gate 2': 'Gate 1',
93+
'Gate 2': 'Gate 2',
94+
'Gate 2/Antil Dhaba': 'Gate 2',
95+
'Gate 2/WUD': 'Gate 2',
96+
'Opposite Gate 2': 'Gate 2',
97+
'Gate 3': 'Gate 3',
98+
'Gate 3 Construction': 'Gate 3',
99+
'Around Gate 3': 'Gate 3',
100+
'ASG': 'ASG',
101+
'Morriko/ASG': 'ASG',
102+
'Beyond Morriko/ASG': 'ASG',
103+
'Police Station/ASG': 'Police Station',
104+
'Tapri': 'Tapri',
105+
'Next to Roti Boti': 'Tapri',
106+
'Next to WUD': 'WUD',
107+
'Near WUD': 'WUD',
108+
'Commissioner\'s Office': 'Commissioner\'s Office',
109+
'Police Station': 'Police Station',
110+
'Shelter': 'Shelter',
111+
};
112+
113+
function toGeneralLocation(specific) {
114+
if (!specific) return '';
115+
return LOCATION_GROUP_MAP[specific] || specific;
116+
}
117+
89118
/** Extract gender from breed string: ♀ → 'female', ♂ → 'male' */
90119
function parseGender(breed) {
91120
if (!breed) return '';
@@ -148,7 +177,7 @@ function buildDogCard(meta, body) {
148177
data-bg-dark="${esc(meta.bgDark)}"
149178
data-sterilized="${esc(meta.sterilized || '')}"
150179
data-vaccinated="${esc(meta.vaccinated || '')}"
151-
data-location="${esc(parseLocation(meta.breed))}"
180+
data-location="${esc(toGeneralLocation(parseLocation(meta.breed)))}"
152181
data-gender="${esc(parseGender(meta.breed))}"
153182
data-age-months="${calcAgeMonths(meta.born)}">
154183
${photoArea}
@@ -365,24 +394,24 @@ function initDogFilters() {
365394
<div class="dogs-filter-backdrop" id="dogs-filter-backdrop"></div>
366395
<aside class="dogs-filter-panel" id="dogs-filter-panel" aria-label="Filter dogs">
367396
<div class="dogs-filter-header">
368-
<span class="dogs-filter-title">🐾 filters</span>
397+
<span class="dogs-filter-title">filters</span>
369398
<button class="dogs-filter-close" id="dogs-filter-close" aria-label="Close filters">✕</button>
370399
</div>
371400
<div class="dogs-filter-body">
372401
<div class="dogs-filter-section">
373-
<div class="dogs-filter-label">📍 location</div>
402+
<div class="dogs-filter-label">location</div>
374403
<div class="dogs-filter-chips" id="filter-locations">${locationChips}</div>
375404
</div>
376405
<div class="dogs-filter-section">
377-
<div class="dogs-filter-label">🚻 gender</div>
406+
<div class="dogs-filter-label">gender</div>
378407
<div class="dogs-filter-toggle-group" id="filter-gender">
379408
<button class="dogs-filter-toggle active" data-val="all">all</button>
380409
<button class="dogs-filter-toggle" data-val="female">♀ female</button>
381410
<button class="dogs-filter-toggle" data-val="male">♂ male</button>
382411
</div>
383412
</div>
384413
<div class="dogs-filter-section">
385-
<div class="dogs-filter-label">🎂 age</div>
414+
<div class="dogs-filter-label">age</div>
386415
<div class="dogs-age-slider-wrap">
387416
<div class="dogs-age-track"><div class="dogs-age-fill" id="dogs-age-fill"></div></div>
388417
<input type="range" id="age-min" class="dogs-age-range" min="${dataMin}" max="${dataMax}" value="${dataMin}" step="1">
@@ -391,17 +420,17 @@ function initDogFilters() {
391420
<div class="dogs-age-label" id="dogs-age-label">${fmtAge(dataMin)}${fmtAge(dataMax)}</div>
392421
</div>
393422
<div class="dogs-filter-section">
394-
<div class="dogs-filter-label">sterilisation</div>
423+
<div class="dogs-filter-label">sterilisation</div>
395424
<div class="dogs-filter-toggle-group" id="filter-sterilized">
396-
<button class="dogs-filter-toggle active" data-val="all">all</button>
425+
<button class="dogs-filter-toggle active" data-val="all">all (confirmed &amp; unconfirmed)</button>
397426
<button class="dogs-filter-toggle" data-val="yes">yes</button>
398427
<button class="dogs-filter-toggle" data-val="no">not confirmed</button>
399428
</div>
400429
</div>
401430
<div class="dogs-filter-section">
402-
<div class="dogs-filter-label">💉 vaccination</div>
431+
<div class="dogs-filter-label">vaccination</div>
403432
<div class="dogs-filter-toggle-group" id="filter-vaccinated">
404-
<button class="dogs-filter-toggle active" data-val="all">all</button>
433+
<button class="dogs-filter-toggle active" data-val="all">all (confirmed &amp; unconfirmed)</button>
405434
<button class="dogs-filter-toggle" data-val="yes">yes</button>
406435
<button class="dogs-filter-toggle" data-val="no">not confirmed</button>
407436
</div>

pages/dogs.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ <h1 style="font-family:'Caveat',cursive;font-size:clamp(2.5rem,6vw,4.5rem);font-
44
</div>
55
<div class="dogs-search-wrap">
66
<input id="dogs-search" class="dogs-search" type="search" placeholder="search by name or location…" autocomplete="off">
7-
<button id="dogs-filter-btn" class="dogs-filter-btn" aria-label="Open filters">🔽 filters<span id="dogs-filter-badge" class="dogs-filter-badge" hidden></span></button>
7+
<button id="dogs-filter-btn" class="dogs-filter-btn" aria-label="Open filters">filters<span id="dogs-filter-badge" class="dogs-filter-badge" hidden></span></button>
88
<span id="dogs-count" class="dogs-count"></span>
99
</div>
1010
<div id="dogs-filter-sidebar"></div>

0 commit comments

Comments
 (0)