MediaWiki:Gadget-Descriptions.js: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
// | // 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() { | |||
console.log('Gadget is running'); | |||
var api = new mw.Api(), | |||
userLang = mw.config.get( 'wgUserLanguage' ) || 'en', | |||
ids = [], | |||
anchors = {}, | |||
$tooltip = $( '<span>' ).appendTo( 'body' ); | |||
function | // 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; | |||
} | |||
// 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({ | api.get({ | ||
action: 'wbgetentities', | action: 'wbgetentities', | ||
ids: | ids: chunk, | ||
props: [ 'descriptions' ], | props: [ 'descriptions' ], | ||
languages: userLang, | languages: userLang, | ||
| Line 73: | Line 78: | ||
console.log('Error fetching entity descriptions:', 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 | |||
}); | |||
Revision as of 20:59, 9 October 2024
// 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() {
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;
}
// 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 ) {
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
});