Utilisateur:Darkoneko/addStopInWatchlist.js

Une page de Wikipédia, l'encyclopédie libre.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
//Ajoute un "stop" sur special:watchlist pour enlever facilement des pages de son suivi
function add_stop_in_watchlist() {
  var allDays = document.getElementsByTagName("ul");
 
  for (var a=0, len = allDays.length; a < len; a++) {
    //pour ne pas choper les autres "<ul>" de la page. On veux juste ceux des jours de la watchlist
    if (allDays[a].getAttribute("class") != "special") continue; 
 
    var artList = allDays[a].getElementsByTagName("li");
    for (var b=0, len2 = artList.length ; b < len2; b++) {
    	var aTag = artList[b].getElementsByTagName("a");
	var articleName = aTag[0].getAttribute("title");
        if( articleName === null ) {
            continue; // ligne wikidata. Reste à trouver une méthode alternative pour récup le titre
        } else {
            if( articleName.indexOf("Spécial:") != -1) continue; //pas sur les liens de log de renommage/suppression/etc.
        }
	if (aTag[0].childNodes[0].data == "diff") { // séparation des cas (nouvel article, ou déjà existant)
	  var lastLink = $(aTag[1]);
	} else {
	  var lastLink = $(aTag[0]);
	}
    var stopLink = $('<a href="#">stop</a>')
      .click({articleName: articleName}, function (e) {
        e.preventDefault();
        remove_page_from_watchlist(this, e.data.articleName);
      });
    lastLink.after(") (", stopLink);
    }
  }
}

function remove_page_from_watchlist(p_this, page_name) {
  var req = { 
      action: 'watch', 
      format: 'json', 
      title: page_name,
      unwatch: '',
      token: mw.user.tokens.get('watchToken')
  };
  $.ajax({ 
    type:'POST', dataType: 'json', 
    url: mw.util.wikiScript( 'api' ),
    data: req,
    timeout: 5000,
    success: function(resp){
      if( resp.error ) alert(resp.error.info);
      else if( !resp.watch ) alert('empty response');
      else if( typeof resp.watch.unwatched == 'string') p_this.parentNode.style.setProperty("text-decoration", "line-through", ''); //on barre la ligne qui n'est plus suivie (plus pratique si misclick)
      else alert('unrecognized response');
    }
  } );
}

if( mw.config.get('wgNamespaceNumber') == -1 && mw.config.get('wgCanonicalSpecialPageName') == "Watchlist" )  {
	mw.loader.using( 'mediawiki.util', function() {
		$( add_stop_in_watchlist );
	} );
}