Utilisateur:Abecido/pos ref.js
Apparence
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.
// Positionnement des '<ref>bla bla bla</ref>' à la place d'ancre #i placées dans le texte.
// vérification que toutes les <ref> sont bien fermées, qu'il y à autant d'ancres que de refs.
// les <ref follow=..> sont ignorées.
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++;
}
// si on a besoin du caractère # dans le texte : le remplacer par XYZ
wstr2=wstr2.replace(/XYZ/g,'#');
return wstr2;
}
function notesbutton2() {
var txt = document.editform.wpTextbox1;
txt.value = notes2(txt.value);
}
$(function () {
if(document.forms.editform) {
var myPortletlink=mw.util.addPortletLink( 'p-personal', '#',
'REF', 'ca-ref', 'mise en forme REF'
);
// Bind click handler
$( myPortletlink ).click( function ( e ) {
e.preventDefault();
// doSomeStuff();
notesbutton2();
});
}
});
$(function () {
if(document.forms.editform) {
var myPortletlink=mw.util.addPortletLink( 'p-personal', '#',
'typo', 'ca-typo', 'Typo'
);
// Bind click handler
$( myPortletlink ).click( function ( e ) {
e.preventDefault();
// doSomeStuff();
$.typo.exec();
});
}
});
// ref bachaumont
function refbach(){
str=document.editform.wpTextbox1
start=str.selectionStart
end=str.selectionEnd
if(start == end){return}
strdeb=str.value.substr(0,start)
strfin=str.value.substr(end,)
sel=str.value.substr(start,end-start)
reg=/([0-9]+)\ ([\wûéè]+)\ ([0-9]+)/
pattern=new RegExp(reg)
res=sel.match(pattern)
mois=res[2].substr(0,1).toUpperCase()+res[2].substr(1).toLowerCase()
chaineout="[[Mémoires secrets de Bachaumont/"+res[3]+"/"+mois+"|"+sel+"]]"
document.editform.wpTextbox1.value=strdeb+chaineout+strfin
document.editform.wpTextbox1.selectionStart=start+chaineout.length
document.editform.wpTextbox1.selectionEnd=start+chaineout.length
document.getElementById('wpTextbox1').focus()
}