Utente:Ricordisamoa/WikidataHelper.js

Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.


Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti (per le pagine globali è comunque necessario attendere qualche minuto). Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome: premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menù Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.

/* <nowiki>
 *
 * WikidataHelper.js by [[User:Ricordisamoa]]
 * inspired by [[d:User:Tpt/slurpInterwiki.js]]
 *
*/
function checkInterlinks(){
	$.ajax({
		url:"//www.wikidata.org/w/api.php",
		data:{
			format:"json",
			action:"wbgetentities",
			titles:wgPageName.replace(/_/g," "),
			sites:wgDBname
		},
		cache:false,
		dataType:"jsonp"
	})
	.done(function(data){
		if(data.success&&data.entities[Object.keys(data.entities)[0]]){
			var q=$.ucFirst(Object.keys(data.entities)[0]);
			var sitelinks=data.entities[Object.keys(data.entities)[0]].sitelinks;
			if(typeof sitelinks=="undefined"){
				jsMsg("No sitelinks!");
				return;
			}
			var sl={};// normalize sitelinks in form { en : "pageName" , it : "pageName" , lang : "pageName" }
			$.map(sitelinks,function(e){
				sl[e.site.replace(/_/g,"-").replace(/wiki$/g,"")]=e.title;
			});
			/*
			$.ajax({
				url:mw.util.wikiScript("api"),
				data:{
					format:"json",
					action:"query",
					titles:wgTitle,
					prop:"langlinks",
					lllimit:500
				},
				dataType:"jsonp"
			})*/
			$.get(
				mw.util.wikiScript(),
				{title:wgPageName,action:"raw"}
			)
			.done(function(d){
				/*var langlinks=d.query.pages[Object.keys(d.query.pages)[0]].langlinks;
				$.map(langlinks,function(e){
					ll[e.lang]=e["*"];
				});*/
				var regex=/\[\[(simple|[a-z]{2,3}(\-[a-z]+){0,2}):([^\[\]\n\r]+)\]\]/g;
				var langlinks=d.match(regex);
				if(d.match(regex)==null&&$("#p-lang ul li").not(".wbc-editpage").length>0){
					$("<div>")
					.append("La voce non contiene più interlink.")
					.dialog({
						title:"WikidataHelper",
						buttons:{
							"OK":function(){
								$(this).dialog("close");
							}
						}
					});
					return;
				}
				var ll={};// normalize sitelinks like langlinks
				$.map(langlinks,function(e,i){
					ll[e.match(/\[\[(simple|[a-z]{2,3}(\-[a-z]+){0,2}):/)[1]]=e.match(/:([^\[\]\n\r]+)\]\]/)[1];
				});
				/*meeeeeeee-wwwwwwwwwwwwwsl.blr="dummy :O";*/
				console.log(ll);
				console.log(sl);
				
				// compact normalized objects in form [ "en:pageName" , "it:pageName" , "lang:pageName" ]
				// to accurately compare them with jQuery.not()
				var llu=$.map(ll,function(e,k){
					return[k+":"+e];
				});
				var slu=$($.map(sl,function(e,k){
					return[k+":"+e];
				})).not([wgContentLanguage+":"+wgTitle]);
				sl_not_ll=$(slu).not(llu)// sitelinks that are not in langlinks (can be imported into Wikipedia)
				ll_not_sl=$(llu).not(slu);// langlinks that are not in sitelinks (can be imported into Wikidata)
				$("<div>")
				.append(
					($.compareArray(slu,llu)?"Ottimo. Possiamo procedere con la rimozione degli interlink da Wikipedia.":
						(sl_not_ll.length>0?(
							"Attenzione: "+sl_not_ll.length+" sitelink"+(sl_not_ll.length>1?"s":"")+" in Wikidata non "+(sl_not_ll.length>1?"sono presenti":"è presente")+" come interlink su Wikipedia.<br/>"+sl_not_ll.get().join()+"<br/>"+
							(ll_not_sl.length==0?"Si desidera procedere comunque alla rimozione?":"")
						):"")+
						(ll_not_sl.length>0?(
							"Attenzione: "+ll_not_sl.length+" interlink"+(ll_not_sl.length>1?"s":"")+" in Wikipedia non "+(ll_not_sl.length>1?"sono presenti":"è presente")+" come sitelink su Wikidata.<br/>"+ll_not_sl.get().join()+"<br/>"
						):"")
					)
				)
				.dialog({
					title:"WikidataHelper",
					buttons:{
						"Annulla":function(){
							$(this).dialog("close");
						},
						"OK":function(){
							$(this).dialog("close");
							if($.compareArray(slu,llu)||ll_not_sl.length==0) removeInterlinks("watch",q);
						}
					}
				});
			});
		} else {
			alert("null");
		}
	})
	.fail(function(){alert("null");});
}

function removeInterlinks(watch,q){
	$.get(
		mw.util.wikiScript(),
		{title:wgPageName,action:"raw"},
		function(d){
			var regex=/\[\[(simple|[a-z]{2,3}(\-[a-z]+){0,2}):[^\[\]\n\r]+\]\](\n\r?)?/g;
			console.log(d.match(regex));
			d=d.replace(regex,"").replace(/\n\n$/,"\n");
			console.log(d);
			$.post(
				mw.util.wikiScript("api"),
				{	
					action:"edit",
					text:d,
					title:wgPageName,
					summary:"[[Utente:Ricordisamoa/WikidataHelper|WikidataHelper]]: rimozione interlink perché già presenti su Wikidata"+
						(q?" ([[wikidata:"+q+"|qui]])":""),
					minor:true,
					token:mw.user.tokens.get("editToken")
				}
			)
			.done (function(data){
				if(data&&data.error&&data.error.info) jsMsg("La query di modifica ha restituito un errore. =(\n"+data.error.info);
				else jsMsg("Pagina modificata!");
			})
			.fail(function(){
				jsMsg("La richiesta ajax è fallita.");
			});
		}
	);
}
$(document).ready(function(){
	$(mw.util.addPortletLink("p-tb","#","WikidataHelper","WikidataHelper","Procedura guidata di integrazione e rimozione degli interlink"))
	.click(function(event){
		event.preventDefault();
		checkInterlinks();
	});
});
//</nowiki>