Utente:Luckyz/Sandbox

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

//

if (mw.config.get('wgCanonicalSpecialPageName') == 'Watchlist' && mw.config.get('wgAction') == 'view')
(function($){

var unWatchLinks = [];
var wlForm;
var inProgress = null;
var timeoutID = null;

function setUnwatchLink (unwatchLink, state) {
    unwatchLink.innerHTML = state ? 'segui' : 'non seguire';
}

function getPgName (unwatchLink){
    return decodeURIComponent(unwatchLink.title.match(/&title=(.+)/)[1]);
}

function onClick(e) {
    if (inProgress) return false;
    if (!e) e = window.event;
    var targ;
    if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement;
    inProgress = getPgName(targ);
    //call server
    var action = (targ.innerHTML == 'non seguire') ? 'u' : 'w';

    var response;
  
    var name = inProgress, name2 = name, state, prefix, idx, ns = 0, pg, i, el;

    //TODO: riscrivere con chiamate AJAX asincrone
    if (targ.innerHTML == 'non seguire')
    {
      response = $.ajax({
        url: mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/api.php",
        data: ({
                title: inProgress,
                action: 'watch',
                unwatch: 'unwatch',
                token: mw.user.tokens.get("watchToken"),
                format: 'xml'
        }),
        dataType: "xml",
        async: false,
        token: mw.user.tokens.get("watchToken"),
        type: "POST",
        error: function(msg){
         return;
        }
      }).responseText;
      
      state = true;
    }
    else
    {
      response = $.ajax({
        url: mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/api.php",
        data: ({
                title: inProgress,
                action: 'watch',
                token: mw.user.tokens.get("watchToken"),
                format: 'xml'
        }),
        dataType: "xml",
        async:false,
        type: "POST",
        error: function(msg){
         return;
        }
      }).responseText;

      state = false;
    }

    inProgress = null;

    //find the name of "other page"
    if ((idx = name.indexOf(':')) != -1){ //not main namespace
        prefix = name.substring(0,idx);
        name2 = name.substring(idx + 1);
        for (i = 2; i < wlForm.namespace.options.length; i++)
            if (wlForm.namespace.options[i].text == prefix)
                ns = i - 1;
        if (ns === 0) name2 = name; // guess : was a  part of the page name
    }
  
    if (ns % 2)    ns--; else ns++; //switch to  "other" namespace
    if (ns > 0) name2 = wlForm.namespace.options[ns+1].text + ':' +  name2;
  
    //now mark all pages that are either name or name2
    for (i = 0; i < unWatchLinks.length; i++)
        if ((pg = getPgName(unWatchLinks[i])) && (pg==name || pg==name2)) {
            setUnwatchLink (unWatchLinks[i], state);
            el = unWatchLinks[i]; //now mark the whole line
            while ((el = el.previousSibling) && (el.nodeName != 'DIV') && (el.nodeName != 'BR')) 
                if (el.style) el.style.textDecoration = state ? 'line-through' : '';
        }
}

$(document).ready(function() {

    var wlForm = document.getElementById('mw-watchlist-form-namespaceselector');
    if (!wlForm || !wlForm.namespace) return;

    var links = document.getElementById('content').getElementsByTagName('a');
    for (var i = 0; i < links.length; i++){ //append (x) links after history links
        if (!links[i].href.match(/[?&]action=history([&#]|$)/)) continue;
        var unwatch = document.createElement('a');
        unwatch.href = 'javascript:;';
        unwatch.title = mw.config.get('wgServer') + mw.config.get('wgScript') +
                        '?action=unwatch&title=' + encodeURIComponent(links[i].title);
        unwatch.onclick = onClick;
        unWatchLinks.push(unwatch);
        var nextEl = links[i].nextSibling.nextSibling; //item after )
        nextEl.parentNode.insertBefore(document.createTextNode(' ('), nextEl);
        nextEl.parentNode.insertBefore(unwatch, nextEl);
        nextEl.parentNode.insertBefore(document.createTextNode(') '), nextEl);
        setUnwatchLink(unwatch, false);
    }
});

})(jQuery);

//