MediaWiki:Gadget-quickUnwatch.js

Notă: După publicare, trebuie să treceți peste memoria cache a navigatorului pentru a putea vedea modificările:

  • Firefox / Safari: Țineți apăsat pe Shift în timp ce faceți clic pe Reîncărcare ori apăsați Ctrl-F5 sau Ctrl-R (⌘-R pe un sistem Mac);
  • Google Chrome: Apăsați Ctrl-Shift-R (⌘-Shift-R pe un sistem Mac);
  • Internet Explorer / Edge: Țineți apăsat pe Ctrl în timp ce faceți clic pe Reîmprosptare sau apăsați Ctrl-F5;
  • Opera: Apăsați Ctrl-F5.
// 2008, [[w:ro:Utilizator:Gutza]], GPL

quickUnwatch=new Object;

quickUnwatch.onLoad = function()
{
  this.unwatching=false;
  if (mw.config.get('wgCanonicalSpecialPageName') != "Watchlist") {
    return false;
  }
  var links=document.getElementsByTagName('a');
  for(var i=0;i<links.length;i++) {
    if (links[i].href.indexOf('action=history')==-1) continue;
    var article_link=links[i+1];
    var article_name=article_link.innerHTML;
    var newnode=document.createElement("span");
    newnode.innerHTML="(<a href='#' onClick='quickUnwatch.unwatch(\""+article_name+"\"); return false'>-u</a>) ";
    article_link.parentNode.insertBefore(newnode,article_link);
  }
}

quickUnwatch.unwatch = function(article)
{
  if (this.unwatching) {
    alert("Already unwatching!");
    return false;
  }
  this.unwatching=true;
  if (mw.config.get('wgCanonicalSpecialPageName') != "Watchlist") {
    return false;
  }
  var links=document.getElementsByTagName('a');
  for(var i=0;i<links.length;i++) {
    if (links[i].href.indexOf('action=history')==-1) continue;
    var article_link=links[i+2]; // we now have the "(u)" in between
    var article_name=article_link.innerHTML;
    if (article_name!=article) {
      continue;
    }
    links[i+1].innerHTML="…";
    break;
  }
  sajax_do_call(
    "wfAjaxWatch",
    [article_name, "u"], 
    quickUnwatch.processResult
  );
  // if the request isn't done in 10 seconds, allow user to try again
  wgAjaxWatch.timeoutID = window.setTimeout(
    function() { quickUnwatch.unwatching = false; quickUnwatch.restoreLink(article_name); },
    10000
  );
}

quickUnwatch.processResult = function(request)
{
  var response = request.responseText;
  if( response.match(/^<u#>/) ) {
    window.location="/w/index.php?title=Special:Watchlist&action=purge";
  } else {
    // Either we got a <err#> error code or it just plain broke.
    alert("Unwatch failed, please try again!");
    quickUnwatch.unwatching = false;
    return;
  }
  if(quickUnwatch.timeoutID) {
    window.clearTimeout(quickUnwatch.timeoutID);
  }
}

quickUnwatch.restoreLink = function(article)
{
  if (mw.config.get('wgCanonicalSpecialPageName') != "Watchlist") {
    return false;
  }
  var links=document.getElementsByTagName('a');
  for(var i=0;i<links.length;i++) {
    if (links[i].href.indexOf('action=history')==-1) continue;
    var article_link=links[i+2]; // we now have the "(u)" in between
    var article_name=article_link.innerHTML;
    if (article_name!=article) {
      continue;
    }
    links[i+1].innerHTML="-u";
    break;
  }
}

hookEvent("load", quickUnwatch.onLoad);