MediaWiki:Cavendish.js

From Frack - Hackerspace Friesland
Jump to navigationJump to search

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
// /////////////////////////////////////////////
// Top of page menu
// /////////////////////////////////////////////

// Restructure the tooltip menu
var listContainer = $('<div id="user-menu">');
var userMenu = $('<ul>');
var userPageLink = $('#pt-userpage');
userPageLink.append(listContainer);
userPageLink.find('a').append('<img src="/w/extensions/Vector/modules/images/open.png">');
listContainer.append(userMenu);

// Move links into the new userMenu list
$('#pt-mytalk').appendTo(userMenu);
$('#pt-preferences').appendTo(userMenu);
$('#pt-watchlist').appendTo(userMenu);
$('#pt-mycontris').appendTo(userMenu);
$('#pt-logout').appendTo(userMenu);

// Clean up Cavendish menu tag rubbish
$('#user-menu .top-nav-left').detach();
$('#user-menu .top-nav-mid').removeClass('top-nav-mid');
$('#user-menu .top-nav-right').detach();

// Open the menu when hovered, close after of being outside of it for 300ms
var userMenuClosed = true;
var userMenuCloseHandle = undefined;
userPageLink.hover(function() {
    clearTimeout(userMenuCloseHandle);
    if (userMenuClosed) {
        userMenuClosed = false;
        $('#user-menu').slideDown(250);
    }
}, function() {
    userMenuCloseHandle = setTimeout(function () {
        $('#user-menu').slideUp(250, function() {
            userMenuClosed = true;
        });
    }, 300);
});

// /////////////////////////////////////////////
// "New" Button
// /////////////////////////////////////////////
var addPageMenu = {
    "Projecten": {"url": "Form:Project", "label": "Add Project"},
    "Meetings": {"url":"Form:Meeting", "label": "Add Meeting"},
    "Activiteiten": {"url": "Form:Activiteit", "label": "Add Event"}};
var pageName = $("#firstHeading").text();
if (addPageMenu[pageName]) {
    var createNewPage = addPageMenu[pageName];
    $("#p-cactions > ul").append(
        "<li><a href='/wiki/" + createNewPage["url"] + "'>" + createNewPage["label"] +"</a></li>");
}

// /////////////////////////////////////////////
// Folding page menu
// /////////////////////////////////////////////

// Nodes to fold away in the menu below
var foldAwayLinks = ['ca-talk', 'ca-history', 'ca-delete', 'ca-editschema', 'ca-move', 
                     'ca-protect', 'ca-unprotect', 'ca-watch', 'ca-unwatch', 'ca-purge'];
$("#p-cactions ul").append("<li id='pagemenu_fold'><img src='/w/extensions/Vector/modules/images/open.png'><ul></ul></li>");
var pageMenu = $('#pagemenu_fold ul');
for (index in foldAwayLinks) {
    $("#" + foldAwayLinks[index]).appendTo(pageMenu);
};
// Hide the menu button if it has no nodes inside
if (!pageMenu.children().length) {
    $("#pagemenu_fold").hide()
}

// Open the menu when hovered, close after of being outside of it for 300ms
var pageMenuClosed = true;
var pageMenuCloseHandle = undefined;
$('#pagemenu_fold').hover(function() {
    clearTimeout(pageMenuCloseHandle);
    if (pageMenuClosed) {
        pageMenuClosed = false;
        pageMenu.slideDown(250);
    }
}, function() {
    pageMenuCloseHandle = setTimeout(function () {
        pageMenu.slideUp(250, function() {
            pageMenuClosed = true;
        });
    }, 300);
});

// ////////////////////////////////////////////
// Tracking open state for left hand menu
// /////////////////////////////////////////////

var navigationHeaders = $('#nav > div > h3');
navigationHeaders.last().find('+ div').hide();
navigationHeaders.last().addClass('collapsed');
navigationHeaders.each(function() {
    $(this).attr('id', $(this).text());
    toggleMenu(this);
    checkCookie(this);
});

function checkCookie(id) {
    var cookieName = id.id;
    var c = readCookie(cookieName);
    if(c === 'show') {
        $(id).each(function() {
            $(this).find("+ div").slideDown('fast');
        });
    }
}

function toggleMenu(id) {
    $(id).click(function() {
        togglePlusMinus(this);
        $(this).find("+ div").slideToggle("fast");
        $(this).toggleClass("collapsed");
    });
}

function togglePlusMinus(id) {
    $(id).each(function() {
    if($(this).find("+ div").is(':visible')) {
        eraseCookie(this.id);
    } else {
        createCookie(this.id, 'show', 365);
    }
    });
}

// cookie functions http://www.quirksmode.org/js/cookies.html
function createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    } else {
        var expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i=0; i < ca.length; i++) {
        var c = ca[i]
        while (c.charAt(0)==' ') {
            c = c.substring(1, c.length);
        }
        if (c.indexOf(nameEQ) == 0) {
            return c.substring(nameEQ.length, c.length);
        }
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}