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.
// Required modules: mediawiki.api, jquery.wikibase.wbtooltip
( function ( mw, $, wb ) {
// only works for items
if ( !mw.config.exists( 'wbEntityId' ) ) {
return;
}
function init() {
console.log('Gadget is running');
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 ) {
console.log('No entity IDs found.');
return;
}
// Appel à l'API pour obtenir les descriptions des entités
api.get({
action: 'wbgetentities',
ids: ids,
props: [ 'descriptions' ],
languages: userLang,
languagefallback: 1,
})
.done( function ( data ) {
console.log('API response for anonymous users:', 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 ) {
console.log('Error fetching entity descriptions:', error);
});
}
// 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
});
} ( mediaWiki, jQuery, wikibase ) );