From d0cd1665c07001c6ed5e7f6e34add0d6db9e98ad Mon Sep 17 00:00:00 2001 From: Matthew Bernhardt Date: Fri, 27 Feb 2026 15:42:48 -0500 Subject: [PATCH 1/5] Add mtmPreviewMode to allowed URL parameters in search helper --- app/helpers/search_helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index 82c69c4e..a589ea1c 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -33,12 +33,12 @@ def link_to_tab(target, label = nil) clean_target = target.downcase.gsub(' ', '_').downcase tab_label = label || target if @active_tab == clean_target - link_to tab_label, results_path(params.permit(:q, :per_page, :booleanType, :tab).merge(tab: clean_target)), + link_to tab_label, results_path(params.permit(:q, :per_page, :booleanType, :tab, :mtmPreviewMode).merge(tab: clean_target)), aria: { current: 'page' }, class: 'active tab-link', data: { turbo_frame: 'search-results', turbo_action: 'advance' } else - link_to tab_label, results_path(params.permit(:q, :per_page, :booleanType, :tab).merge(tab: clean_target)), + link_to tab_label, results_path(params.permit(:q, :per_page, :booleanType, :tab, :mtmPreviewMode).merge(tab: clean_target)), class: 'tab-link', data: { turbo_frame: 'search-results', turbo_action: 'advance' } end From ac94f38c24b1b3623861295c3bc8d9773d4d7b33 Mon Sep 17 00:00:00 2001 From: Matthew Bernhardt Date: Fri, 27 Feb 2026 17:05:52 -0500 Subject: [PATCH 2/5] Guard clauses prior to event listeners that may not be present --- app/javascript/filters.js | 6 ++++++ app/javascript/search_form.js | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/javascript/filters.js b/app/javascript/filters.js index 32a79cee..1af5b888 100644 --- a/app/javascript/filters.js +++ b/app/javascript/filters.js @@ -3,6 +3,12 @@ function initFilterToggle() { var filter_toggle = document.getElementById('filter-toggle'); var filter_panel = document.getElementById('filter-container'); var filter_categories = document.getElementsByClassName('filter-category'); + + // No need for event listeners if filters aren't present. + if (!filter_toggle || !filter_panel) { + return; + } + filter_toggle.addEventListener('click', event => { filter_panel.classList.toggle('hidden-md'); filter_toggle.classList.toggle('expanded'); diff --git a/app/javascript/search_form.js b/app/javascript/search_form.js index fa603040..a48ecef3 100644 --- a/app/javascript/search_form.js +++ b/app/javascript/search_form.js @@ -68,11 +68,11 @@ if (Array.from(allPanels).includes(geoboxPanel && geodistancePanel)) { togglePanelState(geodistancePanel); }); - document.getElementById('advanced-summary').addEventListener('click', () => { + document.getElementById('advanced-summary')?.addEventListener('click', () => { togglePanelState(advancedPanel); }); } else { - document.getElementById('advanced-summary').addEventListener('click', () => { + document.getElementById('advanced-summary')?.addEventListener('click', () => { togglePanelState(advancedPanel); }); } From 3c835bcc565170a5bb6806c726d70df6b4951b16 Mon Sep 17 00:00:00 2001 From: Matthew Bernhardt Date: Wed, 4 Mar 2026 10:55:57 -0500 Subject: [PATCH 3/5] Hackish loading of preview container when justified --- app/views/layouts/_head.html.erb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/_head.html.erb b/app/views/layouts/_head.html.erb index 8647e56f..873b3a36 100644 --- a/app/views/layouts/_head.html.erb +++ b/app/views/layouts/_head.html.erb @@ -27,15 +27,22 @@ <%= yield :additional_js %> -<% if (ENV['MATOMO_CONTAINER_URL'].present?) %> +<% if (ENV['MATOMO_URL'].present? && ENV['MATOMO_CONTAINER_ID'].present?) %> <% elsif (ENV['MATOMO_URL'].present? && ENV['MATOMO_SITE_ID'].present?) %> From 133b8b2fe1f3fdfd20e8c2ae5c7dac20f2d34127 Mon Sep 17 00:00:00 2001 From: Matthew Bernhardt Date: Wed, 4 Mar 2026 11:14:06 -0500 Subject: [PATCH 4/5] Add preview mode as hidden field to search form --- app/views/search/_form.html.erb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/views/search/_form.html.erb b/app/views/search/_form.html.erb index c6f884ac..dd6bd786 100644 --- a/app/views/search/_form.html.erb +++ b/app/views/search/_form.html.erb @@ -6,6 +6,9 @@ + <% if params[:mtmPreviewMode] %> + + <% end %>
From c3c68159bb55e346ac5b9dd92170281100f646da Mon Sep 17 00:00:00 2001 From: Matthew Bernhardt Date: Wed, 4 Mar 2026 17:07:47 -0500 Subject: [PATCH 5/5] Prototyped poking matomo around tabs/pagination --- app/javascript/loading_spinner.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/app/javascript/loading_spinner.js b/app/javascript/loading_spinner.js index 9aa6655c..76a33834 100644 --- a/app/javascript/loading_spinner.js +++ b/app/javascript/loading_spinner.js @@ -26,6 +26,16 @@ document.addEventListener('turbo:frame-render', function(event) { // Remove the spinner now that things are ready document.getElementById('search-results').classList.remove('spinner'); + // Experimental poking of Matomo + window._mtm = window._mtm || []; + window._mtm.push({ + 'event': 'customEvent', + 'customCategory': 'Search', + 'customAction': 'Pagination', + 'customLabel': 'Page 1', + 'customValue': 1 + }); + // Clear the pending action window.pendingFocusAction = null; }; @@ -46,6 +56,16 @@ document.addEventListener('turbo:frame-render', function(event) { // Remove the spinner now that things are ready document.getElementById('search-results').classList.remove('spinner'); + // Experimental poking of Matomo + window._mtm = window._mtm || []; + window._mtm.push({ + 'event': 'customEvent', + 'customCategory': 'Search', + 'customAction': 'Tab', + 'customLabel': 'Bespoke', + 'customValue': 1 + }); + // Clear the pending action window.pendingFocusAction = null; };