MediaWiki:Gadget-imageForeignUseCheck.js
Aller à la navigation
Aller à la recherche
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.
// Adds a link on "File:" pages that lists the file's usage on foreign wikis (which use this wiki's shared media repository)
$(function() {
var wgNamespaceNumber = mw.config.get('wgNamespaceNumber'),
wgPageName = mw.config.get('wgPageName'),
wgTitle = mw.config.get('wgTitle');
// Only continue if the page is in the "File:" namespace
if (wgNamespaceNumber !== 6) return;
// Message strings
var msgForeignUses = 'Utilisation du fichier (étrangère)', // header for all foreign use links
msgImageLink = 'page de fichier', // link to foreign "File:" page of the file
msgNoUses = 'Aucun utilisation étrangère de ce fichier n\'a été détectée.',
msgListLink = 'Liste des utilisations étrangères', // link text
msgLocalFileListHeader = 'Utilisation du fichier (locale)'; // changed header for local uses
// List of foreign wikis that will be checked
var foreignWikis = {
// 'display_name': 'base_url',
'Chinese': 'terraria.wiki.gg/zh',
'French': 'terraria.wiki.gg/fr',
'German': 'terraria.wiki.gg/de',
'Hungarian': 'terraria.wiki.gg/hu',
'Korean': 'terraria.wiki.gg/ko',
'Polish': 'terraria.wiki.gg/pl',
'Portuguese': 'terraria.wiki.gg/pt',
'Russian': 'terraria.wiki.gg/ru',
'Ukrainian': 'terraria.wiki.gg/uk',
'Terraria Mods': 'terrariamods.wiki.gg',
'Calamity Mod': 'calamitymod.wiki.gg',
'Thorium Mod': 'thoriummod.wiki.gg',
};
function getForeignApiUrl(foreignWiki) {
return 'https://' + foreignWiki + '/api.php?format=json&callback=?';
}
function getForeignPageUrl(foreignWiki, pageName) {
return 'https://' + foreignWiki + '/wiki/' + pageName;
}
// Create link that checks the foreign wikis when clicked
$('#mw-imagepage-reupload-link').after(
$('<p></p>').append(
$('<a></a>', {
id: 'imageForeignUseCheck-link',
href: '#ddd'
}).text(msgListLink)
)
);
// Add functionality to the link
$('#imageForeignUseCheck-link').click(function() {
// Clear all existing DOM elements added by this gadget
$('ul.imageForeignUseCheck-foreignUsesList').remove();
$('h2#imageForeignUseCheck-header').remove();
$('li#imageForeignUseCheck-toclink').remove();
// Change the text of the existing "File usage" header and
// create new header for the foreign uses
$('h2#filelinks')
.text(msgLocalFileListHeader)
.before(
$('<h2></h2>', { id: 'imageForeignUseCheck-header' }).text(msgForeignUses),
$('<ul></ul>', { 'class': 'imageForeignUseCheck-foreignUsesList' })
);
// Add TOC link
$('ul#filetoc li a[href="#filelinks"]')
.text(msgLocalFileListHeader)
.parent('li').after(
$('<li></li>', { id: 'imageForeignUseCheck-toclink' }).append(
$('<a></a>', { href: '#imageForeignUseCheck-header' }).text(msgForeignUses)
)
);
// Create notice about no foreign uses
var $foreignUsesList = $('.imageForeignUseCheck-foreignUsesList');
$foreignUsesList.append(
$('<h3></h3>', { 'class': 'imageForeignUseCheck-noForeignUses' }).text(msgNoUses)
);
// Prepare API requests on the foreign wikis
var getImageInfo = { action: 'query', list: 'allimages', ailimit: '1', aifrom: wgTitle };
var getImageUsage = { action: 'query', list: 'imageusage', iutitle: wgPageName };
// Iterate over all foreign wikis
$.each(foreignWikis, function(foreignWikiName, foreignWikiBaseUrl) {
var foreignWikiApi = getForeignApiUrl(foreignWikiBaseUrl);
// On the foreign wiki, check if the image exists
$.getJSON(foreignWikiApi, getImageInfo, function(imageInfoResponse) {
if (
imageInfoResponse.query.allimages.length === 0 ||
imageInfoResponse.query.allimages[0].name === wgTitle.replace(/ /g, '_')
) return;
// On the foreign wiki, get the pages that use the image
$.getJSON(foreignWikiApi, getImageUsage, function(imageUsageResponse) {
var pagesUsingTheImage = imageUsageResponse.query.imageusage;
if (pagesUsingTheImage.length > 0) {
addPageListFromOneForeignWiki(
$foreignUsesList,
{ name: foreignWikiName, baseUrl: foreignWikiBaseUrl },
pagesUsingTheImage
);
}
});
});
});
});
function addPageListFromOneForeignWiki($foreignUsesList, foreignWiki, pagesUsingTheImage) {
// Remove the "No foreign uses" text that was created at the start
$('.imageForeignUseCheck-noForeignUses').remove();
// Add header for this foreign wiki
$foreignUsesList.append(
$('<h3></h3>', { style: 'margin-left:-20px;', text: foreignWiki.name }).append(
$('<span></span>', { style: 'font-size:85%;' }).append(
' (',
$('<a></a>', { href: getForeignPageUrl(foreignWiki.baseUrl, wgPageName) }).text(msgImageLink),
')'
)
)
);
// Add list of pages that use the image
$.each(pagesUsingTheImage, function(_, pageInfo) {
var urlUse = getForeignPageUrl(foreignWiki.baseUrl, pageInfo.title);
$foreignUsesList.append(
$('<li></li>').append(
$('<a></a>', { href: urlUse }).text(pageInfo.title)
)
);
});
}
});