Utilisateur:Chroll/vector.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.
// 1111 ) Boutons supplémentaires dans le menu 'Avancé'
// 2222 ) Boutons supplémentaires dans le menu 'Avancé' permettant de modifier le texte sélectionné
// 3333 ) Remplacement 'à la volée' pour certaines lettres accentuées et autres caractères spéciaux
// 4444 ) Actions déclenchées par CTRL ou ALT + <un caractère> (BEGIN pour l'instant)
//=================================================================================================
// 1111 ///////////////////////////// Boutons supplémentaires dans le menu 'Avancé'
/**
* Extra buttons in toolbar
* @stats [[File:Krinkle_InsertWikiEditorButton.js]]
*/
/**
* krInsertWikiEditorButton
*
* @param options {Object} An object with options:
* - section {String} (optional) The name of the section in the WikiEditor. Defaults to 'main'
* - group {String} (optional) The name of the group in the WikiEditor. Defaults to 'insert'
* - id {String} (required) Unique id (ie. 'my-button')
* - icon {String} (recommended) URL to the icon, should be square about 21 to 22px
* - label {String} (required) Tooltip displayed when hovering button
* - insertBefore {String} (optional) Wikitext to be inserted before the cursor on-click
* - sampleText {String} (optional) Text inserted in place of the cursor if no text was selected
* - insertAfter {String} (optional) Wikitext to be inserted after the cursor on-click
* - callback {Function} (optional) Called when the button is clicked
* - autoSummary {mixed} (optional) Null or an Object with the following properties:
* - summary {String} (required) Edit summary that should be used
* - position {String} (optional) 'append', 'prepend' or 'replace'
* - delimiter {String} (optional) delimiter between the (possibly) current summary and the to-be-inserted summary
*/
$.ajax({
url: 'https://meta.wikimedia.org/w/index.php?title=User:Krinkle/Scripts/InsertWikiEditorButton.js&action=raw&ctype=text/javascript',
dataType: 'script',
cache: true
}).done(function () {
// modèle lpl ; exemple : {{lpl|d=|p=|ep=Mémoires d’outre-tombe/=|l=|a=}}
krInsertWikiEditorButton({
section: "advanced",
group: "insert",
id: "mw-customeditbutton-lpl",
icon: '//upload.wikimedia.org/wikipedia/commons/4/4e/VisualEditor_-_Icon_-_Bold_L.svg',
label: 'Insérer {{lpl}}',
insertBefore: '{{lpl|d=|p=|ep=Mémoires d’outre-tombe/=|l=|a=',
insertAfter: '}}',
sampleText: 'lien lpl',
});
// modèle ancre ; exemple : {{ancre|texte}}
krInsertWikiEditorButton({
section: "advanced",
group: "insert",
id: 'mw-customeditbutton-ancre',
icon: '//upload.wikimedia.org/wikipedia/commons/4/46/VisualEditor_-_Icon_-_Bold-a.svg',
label: 'Insérer {{ancre}}',
insertBefore: '{{ancre|',
insertAfter: '}}',
sampleText: 'Happy face'
});
});
// 2222 ///////////////////////////// Boutons supplémentaires dans le menu 'Avancé' permettant de modifier le texte sélectionné
// https://en.wikipedia.org/wiki/User:V111P/js/Templates/Textarea1.js
(function () {
"use strict";
// CHANGE THIS! It must be a unique id on the page, so make sure it's not something trivial either.
var buttonId = 'chroll_lpl_button'; // the id of the toolbar button
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) == -1 )
return; // abort if not currently editing an article
mw.loader.using('jquery.textSelection'); // seems to be loaded by default, but just in case
// This is the script that adds the toolbar button for your script above the textarea
var addToolbarButtons_scriptUrl = '//en.wikipedia.org/w/index.php?title='
+ 'User:V111P/js/addToolbarButtons.js&action=raw'
+ '&ctype=text/javascript'; // [[User:V111P/js/addToolbarButtons.js]]
// see User:V111P/js/addToolbarButtons for information on how to customize your button
// you should at least change the icon and the tooltip
var toolbarButtonProps = {
id: 'chroll_lpl_button',
tooltip: 'Test pour {{lpl|',
section: 'advanced',
group: 'insert',
callback: changeTexteSel
};
if (mediaWiki.libs.addToolbarButtons)
mediaWiki.libs.addToolbarButtons(toolbarButtonProps); // addToolbarButtons.js already loaded
else {
// When it is first loaded, addToolbarButtons.js looks in the array window.toolbarButtonsToAdd
// to determine which buttons to create. First we create the array if it doesn't exist, then
// we add our button properties to it. Then we call $.ajax to load addToolbarButtons.js
var tbs = window.toolbarButtonsToAdd = window.toolbarButtonsToAdd || [];
tbs.push(toolbarButtonProps);
$.ajax( { url: addToolbarButtons_scriptUrl, dataType: 'script', cache: true } );
}
var textArea = $('#wpTextbox1');
// The function called when the toolbar button is pressed.
// The name of this function must match the value of the callback property
// of the toolbarButtonProps object above.
function changeTexteSel() {
var sel = textArea.textSelection('getSelection');
var rempl;
alert("TITRE:" + $("#firstHeading").html());
// affiche ceci : Modification de Page:Chateaubriand - Mémoires d’outre-tombe t1.djvu/65
rempl = "[[[[[" + sel + "]]]]]";
sel = rempl;
textArea.textSelection('encapsulateSelection', {pre: sel, replace: true});
}
})();
// 3333 ///////////////////////////// Remplacement 'à la volée' pour certaines lettres accentuées
/*-----------------------------------------------------------------
Remplacement à la volée de certains caractères lors de l'édition.
Optimisé pour ce qui manque au clavier AZERTY français
pour taper le français.
-------------------------------------------------------------------
Auteur initial : ThomasV
Version remaniée pour le Wiktionnaire : ArséniureDeGallium
https://fr.wiktionary.org/wiki/MediaWiki:Gadget-specialchars.js
-----------------------------------------------------------------*/
// hookage de la fonction, sauf sur les pages en JS ou CSS
// (ce gadget serait une nuisance sur de telles pages)
//var P3 = wgTitle.substring(wgTitle.length - 3);
//var P4 = wgTitle.substring(wgTitle.length - 4);
//if((P3 != ".js") && (P4 != ".css")) addOnloadHook(SpecChar_Main);
//-----------------------------------------------------------------------
// remplacement des séquences de caractères
//-----------------------------------------------------------------------
function SpecChar_Main(){
tb = document.getElementById("wpTextbox1");
if(!tb)
return;
tb.onkeyup = function(e) {
var key = (window.event) ? event.keyCode : e.keyCode;
startPos = tb.selectionStart;
endPos = tb.selectionEnd;
if( endPos == startPos && (key >= 32 && key <= 255) ) {
m = tb.value.substring(startPos - 2, startPos);
m3 = tb.value.substring(startPos - 3, startPos);
f = tb.value.substring(startPos);
todo = true;
i = 2;
switch(m) { //traitement des séquences de 2 caractères
case "<<": m="«"; break;
case ">>": m="»"; break;
case "$.": m="…"; break; // E2 80 A6 U+2026 ou \u2026, points de suspension
case "$'": m="’"; break;
case "$-": m="–"; break; // E2 80 93 U+2013 ou \u2013 demi cadratin
case "$_": m="—"; break; // E2 80 94 U+2014 ou \u2014 cadratin
// !!! attention la différence entre les 2 ne se voit pas à l'édition
case "$à": m="À"; break;
case "$é": m="É"; break;
case "$è": m="È"; break;
case "$ç": m="Ç"; break;
case "$ù": m="Ù"; break;
// A lancer à chaque édition de page NE FCT PAS
// case "::": fenetreTexte(); addOnloadHook(SpecChar_Main); break;
// modèles
case ":f": m="{{formatnum:}}"; break;
case ":h": alert("Aide à écrire ici"); todo=false; break;
case ":i": m="{{interligne|1em}}\n"; break;
case ":m": m="{{||}}"; break; // pour insérer un modèle
case ":n": m="<nowiki />"; break;
case ":o": m="{{o}}"; break; // indice °
case ":t": m="{{tiret||}}"; break; // tiret désormais non indispensable mais utile pour la recherche
default: todo = false;
}
if(!todo) { //traitement des séquences de 3 caractères
m = m3; todo = true; i = 3;
switch(m) {
case "$oe": m = "œ"; break;
case "$ae": m = "æ"; break;
case "$OE": m = "Œ"; break;
case "$AE": m = "Æ"; break;
case "...": m = "…"; break; // id "$."
default: todo = false;
}
}
if(todo) {
var textScroll = tb.scrollTop;
h = tb.value.substring(0, startPos - i);
tb.value = h + m + f;
tb.selectionStart = startPos - i + m.length;
tb.selectionEnd = tb.selectionStart;
tb.scrollTop = textScroll;
}
}
};
}
// 4444 ///////////////////////////// Action déclenchées par CTRL + <un caractère>
//
// Ce qui suit vient de : Utilisateur:Pyb/common.js
// ne fonctionne pas bien à cause des raccourcis Firefox
//
/**********************************************************/
/* shortcuts */
/* Sources
/* http://darkoneko.wordpress.com/2009/11/01/personnalisons-wikipedia-ajouter-des-raccourcis-clavier/ */
/* LIEN MORT http://www.lyxia.org/blog/developpement/javascriptajax/raccourcis-claviers-en-javascript-214 */
/* http://keycode.info/ pour voir tous les codes de touches
/**********************************************************/
function keyboardShortcuts() {
var isCtrl = false;
var isAlt = false;
var isAltGr = false;
var is2pts = false;
/* A CREUSER : var wikEdConfig = {}; wikEdConfig.buttonKey = { 26: [] // clear the existing interfering 'b' button definition };*/
// pour avoir les codes de touches :
// https://keycode.info
// https://css-tricks.com/snippets/javascript/javascript-keycodes/
document.onkeyup = function(e) { // l'utilisateur relâche la touche ctrl. La variable passe à False
if(e.which == 17) {
isCtrl = false;
}
else if(e.which == 18) {
isAlt = false;
}
else if(e.which == 225) {
isAltGr = false;
}
};
document.onkeydown = function(e) { // l'utilisateur appuie sur la touche ctrl. La variable passe à True
if(e.which == 17) {
isCtrl = true; // false true
return;
}
else if(e.which == 18) {
isAlt = true;
return;
}
else if(e.which == 58) { // ':'
is2pts = true;
return;
}
else if(e.which == 225) {
isAltGr = true;
return;
}
//gestion des CTRL + lettre que l'on veux ajouter.
if( isCtrl === true ) {
isCtrl = false; // avec CTRL et ALT gérées (pas appuyées simultanément) la variable reste à true, ceci permet de débloquer la situation
switch (e.which) { //quelle touche a été enfoncée ?
case 66: //b bold
insertTags("[CtrlB", "]", '');
return false;
case 69: //e exposant
insertTags("[CtrlE", "]", '');
return false;
case 71: //g guillemets
insertTags("[CtrlG", "]", '');
return false;
case 73: //i italique
insertTags("[CtrlI", "]", '');
return false;
case 78: //n alinéa négatif ==> RESERVE
insertTags("[CtrlN", "]", '');
return false;
}
}
//gestion des ALT + lettre que l'on veux ajouter.
else if( isAlt === true ) {
isAlt = false; // voir au-dessus pour isCtrl
switch (e.which) { //quelle touche a été enfoncée ?
case 66: //b
insertTags("[AltB", "]", '');
return false;
case 69: //e
insertTags("[AltE", "]", '');
return false;
case 70: //f NE FCT PAS (raccourcis Firefox)
insertTags("{{formatnum:", "}}", '');
return false;
case 71: //g
insertTags("[AltG", "]", '');
return false;
case 73: //i
insertTags("[AltI", "]", '');
return false;
case 78: //n
insertTags("[AltN", "]", '');
return false;
case 79: //o ° de numero, in 8°, ...
selRempl("{{o}}");
return false;
case 87: //w
fenetreTexte();
addOnloadHook(SpecChar_Main);
return false;
}
}
//gestion des ALT Gr + lettre que l'on veux ajouter.
else if( isAltGr === true ) {
isAltGr = false; // voir au-dessus pour isCtrl
switch (e.which) { //quelle touche a été enfoncée ?
case 70: //f
insertTags("{{formatnum:", "}}", '');
return false;
}
}
else if( is2pts === true ) {
is2pts = false; // voir au-dessus pour isCtrl
switch (e.which) { //quelle touche a été enfoncée ?
case 70: //f
insertTags("{{forMATnum:", "}}", '');
return false;
}
}
};
return true;
}
function selRempl(ch_remplacement) { // ICICICI
var ok = true;
var page;
var deb = $('#wpTextbox1').prop("selectionStart");
var fin = $('#wpTextbox1').prop("selectionEnd");
if(deb == fin) {
alert("selRmpl: aucun texte n'est sélectionné");
ok = false;
}
else {
page = wpTextbox1.value; // .value donne la page complète, .value.substring(deb, fin); donne le texte sélectionné
var nouv = page.substring(0, deb) + ch_remplacement + page.substring(fin, page.length);
wpTextbox1.value = nouv;
}
return ok;
}
/*
function main_didasc(str){
var toinsert1="{{didascalie|";
var toinsert2="}}";
var start = $('#wpTextbox1').prop("selectionStart");
var end = $('#wpTextbox1').prop("selectionEnd");
// chargement du texte original dans une variable de travail wstr
sel=str.substring(start,end);
//wstr=str.substring(0,start)+toinsert+str.substring(end,str.length);
wstr=str.substring(0,start)+toinsert1+sel+toinsert2+str.substring(end,str.length);
return wstr;
}
function didasc() {
var txt = document.editform.wpTextbox1;
var start = $('#wpTextbox1').prop("selectionStart");
var end = $('#wpTextbox1').prop("selectionEnd");
txt.value = main_didasc(txt.value);
pos = parseInt(start) + 15 + parseInt(end) - parseInt(start);
$('#wpTextbox1').focus();
$('#wpTextbox1').prop("selectionStart",pos);
$('#wpTextbox1').prop("selectionEnd",pos);
}
*/
function fenetreTexte() {
// la plupart du temps, le fenêtre subit un décalage dès qu'on la sélectionne
// quelque soient les paramètres 'height' et 'rows'
$('.wikiEditor-ui-view').offset({top : 150}); // OK
$('#wpTextbox1').attr({style : 'height: 599px;', rows : 35}); // OK
}
// la fonction qui gère tous les appels de fonctions (du moins dans mes divers billets :)
//!\ CELA VEUX DIRE QU'IL FAUT FUSIONNER AVEC LA FONCTION main() EXISTANTE, SI VOUS EN AVEZ UNE /!\
function main() {
// [... autres fonctions ... ]
var P3 = wgTitle.substring(wgTitle.length - 3);
var P4 = wgTitle.substring(wgTitle.length - 4);
if (wgAction == "edit" || wgAction == "submit") { //à n'appeller que si en mode edition, sinon c'est inutile
keyboardShortcuts();
if((P3 != ".js") && (P4 != ".css"))
SpecChar_Main();
}
}
$(document).ready(function(){
addOnloadHook(main);
});