Utilisateur:Metrodore/pos ref.js

Note : après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Opera : Allez dans Menu → Settings (Opera → Préférences sur un Mac) et ensuite à Confidentialité & sécurité → Effacer les données d'exploration → Images et fichiers en cache.
function notes2(str){
  var deb=0;
  var fin=0;
  var nbref=0;
  var notfin=1;
  var offset=0;
  var refdeb=new Array;
  var reffin=new Array;
  var tabreg=new Array;
  var chaineref=new Array;
  var nbfollow=0;
  // chargement du texte original dans une variable de travail wstr
  wstr=str;
  // Remplacement des balises <references/> qui parasitent le traitement
  wstr=wstr.replace(/<references\/>/g,"chaine_references");
  // Retrouve les balises ouvrante et repérage d'une éventuelle <ref follow> qui ne doit pas être déplacée.
  do{
	deb=wstr.substring(offset,wstr.length).search(/<ref[^>]*>/i);
	if(deb == -1){notfin=0}
	else {
		follow=wstr.substring(offset+deb,wstr.length).search(/>/i);
		if(follow != -1){
			chainedebut=wstr.substring(offset,wstr.length).match(/<ref[^>]*>/i);
			refdeb[nbref]=new Array;
			refdeb[nbref][0]=offset+deb;
			refdeb[nbref][1]=chainedebut[0].length;
		    follow2=wstr.substring(offset+deb,offset+deb+follow).search(/follow/);
		    if(follow2 != -1){
		    	nbfollow++;
		    	refdeb[nbref][2]='f';
		    }
		    else
		    {
		    	refdeb[nbref][2]='r';
		    }			
			offset=offset+deb+chainedebut[0].length;
			nbref++;
		}
	}
		
  }while(notfin);
  // Aucune balise ref. Traitement stoppé.
  if(nbref == 0){
  	 alert('Aucune <ref> trouvée.');
  	 return str;
  }
  // 
  // Controle : nombre de <ref> = nombre de </ref>
  //
  fin=wstr.match(/<\/ref *>/ig);
  if(fin === null || fin.length != nbref){
	alert('nombre de </ref> différent au nombre de <ref>. Opération annulée.');
	return str;
  }
  refdeb[nbref]=new Array;
  refdeb[nbref][0]=str.length;
  // rechercher des balises fermantes
  for(i=0;i<nbref;i++){
  	offset=refdeb[i][0];
  	longueur=refdeb[i+1][0];
	fin=wstr.substring(offset,longueur).search(/<\/ref\ *>/i);
	if(fin == -1){
		alert("<ref> numéro"+(i+1)+" non fermée. Opération annulée");
		return str;
	}
	chainefin=wstr.substring(offset,longueur).match(/<\/ref\ *>/i);
	reffin[i]=new Array;
	reffin[i][0]=fin+offset;
	reffin[i][1]=chainefin[0].length;
  }
  // controle : nombre d'ancre = nombre de ref
  tabref=wstr.match(/#[0-9]+/g);
  if(tabref === null || tabref.length != (nbref-nbfollow)){
	if(tabref === null){nanc=0}
	else {nanc=tabref.length;}
	alert("Nombre d’ancre # = "+nanc+" <> du nombre de <ref> = "+nbref+". Opération annulée");
	return str;
  }
  offset=0;
  // suppression des chaines <ref> bla bla bla</ref>
  wstr2=wstr.substring(0,refdeb[0][0]);
  for(i=0;i<nbref;i++){
  	if(refdeb[i][2]=='r'){
    	chaineref[i]=wstr.substring(refdeb[i][0],reffin[i][0]+reffin[i][1]);
    	wstr2=wstr2+wstr.substring(reffin[i][0]+reffin[i][1],refdeb[i+1][0]);
  	}
  	else
  	{
  		wstr2=wstr2+wstr.substring(refdeb[i][0],refdeb[i+1][0]);
  	}
  }
  // Remise en place des <references/>
   wstr2=wstr2.replace(/chaine_references/g,"<references\/>");
   // remplacement des ancres.
  j=0;
  for(i=0;i<nbref;){
    if(refdeb[i][2]=='r'){
	   str1="#"+(j+1);
	   tabref=wstr2.match(str1);
		if(tabref === null ){
			alert("Ancre "+str1+" introuvable. Opération annulée");
			return str;
  		}
	   str2=chaineref[i];
	   wstr2=wstr2.replace(str1,str2);
	   j++;
    }
	i++;
   }
  
  return wstr2;
}

function notesbutton2() {
    var txt = document.editform.wpTextbox1;
    txt.value = notes2(txt.value);
}
 
$(function () {
  if(document.forms.editform) {
    mw.util.addPortletLink('p-personal', 'javascript:notesbutton2()', '<REF>', 'ca-format', 'Placement des <ref>', '', document.getElementById('ca-edit'));
  }
});