Utilisateur:Lofhi/JavascriptTest.js
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./**
* AncreTitres
*
* Cette fonction fournit un lien vers une section de page en cliquant
* sur le lien [URL] ou [[lien]] à droite du titre de section.
*
* Auteurs : Pabix, Phe, Bayo, Chphe, Arkanosis, Mah3110, Ash_Crow
* {{Projet:JavaScript/Script|AncreTitres}}
*/
/* global $, mw */
/* eslint-env browser */
// <nowiki>
mw.loader.using(['mediawiki.util', 'mediawiki.notification', 'user'], function () {
'use strict';
$(function ($) {
var lang = mw.config.get('wgUserLanguage'),
messages = {
en: {
'ancretitres-anchor-name': '[URL]',
'ancretitres-internal-link-name': '[[Link]]',
'ancretitres-description': 'Get an URL to this section',
'ancretitres-int-description': 'Get an internal link to this section',
'ancretitres-notif-title': 'Text copied to clipboard',
'ancretitres-notif-error': 'Could not copy to clipboard'
},
fr: {
'ancretitres-anchor-name': '[URL]',
'ancretitres-internal-link-name': '[[Lien]]',
'ancretitres-description': 'Obtenir une URL vers cette section',
'ancretitres-int-description': 'Obtenir un lien interne vers cette section',
'ancretitres-notif-title': 'Texte copié dans le presse-papiers',
'ancretitres-notif-error': 'Impossible de copier dans le presse-papiers'
}
},
options = {
afficheE: true,
afficheI: true
};
mw.messages.set(messages.en);
if (lang !== 'en' && lang in messages) {
mw.messages.set(messages[lang]);
}
// https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript/30810322#30810322
// https://stackoverflow.com/questions/34045777/copy-to-clipboard-using-javascript-in-ios
function copyTextToClipboard(text) {
var textArea;
function isOS() {
return navigator.userAgent.match(/ipad|iphone/i);
}
function createTextArea(text) {
textArea = document.createElement('textArea');
textArea.value = text;
document.body.appendChild(textArea);
}
function selectText() {
var range,
selection;
if (isOS()) {
range = document.createRange();
range.selectNodeContents(textArea);
selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
textArea.setSelectionRange(0, 999999);
} else {
textArea.select();
}
}
function copy(text) {
createTextArea(text);
selectText();
document.execCommand('copy');
}
var copySuccess;
try {
copy(text);
copySuccess = true;
} catch (e) {
copySuccess = false;
}
document.body.removeChild(textArea);
if (copySuccess) {
mw.notification.notify(text, { title: mw.msg('ancretitres-notif-title'), tag: 'ancretitres', type: 'info', autoHide: true });
} else {
mw.notification.notify(mw.msg('ancretitres-notif-error'), { tag: 'ancretitres', type: 'error', autoHide: true });
}
}
if (typeof window.AncreTitres !== 'undefined') {
Object.assign(options, window.AncreTitres);
}
if (!options.afficheI && !options.afficheE) {
return;
}
$('span.mw-headline').each(function (_, headline) {
var $span = $('<span>')
.addClass('noprint ancretitres')
.css({
'font-size': 'xx-small',
'font-weight': 'normal',
'user-select': 'none' // jQuery se charge d'ajouter un vendor prefix si nécessaire
});
if (options.afficheE) {
var $linkE = $('<a href="#" title="' + mw.msg('ancretitres-description') + '">' + mw.msg('ancretitres-anchor-name') + '</a>').click(function (e) {
e.preventDefault();
var outputText = 'https:' + mw.config.get('wgServer') + mw.util.getUrl() + '#' + headline.id;
copyTextToClipboard(outputText);
});
$span.append(' ', $linkE);
}
if (options.afficheI) {
var $linkI = $('<a href="#" title="' + mw.msg('ancretitres-int-description') + '">' + mw.msg('ancretitres-internal-link-name') + '</a>').click(function (e) {
e.preventDefault();
var escapedAnchor = headline.id
// escaping caractères spéciaux HTML
// (partiel, '"& ne sont pas escapés pour ne pas dégrader inutilement la lisibilité du lien)
.replace(/</g, '<')
.replace(/>/g, '>')
// escaping caractères spéciaux MediaWiki
.replace(/\[/g, '[')
.replace(/\]/g, ']')
.replace(/\{/g, '{')
.replace(/\|/g, '|')
.replace(/\}/g, '}');
var outputText = '[[' + (mw.config.get('wgPageName') + '#' + escapedAnchor).replace(/_/g, ' ') + ']]';
copyTextToClipboard(outputText);
});
$span.append(' ', $linkI);
}
$(headline).parent().append($span);
});
});
});