|
12 | 12 | <span class="to"></span> |
13 | 13 | </div> |
14 | 14 | <div id="price-range-slider"></div> |
| 15 | + |
15 | 16 | <script asp-location="Footer"> |
16 | 17 | $(function() { |
17 | 18 | var $priceRangeEl = $("#price-range-slider"); |
| 19 | + var isRtl = document.documentElement.dir === "rtl"; |
| 20 | + var rangeMin = @Model.AvailablePriceRange.From; |
| 21 | + var rangeMax = @Model.AvailablePriceRange.To; |
| 22 | +
|
| 23 | + // In RTL we mirror the *value domain* (not the visual layout) so that |
| 24 | + // the handle physically on the right always represents the minimum price |
| 25 | + // and the handle physically on the left always represents the maximum price. |
| 26 | + // This keeps jQuery UI's native mouse/drag math completely untouched. |
| 27 | + function toInternal(realValue) { |
| 28 | + return isRtl ? (rangeMin + rangeMax - realValue) : realValue; |
| 29 | + } |
| 30 | + function toReal(internalValue) { |
| 31 | + return isRtl ? (rangeMin + rangeMax - internalValue) : internalValue; |
| 32 | + } |
| 33 | +
|
| 34 | + var selectedFrom = @Model.SelectedPriceRange.From; |
| 35 | + var selectedTo = @Model.SelectedPriceRange.To; |
| 36 | +
|
| 37 | + var initialValues = isRtl |
| 38 | + ? [toInternal(selectedTo), toInternal(selectedFrom)] |
| 39 | + : [selectedFrom, selectedTo]; |
| 40 | +
|
18 | 41 | $priceRangeEl.slider({ |
19 | 42 | range: true, |
20 | | - min: @Model.AvailablePriceRange.From, |
21 | | - max: @Model.AvailablePriceRange.To, |
22 | | - values: [ |
23 | | - @Model.SelectedPriceRange.From, |
24 | | - @Model.SelectedPriceRange.To |
25 | | - ], |
| 43 | + min: rangeMin, |
| 44 | + max: rangeMax, |
| 45 | + values: initialValues, |
26 | 46 | slide: function (event, ui) { |
27 | | - setSelectedPriceRange(ui.values[0], ui.values[1]); |
| 47 | + var from = isRtl ? toReal(ui.values[1]) : ui.values[0]; |
| 48 | + var to = isRtl ? toReal(ui.values[0]) : ui.values[1]; |
| 49 | + setSelectedPriceRange(from, to); |
28 | 50 | }, |
29 | 51 | stop: function () { |
30 | 52 | CatalogProducts.getProducts(); |
31 | 53 | } |
32 | 54 | }); |
33 | 55 |
|
34 | 56 | setSelectedPriceRange( |
35 | | - $priceRangeEl.slider("values", 0), |
36 | | - $priceRangeEl.slider("values", 1) |
| 57 | + isRtl ? toReal($priceRangeEl.slider("values", 1)) : $priceRangeEl.slider("values", 0), |
| 58 | + isRtl ? toReal($priceRangeEl.slider("values", 0)) : $priceRangeEl.slider("values", 1) |
37 | 59 | ); |
38 | 60 |
|
39 | 61 | $(CatalogProducts).on('before', function (e) { |
40 | 62 | var priceRange = $priceRangeEl.slider('values'); |
41 | 63 | if (priceRange && priceRange.length > 0) { |
| 64 | + var from = isRtl ? toReal(priceRange[1]) : priceRange[0]; |
| 65 | + var to = isRtl ? toReal(priceRange[0]) : priceRange[1]; |
42 | 66 | e.payload.urlBuilder |
43 | | - .addParameter('price', priceRange.join('-')); |
| 67 | + .addParameter('price', from + '-' + to); |
44 | 68 | } |
45 | 69 | }); |
46 | 70 | }); |
|
0 commit comments