<script>
function updateTrack(track, thumbMin, thumbMax) {
track.style.left = `${thumbMin.offsetLeft}px`;
track.style.width = `${thumbMax.offsetLeft - thumbMin.offsetLeft}px`;
}
function moveThumb(event, thumb, slider, thumbMin, thumbMax, outputMin, outputMax, minRange, maxRange, filterElement, filterName) {
const sliderRect = slider.getBoundingClientRect();
const position = Math.max(0, Math.min(event.clientX - sliderRect.left, slider.offsetWidth));
if (thumb === thumbMin && position < thumbMax.offsetLeft) {
thumb.style.left = `${position}px`;
outputMin.textContent = `${(minRange + (position / slider.offsetWidth) * (maxRange - minRange)).toFixed(2)}mm`;
} else if (thumb === thumbMax && position > thumbMin.offsetLeft) {
thumb.style.left = `${position}px`;
outputMax.textContent = `${(minRange + (position / slider.offsetWidth) * (maxRange - minRange)).toFixed(2)}mm`;
}
updateTrack(filterElement.querySelector('.track'), thumbMin, thumbMax);
applyFilter(outputMin, outputMax, filterElement, filterName);
}
function applyFilter(outputMin, outputMax, filterElement, filterName) {
const minVal = parseFloat(outputMin.textContent);
const maxVal = parseFloat(outputMax.textContent);
const checkboxes = filterElement.querySelectorAll('.fs-checkbox input');
checkboxes.forEach((checkboxElement) => {
const value = parseFloat(checkboxElement.closest('.fs-checkbox').querySelector('.fs-serp-filter-text').textContent.replace('mm', ''));
checkboxElement.checked = value >= minVal && value <= maxVal;
});
document.dispatchEvent(new CustomEvent('send-fast-simon-params', {
detail: { narrow: { [filterName]: new Set([...Array.from(checkboxes)]
.map(checkboxElement => checkboxElement.checked ? checkboxElement.closest('.fs-checkbox').querySelector('.fs-serp-filter-text').textContent.trim() : null)
.filter(filteredValue => filteredValue)) }}}));
}
function createSlider(filterElement, minRange, maxRange, filterName) {
if (filterElement.classList.contains("cstm-slider")) return;
filterElement.classList.add("cstm-slider");
const sliderContainer = document.createElement('div');
sliderContainer.classList.add('slider-container');
const slider = document.createElement('div');
slider.classList.add('slider');
const track = document.createElement('div');
track.classList.add('track');
slider.appendChild(track);
const thumbMin = document.createElement('div');
thumbMin.classList.add('thumb');
thumbMin.id = 'thumbMin';
const thumbMax = document.createElement('div');
thumbMax.classList.add('thumb');
thumbMax.id = 'thumbMax';
slider.appendChild(thumbMin);
slider.appendChild(thumbMax);
sliderContainer.appendChild(slider);
const outputContainer = document.createElement('div');
outputContainer.classList.add('output-container');
const outputMin = document.createElement('span');
outputMin.id = 'outputMin';
outputMin.textContent = `${minRange}mm`;
const outputMax = document.createElement('span');
outputMax.id = 'outputMax';
outputMax.textContent = `${maxRange}mm`;
outputContainer.appendChild(outputMin);
outputContainer.appendChild(outputMax);
sliderContainer.appendChild(outputContainer);
if (!filterElement.querySelector('.slider-container')) {
filterElement.appendChild(sliderContainer);
}
const moveThumbHandler = (event) => moveThumb(event, event.target, slider, thumbMin, thumbMax, outputMin, outputMax, minRange, maxRange, filterElement, filterName);
thumbMin.addEventListener('mousedown', () => document.addEventListener('mousemove', moveThumbHandler));
thumbMax.addEventListener('mousedown', () => document.addEventListener('mousemove', moveThumbHandler));
document.addEventListener('mouseup', () => document.removeEventListener('mousemove', moveThumbHandler));
updateTrack(track, thumbMin, thumbMax);
}
function setupFilters() {
window.SerpOptions.registerHook('serp-filters', ({ facets, element }) => {
const targetFilters = ['fs_filter_head height', 'fs_filter_height', 'fs_filter_thickness', 'fs_filter_outside diameter', 'fs_filter_head diameter', 'fs_filter_flange diameter'];
targetFilters.forEach((filterID) => {
const filterElement = element.querySelector(`[id="${filterID}"]`);
if (filterElement) {
const filterValues = Array.from(filterElement.querySelectorAll('.fs-serp-filter-text')).map(el => parseFloat(el.textContent.trim()));
if (filterValues.length > 0) {
createSlider(filterElement, Math.min(...filterValues), Math.max(...filterValues), filterID.replace('fs_filter_', ''));
}
}
});
});
}
if (window.SerpOptions) {
setupFilters();
} else {
window.addEventListener('fast-serp-ready', setupFilters);
}
</script>