Skip to content

Commit d556d3b

Browse files
committed
custom dateslider componenet
1 parent 259e593 commit d556d3b

5 files changed

Lines changed: 269 additions & 463 deletions

File tree

browse.html

Lines changed: 31 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<link rel="shortcut icon" href="/resources/images/fav-icons/mss-favicon.ico" />
88
<link rel="stylesheet" href="resources/bootstrap/css/bootstrap.min.css">
99
<link rel="stylesheet" href="resources/css/syr-icon-fonts.css">
10-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/15.7.1/nouislider.min.css">
10+
<link rel="stylesheet" href="resources/css/dateRangeSlider.css">
1111
<style>
1212
body { padding-top: 70px; }
1313
.facet-panel { background: #f8f9fa; padding: 15px; border-radius: 5px; }
@@ -17,14 +17,7 @@
1717
.result-item:hover { background: #f8f9fa; }
1818
.result-count { color: #666; margin-bottom: 15px; }
1919
.clear-filters { margin-top: 10px; }
20-
#dateRangeSlider { margin: 20px 0; height: 8px; }
21-
.date-values { display: flex; justify-content: space-between; font-size: 12px; color: #666; margin-top: 10px; }
22-
23-
/* Custom slider styling */
24-
.noUi-target { background: #e0e0e0; border: none; }
25-
.noUi-connect { background: #888; }
26-
.noUi-handle { display: none; }
27-
.noUi-horizontal { height: 8px; }
20+
2821

2922
/* Navbar font and icon sizing */
3023
.navbar-brand { font-size: 24px; line-height: 50px; height: 50px; padding: 0 15px; display: flex; align-items: center; }
@@ -59,7 +52,7 @@ <h2>Browse Manuscripts</h2>
5952
</div>
6053
</div>
6154
<script src="resources/js/jquery.min.js"></script>
62-
<script src="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/15.7.1/nouislider.min.js"></script>
55+
<script src="resources/js/dateRangeSlider.js"></script>
6356
<script>
6457
// Determine base URL based on environment
6558
const getBaseUrl = () => {
@@ -162,63 +155,43 @@ <h2>Browse Manuscripts</h2>
162155
$('#facets').html(facetsHtml + buildDateSlider());
163156
}
164157

158+
let dateSlider = null;
159+
165160
// Build date range slider
166161
function buildDateSlider() {
167162
const dates = [];
168163
allData.forEach(item => {
169-
if (item.dateNotBefore) {
170-
const d = Array.isArray(item.dateNotBefore) ? item.dateNotBefore[0] : item.dateNotBefore;
171-
dates.push(parseInt(d));
172-
}
173-
if (item.dateNotAfter) {
174-
const d = Array.isArray(item.dateNotAfter) ? item.dateNotAfter[0] : item.dateNotAfter;
175-
dates.push(parseInt(d));
176-
}
177-
if (item.dateWhen) {
178-
const d = Array.isArray(item.dateWhen) ? item.dateWhen[0] : item.dateWhen;
179-
dates.push(parseInt(d));
180-
}
164+
['dateNotBefore','dateNotAfter','dateWhen'].forEach(key => {
165+
if (item[key]) {
166+
const d = Array.isArray(item[key]) ? item[key][0] : item[key];
167+
dates.push(parseInt(d));
168+
}
169+
});
181170
});
182-
183171
if (dates.length === 0) return '';
184-
172+
185173
const minDate = Math.min(...dates);
186174
const maxDate = Math.max(...dates);
187-
175+
188176
setTimeout(() => {
189-
const slider = document.getElementById('dateRangeSlider');
190-
if (slider && !slider.noUiSlider) {
191-
noUiSlider.create(slider, {
192-
start: [minDate, maxDate],
193-
connect: true,
194-
range: { min: minDate, max: maxDate },
195-
step: 1,
196-
format: { to: v => Math.round(v), from: v => Math.round(v) }
197-
});
198-
199-
slider.noUiSlider.on('update', (values) => {
200-
$('#dateMinValue').text(values[0]);
201-
$('#dateMaxValue').text(values[1]);
202-
});
203-
204-
slider.noUiSlider.on('change', (values) => {
205-
activeFilters.dateMin = parseInt(values[0]);
206-
activeFilters.dateMax = parseInt(values[1]);
177+
const el = document.getElementById('dateSliderContainer');
178+
if (!el) return;
179+
dateSlider = new DateRangeSlider(el, {
180+
min: minDate, max: maxDate,
181+
onChange: function (s, e) {
182+
activeFilters.dateMin = s;
183+
activeFilters.dateMax = e;
207184
filterData();
208-
});
209-
}
210-
}, 100);
211-
212-
return `
213-
<div class="facet-group">
214-
<label>Date Range</label>
215-
<div id="dateRangeSlider"></div>
216-
<div class="date-values">
217-
<span id="dateMinValue">${minDate}</span>
218-
<span id="dateMaxValue">${maxDate}</span>
219-
</div>
220-
</div>
221-
`;
185+
},
186+
onReset: function () {
187+
delete activeFilters.dateMin;
188+
delete activeFilters.dateMax;
189+
filterData();
190+
}
191+
});
192+
}, 0);
193+
194+
return '<div class="facet-group" id="dateSliderContainer"></div>';
222195
}
223196

224197
// Apply filter
@@ -383,6 +356,7 @@ <h2>Browse Manuscripts</h2>
383356
displayResults();
384357
}
385358

359+
386360
// Initialize
387361
$(document).ready(() => {
388362
loadData();

0 commit comments

Comments
 (0)