Utilisateur:Stef48/wlunwatch.js
Un article de Wikipédia, l'encyclopédie libre.
Note : Après avoir publié la page, vous devrez forcer son rechargement pour voir les changements : Mozilla / Konqueror / Firefox : Shift-Ctrl-R, Internet Explorer / Opera : Ctrl-F5, Safari : Cmd-R.
var wlUnwatch = new function(){ var unWatchLinks = []; var watchMsg = window.wgAjaxWatch ? wgAjaxWatch.watchMsg : 'Watch'; var unwatchMsg = window.wgAjaxWatch ? wgAjaxWatch.unwatchMsg : 'Unwatch'; var wlForm; var inProgress = null; var timeoutID = null; this.onLoad = function() { //public method if (!(wlForm = document.forms[0]) || !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 = wgServer+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); } } function setUnwatchLink (unwatchLink, state) { unwatchLink.innerHTML = state ? '+' : 'x'; unwatchLink.title = state ? watchMsg : unwatchMsg; } function getPgName (unwatchLink){ return decodeURIComponent(unwatchLink.href.match(/&title=(.+)/)[1]); } function onClick(e) { if (inProgress) return false; if (!e) var e = window.event; if (e.target) var targ = e.target; else if (e.srcElement) var targ = e.srcElement; inProgress = getPgName(targ); timeoutID = window.setTimeout( function() {inProgress = null}, 10000 ); //call server var action = (targ.innerHTML == 'x') ? 'u' : 'w'; sajax_do_call('wfAjaxWatch', [inProgress, action], showResult); return false; } function showResult (request) { if (timeoutID) window.clearTimeout(timeoutID); var response = request.responseText; if (window.wlUnwatchShowMsg) jsMsg (response.substr(4), 'watch'); var name = inProgress, name2 = name, state, prefix, idx, ns = 0, pg, i, el; inProgress = null; if (response.match(/^<u#>/)) state = true else if (response.match(/^<w#>/)) state = false else return; //unrecognized response //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' : ''; } } }//obj if (wgCanonicalSpecialPageName && wgCanonicalSpecialPageName=='Watchlist' && wgAction=='view') { if (doneOnloadHook) wlUnwatch.onLoad(); //if imported dynamically else addOnloadHook (wlUnwatch.onLoad) }