<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://paradise14.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-CollapseAllButton.js</id>
	<title>MediaWiki:Gadget-CollapseAllButton.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://paradise14.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-CollapseAllButton.js"/>
	<link rel="alternate" type="text/html" href="https://paradise14.org/wiki/index.php?title=MediaWiki:Gadget-CollapseAllButton.js&amp;action=history"/>
	<updated>2026-11-02T10:22:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>https://paradise14.org/wiki/index.php?title=MediaWiki:Gadget-CollapseAllButton.js&amp;diff=16758&amp;oldid=prev</id>
		<title>imported&gt;Vasilis: Add Aliser requested js</title>
		<link rel="alternate" type="text/html" href="https://paradise14.org/wiki/index.php?title=MediaWiki:Gadget-CollapseAllButton.js&amp;diff=16758&amp;oldid=prev"/>
		<updated>2025-05-29T22:09:08Z</updated>

		<summary type="html">&lt;p&gt;Add Aliser requested js&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
/** Class name of an element that holds a collapse all button. */&lt;br /&gt;
const collapseAllButtonContainerClass = &amp;quot;collapsible-toggle-container&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/** Class name of an actual collapse all button. */&lt;br /&gt;
const collapseAllButtonClass = &amp;quot;mw-collapsible-toggle&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/** Data attribute on the collapse all button container element, &lt;br /&gt;
 * that specifies a class name for a collapsable elements container that the collapse all button shall target. */&lt;br /&gt;
const collapsibleContainerDataAttr = &amp;quot;data-target-class&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/** The initial part of a custom toggle class name. */&lt;br /&gt;
const customToggleClassPrefix = &amp;quot;mw-customtoggle&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/** Class name for collapsible elements. */&lt;br /&gt;
const collapsibleClass = &amp;quot;mw-collapsible&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/** Class name for collapsed elements. */&lt;br /&gt;
const collapsedClass = &amp;quot;mw-collapsed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
const logPrefix = &amp;quot;Gadget-ExpandAllReagents&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// ===========&lt;br /&gt;
&lt;br /&gt;
mw.hook(&amp;#039;wikipage.content&amp;#039;).add((content) =&amp;gt; {&lt;br /&gt;
    /** @type {HTMLElement} */&lt;br /&gt;
    const contentEl = content[0];&lt;br /&gt;
&lt;br /&gt;
    // small timeout to prevent race condition with underlying jquery&lt;br /&gt;
    // that works the collapsible magic.&lt;br /&gt;
    setTimeout(() =&amp;gt; {&lt;br /&gt;
        for (const collapseAllButtonContainerEl of contentEl.getElementsByClassName(collapseAllButtonContainerClass)) {&lt;br /&gt;
            const collapseAllButton = collapseAllButtonContainerEl.getElementsByClassName(collapseAllButtonClass)[0];&lt;br /&gt;
            if (!collapseAllButton) {&lt;br /&gt;
                logWarn(&amp;quot;failed to find a collapse all button inside a collapse all button container element&amp;quot;);&lt;br /&gt;
                console.warn({&lt;br /&gt;
                    collapseAllButtonContainerEl&lt;br /&gt;
                })&lt;br /&gt;
                continue;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            const collapsibleContainerClass = collapseAllButtonContainerEl.getAttribute(collapsibleContainerDataAttr);&lt;br /&gt;
            if (!collapsibleContainerClass) {&lt;br /&gt;
                logWarn(&amp;quot;collapsible container data attribute not found on the collapse all button container element&amp;quot;);&lt;br /&gt;
                console.warn({&lt;br /&gt;
                    collapseAllButtonContainerEl&lt;br /&gt;
                })&lt;br /&gt;
                continue;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            let toggleEls = new Set();&lt;br /&gt;
            /** Whether the initial querying of the toggle elements has been done. */&lt;br /&gt;
            let initialized = false;&lt;br /&gt;
&lt;br /&gt;
            collapseAllButton.addEventListener(&amp;#039;click&amp;#039;, () =&amp;gt; {&lt;br /&gt;
                if (!initialized) {&lt;br /&gt;
                    const collapsibleContainerEls = contentEl.getElementsByClassName(collapsibleContainerClass);&lt;br /&gt;
&lt;br /&gt;
                    for (const collapsibleContainerEl of collapsibleContainerEls) {&lt;br /&gt;
                        for (const toggleEl of collapsibleContainerEl.querySelectorAll(`[class*=&amp;#039;${customToggleClassPrefix}&amp;#039;]`)) {&lt;br /&gt;
                            toggleEls.add(toggleEl);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    initialized = true;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                toggleEls.forEach(el =&amp;gt; el.click());&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
    }, 250)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// ===========&lt;br /&gt;
&lt;br /&gt;
function joinLogPrefixWithMessage(msg) {&lt;br /&gt;
    return logPrefix + &amp;quot; &amp;quot; + msg;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function logWarn(msg) {&lt;br /&gt;
    console.warn(joinLogPrefixWithMessage(msg));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function throwErr(msg) {&lt;br /&gt;
    throw new Error(joinLogPrefixWithMessage(msg));&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>imported&gt;Vasilis</name></author>
	</entry>
</feed>