+
@@ -179,10 +179,38 @@
}
document.querySelectorAll('[data-bs-toggle="collapse"]').forEach(toggler => {
- toggler.addEventListener('click', () => {
+ toggler.addEventListener('click', async () => {
const icon = toggler.querySelector('.chevron-svg');
icon.classList.toggle('rotate');
+ var target = document.querySelector(toggler.dataset.bsTarget);
+ while (target.classList.contains('collapsing')) {
+ await sleep(10);
+ }
icon.parentElement.classList.toggle("no-bottom-border");
+ const collapseId = toggler.dataset.bsTarget.replace('#', '');
+ const isCollapsed = target.classList.contains('show');
+ // Update URL parameter
+ const url = new URL(window.location);
+ url.searchParams.set(collapseId, isCollapsed); // true = open, false = collapsed
+ window.history.replaceState({}, '', url);
+ });
+ });
+
+ document.addEventListener('DOMContentLoaded', () => {
+ const collapseElements = document.querySelectorAll('.collapse');
+
+ collapseElements.forEach(el => {
+ const paramValue = new URL(window.location).searchParams.get(el.id);
+ if (paramValue === 'true') {
+ el.classList.add('show');
+ const toggler = document.querySelector(`[data-bs-target="#${el.id}"]`);
+ if (toggler) {
+ toggler.querySelector('.chevron-svg')?.classList.add('rotate');
+ toggler.classList.add('no-bottom-border');
+ }
+ } else {
+ el.classList.remove('show');
+ }
});
});
diff --git a/src/wwwroot/js/site.js b/src/wwwroot/js/site.js
index 5ba6601..5347028 100644
--- a/src/wwwroot/js/site.js
+++ b/src/wwwroot/js/site.js
@@ -266,3 +266,7 @@ function unflatten(obj) {
}
return result;
}
+
+function sleep(ms) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
\ No newline at end of file