Bruker:Danmichaelo/wef-history.js

Fra Wikipedia, den frie encyklopedi

Merk: Etter publisering vil det kanskje være nødvendig å slette mellomlageret i nettleseren din for å se endringene.

  • Firefox / Safari: Hold Shift mens du klikker på Oppdater, eller trykk enten Ctrl+F5 eller Ctrl+R (⌘+R på Mac)
  • Google Chrome: Trykk Ctrl+Shift+R (⌘+Shift+R på Mac)
  • Internet Explorer / Edge: Hold Ctrl mens du trykker på Oppdater eller trykk Ctrl+F5
  • Opera: Ttrykk Ctrl+F5.
/**
 * wef-history
 *
 * Script showing Wikidata changes at article history pages.
 *
 * Author: H4stings
 *
 * Copied from https://fr.wikipedia.org/w/index.php?title=Utilisateur:H4stings/wef-history.js&oldid=127163665
 * at 2016-06-26 by Danmichaelo
 *
 */

// Documentation :
// 1. Ajouter dans votre fichier commons.js la ligne suivante : importScript('Utilisateur:H4stings/wef-history.js'); 
// 2. Accédez à une page d'historique : c'est bon !
//
// Pour plus d'infos, lisez [[Discussion utilisateur:H4stings/wef-history.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( 'wgAction' ) === 'history' ) {

	mw.loader.using( [ 'mediawiki.api', 'mediawiki.ForeignApi', 'ext.gadget.wefcore' ], function() {

		var notifyOptions = {
			autoHide: true,
			tag: 'WEF-history',
		};

		var i18n = {
			actionObtain: 'Henter endringer fra Wikidata',
			actionIntegrate: 'Viser endringer fra Wikidata',

			linePartLetter: 'd',
			linePartTooltip: 'Wikidata',
			linePartChange: 'diff.',
			linePartHistory: 'historikk',

			// the same as in watchlist
			monthes: [ "jan.",
				"feb.",
				"mar.",
				"apr.",
				"mai",
				"jun.",
				"jul.",
				"aug.",
				"sep.",
				"okt.",
				"nov.",
				"des."
			],
			revMonthes: { "jan." : 1, "feb." : 2, "mar." : 3, "apr." : 4, "mai" : 5, "jun." : 6, "jul." : 7, "aug." : 8, "sep": 9, "okt." : 10, "nov." : 11, "des." : 12 }, // works only for french wikipedia. has to be translated. 
			dico : {
				"wbsetsitelink-add" : "La til nettstedlenke",
				"wbsetsitelink-set" : "Endret nettstedlenke",
				"wbsetsitelink-remove" : "Fjernet nettstedlenke",

				"wbsetlabel-add" : "La til etikett",
				"wbsetlabel-set" : "Endret etikett",
				"wbsetlabel-remove" : "Fjernet etikett",

				"wbsetdescription-add" : "La til beskrivelse",
				"wbsetdescription-set" : "Satt beskrivelse",
				"wbsetdescription-remove" : "Fjernet beskrivelse",

				"wbeditentity-update" : "Endret entitet",       // ?????
				"wbeditentity-override" : "Overstyrte entitet",     // ?????
				"wbeditentity-create" : "Opprettet entitet",

				"wbsetaliases-set" : "Satt alias",
				"wbsetaliases-remove" : "Fjernet alias",
				"wbsetaliases-add" : "La til alias",

				"wblinktitles-create" : "Laget entitet for å koble sammen sider",
				"wblinktitles-connect" : "La til språklenke for å koble sammen sider",

				"wbsetclaimvalue" : "Endret påstand",
				"wbremoveclaims" : "Fjernet påstand(er)",
				"wbremoveclaims-remove" : "Fjernet påstand",   // ????
				"wbcreateclaim-value" : "La til påstand",
				"wbcreateclaim-novalue" : "La til påstand med «ingen verdi»",
				"wbcreateclaim-somevalue" : "La til påstand med «noen verdi»",
				"wbsetclaim-update" : "Endret påstand",
				"wbsetclaim-create" : "La til påstand",
				"wbsetclaim-update-qualifiers" : "Oppdaterte kvalifikatorer",
				"wbsetclaim-update-references" : "Oppdaterte referanser",
				"wbsetclaim-update-rank" : "Oppdaterte rang",
				"wbsetreference" : "Satt referanse",
				"wbsetreference-add" : "La til referanse",
				"wbcreateclaim-create" : "La til påstand",
				"wbmergeitems-from" : "Flettet elementer",
				"wbsetqualifier-add" : "La til kvalifikator",
				"wbremovereferences-remove" : "Fjernet referanse"
			},
	        reP : /\[\[Property\:(P[0-9]*)\]\]/,
	        reQ : /\[\[(Q[0-9]*)\]\]/,
	        reD : /\/\* ([^: ]*)/,
	        reH : /([0-9]+)\. (\w+\.?) ([0-9][0-9][0-9][0-9]) kl\. ([0-9][0-9]):([0-9][0-9])/,  // /!\ matches date format in norsk bokmål (28. mar. 2016 kl. 09:51‎), should probably be based on the user's selected language!
		};

        var entityId = null;
        // [[Property:P910]]: [[Q7804038]]"
        var revs = null;

		function affichage() {
			//"use strict";
			
			mw.notify( i18n.actionIntegrate, notifyOptions );
			
		    //affichage des révisions
		    $.each(revs, function(keyr, valr){
		        //console.log("diff : " + valr.comment + " | " + valr.timestamp);
		        try {
		            generateWatchlistLine( valr, i18n.dico );
		        } catch ( error ) {
		            mw.log.warn( "Can't add change line", error );
		        }
			});
		}
		
		function showChanges() {
			//"use strict";
		               
		    mw.notify( i18n.actionObtain, notifyOptions );
						
		    if ( mw.config.get( 'wgArticleId' ) ) {
		        WEF_Utils.getEntityIdDeferred().done( function( entityId ) {
		            if ( !WEF_Utils.isEmpty( entityId ) ) {
						//api des modifs à afficher
		                console.log( 'https://www.wikidata.org/w/api.php?action=query&prop=revisions&rvlimit=50&titles=' + entityId );
		                WEF_Utils.getWikidataApi().get( {
						    rvlimit: 50,
						    titles: entityId,
						    prop: 'revisions',
						    action: 'query',
						} ).done( function( result ) {
						    
		                    //en principe, y'a qu'une page...
		                    var page=result.query.pages;
							var listePQ = "";
		                    $.each(page, function(key, val){
		                        //console.log ("id page " + key);
		                        revs=val.revisions;
		                        //1ere boucle pour lister les P & Q qu'on va devoir traduire
		                    	$.each(revs, function(keyr, valr){
		                        	//console.log ("valr.comment " + valr.comment);
		                            if (valr.comment){
		                                var res1 = i18n.reP.exec(valr.comment);
		                                if (res1 !== null){
		                                    if (listePQ.indexOf(res1[1])==-1) { 
		                                  		listePQ = listePQ + "|" + res1[1];
		                                  	}
		                                }
		                                var res2 = i18n.reQ.exec(valr.comment);
		                                if (res2 !== null){
		                                    if (listePQ.indexOf(res2[1])==-1) { 
		                                    	listePQ = listePQ + "|" + res2[1]; 
		                                    }
		                                }
		                                //console.log (res1 + " " + res2);
		                            }
		                        });
		                    });
		                    listePQ = listePQ.substring(1);
		                    completedico(listePQ);
						} );
		            }
		        });
		    }
		}

		function completedico(liste) {
			//"use strict";
						
			//2e api de récup pour construire le i18n.dico des labels
	        console.log("https://www.wikidata.org/w/api.php?action=wbgetentities&ids=" + liste + "&props=labels&languages=nb");
	        WEF_Utils.getWikidataApi().get( {
	            action: 'wbgetentities',
	            props: 'labels',
	            languages: 'nb',
	            ids: liste,
	            format: 'json',
	        } ).done( function( result ) {
	            //faire un i18n.dico avec P/Q => label
	            var entities=result.entities;
	            $.each(entities, function(keyr, valr){
	                //i18n.dico[keyr] = valr.labels.nb.value;
	                if(valr.labels && valr.labels.nb && valr.labels.nb.value){
	           			//console.log(keyr + " " + valr + " " + valr.labels.nb.value);
	                	i18n.dico[keyr] = valr.labels.nb.value;
	                }else{
	                	i18n.dico[keyr] = keyr;
	                }
	            });
	        	//console.log (i18n.dico);
	        	affichage();
	        });
        }
        
		function pad( src ) {
			"use strict";

			if ( src < 10 ) {
				return "0" + src;
			} else {
				return "" + src;
			}
		}
		
		function generateWatchlistLine( jEntry, dico ) {
			//"use strict";

			var id = jEntry.revid;
			var testSummary =  jEntry.comment;
			//console.log( "id "+ id + " summary "+ testSummary );

			//if (false) {
            
            if ((testSummary.indexOf("|nb") == -1 && testSummary.indexOf("|nowiki") == -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( "Ignoring diff " + id + " as not relevant for nb: ", testSummary);
				
			}else{
				var changeUrl = "https://www.wikidata.org/w/index.php?diff=" + id;
				var author = jEntry.user;
				var updated = new Date(jEntry.timestamp);
                var dateAff = updated.getDate() + '. ' + i18n.monthes[updated.getMonth()] + ' ' + updated.getFullYear();
                var heureAff = pad( updated.getHours() ) + ':' + pad( updated.getMinutes() );
                //traduction commentaire sur la base du i18n.dico
                var resSum1 = i18n.reP.exec(testSummary);
                if (resSum1 !== null && i18n.dico[resSum1[1]] !== null){
                    testSummary = testSummary.replace("[[Property:"+resSum1[1]+"]]", i18n.dico[resSum1[1]] + " <small>(<a href=\"https://www.wikidata.org/wiki/Property:"+resSum1[1]+"\">"+resSum1[1]+"</a>)</small>");
                }
                var resSum2 = i18n.reQ.exec(testSummary);
                if (resSum2 !== null && i18n.dico[resSum2[1]] !== null){
                    testSummary = testSummary.replace("[["+resSum2[1]+"]]", i18n.dico[resSum2[1]] + " <small>(<a href=\"https://www.wikidata.org/wiki/"+resSum2[1]+"\">"+resSum2[1]+"</a>)</small>");
                }
                var resSum3 = i18n.reD.exec(testSummary);
                if (resSum3 !== null && typeof i18n.dico[resSum3[1]] != 'undefined'){
                    testSummary = testSummary.replace(resSum3[1], i18n.dico[resSum3[1]]+" ");
                }
                testSummary = testSummary.replace("/*", "<span class=\"autocomment\">");
                testSummary = testSummary.replace(/:.+\*\//, "</span>");
                
                var txt = "<li id=\"wef-history\"><span>"
                	+ "<abbr style=\"font-size:bold; margin-left:0.5em;\" title=\"" + i18n.linePartTooltip + "\">" + i18n.linePartLetter + "</abbr> <span class=\"mw-changeslist-separator\">. .</span> "
                	+ "(<a href=\"https://www.wikidata.org/w/index.php?diff=" + id + "\">diff</a>)</span> <span class=\"mw-changeslist-separator\">. . . . .</span> "
                	+ "<span class=\"mw-changeslist-date\">" + dateAff + ", kl. " + heureAff + "</span> "
                	+ "<span class=\"history-user\">" + author + "</span><span class=\"mw-changeslist-separator\">. .</span> "
                	+ "<span class=\"comment\">" + testSummary + "</span></li>";
                insertChang (txt, updated) ;
			}
		}

		function insertChang( txt, updated ) {
			"use strict";

			var inserted = false;
	        $('ul#pagehistory > li ').each(function(){
				//console.log (this + " " + $(this).text());
				//si c'est pas du wikidata 
				if ($(this).text().substr(0,1) != 'd'){
					var resH = i18n.reH.exec($(this).text());
					if (resH !== null){
			        	var d = new Date( parseInt(resH[3]), parseInt(i18n.revMonthes[resH[2]]-1), parseInt(pad(resH[1])), parseInt(resH[4]), parseInt(resH[5]), 0);
			        	if (d<updated) {
			        		$(this).before(txt);
			        		inserted = true;
			        		return false;
			        	}
	                }
				}
			});
			if (!inserted) {
			    $('ul#pagehistory').append(txt);
			}
		}
        
		{
			mw.loader.using( [ 'ext.gadget.wefcore', ], function() {
				showChanges();
			} );
		}
	} );
}