MediaWiki:Common.js

Aus WIKI LAUER-FISCHER GmbH
Wechseln zu: Navigation, Suche
// Delete WINAPO SQL from Addon-Produkte and insert a new link after Addon-Produkte.
// That way WINAPO SQL looks like big link and is not affected by slideToggle() on Addon-Produkte.
jQuery(document).ready(function () {
    if (jQuery("#n-WINAPO-SQL").length > 0) {
        var sql_margin_top = jQuery("#n-WINAPO-SQL a").css("margin-top");
        var sql_margin_bottom = "calc(" + jQuery("#p-AddOn-Produkte").css("margin-bottom") + " + " + jQuery("#p-AddOn-Produkte div").css("padding-bottom") + ")";
        var sql_font_size = jQuery("#n-WINAPO-SQL a").css("font-size");
        var sql_padding_left = jQuery("#p-search > h3").css("padding-left");
        var sql_line_height = jQuery("#n-WINAPO-SQL a").css("line-height");
        var sql_height = jQuery("#n-WINAPO-SQL a").css("height");


        jQuery("#n-WINAPO-SQL").detach();
        jQuery("#p-AddOn-Produkte").css({ "margin-bottom": "0px" });
        jQuery("#p-AddOn-Produkte div").css({ "padding-bottom": "0px" });
        jQuery("#p-AddOn-Produkte").after("<a href=\"/Kategorie:WINAPO_SQL\" class=\"portlet generated-sidebar\"><h3>WINAPO SQL</h3></a>");
        jQuery("#p-AddOn-Produkte + a > h3").css({ "margin-bottom": "0px", "margin-top": "0px", "padding-left": sql_padding_left, "padding-top": "0px", "padding-bottom": "0px", "font-size": sql_font_size, "line-height": sql_line_height, "height": sql_height });
        jQuery("#p-AddOn-Produkte + a").css({ "display": "block", "margin-bottom": sql_margin_bottom, "margin-top": sql_margin_top, "padding-top": "0px", "padding-bottom": "0px" });
    }

    // Register slideToggle() on each category.
    jQuery("div.generated-sidebar.portlet").each(makeOnClick);
    makeOnClick.defaultExpanded = false;
    jQuery("#p-tb").each(makeOnClick);
});

// Registers the slideToggle() function on this and sets up the cookie
function makeOnClick(n) {
    "use strict";
    
    if (makeOnClick.defaultExpanded === undefined) {
        makeOnClick.defaultExpanded = true;
    }

    if (makeOnClick.n === undefined) {
        makeOnClick.n = 0;
    }

    if (makeOnClick.n > n) {
        n = makeOnClick.n + 1;
        makeOnClick.n++;
    }
    else {
        makeOnClick.n = n;
    }

    jQuery(this).attr({ "role": "button", "type": "button" });

    var expanded = makeOnClick.defaultExpanded

    var cookie = getCookie("showSection" + n);

    if (cookie === null) {
        setStateCookie(n, expanded);
    }
    else {
        expanded = cookie === "1";
    }

    jQuery(this).children("h3").attr("aria-pressed", expanded ? "true" : "false");
    jQuery(this).children("h3").addClass(expanded ? "nav-expanded" : "nav-collapsed");

    if (expanded == false) {
        jQuery(this).children("div").hide();
    }

    jQuery(this).children("h3").click(function () {
        var newExpanded = jQuery(this).attr("aria-pressed") !== "true";
        setStateCookie(n, newExpanded);

        if (newExpanded) {
            jQuery(this).removeClass("nav-collapsed");
            jQuery(this).addClass("nav-expanded");
        }
        else {
            jQuery(this).removeClass("nav-expanded");
            jQuery(this).addClass("nav-collapsed");
        }

        jQuery(this).attr("aria-pressed", newExpanded ? "true" : "false");

        setTimeout(function (e) { e.slideToggle('fast') }, 0, jQuery(this).parent().children("div.pBody:first-of-type"));
    })

    function getCookie(key) {
        "use strict";
        var cookieQuery = document.cookie.match('(?:^|;)\\s*' + key + '\\s*=\\s*([^;]+)');

        return cookieQuery === null ? null : cookieQuery.pop();
    }

    // Writes the  state of the k-th section into a cookie.
    function setStateCookie(k, expanded) {
        "use strict";
        var now = new Date();
        now.setFullYear(now.getFullYear() + 3);

        var expirationDate = now.toUTCString();

        var cookie = "showSection" + k.toString() + "=" + (expanded ? "1" : "0") + "; Expires=" + expirationDate + "; path=/";

        document.cookie = cookie;
    }
}