Utilisateur:H4stings/wef-watchlist.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) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./**
* wef-watchlist
*
* Ce script est l'adptation sur Wikipédia en français du gadget [[:ru:MediaWiki:Gadget-wefwatchlist.js]].
* Ce script permet d'afficher les modifications de Wikidata dans sa liste de suivi Wikipédia, quand celle-ci est groupée par page (ce qui n'était pas possible jusque là).
*
* Auteurs : Vlsergey pour la version initiale. H4stings pour l'adaptation sur WPfr.
*/
// Documentation :
// 1. Ajouter dans votre fichier commons.js la ligne suivante : importScript('Utilisateur:H4stings/wef-watchlist.js');
// 2. Accéder à votre Liste de suivi et appuyer sur le lien "Synchro Wikidata", en bas à gauche.
// (les articles de l'espace principal se trouvant dans votre liste de suivi Wikipédia sont listés sur une page perso de Wikidata)
// 3. Recharger la page : c'est bon.
//
// Pour plus d'infos, lisez [[Discussion utilisateur:H4stings/wef-watchlist.js]].
//
//////////////////////ZONE PERSONNALISABLE//////////////////////
if (typeof cacherModifLabel == 'undefined') { //cacher les wbsetlabel
cacherModifLabel = true;
}
if (typeof cacherModifAlias == 'undefined') { //cacher les wbsetaliases
cacherModifAlias = true;
}
if (typeof cacherModifLiens == 'undefined') { //cacher les wbsetsitelink & clientsitelink
cacherModifLiens = true;
}
if (typeof afficherTout == 'undefined') {
afficherTout = false;
}
if (afficherTout === true) { //afficher tout
cacherModifLabel = false;
cacherModifAlias = false;
cacherModifLiens = false;
}
/////////////////FIN DE LA ZONE PERSONNALISABLE/////////////////
/** @const liée au script initial */
var version = 1455143959;
try {
mw.loader.addSource( "ruwiki", "//ru.wikipedia.org/w/load.php" );
mw.loader.register( 'ext.gadget.wefcore', version, [ 'jquery.ui', //
'jquery.ui', //
'jquery.ui', //
'jquery.uls.data', //
'mediawiki.ForeignApi', //
], undefined, 'ruwiki' );
mw.loader.register( 'ext.gadget.isbnjs', version, undefined, undefined, 'ruwiki' );
mw.loader.register( 'ext.gadget.wefflags', version, undefined, undefined, 'ruwiki' );
mw.loader.register( 'ext.gadget.wefcore', version, [ 'mediawiki.api' ], undefined, 'ruwiki' );
} catch ( error ) {
// already registered
}
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) {
mw.loader.using( [ 'mediawiki.api', 'mediawiki.ForeignApi', 'ext.gadget.wefcore' ], function() {
var notifyOptions = {
autoHide: true,
tag: 'WEF-Watchlist',
};
var i18n = {
errorEdit: 'Une erreur est survenue lors de l\'enregistrement de la liste de suivi',
errorEnhanced: 'Le gadget wef-watchlist.js ne peut pas fonctionner car votre liste de suivi ne semble pas groupée par page (onglet Préférences > Modifications récentes > Options avancées)',
actionObtain: 'Récupération des modifications de Wikidata',
actionIntegrate: 'Affichage des modifications de Wikidata',
linePartLetter: 'd',
linePartTooltip: 'Wikidata',
linePartChange: 'diff.',
linePartHistory: 'historique',
menuButtonSync: 'Synchro Wikidata',
// the same as in watchlist
monthes: [ "janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre" ],
reD : /<span class="autocomment">([^:]*):/,
dico : { "wbsetsitelink-add" : "Lien ajouté", "wbsetsitelink-set" : "Lien modifié", "wbsetsitelink-remove" : "Lien supprimé", "wbsetlabel-add" : "Libellé ajouté", "wbsetlabel-set" : "Changement du libellé", "wbsetlabel-remove" : "Retrait du libellé", "wbsetdescription-add" : "Description ajoutée", "wbsetdescription-set" : "Modification de la description", "wbsetdescription-remove" : "Retrait de la description", "wbeditentity-update" : "Entité modifiée", "wbeditentity-override" : "Entité supprimée", "wbeditentity-create" : "Nouvelle entité créée", "wbsetaliases-set" : "Alias défini(s)", "wbsetaliases-remove" : "Retrait d’alias", "wbsetaliases-add" : "Ajout d’alias", "wblinktitles-create" : "Entité créée pour connecter les pages", "wblinktitles-connect" : "Lien de langue ajouté pour connecter les pages", "wbsetclaimvalue" : "Affirmation modifiée", "wbremoveclaims" : "Affirmation supprimée", "wbremoveclaims-remove" : "Affirmation supprimée", "wbcreateclaim-value" : "Affirmation ajoutée", "wbcreateclaim-novalue" : "Valeur spéciale « aucune valeur » ajoutée", "wbcreateclaim-somevalue" : "Affirmation ajoutée : « valeur inconnue »", "wbsetclaim-update" : "Affirmation modifiée", "wbsetclaim-create" : "Affirmation créée", "wbsetclaim-update-qualifiers" : "Qualifieur d’affirmation modifié", "wbsetclaim-update-references" : "Référence d’affirmation modifiée", "wbsetclaim-update-rank" : "Rang d’une affirmation modifié", "wbsetreference" : "Référence modifiée", "wbsetreference-add" : "Référence ajoutée", "wbcreateclaim-create" : "Affirmation ajoutée", "wbmergeitems-from" : "Élément fusionné", "wbsetqualifier-add" : "Qualifieur ajouté", "wbremovereferences-remove" : "Réference supprimée" },
summary: 'via [[:w:ru:ВП:WE-F|WE-Framework gadget]] - from ' + mw.config.get( 'wgDBname' ),
};
var chain = null;
function asyncGetWatchlistRaw( wrcontinue ) {
"use strict";
if ( !WEF_Utils.isEmpty( wrcontinue ) ) {
mw.notify( "Interroger le contenu de la liste de suivi locale : depuis «" + wrcontinue + "»", notifyOptions );
} else {
mw.notify( "Interroger le contenu de la liste de suivi locale", notifyOptions );
}
new mw.Api().get( {
action: 'query',
list: 'watchlistraw',
wrnamespace: 0,
wrlimit: 50,
wrcontinue: wrcontinue,
} ).done( function( result ) {
/** @type string[] */
var titles = [];
$.each( result.watchlistraw, function( i, item ) {
titles.push( item.title );
} );
mw.log.warn( "List to get from Wikidata: " + titles.join( '|' ) );
var newWRcontinue = false;
if ( typeof result["continue"] !== 'undefined' //
&& typeof result["continue"] !== 'undefined' //
&& typeof result["continue"].wrcontinue !== 'undefined' ) {
newWRcontinue = result["continue"].wrcontinue;
}
if ( newWRcontinue ) {
asyncGetWatchlistRaw( newWRcontinue );
}
asyncGetEntityIds( titles, newWRcontinue === false );
} );
}
var qIds = [];
function asyncGetEntityIds( titles, isLast ) {
"use strict";
var request = WEF_Utils.getWikidataApi().post( {
action: 'wbgetentities',
sites: mw.config.get( 'wgDBname' ),
redirects: 'no',
props: 'info',
titles: titles.join( '|' ),
} ).done( function( result ) {
$.each( result.entities, function( key, item ) {
if ( /^Q[0-9]+$/.test( key ) ) {
qIds.push( key );
}
} );
} );
if ( chain === null ) {
chain = request;
} else {
chain = request.then( request );
}
if ( isLast ) {
write();
}
}
function write() {
"use strict";
chain.done( function() {
qIds.sort();
mw.notify( "Enregistrer la liste de suivi sur Wikidata (éléments : " + qIds.length + ")", notifyOptions );
WEF_Utils.getWikidataApi().postWithEditToken( {
action: 'edit',
title: 'User:' + mw.config.get( 'wgUserName' ) + '/Watchlist/' + mw.config.get( 'wgDBname' ),
text: '[[' + qIds.join( ']]\n[[' ) + ']]',
summary: 'sync ' + i18n.summary,
tags: WEF_Utils.tag,
} ).done( function( result ) {
if ( result.error ) {
alert( i18n.errorEdit + ': ' + result.error.info );
return;
}
mw.notify( "Liste synchronisée avec succès (éléments : " + qIds.length + ")", notifyOptions );
} ).fail( function() {
//console.log( arguments );
mw.notify( "Erreur de synchronisation de la liste de suivi ! (éléments : " + qIds.length + ")", notifyOptions );
} );
} );
}
function syncWatchlist() {
"use strict";
mw.notify( i18n.statusSync, notifyOptions );
asyncGetWatchlistRaw();
}
function showChanges() {
"use strict";
mw.notify( i18n.actionObtain, notifyOptions );
//console.log("https://www.wikidata.org/w/api.php?action=feedrecentchanges&hideminor=" + mw.user.options.get( 'watchlisthideminor' )
// + "&hidebots=" + mw.user.options.get( 'watchlisthidebots' ) + "&days=" + mw.user.options.get( 'watchlistdays' ) + "&limit=" + mw.user.options.get( 'wllimit' )
// + "&target=" + 'User:' + mw.config.get( 'wgUserName' ) + '/Watchlist/' + mw.config.get( 'wgDBname' ) + "&props=labels&uselang=fr");
WEF_Utils.getWikidataApi().get( {
hideminor: mw.user.options.get( 'watchlisthideminor' ),
hidebots: mw.user.options.get( 'watchlisthidebots' ),
days: mw.user.options.get( 'watchlistdays' ),
limit: mw.user.options.get( 'wllimit' ),
target: 'User:' + mw.config.get( 'wgUserName' ) + '/Watchlist/' + mw.config.get( 'wgDBname' ),
action: 'feedrecentchanges',
feedformat: 'atom',
uselang: 'fr'
}, {
dataType: 'xml',
} ).done( function( result ) {
mw.notify( i18n.actionIntegrate, notifyOptions );
var headers = {};
var changeList = $( '.mw-changeslist' );
$.each( changeList.children( 'h4' ), function( i, h4 ) {
var jH4 = $( h4 );
var firstDiv = jH4.find( '~ div' ).first();
headers[jH4.text()] = {
header: jH4,
firstDiv: firstDiv,
firstDivChildren: firstDiv.children(),
};
} );
var entries = $( result ).find( "entry" );
$.each( entries, function( i, entry ) {
try {
insertChange( headers, $( entry ) );
} catch ( error ) {
mw.log.warn( "Can't add change line", error );
}
} );
} );
}
function pad( src ) {
"use strict";
if ( src < 10 ) {
return "0" + src;
} else {
return "" + src;
}
}
function insertChange( headers, jEntry ) {
"use strict";
var updatedString = jEntry.children( 'updated' ).text();
var tzOffset = parseInt( mw.user.options.get( 'timecorrection' ).split( '|' )[1], 10 ) + new Date().getTimezoneOffset();
var updated = new Date( Date.parse( updatedString ) + tzOffset * 60 * 1000 );
var date = updated.getDate() + ' ' + i18n.monthes[updated.getMonth()] + ' ' + updated.getFullYear();
if ( typeof headers[date] !== 'undefined' ) {
var pregenerated = headers[date];
var firstDiv = pregenerated.firstDiv;
var firstDivChildren = pregenerated.firstDivChildren;
var time = pad( updated.getHours() ) + ':' + pad( updated.getMinutes() );
var toInsertBefore = null;
$.each( firstDivChildren, function( c, child ) {
if ( toInsertBefore !== null ) {
return;
}
var jChild = $( child );
var timeOfElement = jChild.data( 'wef-parsed-time' );
if ( typeof timeOfElement === 'undefined' ) {
timeOfElement = $( jChild.find( 'td.mw-enhanced-rc' )[0] ).text().substring( 6 ).trim();
jChild.data( 'wef-parsed-time', timeOfElement );
}
if ( timeOfElement.localeCompare( time ) === -1 ) {
toInsertBefore = jChild;
}
} );
var jTable = generateWatchlistLine( jEntry, time );
if ( toInsertBefore !== null ) {
toInsertBefore.before( jTable );
} else {
firstDiv.append( jTable );
}
}
}
function generateWatchlistLine( jEntry, time ) {
"use strict";
var id = jEntry.children( 'title' ).text();
var testSummary = jEntry.children( 'summary' ).text();
//console.log( "summary "+ testSummary );
if (testSummary.indexOf("|fr") == -1 && ((testSummary.indexOf("wbsetlabel") > -1 && cacherModifLabel)
|| (testSummary.indexOf("wbsetaliases") > -1 && cacherModifAlias) || (testSummary.indexOf("wbsetsitelink") > -1 && cacherModifLiens)
|| (testSummary.indexOf("clientsitelink") > -1 && cacherModifLiens) || (testSummary.indexOf("wbsetdescription") > -1) ) ) {
//console.log( "diff id "+ id + "non affiché");
}else{
var changeUrl = jEntry.children( 'link' ).attr( 'href' );
var author = jEntry.children( 'author' ).children( 'name' ).text();
var table = $( document.createElement( 'table' ) )//
/**/.addClass( 'mw-collapsible' )//
/**/.addClass( 'mw-enhanced-rc' );
var firstLine = $( document.createElement( 'tr' ) ).appendTo( table );
var toggleIcon = $( document.createElement( 'span' ) ).addClass( 'mw-collapsible-toggle' ).addClass( 'mw-collapsible-arrow' ).addClass( 'mw-enhancedchanges-arrow' )
.addClass( 'mw-enhancedchanges-arrow-space' ).addClass( 'mw-collapsible-toggle-collapsed' );
var toggle = $( document.createElement( 'td' ) ).append( toggleIcon ).appendTo( firstLine );
$( document.createElement( 'td' ) ).addClass( 'mw-enhanced-rc' ).html(
"<abbr style=\'font-size:bold; margin-left:0.5em;\' title=\'" + i18n.linePartTooltip + "\'>" + i18n.linePartLetter + "</abbr>     " + time + " " )
.appendTo( firstLine );
var title = $( document.createElement( 'a' ) ).addClass( 'mw-changeslist-title' ).attr( 'href', '//www.wikidata.org/wiki/' + id ).text( id );
window.wef_LabelsCache.localizeLabel( title, id );
window.wef_LabelsCache.localizeDescriptionAsTitle( title, id );
var mainLine = $( document.createElement( 'td' ) ).addClass( 'mw-title' ).append( title );
mainLine.append( " (" );
mainLine.append( $( document.createElement( 'a' ) ).text( i18n.linePartChange ).attr( 'href', changeUrl ) );
mainLine.append( " | " );
mainLine.append( $( document.createElement( 'a' ) ).text( i18n.linePartHistory ).attr( 'href',
'//www.wikidata.org/w/index.php?action=history&title=' + encodeURIComponent( id ) ) );
mainLine.append( ")" );
mainLine.append( $( document.createElement( 'span' ) ).addClass( 'mw-changeslist-separator' ).text( '. .' ) );
mainLine.append( $( document.createElement( 'a' ) ).addClass( 'mw-userlink' ).addClass( 'userlink' ).text( author ).attr( 'href',
'//www.wikidata.org/wiki/User:' + author ) );
mainLine.append( $( document.createElement( 'span' ) ).addClass( 'mw-changeslist-separator' ).text( '. .' ) );
mainLine.appendTo( firstLine );
var secondLine = $( document.createElement( 'tr' ) ).css( 'display', 'none' );
secondLine.append( $( document.createElement( 'td' ) ) );
secondLine.append( $( document.createElement( 'td' ) ).addClass( 'mw-enhanced-rc' ) );
var resSum = i18n.reD.exec(testSummary);
if (resSum !== null && typeof i18n.dico[resSum[1]] != 'undefined'){
testSummary = testSummary.replace(resSum[1], i18n.dico[resSum[1]]+" ");
}
secondLine.append( $( document.createElement( 'td' ) ).addClass( 'mw-enhanced-rc-nested' ).html( testSummary ) );
secondLine.appendTo( table );
var summaryElement = $( secondLine.children( 'td' )[2] );
localizeSummary( summaryElement );
var firstPOfSummary = summaryElement.children( 'p' ).first();
if ( firstPOfSummary.length > 0 ) {
mainLine.append( firstPOfSummary.children() );
firstPOfSummary.remove();
}
toggle.click( function() {
secondLine.toggle();
if ( $( secondLine ).is( ":visible" ) ) {
toggleIcon.removeClass( 'mw-collapsible-toggle-collapsed' );
toggleIcon.addClass( 'mw-collapsible-toggle-expanded' );
} else {
toggleIcon.removeClass( 'mw-collapsible-toggle-expanded' );
toggleIcon.addClass( 'mw-collapsible-toggle-collapsed' );
}
} );
return table;
}
}
function localizeSummary( jElement ) {
jElement.find( 'a' ).each( function( i, a ) {
var jA = $( a );
var key = null;
if ( jA.text() === jA.attr( 'title' ) && /^Q[0-9]+$/.test( jA.text() ) ) {
key = jA.text();
}
if ( jA.text() === jA.attr( 'title' ) && /^Property:P[0-9]+$/.test( jA.text() ) ) {
key = jA.text().substring( 9 );
}
if ( key !== null ) {
window.wef_LabelsCache.getOrQueue( key, function( label, description ) {
jA.text( label + ' (' + key + ')' );
jA.attr( 'title', description );
} );
}
if ( jA.attr( 'href' ).substring( 0, 6 ) === '/wiki/' ) {
jA.attr( 'href', '//www.wikidata.org' + jA.attr( 'href' ) );
}
} );
}
{
var li = $( document.createElement( 'li' ) ).addClass( 'plainlinks' );
$( document.createElement( 'a' ) ).css( 'cursor', 'pointer' ).click( function() {
mw.loader.using( [ 'mediawiki.api', ], function() {
li.remove();
syncWatchlist();
} );
} ).text( i18n.menuButtonSync ).appendTo( li );
$( '#p-tb div ul' ).append( li );
//console.log("indicateur de liste de suivi étendu :"+$( ".mw-enhanced-rc" ).length);
if ( $( ".mw-enhanced-rc" ).length > 0 ) {
mw.loader.using( [ 'ext.gadget.wefcore', ], function() {
showChanges();
} );
}else{
mw.notify( i18n.errorEnhanced, notifyOptions );
}
}
} );
}