<div class="range-filter ">
<div class="range-filter__slider " data-min="0" data-max="1000" data-show-float="0"></div>
<div class="range-filter__inputs-wrapper ">
<div class="input range-filter__input range-filter__input--lower">
<label class="
label
input__label
range-filter__label
" for="range-filter-min">
Minimum value
</label>
<input class="input__field range-filter__field range-filter__field--lower" id="range-filter-min" name="range-filter-min" type="" placeholder="">
</div>
<span class="range-filter__suffix ">
$
</span>
<span class="range-filter__dash">-</span>
<div class="input range-filter__input range-filter__input--upper">
<label class="
label
input__label
range-filter__label
" for="range-filter-max">
Maximum value
</label>
<input class="input__field range-filter__field range-filter__field--upper" id="range-filter-max" name="range-filter-max" type="" placeholder="">
</div>
<span class="range-filter__suffix ">
$
</span>
</div>
</div>
<button class="button range-filter__button button--fluid margin-vc-sm" type="button" data-min="0" data-max="1000" data-attribute="price" href="#" data-filter-url="#">
Apply
</button>
<script src="/components/raw/range/range.js"></script>
<div
class="range-filter {{ class }}"
{{{ attributes }}}
>
<div
class="range-filter__slider {{ slider.lass }}"
data-min="{{ filter.input.minValue }}"
data-max="{{ filter.input.maxValue }}"
data-show-float="{{ showFloat }}"
></div>
<div class="range-filter__inputs-wrapper {{ filter.wrapperClass }}">
{{ render '@input' rangeInputLower }}
<span class="range-filter__suffix {{ filter.suffix.lowerClass }}">
{{ filter.suffix.lowerText }}
</span>
<span class="range-filter__dash">-</span>
{{ render '@input' rangeInputUpper }}
<span class="range-filter__suffix {{ filter.suffix.upperClass }}">
{{ filter.suffix.upperText }}
</span>
</div>
</div>
{{ render '@button' apply }}
{{#if script}}
<script src="{{ static 'range.js' }}"></script>
{{/if}}
{
"attributes": "",
"class": "",
"filter": {
"wrapperClass": "",
"input": {
"upperClass": "",
"lowerClass": "",
"maxValue": "1000",
"minValue": "0",
"type": "text"
},
"suffix": {
"lowerText": "$",
"upperText": "$",
"lowerClass": "",
"upperClass": ""
}
},
"rangeInputLower": {
"class": "range-filter__input range-filter__input--lower",
"label": {
"class": "range-filter__label",
"text": "Minimum value"
},
"field": {
"class": "range-filter__field range-filter__field--lower",
"id": "range-filter-min",
"name": "range-filter-min",
"placeholder": "",
"value": "0"
}
},
"rangeInputUpper": {
"class": "range-filter__input range-filter__input--upper",
"label": {
"class": "range-filter__label",
"text": "Maximum value"
},
"field": {
"class": "range-filter__field range-filter__field--upper",
"id": "range-filter-max",
"name": "range-filter-max",
"placeholder": "",
"value": "1000"
}
},
"apply": {
"class": "range-filter__button button--fluid margin-vc-sm",
"tag": "button",
"text": "Apply",
"attributes": "type=\"button\" data-min=\"0\" data-max=\"1000\" data-attribute=\"price\" href=\"#\" data-filter-url=\"#\""
},
"script": true,
"showFloat": 0
}
$range__padding : $spacer--medium $spacer--extra-small 0 0 !default;
$range__padding\@large : $spacer--medium 0 0 0 !default;
$range__slider-margin : 0 0 $spacer--semi-large 0 !default;
$range__handler-size : 24px !default;
$range__handler-bg-color : $white !default;
$range__handler-border : $border-secondary !default;
$range__handler-border-radius : 50% !default;
$range__handler-box-shadow : none !default;
$range__handler-offset-top : -10px !default;
$range__track-height : $spacer--extra-small !default;
$range__track-bg-color : $gray !default;
$range__track-bg-color--active: $color-primary !default;
$range__track-border-radius : $border-radius !default;
$range__track-border : none !default;
$range__track-box-shadow : none !default;
$range__dash-padding : 0 $spacer--medium 0 $spacer !default;
$range__suffix-padding : 0 $spacer !default;
$range__button-width : calc(100% - #{$spacer--extra-small}) !default;
$range__button-width\@large : 100% !default;
.range-filter {
padding: $range__padding;
overflow: hidden;
@include mq($screen-l) {
padding: $range__padding\@large;
}
&__slider {
margin: $range__slider-margin;
}
&__inputs-wrapper {
display: flex;
align-items: center;
justify-content: space-between;
}
&__dash {
text-align: center;
padding: $range__dash-padding;
}
&__suffix {
padding: $range__suffix-padding;
}
&__label {
@include visually-hidden();
}
&__input {
width: auto;
flex-grow: 1;
margin: 0;
}
&__button {
width: $range__button-width;
@include mq($screen-l) {
width: $range__button-width\@large;
}
}
}
.noUi-connect {
background-color: $range__track-bg-color--active;
border-radius: 0;
}
.noUi-tooltip {
display: none;
}
.noUi-target {
background-color: $range__track-bg-color;
box-shadow: $range__track-box-shadow;
border: $range__track-border;
border-radius: $range__track-border-radius;
height: $range__track-height;
}
.noUi-handle {
&:hover {
cursor: pointer;
}
.noUi-horizontal & {
border-radius: $range__handler-border-radius;
background-color: $range__handler-bg-color;
width: $range__handler-size;
height: $range__handler-size;
border: $range__handler-border;
box-shadow: $range__handler-box-shadow;
top: $range__handler-offset-top;
&:before,
&:after {
display: none;
}
&.focus-visible {
.noUi-tooltip {
display: block;
}
}
}
}
.noUi-extended {
padding-right: $spacer--semi-medium;
}
.noUi-extended .noUi-handle {
right: -24px;
}
/* global noUiSlider */
(function rangeSlider() {
'use strict';
function init() {
const rangeFilters = [...document.querySelectorAll('.range-filter')];
rangeFilters.forEach(rangeFilter => {
createRangeSlider(rangeFilter);
});
}
function createRangeSlider(rangeFilter) {
const inputMax = rangeFilter.querySelector('.range-filter__field--upper');
const inputMin = rangeFilter.querySelector('.range-filter__field--lower');
const rangeSlider = rangeFilter.querySelector('.range-filter__slider');
rangeSlider.classList.add('noUi-extended');
initNoUiSlider(rangeSlider);
bindEvents(rangeSlider, inputMin, inputMax);
}
function initNoUiSlider(rangeSlider) {
let minValue = parseInt(rangeSlider.getAttribute('data-min'));
let maxValue = parseInt(rangeSlider.getAttribute('data-max'));
if (!minValue) {
minValue = 0;
}
if (!maxValue) {
maxValue = 1000;
}
noUiSlider.create(rangeSlider, {
start: [minValue, maxValue],
connect: true,
step: 1,
range: {
'min': minValue,
'max': maxValue
}
});
}
function bindEvents(rangeSlider, inputMin, inputMax) {
const showFloat = parseInt(rangeSlider.getAttribute('data-show-float'));
rangeSlider.noUiSlider.on('update', (values) => {
if (showFloat) {
inputMin.value = values[0];
inputMax.value = values[1];
}
else {
inputMin.value = parseInt(values[0]);
inputMax.value = parseInt(values[1]);
}
});
inputMax.addEventListener('change', (event) => {
rangeSlider.noUiSlider.set([null, event.target.value]);
});
inputMin.addEventListener('change', (event) => {
rangeSlider.noUiSlider.set([event.target.value, null]);
});
}
init();
}());
No notes defined.