Uniform Case Memo
Sorry. You must be logged in to view this form.
Table of Contents
(function () {
console.log('=== SCRIPT STARTED ===');
const formId = 49;
console.log('Form ID:', formId);
function setCollapsed(sectionEl, collapse){
if(!sectionEl) {
console.log('setCollapsed: no section element');
return;
}
console.log('setCollapsed:', sectionEl, 'collapse:', collapse);
let count = 0;
let el = sectionEl.nextElementSibling;
while (el) {
if (el.classList.contains('gpage')) break;
const hasGsection = el.classList.contains('gsection');
const hasToc = el.classList.contains('toc');
if (hasGsection) {
if (hasToc) break;
}
el.classList.toggle('gf-collapsed', collapse);
el.style.display = collapse ? 'none' : '';
count++;
el = el.nextElementSibling;
}
console.log('setCollapsed: affected', count, 'elements');
sectionEl.classList.toggle('gf-is-collapsed', collapse);
}
function collapseAllOnLoad(formEl){
const sections = formEl.querySelectorAll('.gsection.toc');
sections.forEach(section => setCollapsed(section, true));
}
function expandTocSection(sectionEl){
if (!sectionEl) return;
setCollapsed(sectionEl, false);
}
function findParentTocForToc2(toc2SectionEl){
let prev = toc2SectionEl ? toc2SectionEl.previousElementSibling : null;
while (prev) {
if (prev.classList) {
const hasGsection = prev.classList.contains("gsection");
const hasToc = prev.classList.contains("toc");
if (hasGsection) {
if (hasToc) {
return prev;
}
}
}
prev = prev.previousElementSibling;
}
return null;
}
function openTocDropdownForLink(linkEl){
const parentLi = linkEl.closest(".toc-parent");
if (parentLi) parentLi.classList.add("open");
}
function scrollToAnchor(anchorId){
setTimeout(() => {
const target = document.getElementById(anchorId);
if (target) target.scrollIntoView({ behavior: "smooth", block: "start" });
history.replaceState(null, "", "#" + anchorId);
}, 0);
}
function buildTOC() {
console.log('buildTOC() called');
const tocList = document.querySelector(".gf-toc-floating ul");
const formEl = document.getElementById("gform_" + formId);
console.log('TOC list element:', tocList);
console.log('Form element:', formEl);
if (!tocList || !formEl) {
console.log('buildTOC: Missing elements, returning false');
return false;
}
tocList.innerHTML = "";
const sectionTitles = formEl.querySelectorAll(
'#gform_' + formId + ' .gsection.toc .gsection_title, ' +
'#gform_' + formId + ' .gsection.toc2 .gsection_title'
);
let currentParentLi = null;
const anchorToSection = new Map();
sectionTitles.forEach((titleEl, idx) => {
const gsectionEl = titleEl.closest(".gsection");
// Skip if section is hidden by conditional logic
const gfieldContainer = gsectionEl.closest('.gfield');
const isHidden = gfieldContainer && gfieldContainer.classList.contains('gfield_visibility_hidden');
const computedStyle = window.getComputedStyle(gsectionEl);
const isDisplayNone = computedStyle.display === 'none';
if (isHidden || isDisplayNone) {
console.log('Skipping hidden section:', gsectionEl);
return;
}
const isSub = gsectionEl.classList.contains("toc2");
const base = (gsectionEl) ? (gsectionEl.id ? gsectionEl.id : ("gfsec_" + formId + "_" + idx)) : ("gfsec_" + formId + "_" + idx);
const anchorId = "toc_" + base;
anchorToSection.set(anchorId, gsectionEl);
const prevSib = titleEl.previousElementSibling;
const needsAnchor = !prevSib || prevSib.id !== anchorId;
if (needsAnchor) {
const anchor = document.createElement("a");
anchor.id = anchorId;
titleEl.parentNode.insertBefore(anchor, titleEl);
}
const li = document.createElement("li");
const link = document.createElement("a");
link.href = "#" + anchorId;
link.textContent = titleEl.textContent.trim();
li.appendChild(link);
if (!isSub) {
li.classList.add("toc-parent");
const subList = document.createElement("ul");
subList.classList.add("toc-sub");
li.appendChild(subList);
link.addEventListener("click", function (e) {
e.preventDefault();
console.log('TOC parent clicked:', anchorId);
const section = anchorToSection.get(anchorId);
console.log('Found section:', section);
if (section) {
console.log('Expanding section');
expandTocSection(section);
li.classList.add("open");
}
scrollToAnchor(anchorId);
});
tocList.appendChild(li);
currentParentLi = li;
} else if (currentParentLi) {
currentParentLi.querySelector(".toc-sub").appendChild(li);
link.addEventListener("click", function (e) {
e.preventDefault();
console.log('TOC2 subsection clicked:', anchorId);
const toc2Section = anchorToSection.get(anchorId);
console.log('Found toc2 section:', toc2Section);
const parentToc = findParentTocForToc2(toc2Section);
console.log('Found parent TOC:', parentToc);
if (parentToc) {
console.log('Expanding parent section');
expandTocSection(parentToc);
}
currentParentLi.classList.add("open");
scrollToAnchor(anchorId);
});
} else {
tocList.appendChild(li);
link.addEventListener("click", function (e) {
e.preventDefault();
scrollToAnchor(anchorId);
});
}
});
return true;
}
function initCollapse() {
const formEl = document.getElementById('gform_' + formId);
if(!formEl) {
console.log('Form not found: gform_' + formId);
return false;
}
console.log('Found form element:', formEl);
const alreadyBound = formEl.dataset.gfCollapseBound === "1";
if (alreadyBound) {
console.log('Collapse already bound');
return true;
}
formEl.dataset.gfCollapseBound = "1";
const sections = formEl.querySelectorAll('.gsection.toc');
console.log('Found TOC sections:', sections.length);
collapseAllOnLoad(formEl);
formEl.addEventListener('click', function(e){
console.log('Click detected on form:', e.target);
const title = e.target.closest('.gsection .gsection_title');
if(!title) {
console.log('Not a section title');
return;
}
console.log('Clicked section title:', title);
const section = title.closest('.gsection.toc');
if(!section) {
console.log('Not a TOC section');
return;
}
console.log('Found TOC section:', section);
const isCollapsed = section.classList.contains('gf-is-collapsed');
console.log('Is collapsed:', isCollapsed, '-> toggling to:', !isCollapsed);
setCollapsed(section, !isCollapsed);
const anchorEl = title.previousElementSibling;
const hasAnchorId = anchorEl ? (anchorEl.id ? true : false) : false;
const anchorId = hasAnchorId ? anchorEl.id : null;
if (anchorId) {
const tocLink = document.querySelector('.gf-toc-floating a[href="#' + anchorId + '"]');
if (tocLink) {
openTocDropdownForLink(tocLink);
}
}
});
console.log('Collapse system initialized');
return true;
}
function initTocRefresh() {
const formEl = document.getElementById('gform_' + formId);
if (!formEl) {
console.log('Form not found for TOC refresh');
return false;
}
if (formEl.dataset.gfTocRefreshBound === "1") {
console.log('TOC refresh already bound');
return true;
}
formEl.dataset.gfTocRefreshBound = "1";
let debounceTimer;
formEl.addEventListener('change', function(e) {
console.log('Form field changed, will rebuild TOC');
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => {
buildTOC();
}, 100);
});
console.log('TOC refresh system initialized');
return true;
}
function init() {
console.log('init() called');
let tries = 0;
const maxTries = 80;
const t = setInterval(() => {
tries++;
console.log('Init attempt', tries);
const tocOk = buildTOC();
const collapseOk = initCollapse();
const refreshOk = initTocRefresh();
console.log('tocOk:', tocOk, 'collapseOk:', collapseOk, 'refreshOk:', refreshOk);
const shouldStop = (tocOk && collapseOk && refreshOk) || tries >= maxTries;
if (shouldStop) {
console.log('Stopping init polling. tries:', tries, 'maxTries:', maxTries);
clearInterval(t);
}
}, 200);
}
console.log('Setting up DOMContentLoaded listener');
document.addEventListener("DOMContentLoaded", init);
document.addEventListener("gform_post_render", function (e) {
const hasDetail = e ? (e.detail ? true : false) : false;
const matchesFormId = hasDetail ? (Number(e.detail.formId) === formId) : false;
if (matchesFormId) init();
});
document.addEventListener("gform_page_loaded", function (e) {
const hasDetail = e ? (e.detail ? true : false) : false;
const matchesFormId = hasDetail ? (Number(e.detail.formId) === formId) : false;
if (matchesFormId) init();
});
if (window.jQuery) {
console.log('jQuery detected, setting up jQuery hooks');
jQuery(document).on("gform_post_render", function (_event, renderedFormId) {
console.log('jQuery gform_post_render event, formId:', renderedFormId);
if (Number(renderedFormId) === formId) init();
});
jQuery(document).on("gform_page_loaded", function (_event, renderedFormId) {
console.log('jQuery gform_page_loaded event, formId:', renderedFormId);
if (Number(renderedFormId) === formId) init();
});
} else {
console.log('jQuery NOT detected');
}
console.log('=== SCRIPT SETUP COMPLETE ===');
})();