diff --git a/js/preserve-advanced-search.js b/js/preserve-advanced-search.js
index 41dc943..e703b36 100644
--- a/js/preserve-advanced-search.js
+++ b/js/preserve-advanced-search.js
@@ -1,12 +1,10 @@
-(function ($, Drupal, once) {
+(function (Drupal, drupalSettings) {
'use strict';
Drupal.behaviors.preserveAdvancedSearchParams = {
attach: function (context, settings) {
- console.log('preserve-advanced-search.js loaded');
-
- // Extract a[] params from the current page URL
+ // Capture the a[] advanced search params from the current URL
const rawSearch = window.location.search;
const aParams = rawSearch
.substring(1)
@@ -14,56 +12,46 @@
.filter(part => part.startsWith('a%5B') || part.startsWith('a['))
.join('&');
- console.log('[AdvSearch] aParams found:', aParams);
-
- // Nothing to preserve — bail out
if (!aParams) return;
- // Target the
that has data-drupal-facet-id
- // then find the .facet-slider inside it which is the noUiSlider element
- once('preserve-advsearch-slider', '[data-drupal-facet-id]', context)
- .forEach(function (el) {
- const facetId = el.dataset.drupalFacetId;
- const sliderEl = el.querySelector('.facet-slider');
-
- console.log('[AdvSearch] Found facet:', facetId, 'slider el:', sliderEl);
-
- if (!sliderEl || !sliderEl.noUiSlider) {
- console.warn('[AdvSearch] No noUiSlider instance found on', sliderEl);
- return;
- }
-
- // Get the facet settings from drupalSettings
- const facetSettings = settings.facets && settings.facets[facetId];
- console.log('[AdvSearch] facetSettings:', facetSettings);
-
- if (!facetSettings) {
- console.warn('[AdvSearch] No drupalSettings.facets entry for:', facetId);
- return;
- }
-
- // Remove original change listener and replace with patched version
- sliderEl.noUiSlider.off('change');
- sliderEl.noUiSlider.on('change', function (values, handle, unencoded) {
- let newUrl;
-
- if (facetSettings.range) {
- newUrl = facetSettings.url
- .replace('__range_slider_min__', Math.round(unencoded[0]))
- .replace('__range_slider_max__', Math.round(unencoded[1]));
- } else {
- newUrl = facetSettings.urls['f_' + values[0]];
- }
-
- console.log('[AdvSearch] Navigating to:', newUrl + '&' + aParams);
-
- const separator = newUrl.includes('?') ? '&' : '?';
- window.location.href = newUrl + separator + aParams;
+ const sliders = settings.facets && settings.facets.sliders;
+ if (!sliders) return;
+
+ // Replace any a[] params in a URL with the current page's a[] params.
+ // The current URL is always the source of truth — the server-built
+ // slider URL may contain stale or partial a[] params.
+ function rebuildUrl(url) {
+ if (!url) return url;
+ const parts = url.split('?');
+ const basePath = parts[0];
+ const query = parts[1] || '';
+
+ // Keep everything that is NOT an a[] param (i.e. the f[] facet params)
+ const keptParams = query
+ .split('&')
+ .filter(p => p.length > 0)
+ .filter(p => !p.startsWith('a%5B') && !p.startsWith('a['))
+ .join('&');
+
+ const finalQuery = [keptParams, aParams].filter(Boolean).join('&');
+ return basePath + '?' + finalQuery;
+ }
+
+ Object.keys(sliders).forEach(function (key) {
+ const sliderSettings = sliders[key];
+
+ if (sliderSettings.url) {
+ sliderSettings.url = rebuildUrl(sliderSettings.url);
+ console.log('[AdvSearch] Rebuilt slider URL for', key, ':', sliderSettings.url);
+ }
+
+ if (sliderSettings.urls) {
+ Object.keys(sliderSettings.urls).forEach(function (urlKey) {
+ sliderSettings.urls[urlKey] = rebuildUrl(sliderSettings.urls[urlKey]);
});
-
- console.log('[AdvSearch] Slider change handler patched successfully');
- });
+ }
+ });
}
};
-})(jQuery, Drupal, once);
+})(Drupal, drupalSettings);