MediaWiki:Gadget-Descriptions.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
// Fonction pour diviser un tableau en sous-tableaux
function chunkArray(array, chunkSize) {
var results = [];
while (array.length) {
results.push(array.splice(0, chunkSize));
}
return results;
}
// Fonction principale
function init() {
var api = new mw.Api(),
userLang = mw.config.get('wgUserLanguage') || 'en',
ids = [],
anchors = {},
$tooltip = $('<span>').appendTo('body');
// Sélectionner tous les liens avec des entités dans les statements
$( '.wikibase-statementgroupview a[href^="/wiki/"]' ).each(function() {
var $anchor = $(this),
id = $anchor.attr('href').replace(/.*Item:(Q\d+)/, '$1').replace(/.*Property:(P\d+)/, '$1');
if (id.indexOf('Q') !== 0 && id.indexOf('P') !== 0) {
return;
}
ids.push(id);
if (anchors[id]) {
anchors[id].push($anchor);
} else {
anchors[id] = [$anchor];
}
});
if (ids.length === 0) {
return;
}
// Fractionner les IDs en lots de 50 entités
var chunks = chunkArray(ids.slice(), 50);
// Pour chaque lot, faire une requête API
chunks.forEach(function(chunk) {
api.get({
action: 'wbgetentities',
ids: chunk,
props: ['descriptions'],
languages: userLang,
languagefallback: 1,
})
.done(function(data) {
$.each(data.entities || {}, function(id, entity) {
if (!entity.descriptions[userLang] || !anchors[id]) {
return;
}
// Appliquer les tooltips sur chaque lien
$.each(anchors[id], function(i, $anchor) {
$anchor.hover(function() {
$tooltip.wbtooltip({
content: $('<span>').text(entity.descriptions[userLang].value),
permanent: true,
gravity: 'nw',
$anchor: $anchor
}).data('wbtooltip').show();
}, function() {
$tooltip.data('wbtooltip').hide();
});
});
});
})
.fail(function(error) {
// Gérer les erreurs si nécessaire, sinon ignorer
});
});
}
// Charger les dépendances avant d'exécuter le script
mw.loader.using(['mediawiki.api', 'jquery.wikibase.wbtooltip'], function() {
$(init); // Initialiser une fois les modules chargés
});