பயனர்:Neechalkaran/CategoryRecommendation.js
குறிப்பு - சேமித்த பின்னர், நீங்கள் செய்த மாற்றங்களைக் காண்பதற்கு உங்கள் உலவியின் இடைமாற்று அகற்றப்பட வேண்டும்.
- மொஸில்லா பயர்பாக்ஸ் / சபாரி: Shift+Reload, அல்லது Ctrl-F5 அல்லது Ctrl-R (⌘-R Mac ல்)
- கூகிள் குரோம் Ctrl-Shift-R அழுத்தவும். (⌘-Shift-R Mac ல்) ;
- இண்டர்நெட் எக்ஸ்ப்ளோரர்: Ctrl-Refresh அல்லது Ctrl-F5 ஐ அழுத்தவும்.
- ஒபேரா: Tools → Preferences இல் இடைமாற்றை அகற்றவும்;
/*
This userscript is to get relevant categories from English Wikipedia
@Author [[User:Neechalkaran]]
*/
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
var nslist={};
for (var i in mw.config.values.wgFormattedNamespaces)
{nslist[mw.config.values.wgFormattedNamespaces[i]]=i;}
var encats;
var tacats;
var tainner;
var encats_inner={};
var reflang="en";
var categorylabel=mw.config.values.wgFormattedNamespaces[14];
if(reflang==mw.config.values.wgContentLanguage)reflang="ta";
function get_cat_suggestions(){
document.getElementById("catrec").innerText="Loading...";
jQuery.ajax({
url : mw.config.values.wgServer+"/w/api.php?action=query&format=json&prop=langlinks&redirects&lllang="+reflang+"&titles="+mw.config.values.wgPageName,
type: "GET",
dataType: "json",
success : async function (data) {
missingcats=[];
for(var id in data["query"]["pages"])if("langlinks" in data["query"]["pages"][id]){
var links=data["query"]["pages"][id]["langlinks"];
if(links.length==1){
await get_cats("en",links[0]["*"]);
await get_cats(mw.config.values.wgPageContentLanguage,mw.config.values.wgPageName);
//console.log("fetching")
while (encats === undefined || tacats === undefined){ await sleep(2000);}
await getinnerlink("en",mw.config.values.wgPageContentLanguage,encats)
while (tainner === undefined){ await sleep(2000);}
//console.log(encats_inner)
//console.log(tacats)
for(var i in tacats){tacats[i]=categorylabel+":"+tacats[i];}
for(var i in encats_inner)
{
if(tacats.indexOf(encats_inner[i])==-1)
missingcats.push(encats_inner[i]);
}
}
};
document.getElementById("catrec").innerHTML="";
if(missingcats.length>0)
{//console.log(missingcats)
//await addimages(missingimages);
for(var j=0;j<missingcats.length;j++)
{var label = document.createElement('label');
label.innerText=missingcats[j];
var inp = document.createElement('input');
inp.name =missingcats[j];
inp.type="checkbox";
var sp =document.createElement('div');
sp.appendChild(inp);
sp.appendChild(label);
$('#catrec').append(sp);
}
}
else{
var sp =document.createElement('div');
sp.innerText="No Category Suggestions";
$('#catrec').append(sp);
}
},
error: function(e){console.log("No Interlang Links");}
});
}
function getinnerlink(fromlang,tolang,titles)
{
jQuery.ajax({
url : "https://"+fromlang+".wiki.x.io/w/api.php?origin=*&action=query&format=json&prop=langlinks&redirects&lllang="+tolang+"&titles="+titles.join("%7C"),
type: "GET",
dataType: "json",
success : async function (data) {
for(var id in data["query"]["pages"]){
if("langlinks" in data["query"]["pages"][id]){
var links=data["query"]["pages"][id]["langlinks"];
if(links.length==1){
encats_inner[data["query"]["pages"][id]["title"]]=links[0]["*"];
}
}
}
tainner=true;
},
error: function(e){console.log("No Interlang Links");}
});
//return names;
}
function get_cats(lang, title){
if(lang==mw.config.values.wgContentLanguage && title==mw.config.values.wgPageName)
{
var cats=mw.config.values.wgCategories;
if(lang=="en"){encats=cats;}
else{tacats=cats;}
return;}
jQuery.ajax({
url : "//"+lang+".wiki.x.io/w/api.php?action=query&prop=categories&format=json&origin=*&titles="+title,
type: "GET",
dataType: "json",
success : function (data) {
var images=[]
for(var id in data["query"]["pages"]){
if(data["query"]["pages"][id]["categories"]==null)continue;
var cats=data["query"]["pages"][id]["categories"];
for(var i=0;i<cats.length;i++){
var name=cats[i]["title"];
//name=name.replace(nslist[cats[i]["ns"]]+":","");
//name=name.replace("Category:","");
images.push(name);
//console.log(links[i]["title"]);
}
}
//console.log(images);
if(lang=="en"){encats=images;}
else{tacats=images;}
},
error: function(data){console.log("Error in API fetch");return [];}
});
}
//url : "https://en.wiki.x.io/w/api.php?action=parse&prop=text§ion=0&format=json&page="+title,
function get_wikicontent(title){
jQuery.ajax({
url : "//en.wiki.x.io/w/index.php?action=raw&type=text/javascript&title="+title,
type: "GET",
dataType: "script",
success : function (data) {
parts=data.split("[[File:");
result=[];
for(var j=1;j<parts.length;j++){
breaker=0;
for(var k=0;k<parts[j].length;k++)
{if(breaker==0 && parts[j].substr(k,2)=="]]")
{result.append(parts[j].substr(0,k))}
}
}
return result;
}
});
}
function addimages(images){
//images=["File:BSE - Bombay Stock Exchange Building.jpg","File:Jana Gana Mana instrumental.ogg","File:Transgender Resource Center.jpg"]
var requestUrl="https://commons.wikimedia.org/w/api.php?action=query&origin=*&format=json&uselang=en&inprop=url&iiextmetadatalanguage=en&prop=info%7Cimageinfo%7Centityterms&iiprop=extmetadata&titles="+convertutf(images.join("|"))
var imagetext="";
//console.log(requestUrl );
$.getJSON( requestUrl ).done( showresult ).fail( function (response) {console.log("Error");} ) ;
function showresult(response)
{var data=response;
var text="";
if(data["query"]["pages"])
for(var it in data["query"]["pages"])
{var info=data["query"]["pages"][it]["imageinfo"];
if(info==null)continue;
for(var j in info){
if(!info[j]["extmetadata"])continue
if(!info[j]["extmetadata"]["ImageDescription"])continue
var d = $('<div>').html(info[j]["extmetadata"]["ImageDescription"]["value"]);
imagetext+="[["+data["query"]["pages"][it]["title"]+"|thumb|left|"+d.text()+"]]\n";
//console.log(d.text());
}
}
if ($('#wpTextbox1'). length > 0)
{$('#wpTextbox1').prepend(imagetext+"\n");}
if($('.ve-ce-attachedRootNode p').length>0)
{$('.ve-ce-attachedRootNode p').eq(0).prepend(imagetext+"\n");}
}
}
function convertutf(s) {
function parse(a, c){return string.fromCharCode(parseInt(c, 16));}
return encodeURIComponent(s.replace(/%u([0-f]{4})/gi, parse));
}
if (document.getElementById('catrec')==null){
var catrec = document.createElement('div');
var result = document.createElement('div');
result.id="catrec"
var inp = document.createElement('input');
inp.style ='margin: 4px 2px;';
inp.type="button";
inp.onclick=get_cat_suggestions;
inp.value="Suggest category";
catrec.appendChild(inp);
catrec.appendChild(result);
}
if(!mw.config.values.wgEditMessage){
if ($('#footer').length > 0)
{
$('#footer').prepend(catrec);
}
}
if(mw.config.values.wgAction=="edit"){
if ($('.mw-editTools').length > 0)
{$('.mw-editTools').prepend(inp);
}
}