From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

// Fold Archives

// Author: Chlod

// Version: 1.0.0-REL



// Makes archived threads foldable to reduce taken screen space.

mw.hook('wikipage.content').add(function() {

	// Prevent from running twice.

	if (document.body.getAttribute("data-archives-folded") != null)

		return;

		

	document.body.toggleAttribute("data-archives-folded", true);

	

    var prefix = window.folda_prefix || "folda-";

    var maxHeight = window.folda_maxHeight || "50vh";

    var fadeGradient = window.folda_gradient || (window.folda_dark ? "linear-gradient(to bottom, transparent 70%, rgba(0,0,0,0.3) 90%, rgba(0,0,0,0.75))" : "linear-gradient(to bottom, transparent 75%, white 95%, white)")



    var archivedElements = document.querySelectorAll(".mw-body-content .boilerplate.archived");

    

    mw.util.addCSS(`.${prefix}collapsed { height: ${maxHeight}; overflow: hidden; position: relative; }`);



    mw.util.addCSS(`.${prefix}collapsed .${prefix}expander { user-select: none; display: block; bottom: 0; left: 0; position: absolute; width: 100%; height: 100%; background: ${fadeGradient}; color: black; text-align: center; padding-top: calc(${maxHeight} - 1.5rem); line-height: 1.5rem; font-style: italic; box-sizing: border-box; cursor: pointer; }`);



    archivedElements.forEach(function (element) {

    	// Prevent collapsing already-small archives.

    	var oldHeight = element.style.height;

    	var oldHeightValue = element.clientHeight;

    	element.style.height = maxHeight;

    	var newHeightValue = element.clientHeight;

    	element.style.height = "";

    	if (newHeightValue > oldHeightValue) {

    		// We're only going to make it bigger. Give up here.

    		return;

    	}

    	element.classList.add(`${prefix}collapsed`);

    	

        var expander = document.createElement("div");

        expander.classList.add(`${prefix}expander`);

        expander.innerText = "Click to expand";



        expander.onclick = () => {

        	expander.parentElement.classList.remove(`${prefix}collapsed`);

            expander.parentElement.classList.add(`${prefix}expanded`);

            expander.parentElement.removeChild(expander);

        }



        element.appendChild(expander);

    });

    

    // Scroll back to anchor if available due to scrolling changes

    if (mw.config.get("wgNamespaceNumber") !== -1 && window.location.hash && window.location.hash.length > 0)

    	document.getElementById(window.location.hash.substr(1)).scrollIntoView();

});