User:.anaconda/monobook.js

From Wikipedia, a free encyclopedia written in simple English for easy reading.

Note: After saving, you may have to bypass your browser's cache to see the changes. Mozilla / Firefox / Safari: hold down Shift while clicking Reload, or press Ctrl-Shift-R (Cmd-Shift-R on Apple Mac); IE: hold Ctrl while clicking Refresh, or press Ctrl-F5; Konqueror:: simply click the Reload button, or press F5; Opera users may need to completely clear their cache in Tools→Preferences.

// <pre><nowiki>

// Cosa:
//   * aggiunge tab "ultima modifica" e "purge" nelle pagine
//   * aggiunge tab "0" nelle pagine per modificare la sezione 0
//   * aggiunge link "rimuovi" nella watch list
//   * aggiunge un link al log dei blocchi nel menù "strumenti"

// Based on [[it:Utente:Helios89/monobook.js]]
// Licensed under the GFDL+GPL.

// Initialize on window load
if (window.addEventListener)
    window.addEventListener("load", myLoadFuncs,false);
else if (window.attachEvent)
    window.attachEvent("onload", myLoadFuncs);
else
{
    window.previousLoadFunction = window.onload;
    window.onload = function()
    {
        window.previousLoadFunction();
        myLoadFuncs();
    }
}

// Load custom functions
function myLoadFuncs()
{
    // tab "0" nelle pagine
    addEditSection0();
    // link "rimuovi" nella watch list
    AddUnwatch();
    // aggiunge link al menù "strumenti"
    AddToolboxLinks();

    akeytt();
}

function addEditSection0()
{
    ta['ca-edit-0'] = ['0', 'Modifica la sezione 0'];
    if (!document.getElementById)
        return;
    var x = document.getElementById('ca-edit');
    if (!x)
        return;
    var y = document.createElement('li');
    y.id = 'ca-edit-0';
    if (x.className == 'selected')
    {
        if (/&action=edit&section=0$/.test(window.location.href))
        {
            x.className = 'istalk';
            y.className = 'selected';
        } else {
            x.className = 'selected istalk';
        }
    } else if (x.className == 'selected istalk') {
        if (/&action=edit&section=0$/.test(window.location.href)) {
            x.className = 'istalk';
            y.className = 'selected istalk';
        } else {
            y.className = 'istalk';
        }
    } else {
        y.className = x.className;
        x.className = 'istalk';
    }
    var z = document.createElement('a');
    if (x.children)
    {
        z.href = x.children[0].href + '&section=0';
        z.appendChild(document.createTextNode('0'));
        y.appendChild(z);
        document.getElementById('p-cactions').children[1].insertBefore(y, x.nextSibling);
    } else {
        z.href = x.childNodes[0].href + '&section=0';
        z.appendChild(document.createTextNode('0'));
        y.appendChild(z);
        document.getElementById('p-cactions').childNodes[3].insertBefore(y, x.nextSibling);
    }
}

if (document.createElement && window.addEventListener)
{
    function SoFixItInit() // pre-load, (don't want to slow down loading of article's content, though)
    {
    }

    function SoFixItLoad() // post-load
    {
        PageMenu = new PortletMenu('p-cactions');

        function GetByClass(sElem, sClass)
        {
            var i, a2 = [], a = document.getElementsByTagName(sElem);
            for (i = 0; i < a.length; i++)
                if (a[i].className == sClass)
                    a2.push(a[i]);
            return a2;
        }

        var a, td = GetByClass('td', 'diff-otitle');
        if ((td = td[0]) && (a = td.getElementsByTagName('a')[0]))
            a.href = a.href + '&action=edit'; // need to change text, later

        // Article's tabs
        if (PageMenu['ca-history']) // If there's no history, then there's no last diff...
        {
            // tab "ultima modifica"
            PageMenu.insertBefore('ca-move', 'ca-lastdiff', 'last diff', PageMenu.getHref('ca-history').replace(/action=history/, 'redirect=no&diff=0'));
            // tab "purge"
            PageMenu.append('ca-purge', 'purge', PageMenu.getHref('ca-history').replace(/action=history/, 'action=purge'));
        }
    }

    function PortletMenu(id)
    {
        this.menu = document.getElementById(id);
        this.list = this.menu.getElementsByTagName('ul')[0]; // bypass "<h5>Views</h5>", etc.

        // sigh...as far as I can figure, there is empty whitespace being treated
        // as TextNodes....
        var LIs = this.list.getElementsByTagName('li');

        for (var i = 0; i < LIs.length; i++)
        {
            this[LIs[i].id] = LIs[i];
        }

        this.newItem = function(id, txt, url)
        {
            var li = document.createElement('li');
            li.id = id;
            var  a = document.createElement('a');
            a.href = url;
            a.appendChild(document.createTextNode(txt));
            li.appendChild(a);
            this[id] = li; // watch this!!!
            return li;
        }

        this.append = function(id, txt, url)
        {
            this.list.appendChild(this.newItem(id, txt, url));
        }

        this.insertBefore = function(old, id, txt, url)
        {
            this.list.insertBefore(this.newItem(id, txt, url), this[old]);
        }

        // the ByTagName here is a bit annoying, but in Safari, I was picking
        // up TextNodes by using this[id].firstChild.firstChild
        this.getText = function(id) { return this[id].getElementsByTagName('a')[0].firstChild.data }
        this.setText = function(id, txt) { this[id].getElementsByTagName('a')[0].firstChild.data = txt }
        this.getHref = function(id) { return this[id].getElementsByTagName('a')[0].href }
        this.setHref = function(id, url) { this[id].getElementsByTagName('a')[0].href = url }
    }

    SoFixItInit();
    window.addEventListener('load', SoFixItLoad, false);
}

function AddToolboxLinks()
{
    var tb = document.getElementById('p-tb').getElementsByTagName('ul')[0];
    addlilink(tb, '/wiki/Special:Log/block', 'Blocks log', 't-blocks');
}

function addlilink(tabs, url, name, id)
{
    var na = document.createElement('a');
    na.href = url;
    na.appendChild(document.createTextNode(name));
    var li = document.createElement('li');
    li.id = id;
    li.appendChild(na);
    tabs.appendChild(li);
    return li;
}

// Aggiunge link "rimuovi" nella watch list
function AddUnwatch()
{
    if (window.location.href.indexOf("Special:Watchlist") == -1)
        return;
    var links = document.getElementById('content').getElementsByTagName('a');
    for (var i = 0; i < links.length; i++)
    {
        if (links[i].href.substring(links[i].href.length-15) != '&action=history')
            continue;
        var unwatch = document.createElement('a');
        unwatch.href = "/w/index.php?title=Special:Watchlist&action=submit&remove=1&id[]=" + encodeURIComponent(links[i].title);
        unwatch.title = "unwatch";
        unwatch.appendChild(document.createTextNode("remove"));
        links[i].parentNode.insertBefore(unwatch, links[i].nextSibling);
        // workaround per testo "diff" senza link
        var delim = links[i].previousSibling;
        delim = (delim.nodeType == 3 ? delim.nodeValue : "");
        links[i].parentNode.insertBefore(document.createTextNode(delim.replace(/^.*diff/, "")), unwatch);
    }
}

// </nowiki></pre>