1class c{constructor(){this.processedBlocks=new WeakSet,this.observer=null,this.isThemeChanging=!1,this.debug=!1,this.init()}log(...e){this.debug&&console.log("[CodeBlockCollapser]",...e)}init(){this.log("Initializing..."),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.log("DOMContentLoaded - setting up code blocks"),this.setupCodeBlocks()}):(this.log("Document already loaded - setting up code blocks"),this.setupCodeBlocks()),this.observePageChanges(),this.setupThemeChangeListener(),this.setupThemeOptimizerSync()}setupThemeOptimizerSync(){this.syncWithThemeOptimizer(),document.addEventListener("themeOptimizerReady",()=>{this.log("Theme optimizer ready, syncing code block behavior"),this.syncWithThemeOptimizer()}),document.addEventListener("swup:pageView",()=>{setTimeout(()=>{this.syncWithThemeOptimizer()},150)})}syncWithThemeOptimizer(){if(window.themeOptimizer){const e=window.themeOptimizer.hideCodeBlocksDuringTransition;document.querySelectorAll(".expressive-code").forEach(t=>{e?t.classList.add("hide-during-transition"):t.classList.remove("hide-during-transition")}),this.log(`Synced with theme optimizer: hide code blocks during transition = ${e}`)}else document.querySelectorAll(".expressive-code").forEach(s=>{s.classList.add("hide-during-transition")}),this.log("Theme optimizer not available, applied default behavior")}setupThemeChangeListener(){new MutationObserver(s=>{for(const t of s)if(t.type==="attributes"&&(t.attributeName==="class"||t.attributeName==="data-theme")){const l=document.documentElement.classList.contains("is-theme-transitioning");l&&!this.isThemeChanging?(this.isThemeChanging=!0,this.observer&&this.observer.disconnect(),document.querySelectorAll(".expressive-code").forEach(i=>{i.style.transition="none"})):!l&&this.isThemeChanging&&(this.isThemeChanging=!1,requestAnimationFrame(()=>{document.querySelectorAll(".expressive-code").forEach(i=>{i.style.transition=""}),setTimeout(()=>{this.observePageChanges()},50)}));break}}).observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]})}setupCodeBlocks(){requestAnimationFrame(()=>{const e=document.querySelectorAll(".expressive-code");this.log(`Found ${e.length} code blocks to process`),e.forEach((s,t)=>{this.processedBlocks.has(s)?this.log(`Code block ${t+1} already processed`):(this.log(`Enhancing code block ${t+1}`),this.enhanceCodeBlock(s),this.processedBlocks.add(s))})})}enhanceCodeBlock(e){const s=e.querySelector(".frame");if(!s){this.log("No frame found in code block, skipping");return}if(s.classList.contains("has-title")){this.log("Code block has title, skipping collapse feature");return}this.log("Adding collapse feature to code block"),e.classList.add("collapsible","expanded");const t=this.createToggleButton();s.appendChild(t),this.bindToggleEvents(e,t)}createToggleButton(){const e=document.createElement("button");return e.className="collapse-toggle-btn",e.type="button",e.setAttribute("aria-label","æå /å±å¼ä»£ç å"),e.innerHTML=` 2 <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 3 <g fill="none"> 4 <path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path> 5 <path fill="currentColor" d="m12 16.172l-4.95-4.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414z"></path> 6 </g> 7 </svg> 8 `,e}bindToggleEvents(e,s){s.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.toggleCollapse(e)}),s.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),this.toggleCollapse(e))})}toggleCollapse(e){const s=e.classList.contains("collapsed");requestAnimationFrame(()=>{s?(e.classList.remove("collapsed"),e.classList.add("expanded")):(e.classList.remove("expanded"),e.classList.add("collapsed"))});const t=new CustomEvent("codeBlockToggle",{detail:{collapsed:!s,element:e}});document.dispatchEvent(t)}observePageChanges(){if(this.isThemeChanging)return;this.observer&&this.observer.disconnect();let e=null;this.observer=new MutationObserver(s=>{if(this.isThemeChanging)return;let t=!1;for(const l of s){if(l.type==="childList")for(const i of l.addedNodes){if(i.nodeType===Node.ELEMENT_NODE){if(i.classList&&i.classList.contains("expressive-code")){t=!0;break}if(i.children&&i.children.length>0){for(let n=0;n<Math.min(i.children.length,10);n++)if(i.children[n].classList&&i.children[n].classList.contains("expressive-code")){t=!0;break}}}if(t)break}if(t)break}t&&(clearTimeout(e),e=setTimeout(()=>this.setupCodeBlocks(),150))}),this.observer.observe(document.body,{childList:!0,subtree:!0})}destroy(){this.observer&&(this.observer.disconnect(),this.observer=null),this.processedBlocks=new WeakSet}collapseAll(){document.querySelectorAll(".expressive-code.expanded").forEach(s=>{this.toggleCollapse(s)})}
8expandAll(){document.querySelectorAll(".expressive-code.collapsed").forEach(s=>{this.toggleCollapse(s)})}}const o=new c;window.CodeBlockCollapser=c;window.codeBlockCollapser=o;function a(){return window.swup?(o.log("Setting up Swup hooks"),window.swup.hooks.on("page:view",()=>{o.log("Swup page:view event - reinitializing code blocks"),o.processedBlocks=new WeakSet,setTimeout(()=>{o.setupCodeBlocks()},100)}),window.swup.hooks.on("content:replace",()=>{o.log("Swup content:replace event - preparing for reinitialization"),o.processedBlocks=new WeakSet,setTimeout(()=>{o.setupCodeBlocks()},50)}),!0):!1}if(!a()){o.log("Swup not ready, waiting for initialization"),document.addEventListener("swup:enable",()=>{o.log("Swup enabled, setting up hooks"),a()});const r=setInterval(()=>{a()&&(o.log("Swup hooks set up successfully via retry"),clearInterval(r))},100);setTimeout(()=>{clearInterval(r)},2e3)}
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.