1const initializeIconLinklists = () => { 2 document.querySelectorAll(".icon-linklist").forEach((container) => { 3 if (container.dataset.windFceInitialized === "true") { 4 return; 5 } 6 7 container.dataset.windFceInitialized = "true"; 8 const hideAfter = Number.parseInt(container.dataset.hideAfter || "0", 10); 9 const items = Array.from(container.children).filter((item) => 10 item.classList.contains("icon-linklist-item"), 11 ); 12 if (hideAfter <= 0 || items.length <= hideAfter) { 13 return; 14 } 15 16 const moreText = container.dataset.moreText || ""; 17 const lessText = container.dataset.lessText || ""; 18 const hiddenItems = items.slice(hideAfter); 19 hiddenItems.forEach((item) => { 20 item.hidden = true; 21 item.classList.add("d-none"); 22 }); 23 24 const showButton = document.createElement("button"); 25 showButton.type = "button"; 26 showButton.textContent = moreText; 27 showButton.setAttribute("aria-controls", container.id); 28 showButton.setAttribute("aria-expanded", "false"); 29 showButton.classList.add( 30 "show-more", 31 "call-to-action-link", 32 "color-0", 33 "size-fullWidth", 34 "layout-outline", 35 "icon-arrow-down", 36 ); 37 showButton.addEventListener("click", () => { 38 const expanded = showButton.getAttribute("aria-expanded") === "true"; 39 hiddenItems.forEach((item) => { 40 item.hidden = expanded; 41 item.classList.toggle("d-none", expanded); 42 }); 43 showButton.textContent = expanded ? moreText : lessText; 44 showButton.setAttribute("aria-expanded", String(!expanded)); 45 }); 46 container.insertAdjacentElement("afterend", showButton); 47 }); 48}; 49 50if (document.readyState === "loading") { 51 document.addEventListener("DOMContentLoaded", initializeIconLinklists, { 52 once: true, 53 }); 54} else { 55 initializeIconLinklists(); 56}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.