MediaWiki:Gadget-CollapsibleTables.js

Z Nonsensopedii, polskiej encyklopedii humoru

Uwaga: aby zobaczyć zmiany po zapisaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5 lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer: Przytrzymaj Ctrl jednocześnie klikając Odśwież lub naciśnij klawisze Ctrl+F5
  • Konqueror: Kliknij polecenie Odśwież lub naciśnij klawisz F5
  • Opera: Wyczyść pamięć podręczną w Narzędzia → Preferencje
/** Collapsible tables **
 *  Description: Allows tables to be collapsed, showing only the header. See
 *  [[en:Wikipedia:NavFrame]].
 *  Maintainers: [[User:R. Koot]]
 *  Zmodyfikowane przez [[User:Polskacafe]]
 */

/*
	Wartości collapseCaption i expandCaption można zmieniać z poziomu tabeli z użyciem data-expand-text, data-collapse-text i data-width (w przypadku gdy tekst jest za długi).
*/
var autoCollapse = 2;
var collapseCaption = "Ukryj";
var expandCaption = "Pokaż";

function collapseTable(tableIndex) {
    var i;
    var Button = document.getElementById("collapseButton" + tableIndex);
    var Table = document.getElementById("collapsibleTable" + tableIndex);

    if (!Table || !Button) { return false; }
    var Rows = Table.rows;

    if (Button.firstChild.data == collapseCaption || Button.firstChild.data == Table.dataset.collapseText) {
        for (i = 1; i < Rows.length; i++) {
            Rows[i].style.display = "none";
        }
        if (!Table.dataset.expandText) {
        	Button.firstChild.data = expandCaption;
        } else { 
        	Button.firstChild.data = Table.dataset.expandText;
        }
    } else {
        for (i = 1; i < Rows.length; i++) {
            Rows[i].style.display = Rows[0].style.display;
        }
        if (!Table.dataset.collapseText) {
        	Button.firstChild.data = collapseCaption;
        } else { 
        	Button.firstChild.data = Table.dataset.collapseText;
        }
    }
}

function createCollapseButtons() {
    var i;
    var tableIndex = 0;
    var NavigationBoxes = {};
    var Tables = document.getElementsByTagName("table");

    for (i = 0; i < Tables.length; i++) {
        if ($(Tables[i]).hasClass( "collapsible")) {

            /* only add button and increment count if there is a header row to work with */
            var HeaderRow = Tables[i].getElementsByTagName("tr")[0];
            if (!HeaderRow) continue;
            var Header = HeaderRow.getElementsByTagName("th")[0];
            if (!Header) continue;

            NavigationBoxes[tableIndex] = Tables[i];
            Tables[i].setAttribute("id", "collapsibleTable" + tableIndex);

            var Button = document.createElement("span");
            var ButtonLink = document.createElement("a");
            var ButtonText = document.createTextNode(collapseCaption);

            Button.style.styleFloat = "right";
            Button.style.cssFloat = "right";
            Button.style.fontWeight = "normal";
            Button.style.textAlign = "right";
            if (!Tables[i].dataset.width) {
            	Button.style.width = "6em";
            } else {
            	Button.style.width = Tables[i].dataset.width;
            }
            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute("id", "collapseButton" + tableIndex);
            ButtonLink.setAttribute("data-no", tableIndex);
            $(ButtonLink).click(function(){
				var tableIndex = $(this).attr('data-no');
			    var i;
			    var Button = document.getElementById("collapseButton" + tableIndex);
			    var Table = document.getElementById("collapsibleTable" + tableIndex);
			
			    if (!Table || !Button) { return false; }
			    var Rows = Table.rows;
			
			    if (Button.firstChild.data == collapseCaption || Button.firstChild.data == Table.dataset.collapseText) {
			        for (i = 1; i < Rows.length; i++) {
			            Rows[i].style.display = "none";
			        }
			        if (!Table.dataset.expandText) {
			        	Button.firstChild.data = expandCaption;
			        } else { 
			        	Button.firstChild.data = Table.dataset.expandText;
			        }
			    } else {
			        for (i = 1; i < Rows.length; i++) {
			            Rows[i].style.display = Rows[0].style.display;
			        }
			        if (!Table.dataset.collapseText) {
			        	Button.firstChild.data = collapseCaption;
			        } else { 
			        	Button.firstChild.data = Table.dataset.collapseText;
			        }
			    }
            });
            ButtonLink.appendChild(ButtonText);

            Button.appendChild(document.createTextNode("["));
            Button.appendChild(ButtonLink);
            Button.appendChild(document.createTextNode("]"));

            Header.insertBefore(Button, Header.childNodes[0]);
            tableIndex++;
        }
    }

    for (i = 0; i < tableIndex; i++) {
        if ($(NavigationBoxes[i]).hasClass("collapsed") || (tableIndex >= autoCollapse && $(NavigationBoxes[i]).hasClass("autocollapse"))) {
            collapseTable(i);
        } else if ($(NavigationBoxes[i]).hasClass("innercollapse")) {
            var element = NavigationBoxes[i];
            while (element = element.parentNode) {
                if ($(element).hasClass("outercollapse")) {
                    collapseTable(i);
                    break;
                }
            }
        }
    }
}
jQuery(document).ready(createCollapseButtons);