Utilisateur:Seudo/sd commandes.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.
/*
Commandes personnelles, ajoutées dans le menu "Plus".
Peuvent être temporaires pour un livre donné.
*/
/* Nécessaire pour encoder des chaînes Unicode arbitraires en Javascript
(cf. https://developer.mozilla.org/fr/docs/Web/API/WindowBase64/btoa) */
// Chaîne ucs-2 en ascii encodé en base64
function uena(chn) {
return window.btoa(unescape(encodeURIComponent(chn)));
}
// Ascii encodé en base64 en chaîne ucs-2
function aenu(chn) {
return decodeURIComponent(escape(window.atob(chn)));
}
/* Livre:Lois des Francs contenant la Loi salique et la Loi ripuaire.djvu */
function typographie_loi_salique(e) {
e.preventDefault();
try {
editbox = $("#wpTextbox1");
if(! editbox.length) {
OO.ui.alert("Cette page ne contient pas de champ d'édition");
return;
}
var content = editbox.val();
content = content.replace(/(\d+)ooo/g, "$1000");
content = content.replace(/(\d+)oo/g, "$100");
content = content.replace(/(\d+)o/g, "$10");
content = content.replace(/éà/g, "é à");
content = content.replace(/àp/g, "à p");
content = content.replace(/con\s+damné/g, "condamné");
content = content.replace(/ART[,\.\s]+([IVX]+)[,\.\s]/g, "{{c|ART. $1.}}");
content = content.replace(/\{\{c\|\{\{c\|ART. ([IVX]+).\}\}\}\}/g, "{{c|ART. $1.}}");
content = content.replace(/(\w) *, *(\w)/g, "$1, $2");
editbox.val(content);
}
catch(exc) {
OO.ui.alert("Erreur : " + exc);
return;
}
}
/* Insère du texte au niveau du curseur dans le champ d'édition */
function inserer(e, txt) {
e.preventDefault();
try {
editbox = $("#wpTextbox1");
if(! editbox.length) {
OO.ui.alert("Cette page ne contient pas de champ d'édition");
return;
}
var startPos = editbox[0].selectionStart;
var endPos = editbox[0].selectionEnd;
var textScroll = editbox[0].scrollTop;
var content = editbox.val();
var newcontent = content.substring(0, startPos) + txt + content.substring(startPos);
editbox.val(newcontent);
editbox[0].selectionStart = startPos;
editbox[0].selectionEnd = editbox.selectionStart;
editbox[0].scrollTop = textScroll;
}
catch(exc) {
OO.ui.alert("Erreur : " + exc);
return;
}
}
/* Le moyen de parvenir, tome 1 (Béroalde de Verville, éd. 1896).djvu */
function typographie_moyen_parvenir(e) {
e.preventDefault();
try {
editbox = $("#wpTextbox1");
if(! editbox.length) {
OO.ui.alert("Cette page ne contient pas de champ d'édition");
return;
}
var content = editbox.val();
/* Spécifique */
content = content.replace(/&\./g, "&");
content = content.replace(/ss/g, "ſſ");
content = content.replace(/s([a-eg-rt-zâéèêîôû])/g, "ſ$1");
content = content.replace(/nbſp/g, "nbsp");
/* Coquilles d’OCR courantes */
content = content.replace(/\bcelte\b/g, "cette");
content = content.replace(/ h /g, " à ");
editbox.val(content);
}
catch(exc) {
OO.ui.alert("Erreur : " + exc);
return;
}
}
function apply_typographie(content) {
/* On encode ce qui est entre [[...]], {{...}} ou <...> pour éviter des fausses corrections. */
content = content.replace(/(?:\[.*?\]|\{\{.*?\}\}|<code>.*?<\/code>|<nowiki>.*?<\/nowiki>|<[^>]+>|https?:|ftps?:)/g, function(m) {
return "@@BASE64(" + uena(m) + ")";
});
/* Ponctuation, sauf dans une entité HTML */
content = content.replace(/&\w+;| [;:?!]|([;:?!])/g, function(m) {
return(m.match('^[;:?!]$') ? " " + m : m);
});
/* Apostrophe française (sauf dans une mise en forme italique ou grasse,
cf. http://www.rexegg.com/regex-best-trick.html) */
content = content.replace(/''+|(')/g, function(m) {
return (m == "'" ? "’" : m);
});
// content = content.replace(/(^|[^'])'([^']|$)/g, "$1’$2"); /* Seulement une apostrophe */
/* Mon système de remplacement automatique de caractères anciens ne fonctionne pas toujours */
content = content.replace(/\$s/g, "ſ");
/* Espaces insécables */
content = content.replace(/\bMM\.\s+([A-ZÂÉÎÔ][\w’'-]+)/g, "{{MM.|$1}}");
content = content.replace(/\bM\.\s+([A-ZÂÉÎÔ][\w’'-]+)/g, "{{M.|$1}}");
content = content.replace(/\bMme\s+([A-ZÂÉÎÔ][\w’'-]+)/g, "{{Mme|$1}}");
content = content.replace(/\b(\d+(?:\s+\d\d\d)+)\b/g, "{{lié|$1}}");
content = content.replace(/(\d+)\s+(secondes*|minutes*|heures*|jours*|mois|années*)/g, "$1 $2");
/* Césures de mots en fin de ligne */
content = content.replace(/-\n/g, "");
/* Coquilles d’OCR courantes */
//content = content.replace(/\bcelte\b/g, "cette");
//content = content.replace(/ h /g, " à ");
/* Références bibliographiques */
content = content.replace(/\bp\.\s+([\d-]+)/g, "{{pg|$1}}");
content = content.replace(/\bP\.\s+([\d-]+)/g, "{{pg|$1|cap}}");
content = content.replace(/\bt\.\s+([\dIVXLC-]+)/g, "{{t|$1}}");
content = content.replace(/\bT\.\s+([\dIVXLC-]+)/g, "{{t|$1|cap}}");
content = content.replace(/\bfol\.\s+([\dIVXLC-]+)/g, "{{fol.|$1}}");
content = content.replace(/\bFol\.\s+([\dIVXLC-]+)/g, "{{fol.|$1|cap}}");
content = content.replace(/\bart\.\s+([\d-]+)/g, "{{art.|$1}}");
content = content.replace(/\bArt\.\s+([\d-]+)/g, "{{art.|$1|cap}}");
/* Date */
content = content.replace(/(\d+)\s+(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/g, "$1{{lié}}$2");
/* Décodage de ce qui a été encodé */
content = content.replace(/@@BASE64\(([^\)]+)\)/g, function(m, n) {
return(aenu(n));
});
return content;
}
/* Traité de Porphyre, touchant l'abstinence de la chair des animaux.djvu */
function typographie_porphyre(e) {
e.preventDefault();
try {
editbox = $("#wpTextbox1");
if(! editbox.length) {
OO.ui.alert("Cette page ne contient pas de champ d'édition");
return;
}
var content = editbox.val();
content = apply_typographie(content);
editbox.val(content);
}
catch(exc) {
OO.ui.alert("Erreur : " + exc);
return;
}
}
/* Livre:Crémazy - Le Code pénal de la Corée, 1904.pdf */
function typographie_cp_coreen(e) {
e.preventDefault();
try {
editbox = $("#wpTextbox1");
if(! editbox.length) {
OO.ui.alert("Cette page ne contient pas de champ d'édition");
return;
}
var content = editbox.val();
content = apply_typographie(content);
editbox.val(content);
}
catch(exc) {
OO.ui.alert("Erreur : " + exc);
return;
}
}
/* Corrections typographiques de base */
function typographie(e) {
e.preventDefault();
try {
editbox = $("#wpTextbox1");
if(! editbox.length) {
OO.ui.alert("Cette page ne contient pas de champ d'édition");
return;
}
var content = editbox.val();
content = apply_typographie(content);
editbox.val(content);
}
catch(exc) {
OO.ui.alert("Erreur : " + exc);
return;
}
}
/* Insère un appel de note dans les Vies de Vasari */
function vasari_appel_note(e) {
OO.ui.prompt('Numéro de la note', {
textInput: {
placeholder: 'Numéro'
}
}).done(function(result) {
if(result !== null) {
txt = " {{refl|" + result + "|nosup|num=(" + result + ")}}";
inserer(e, txt);
}
});
}
function addCommande(libelle, id, desc, fn) {
mw.util.addPortletLink("p-cactions",
"#",
libelle,
id,
desc);
$('#' + id).on('click', function(e) {
fn(e);
});
}
function addCommandeInsererTexte(libelle, id, desc, txt) {
mw.util.addPortletLink("p-cactions",
"#",
libelle,
id,
desc);
$('#' + id).on('click', function(e) {
inserer(e, txt);
});
}
$(function($) {
/* Ouvrage terminé :
addCommande("Typo Porphyre",
"sd-typoporphyre",
"Typographie Porphyre",
typographie_porphyre);
addCommande("Typo Loi salique",
"sd-typosalique",
"Loi salique",
typographie_loi_salique);
addCommande("Typo parvenir",
"sd-typoparvenir",
"Moyen de parvenir",
typographie_moyen_parvenir);
addCommandeInsererTexte("Pétrarque intertitre",
"sd-petrarque-intertitre",
"Pétrarque - Insérer un titre de sonnet ou de canzone",
"\n{{t3|SONNET .}}\n{{interligne|1em}}\n{{c|.|fs=90%}}\n{{interligne|1em}}\n");
addCommandeInsererTexte("Ripa section",
"sd-ripa-section",
"Iconologie de Cesare Ripa - Insère un séparateur et le titre d’une nouvelle section",
"## fin ##\n<hr />\n## l_automne ##\n{{t3|{{uc|L’avtomne}}.}}\n{{PM|I|L}} ");
*/
addCommande("Typo",
"sd-typo",
"Typographie générale",
typographie);
addCommande("Typo_cp_coreen",
"sd-typo-cp-coreen",
"Typographie CP coréen",
typographie_cp_coreen);
addCommande("Vasari appel note",
"sd-vasari-appel-note",
"Vasari - appel de note",
vasari_appel_note);
addCommandeInsererTexte("Vasari notes",
"sd-vasari-notes",
"Vasari - Intégrer les notes",
"\n{{interligne|2em}}\n[[File :Vasari - Vies des peintres - separateur.jpg|70px|center]]\n{{interligne|3em}}\n\n{{c| NOTES.|fs=120%|lh=2}}\n{{brn|2}}\n\n{{Refa|1|(1)}} ");
addCommandeInsererTexte("Vasari séparateur",
"sd-vasari-separateur",
"Vasari - Insère le séparateur entre texte et commentaire",
"{{brn|2}}\n[[File :Vasari - Vies des peintres - separateur simple.jpg|center|65px]]\n{{brn|2}}\n");
});