Utilisateur:Vorlod/common.js
Note : après avoir publié 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 appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
- Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
- Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
- Opera : appuyez sur Ctrl + F5.
/* Résumé Deluxe.
*
* Ajoute des commentaires de modification prédéfinis
*
* Auteur : Dake
* Contributions : Pabix, Tieno, Ltrlg
*IMPORTE DEPUIS FRWP
*
* Dépendances :
* — les habituelles implicites 'mediawiki' & 'jquery' ;
* — 'user' (chargement du common.js).
*
* {{Projet:JavaScript/Script|ResumeDeluxe}}
*/
/* globals window, $, document, mw, ve */
mw.loader.using( 'user', function () {
'use strict';
var
/* Vérifier la présence d’un titre de section.
* Cela permet de n’ajouter un séparateur ' ; ' entre deux résumés que si
* nécessaire.
* Note : on ne vérifie que le fait que le motif est en fin de chaîne, pas
* en début.
*/
sansPointVirgule = /\*\/\s*$/,
/* La liste des liens qui seront affichés.
* Les éléments du tableau sont d’une des deux formes suivantes :
* — [ 'lien' , 'resume' ]
* — 'texte'
* où 'lien' représente l’intitulé du lien, 'resume' le résumé d’édition
* inséré par le lien et 'texte' les deux à la fois.
*/
listeLiens = [],
/* Liens affichés par défaut, même format que listeLiens. */
liensParDefaut = [
'orthographe',
'typographie',
'catégorisation',
'wikification',
'image',
'mise en forme',
'mise en page',
'redirection',
'relecture',
'style',
'revert',
'réorganisation',
'réponse',
'maintenance',
[ 'homonymie', 'création homonymie' ],
[ 'bandeau', 'ajout de bandeau' ],
'Citation du Jour',
'références',
'retouche de la modification précédente'
],
/* Objet permettant de désactiver des liens (parmi la liste par défaut
* ci-avant), sous la forme { 'lien1': false, 'lien2': false, … } où
* 'lien1', 'lien2'… est l’intitulé du lien à ne pas afficher.
*/
liensAffiches = window.ResumeDeluxe_affiches || {},
/* Objet jQuery contenant l’<input> ou le <textarea> constituant le résumé. */
$resume,
/* Objet jQuery contenant la liste de liens. */
$cont;
/* Fonction renvoyant l’intitulé d’un lien à partir de sa représentation sous
* forme de tableau ou de chaîne.
*/
function texteDuLien( definition ) {
if ( $.isArray( definition ) ) {
return definition[0];
} else {
// Soyons sûr d’avoir une chaîne de caractères
return definition.toString();
}
}
/* Fonction renvoyant le texte ajouté par un lien à partir de sa représentation
* sous forme de tableau ou de chaîne.
*/
function resumeAInserer( definition ) {
if ( $.isArray( definition ) ) {
return definition[1];
} else {
// Soyons sûr d’avoir une chaîne de caractères.
return definition.toString();
}
}
/* Procédure appliquant les préférences de l’utilisateur :
* — si l’utilisateur a défini window.ResumeDeluxe_liens, celui-ci est utilisé
* à la place de la liste par défaut liensParDefaut ;
* — sinon si l’utilisateur a défini window.ResumeDeluxe_affiches, les règles
* de désactivation sont appliquées ;
* — sinon liensAffiches est un objet vide, donc la liste par défaut est
* utilisée.
*/
function appliquerConfiguration() {
var i, cle;
if ( $.isArray( window.ResumeDeluxe_liens ) ) {
listeLiens = window.ResumeDeluxe_liens;
} else {
for ( i = 0; i < liensParDefaut.length; i++ ) {
cle = texteDuLien( liensParDefaut[i] );
if ( liensAffiches[cle] !== false ) {
listeLiens.push( liensParDefaut[i] );
}
}
}
}
/* Procedure effectuant l’ajout d’une chaîne au résumé d’édition, avec un
* séparateur si besoin
*/
function ajouterAuResume( chaine ) {
var resumeActuel = $resume.val();
if ( resumeActuel === '' ) {
$resume.val( chaine );
} else if ( sansPointVirgule.test( resumeActuel ) ) {
$resume.val( resumeActuel + chaine );
} else {
$resume.val( resumeActuel + ' ; ' + chaine );
}
// L’ÉditeurVisuel ne se base plus sur le contenu mais sur l’évènement
$resume.change();
// Conserver le focus sur le lien est inutile à l’utilisateur
// Plaçons-le sur le champ de résumé, s’il veut compléter à la main
$resume.focus();
}
/* Fonction renvoyant un lien à partir de sa définition. */
function $lien( definition ) {
var resume = resumeAInserer( definition );
return $( '<a>' )
.text( texteDuLien( definition ) )
.attr( {
href: '#',
title: 'Ajouter «\xA0' + resume + '\xA0» au résumé de modification'
} )
.click( function () {
ajouterAuResume( resume );
return false;
} );
}
/* Procédure construisant la liste de liens. */
function contruireListe() {
var i, $ul;
$ul = $( '<ul>' )
.addClass( 'liste-horizontale' )
.css( {
display: 'inline',
margin: 0
} );
for ( i = 0; i < listeLiens.length; i++ ) {
$ul.append( $( '<li>' ).append( $lien( listeLiens[i] ) ) );
}
$cont = $( '<div>' ).attr( 'id', 'ResumeDeluxe' )
.text( 'Messages prédéfinis\xA0: ' )
.append( $ul );
}
/* Procédure initialisant $resume et insérant la liste de liens dans le cas de
* l’éditeur de wikicode, quand les nœuds nécessaires sont en place.
*/
function demarrer_wikicode() {
$( function ( $ ) {
$( '#wpSummaryLabel' ).before( $cont );
$resume = $( '#wpSummary' );
} );
}
/* Procédure initialisant $resume et insérant la liste de liens dans le cas de
* l’ÉditeurVisuel, quand les nœuds nécessaires sont en place.
*/
function demarrer_EditeurVisuel() {
mw.hook( 've.saveDialog.stateChanged' ).add( function () {
/*
* Traitement : si le dialogue a été recréé, on y remet ce qu’il faut.
* TODO Vérifier si cette vérification est encore nécessaire.
*/
if ( $( '#ResumeDeluxe' ).length < 1 ) {
ve.init.target.saveDialog.$editSummaryLabel.after( $cont );
$resume = ve.init.target.saveDialog.editSummaryInput.$input;
}
} );
}
/* Procédure qui détermine quel éditeur peut être utilisé et démarre le gadget
* selon le résultat.
*/
function demarrer() {
switch ( mw.config.get( 'wgAction' ) ) {
case 'edit':
case 'submit':
// Désactivé pour la création de sections
if ( ! /[?&]section=new(&|$)/.test( document.location.search ) ) {
demarrer_wikicode();
}
// L’EV peut démarrer de ces modes sans rechargement
/* falls through */
case 'view':
demarrer_EditeurVisuel();
break;
}
}
/***** Démarrage du tout *****/
// Lecture des préférences
appliquerConfiguration();
// Construction de la liste des liens
contruireListe();
// Insère la liste dans l’arbre des nœuds et cherche le nœud contenant le résumé
demarrer();
} );
/*
[
'','',
'',
'',
''
],
*/
//</pre>
// Add listing buttons in edit toolbar
importScript('MediaWiki:BoutonsListing.js');
var customizeToolbar = function() {
$( function() {
if ( typeof $.fn.wikiEditor != 'undefined' ) {
$( '#wpTextbox1' ).wikiEditor( 'removeFromToolbar', {
'section': 'main',
'group': 'insert',
'tool': 'reference'
});
}
});
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'main',
'groups': {
'listings': {
'label': '' // or use labelMsg for a localized label, see above
}
}
} );
function currentLastEditDate() {
// return the date as "2015-01-15"
var d = new Date();
var year = d.getFullYear();
// Date.getMonth() returns 0-11
var month = d.getMonth() + 1;
if (month < 10) month = '0' + month;
var day = d.getDate();
if (day < 10) day = '0' + day;
return year + '/' + month + '/' + day;
}
var CURRENT_LAST_EDIT_DATE = currentLastEditDate();
var LISTING_TOOLBAR_ITEMS = {
'Lien vers Wikipedia': {
label: 'Lien vers Wikipedia', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/1/14/OOjs_UI_icon_logo-wikipedia.svg/25px-OOjs_UI_icon_logo-wikipedia.svg.png',
options: {
pre: '\{\{w',
post: '}}' // text to be inserted
}
},
'Modèle Autres projets': {
label: 'Autres projets', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/7/72/OOjs_UI_icon_link-ltr.svg/25px-OOjs_UI_icon_link-ltr.svg.png',
options: {
pre: '\{\{autres projets\n|w=',
post: '\n|s=\n|wikt=\n|b=\n|n=\n|v=\n|wikispecies=\n|commons=\n|m=\n}}' // text to be inserted
}
},
'Modèle citation': {
label: 'Citation', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/c/c0/OOjs_UI_icon_quotes-ltr.svg/25px-OOjs_UI_icon_quotes-ltr.svg.png',
options: {
pre: '\{\{citation|citation=',
post: '\n|original=\n|langue=\n|précisions=\n}}' // text to be inserted
}
},
'Réf Livre': {
label: 'Réf Livre', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/8/8f/OOjs_UI_icon_book-ltr.svg/25px-OOjs_UI_icon_book-ltr.svg.png',
options: {
pre: '{{Réf Livre|titre=',
post: '\n|auteur=\n|éditeur=\n|année=\n|page=\n|tome=\n|partie=\n|chapitre=\n|acte=\n|scène=\n|section=\n|ISBN=\n|traducteur=\n|année d’origine=\n|collection=\n|auteur de la contribution=\n|titre de la contribution=\n|traducteur de la contribution=\n|année de la contribution=\n|vers=\n|s=\n|langue=\n}}' // text to be inserted
}
},
'Réf Article': {
label: 'Réf Aricle', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/5/55/OOjs_UI_icon_newspaper-ltr.svg/25px-OOjs_UI_icon_newspaper-ltr.svg.png',
options: {
pre: '{{Réf Article\n|titre=',
post: '\n|date=\n|lieu=\n|source=\n|parution=\n|auteur=\n|précision=\n}}' // text to be inserted
}
},
'Réf Film': {
label: 'Réf Film', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/6/61/OOjs_UI_icon_picture.svg/25px-OOjs_UI_icon_picture.svg.png',
options: {
pre: '{{Réf Film\n|titre=',
post: '\n|auteur=\n|date=\n|acteur=\n}}' // text to be inserted
}
},
'Réf Série': {
label: 'Réf Série', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/a/a1/OOjs_UI_icon_viewDetails-ltr.svg/25px-OOjs_UI_icon_viewDetails-ltr.svg.png',
options: {
pre: '{{Réf Série\n|acteur=',
post: '\n|auteur=\n|traducteur=\n|série=\n|saison=\n|épisode=\n|langue=\n|diffusion=\n|diffuseur=\n}}' // text to be inserted
}
},
'Réf Chansson': {
label: 'Réf Chansson', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/a/a9/OOjs_UI_icon_score.svg/25px-OOjs_UI_icon_score.svg.png',
options: {
pre: '{{Réf Chanson|titre=',
post: '\n|auteur=\n|interprète=\n|album=\n|date=\n|label=\n|traducteur=\n}}' // text to be inserted
}
},
'Réf Émission': {
label: 'Réf Émission', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/e/e1/OOjs_UI_icon_desktop.svg/25px-OOjs_UI_icon_desktop.svg.png',
options: {
pre: '{{Réf Émission|émission=',
post: '\n|auteur=\n|diffuseur=\n|date=\n|langue=\n}}' // text to be inserted
}
},
'Réf Pub': {
label: 'Réf Pub', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/0/0a/OOjs_UI_icon_feedback-ltr.svg/25px-OOjs_UI_icon_feedback-ltr.svg.png',
options: {
pre: '{{Réf Pub|nom=',
post: '\n|date=\n|lieu=\n|source=\n|parution=\n|auteur=\n|précision=\n}}' // text to be inserted
}
},
'Réf Jeu vidéo': {
label: 'Réf Jeu vidéo', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/5/51/Icons-gamecontroller-%28Circle-icons%29.svg/25px-Icons-gamecontroller-%28Circle-icons%29.svg.png',
options: {
pre: '{{Réf Jeu vidéo|titre=',
post: '\n|auteur=\n|éditeur=\n|développeur=\n|date=\n|personnage=\n}}' //text to be inserted
}
},
'Personnage': {
label: 'Personnage', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/9/98/OOjs_UI_icon_userAvatar.svg/25px-OOjs_UI_icon_userAvatar.svg.png',
options: {
pre: '{{Personnage|',
post: '}} : ' // text to be inserted
}
},
'Bonjour IP': {
label: 'Bonjour IP', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/7/7e/OOjs_UI_icon_userAnonymous.svg/20px-OOjs_UI_icon_userAnonymous.svg.png',
options: {
pre: '{{Bonjour IP}}',
post: ' ' // text to be inserted
}
},
'Bienvenue nouveau': {
label: 'Bienvenue nouveau', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/5/52/OOjs_UI_icon_userActive-ltr.svg/30px-OOjs_UI_icon_userActive-ltr.svg.png',
options: {
pre: '\{\{Bienvenue}}',
post: ' ' // text to be inserted
}
},
'Avertissement 1': {
label: 'Avertissement 1', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/2/2b/OOjs_UI_icon_information.svg/20px-OOjs_UI_icon_information.svg.png',
options: {
pre: '\{\{Avertissement 1}}',
post: ' ' // text to be inserted
}
},
'Avertissement 2': {
label: 'Avertissement 2', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/3/3c/OOjs_UI_icon_notice.svg/20px-OOjs_UI_icon_notice.svg.png',
options: {
pre: '{{Avertissement 2}}',
post: ' ' // text to be inserted
}
},
'Avertissement 3': {
label: 'Avertissement 3', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/8/80/OOjs_UI_icon_alert.svg/20px-OOjs_UI_icon_alert.svg.png',
options: {
pre: '{{Avertissement 3}}',
post: ' ' // text to be inserted
}
},
'Avertissement 4': {
label: 'Avertissement 4', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/d/db/OOjs_UI_icon_error.svg/20px-OOjs_UI_icon_error.svg.png',
options: {
pre: '{{Avertissement 4}}',
post: ' ' // text to be inserted
}
},
'Bloqué': {
label: 'Bloqué', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/2/2f/OOjs_UI_icon_editLock-ltr.svg/20px-OOjs_UI_icon_editLock-ltr.svg.png',
options: {
pre: '{{Bloqué|DUREE|RAISON',
post: '}}' // text to be inserted
}
},
'Vandale banni': {
label: 'Vandale banni', // or use labelMsg for a localized label, see above
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/a/a1/OOjs_UI_icon_block.svg/20px-OOjs_UI_icon_block.svg.png',
options: {
pre: '{{Vandale banni}}',
post: ' ' // text to be inserted
}
}
};
$.each(LISTING_TOOLBAR_ITEMS, function(index, element) {
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'main',
'group': 'listings',
'tools': {
'Listings': {
label: element.label,
type: 'button',
icon: element.icon,
action: {
type: 'encapsulate',
options: element.options
}
}
}
} );
});
};
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar . . . */
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
mw.loader.using( 'user.options', function () {
if ( mw.user.options.get('usebetatoolbar') ) {
mw.loader.using( 'ext.wikiEditor', function () {
$(document).ready( customizeToolbar );
} );
}
} );
}