Utilisateur:Dr Brains/SuivisSousPages.js
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.if(mw.config.get('wgNamespaceNumber')%2){
var SuivisSousPages_ArticleNS = mw.config.get('wgNamespaceNumber') -1;
var SuivisSousPages_TalkNS = mw.config.get('wgNamespaceNumber');
}else{
var SuivisSousPages_ArticleNS = mw.config.get('wgNamespaceNumber');
var SuivisSousPages_TalkNS = mw.config.get('wgNamespaceNumber') +1;
}
var SuivisSousPages_ArticleNSName = mw.config.get('wgFormattedNamespaces')[SuivisSousPages_ArticleNS];
if(SuivisSousPages_ArticleNSName!='') SuivisSousPages_ArticleNSName += ':';
var SuivisSousPages_TalkNSName = mw.config.get('wgFormattedNamespaces')[SuivisSousPages_TalkNS] + ':';
$(SuivisSousPages_AddLink);
function SuivisSousPages_AddLink(){
var CaWatch = document.getElementById('ca-watch');
if(!CaWatch) CaWatch = document.getElementById('ca-unwatch');
if(!CaWatch) return;
var NewWatchLink = document.createElement('li');
NewWatchLink.id = 'ca-watch-SousPages';
NewWatchLink.innerHTML = '<span style="whitespace:nowrap;"><a style="display:inline;margin-right:0;padding-right:0;" href="javascript:SuivisSousPages_API(0);" title="Supprimer les sous-pages à la liste de suivi">(Ne plus) </a><a style="display:inline;margin-left:0;padding-left:0;" href="javascript:SuivisSousPages_API(1);" title="Ajouter les sous-pages à la liste de suivi">Suivre</a></span>';
if(mw.config.get('skin')=="vector"){
var CactionsMenu = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
CactionsMenu.appendChild(NewWatchLink);
}else{
var Ul = CaWatch.parentNode;
var Next = CaWatch.nextSibling;
if(Next){
Ul.insertBefore(NewWatchLink,Next);
}else{
Ul.appendChild(NewWatchLink);
}
}
}
function SuivisSousPages_API(watch){
var PageTitle = mw.config.get('wgTitle').split('/')[0];
var PageName = SuivisSousPages_TalkNSName + PageTitle;
var SousPagesListe = new Array();
var AdresseRequete = mw.config.get('wgServer') + '/w/api.php?action=query&list=allpages&aplimit=499&apnamespace='+SuivisSousPages_TalkNS+'&apprefix=' + PageTitle.replace(/&/g,"%26")+'/' ;
//alert(AdresseRequete);
var NouvelleRequete = new XMLHttpRequest();
NouvelleRequete.open("GET", AdresseRequete, true);
NouvelleRequete.send(null);
NouvelleRequete.onreadystatechange = function() {
if(NouvelleRequete.readyState == 4 && NouvelleRequete.status == 200) {
//alert('Reçu');
var ElementTraitement = document.createElement('div');
ElementTraitement.innerHTML = NouvelleRequete.responseText;
var Informations = ElementTraitement.getElementsByTagName('span');
for(var a=0;a<Informations.length;a++){
var ContenuInformation = Informations[a].innerHTML;
if(ContenuInformation.indexOf('title=')!=-1){
var ThisPageName = ContenuInformation.split('title="')[1].split('"')[0];
ThisPageName = ThisPageName.split(SuivisSousPages_TalkNSName).join(SuivisSousPages_ArticleNSName);
SousPagesListe.push(SuivisSousPages_Clean(ThisPageName));
}
}
if(!SousPagesListe[0]){
alert("Il n'y a aucune sous-page à ajouter ou retirer de la liste de suivi.");
return;
}
var WatchAction = "ajoutées à";
if(watch==0) WatchAction = "retirées de";
var MessageAlert = 'Les pages suivantes et leur page de discussion vont être '+WatchAction+' votre liste de suivi :\n\n';
for(var b=0;b<SousPagesListe.length;b++){
MessageAlert += '* '+SousPagesListe[b]+'\n';
}
MessageAlert += '\n Continuer ?';
var SurEtCertain = confirm(MessageAlert);
if(SurEtCertain) SuivisSousPages_Raw(SousPagesListe, watch);
}
}
}
// Nettoyage résultats requête
function SuivisSousPages_Clean(text){
while(text.indexOf('&')!=-1){
text = text.split('&').join("&");
if(text.indexOf('&')==-1) break;
}
while(text.indexOf(''')!=-1){
text = text.split(''').join("'");
if(text.indexOf(''')==-1) break;
}
while(text.indexOf('"')!=-1){
text = text.split('"').join('"');
if(text.indexOf('"')==-1) break;
}
while(text.indexOf(' ')!=-1){
text = text.split(' ').join(' ');
if(text.indexOf(' ')==-1) break;
}
return text;
}
function SuivisSousPages_Raw(SousPagesListe, watch){
var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join('Special:Watchlist/raw');
//alert(AdresseRequete);
var NouvelleRequete = new XMLHttpRequest();
NouvelleRequete.open("GET", AdresseRequete, true);
NouvelleRequete.send(null);
NouvelleRequete.onreadystatechange = function() {
if(NouvelleRequete.readyState == 4 && NouvelleRequete.status == 200) {
var ElementTraitement = document.createElement('div');
//ElementTraitement.style.display = 'none';
ElementTraitement.innerHTML = NouvelleRequete.responseText;
//document.body.insertBefore(ElementTraitement, document.body.firstChild);
var OldTitles = ElementTraitement.getElementsByTagName('textarea')[0].value;
//alert(OldTitles);
for(var a=0;a<SousPagesListe.length;a++){
if(watch==1){
OldTitles += SousPagesListe[a]+'\n';
}else{
OldTitles = OldTitles.split('\n'+SousPagesListe[a]+'\n').join('\n');
}
}
ElementTraitement.getElementsByTagName('textarea')[0].value = OldTitles;
var Form = ElementTraitement.getElementsByTagName('form')[0];
var Action = Form.action;
var count = 0;
var Token = Form.getElementsByTagName('input')[count];
while(Token.name!='token'){
count++;
Token = Form.getElementsByTagName('input')[count];
}
TokenValue = Token.value;
var boundary = '--------123xyz';
var data = '';
data += '--' + boundary + '\nContent-Disposition: form-data; name="titles"\n\n' + OldTitles + '\n'
data += '--' + boundary + '\nContent-Disposition: form-data; name="token"\n\n' + TokenValue + '\n'
var ajaxSubmit = new XMLHttpRequest();
ajaxSubmit.open('POST', Action, true);
ajaxSubmit.setRequestHeader('Content-Type', 'multipart/form-data; boundary='+boundary);
ajaxSubmit.send(data + '--' + boundary);
ajaxSubmit.onreadystatechange = function(){
if (ajaxSubmit.readyState == 4){
var ElementTraitementBis = document.createElement('div');
ElementTraitementBis.innerHTML = ajaxSubmit.responseText;
if(document.getElementById('bodyContent')) var Content = 'bodyContent';
if(document.getElementById('article')) var Content = 'article';
if(document.getElementById('mw_contentholder')) var Content = 'mw_contentholder';
var BodyContent = SuivisSousPages_getElementWithId( Content , 'div' , ElementTraitementBis );
if(!BodyContent) alert('Pas bodyContent');
var NewDiv = document.createElement('div');
NewDiv.id = 'WatchResult';
NewDiv.setAttribute('style', 'border:1px solid silver;padding:1em;margin:0.5em;');
document.getElementById(Content).parentNode.insertBefore(NewDiv, document.getElementById(Content));
BodyContent.removeChild(BodyContent.getElementsByTagName('form')[0]);
while(BodyContent.firstChild){
var FirstChild = BodyContent.firstChild;
BodyContent.removeChild(FirstChild);
NewDiv.appendChild(FirstChild);
}
var CloseLink = '<span style="float:right;">'
+'<a href="javascript:SuivisSousPages_close();" '
+'title="Cliquer pour fermer la fenêtre">Fermer</a>'
+'</span>';
NewDiv.innerHTML = CloseLink + NewDiv.innerHTML;
}
}
}
}
}
function SuivisSousPages_close(){
var Resutlts = document.getElementById('WatchResult');
if(Resutlts) Resutlts.parentNode.removeChild(Resutlts);
}
function SuivisSousPages_getElementWithId( elementId , elementTagName , elementParentNode ){
if(!elementParentNode) elementParentNode = document;
var TheElement = false;
var Elements = elementParentNode.getElementsByTagName(elementTagName);
var elementcount = 0;
while(elementcount<Elements.length){
var Id = Elements[elementcount].id;
if(Id){
if(Id==elementId){
TheElement = Elements[elementcount];
break;
}
}
elementcount++
}
return TheElement;
}