From 5cebbbbbd9a3c01581bfb3aad6d374b54aa6ceba Mon Sep 17 00:00:00 2001 From: Finn Bacall Date: Thu, 12 Feb 2026 11:31:52 +0000 Subject: [PATCH 1/3] Fix `tess-expandable` behaviour when multiple under the same parent element. Fixes #1231 --- app/assets/javascripts/application.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index b2b688502..788932a27 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -286,16 +286,17 @@ document.addEventListener("turbolinks:load", function(e) { this.dataset.origHeight = this.clientHeight; this.style.maxHeight = '' + limit + 'px'; this.classList.add('tess-expandable-closed'); - var btn = $('Show more'); + const btn = $('Show more'); + btn[0].expandableTarget = this; btn.insertAfter($(this)); } }); $(document).on('click', '.tess-expandable-btn', function (event) { event.preventDefault(); - var div = this.parentElement.querySelector('.tess-expandable'); - var maxHeight = parseInt(div.dataset.origHeight) + 80; - var limit = parseInt(div.dataset.heightLimit || "300"); + const div = this.expandableTarget; + const maxHeight = parseInt(div.dataset.origHeight) + 80; + const limit = parseInt(div.dataset.heightLimit || "300"); if (div.classList.contains('tess-expandable-closed')) { div.classList.add('tess-expandable-open'); From a278f05f6f39323eb5682d188fa4350dcb30fc47 Mon Sep 17 00:00:00 2001 From: Finn Bacall Date: Thu, 12 Feb 2026 12:43:05 +0000 Subject: [PATCH 2/3] Fix broken/multiple events firing due to Turbolinks --- app/assets/javascripts/application.js | 55 ++++++++++++++++----------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 788932a27..f46a32dfa 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -277,6 +277,9 @@ document.addEventListener("turbolinks:load", function(e) { LearningPaths.init(); $('.tess-expandable').each(function () { + if (this.dataset.origHeight) { + return; + } var limit = this.dataset.heightLimit || 300; if (this.clientHeight > limit) { @@ -287,32 +290,10 @@ document.addEventListener("turbolinks:load", function(e) { this.style.maxHeight = '' + limit + 'px'; this.classList.add('tess-expandable-closed'); const btn = $('Show more'); - btn[0].expandableTarget = this; btn.insertAfter($(this)); } }); - $(document).on('click', '.tess-expandable-btn', function (event) { - event.preventDefault(); - const div = this.expandableTarget; - const maxHeight = parseInt(div.dataset.origHeight) + 80; - const limit = parseInt(div.dataset.heightLimit || "300"); - - if (div.classList.contains('tess-expandable-closed')) { - div.classList.add('tess-expandable-open'); - div.classList.remove('tess-expandable-closed'); - div.style.maxHeight = '' + maxHeight + 'px'; - this.innerHTML = 'Show less'; - } else { - div.classList.remove('tess-expandable-open'); - div.classList.add('tess-expandable-closed'); - div.style.maxHeight = '' + limit + 'px'; - this.innerHTML = 'Show more'; - } - - return false; - }); - $('.faq .question dt').click(function () { var button = $(this).find('.expand'); var sign = button.text(); @@ -381,6 +362,36 @@ $(document).on('click', '[href="#activity_log"]', function () { return false; }); +$(document).on('click', '.tess-expandable-btn', function (event) { + event.preventDefault(); + let div = this.previousElementSibling; + + if (!div.classList.contains('tess-expandable')) { + div = this.parentElement.querySelector('.tess-expandable'); + } + + if (!div) { + return false; + } + + const maxHeight = parseInt(div.dataset.origHeight) + 80; + const limit = parseInt(div.dataset.heightLimit || "300"); + + if (div.classList.contains('tess-expandable-closed')) { + div.classList.add('tess-expandable-open'); + div.classList.remove('tess-expandable-closed'); + div.style.maxHeight = '' + maxHeight + 'px'; + this.innerHTML = 'Show less'; + } else { + div.classList.remove('tess-expandable-open'); + div.classList.add('tess-expandable-closed'); + div.style.maxHeight = '' + limit + 'px'; + this.innerHTML = 'Show more'; + } + + return false; +}); + // sticky-navbar feature document.addEventListener('turbolinks:load', function () { From 2937932abaf50a3a5f674f7c23e5a0e27d581149 Mon Sep 17 00:00:00 2001 From: Finn Bacall Date: Thu, 12 Feb 2026 13:09:16 +0000 Subject: [PATCH 3/3] Update app/assets/javascripts/application.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- app/assets/javascripts/application.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index f46a32dfa..3cf22c352 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -366,7 +366,7 @@ $(document).on('click', '.tess-expandable-btn', function (event) { event.preventDefault(); let div = this.previousElementSibling; - if (!div.classList.contains('tess-expandable')) { + if (!div || !div.classList.contains('tess-expandable')) { div = this.parentElement.querySelector('.tess-expandable'); }