-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcsrankings.min.js
47 lines (47 loc) · 24.2 KB
/
csrankings.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var __awaiter=this&&this.__awaiter||function(a,c,d,b){function e(g){return g instanceof d?g:new d(function(f){f(g)})}return new (d||=Promise)(function(g,f){function l(m){try{k(b.next(m))}catch(n){f(n)}}function h(m){try{k(b["throw"](m))}catch(n){f(n)}}function k(m){m.done?g(m.value):e(m.value).then(l,h)}k((b=b.apply(a,c||[])).next())})};
class CSRankings{static updateMinimum(a){return 500>=CSRankings.minToRank?(a=a.scrollTop,CSRankings.minToRank=5E3,CSRankings.getInstance().rank(),a):0}static getInstance(){return CSRankings.theInstance}static promise(a){"undefined"!==typeof Promise?Promise.resolve().then(a):setTimeout(a,0)}constructor(){this.note={};this.authorFile="./csrankings.csv";this.authorinfoFile="./generated-author-info.csv";this.countryinfoFile="./country-info.csv";this.turingFile="./turing.csv";this.turingImage="./png/acm-turing-award.png";
this.acmfellowFile="./acm-fellows.csv";this.acmfellowImage="./png/acm.png";this.homepageImage="./png/house-logo.png";this.allowRankingChange=!1;this.areaMap=[{area:"hpc",title:"HPC"},{area:"socc",title:"HPC"},{area:"cgo",title:"PL"},{area:"ppopp",title:"PL"},{area:"ecoop",title:"PL"},{area:"plan",title:"PL"}];this.systemsAreas=["hpc","plan"];this.areaNames=[];this.fields=[];this.aiFields=[];this.systemsFields=[];this.theoryFields=[];this.otherFields=[];this.areaDict={};this.areaPosition={};this.subareas=
{};this.scholarInfo={};this.aliases={};this.turing={};this.acmfellow={};this.countryInfo={};this.countryAbbrv={};this.homepages={};this.useDenseRankings=!1;this.authors=[];this.dblpAuthors={};this.authorAreas={};this.stats={};this.areaDeptAdjustedCount={};this.areaStringMap={};this.usePieChart=!1;this.RightTriangle="►";this.DownTriangle="▼";this.BarChartIcon="<img class='closed_chart_icon chart_icon' alt='closed chart' src='png/barchart.png'>";this.OpenBarChartIcon="<img class='open_chart_icon chart_icon' alt='opened chart' src='png/barchart-open.png'>";
this.PieChartIcon="<img class='closed_chart_icon chart_icon' alt='closed chart' src='png/piechart.png'>";this.OpenPieChartIcon="<img class='open_chart_icon chart_icon' alt='opened chart' src='png/piechart-open.png'>";this.ChartIcon=this.BarChartIcon;this.OpenChartIcon=this.OpenBarChartIcon;CSRankings.theInstance=this;this.navigoRouter=new Navigo(null,!0);for(var a=0;a<this.areaMap.length;a++){const {area:b,title:e}=this.areaMap[a];CSRankings.areas[a]=b;b in CSRankings.parentMap||(CSRankings.topLevelAreas[b]=
b);this.areaNames[a]=e;this.fields[a]=b;this.areaDict[b]=e;this.areaPosition[b]=a}a=[...this.systemsAreas.map(b=>({[this.areaDict[b]]:"systems"}))];for(var c of a)for(var d in c)this.subareas[d]=c[d];for(const b of this.systemsAreas)this.systemsFields.push(this.areaPosition[b]);c=0;for(const b in CSRankings.parentMap)d=CSRankings.parentMap[b],d in CSRankings.childMap?CSRankings.childMap[d].push(b):(CSRankings.childMap[d]=[b],CSRankings.parentIndex[d]=c,c+=1);this.displayProgress(1);(()=>__awaiter(this,
void 0,void 0,function*(){yield this.loadTuring(this.turing);yield this.loadACMFellow(this.acmfellow);this.displayProgress(2);yield this.loadAuthorInfo();this.displayProgress(3);yield this.loadAuthors();this.setAllOn();this.navigoRouter.on({"/index":this.navigation,"/fromyear/:fromyear/toyear/:toyear/index":this.navigation}).resolve();this.displayProgress(4);this.countAuthorAreas();yield this.loadCountryInfo(this.countryInfo,this.countryAbbrv);this.addListeners();CSRankings.geoCheck();this.rank();
document.getElementById("overlay-loading").style.display="none";document.cookie.split("; ").find(b=>b.startsWith("surveyDisplayed"))||localStorage.getItem("surveyDisplayed");localStorage.getItem("sponsorshipDisplayed")||0!=Math.floor(20*Math.random())||(localStorage.setItem("sponsorshipDisplayed","true"),document.getElementById("overlay-sponsor").style.display="block")}))()}translateNameToDBLP(a){a=a.replace(/ Jr\./g,"_Jr.");a=a.replace(/ II/g,"_II");a=a.replace(/ III/g,"_III");a=a.replace(/'|\-|\./g,
"=");a=he.encode(a,{useNamedReferences:!0,allowUnsafeSymbols:!0});a=a.replace(/&/g,"=");a=a.replace(/;/g,"=");a=a.split(" ");var c=a[a.length-1];0<parseInt(c)&&(a.pop(),c=a[a.length-1]+"_"+c);a.pop();a=a.join(" ");a=a.replace(/\s/g,"_");a=a.replace(/\-/g,"=");a=encodeURIComponent(a);return"https://dblp.org/pers/hd"+`/${c[0].toLowerCase()}/${c}:${a}`}makePrologue(){return'<div class="table-responsive" style="overflow:auto; height:700px;"><table class="table table-fit table-sm table-striped"id="ranking" valign="top">'}static sum(a){let c=
0;for(let d=0;d<a.length;d++)c+=a[d];return c}static average(a){return CSRankings.sum(a)/a.length}static stddev(a){const c=CSRankings.average(a),d=a.map(function(b){b-=c;return b*b});return Math.sqrt(CSRankings.sum(d)/(a.length-1))}areaString(a){if(a in this.areaStringMap)return this.areaStringMap[a];if(!this.authorAreas[a])return"";let c={};var d=CSRankings.topTierAreas,b=0;for(var e in d)d=this.authorAreas[a][e],e in CSRankings.parentMap&&(e=this.areaDict[e]),0<d&&(e in c||(c[e]=0),c[e]+=d,b=c[e]>
b?c[e]:b);e=[];for(var g in c)e.push(c[g]);g=CSRankings.sum(e);d=0;1<e.length&&(d=Math.ceil(1*CSRankings.stddev(e)));e=[];for(const f in c)c[f]>=b-d&&.2<=1*c[f]/g&&1<c[f]&&e.push(f);b=e.sort((f,l)=>c[l]-c[f]).slice(0,3);this.areaStringMap[a]=b.map(f=>`<span class="${this.subareas[f]}-area">${f}</span>`).join(",");return this.areaStringMap[a]}compareNames(a,c){a=a.split(" ");c=c.split(" ");a=a[a.length-1];c=c[c.length-1];return a<c?-1:a>c?1:0}makeChart(a,c){let d=[],b={};var e=CSRankings.topTierAreas,
g=unescape(a),f=[...this.systemsAreas.map(h=>({key:h,label:this.areaDict[h],color:"#ff7f00"}))];f.forEach(h=>b[h.key]=0);for(let h in e){if(!(g in this.authorAreas))return;e=Math.round(10*this.authorAreas[g][h])/10;0<e&&(h in CSRankings.parentMap&&(h=CSRankings.parentMap[h]),b[h]+=e)}let l=0;f.forEach(h=>{l+=b[h.key]});f.forEach((h,k)=>{d.push({index:k,area:this.areaDict[h.key],value:Math.round(10*b[h.key])/10,ratio:b[h.key]/l});h.label=this.areaDict[h.key]});f=f.sort((h,k)=>h.label>k.label?1:h.label<
k.label?-1:0).map(h=>h.color);g={$schema:"https://vega.github.io/schema/vega-lite/v5.json",data:{values:d},mark:"bar",encoding:{x:{field:"area",type:"nominal",sort:null,axis:{title:null}},y:{field:"value",type:"quantitative",axis:{title:null}},tooltip:[{field:"area",type:"nominal",title:"Area"},{field:"value",type:"quantitative",title:"Count"}],color:{field:"area",type:"nominal",scale:{range:f},legend:null}},width:420,height:80,padding:{left:25,top:3}};f={$schema:"https://vega.github.io/schema/vega-lite/v5.json",
data:{values:d},encoding:{theta:{field:"value",type:"quantitative",stack:!0},color:{field:"area",type:"nominal",scale:{range:f},legend:null},order:{field:"index"},tooltip:[{field:"area",type:"nominal",title:"Area"},{field:"value",type:"quantitative",title:"Count"},{field:"ratio",type:"quantitative",title:"Ratio",format:".1%"}]},layer:[{mark:{type:"arc",outerRadius:90,stroke:"#fdfdfd",strokeWidth:1}},{mark:{type:"text",radius:108,dy:-3},encoding:{text:{field:"area",type:"nominal"},color:{condition:{test:"datum.ratio < 0.03",
value:"rgba(255, 255, 255, 0)"},field:"area",type:"nominal",scale:{range:f}}}},{mark:{type:"text",radius:108,fontSize:9,dy:7},encoding:{text:{field:"value",type:"quantitative"},color:{condition:{test:"datum.ratio < 0.03",value:"rgba(255, 255, 255, 0)"},field:"area",type:"nominal",scale:{range:f}}}}],width:400,height:250,padding:{left:25,top:3}};vegaEmbed(`div[id="${a}-chart"]`,c?f:g,{actions:!1})}displayProgress(a){a=`<strong>${["Initializing.","Loading author information.","Loading publication data.",
"Computing ranking."][a-1]}</strong><br />`;const c=document.querySelector("#progress");c&&(c.innerHTML=a)}loadTuring(a){return __awaiter(this,void 0,void 0,function*(){const c=yield new Promise(d=>{Papa.parse(this.turingFile,{header:!0,download:!0,complete:b=>{d(b.data)}})});for(const d of c)a[d.name]=d.year})}loadACMFellow(a){return __awaiter(this,void 0,void 0,function*(){const c=yield new Promise(d=>{Papa.parse(this.acmfellowFile,{header:!0,download:!0,complete:b=>{d(b.data)}})});for(const d of c)a[d.name]=
d.year})}loadCountryInfo(a,c){return __awaiter(this,void 0,void 0,function*(){const d=yield new Promise(b=>{Papa.parse(this.countryinfoFile,{header:!0,download:!0,complete:e=>{b(e.data)}})});for(const b of d)a[b.institution]=b.region,c[b.institution]=b.countryabbrv})}loadAuthorInfo(){return __awaiter(this,void 0,void 0,function*(){const a=yield new Promise(c=>{Papa.parse(this.authorFile,{download:!0,header:!0,complete:d=>{c(d.data)}})});for(let c=0;c<a.length;c++){const d=a[c];let b=d.name.trim();
const e=b.match(CSRankings.nameMatcher);e&&(b=e[1].trim(),this.note[b]=e[2]);""!==b&&(this.dblpAuthors[b]=this.translateNameToDBLP(b),this.homepages[b]=d.homepage,this.scholarInfo[b]=d.scholarid)}})}loadAuthors(){return __awaiter(this,void 0,void 0,function*(){this.authors=yield new Promise(a=>{Papa.parse(this.authorinfoFile,{download:!0,header:!0,complete:c=>{a(c.data)}})})})}inRegion(a,c){switch(c){case "us":if(a in this.countryInfo)return!1;break;case "europe":if(!(a in this.countryInfo)||"europe"!=
this.countryInfo[a])return!1;break;case "northamerica":if(a in this.countryInfo&&"canada"!=this.countryInfo[a])return!1;break;case "australasia":if(!(a in this.countryInfo)||"australasia"!=this.countryInfo[a])return!1;break;case "southamerica":if(!(a in this.countryInfo)||"southamerica"!=this.countryInfo[a])return!1;break;case "asia":if(!(a in this.countryInfo)||"asia"!=this.countryInfo[a])return!1;break;case "africa":if(!(a in this.countryInfo)||"africa"!=this.countryInfo[a])return!1;break;case "world":break;
default:if(this.countryAbbrv[a]!=c)return!1}return!0}activateFields(a,c){for(let d=0;d<c.length;d++){const b=this.fields[c[d]],e=`input[name=${b}]`;$(e).prop("checked",a);b in CSRankings.childMap&&($(e).prop("disabled",!1),CSRankings.childMap[b].forEach(g=>{$(`input[name=${g}]`).prop("checked",a)}))}this.rank();return!1}sortIndex(a){let c=Object.keys(a);c.sort((d,b)=>a[d]!=a[b]?a[b]-a[d]:d<b?-1:b<d?1:0);return c}countAuthorAreas(){const a=parseInt($("#fromyear").find(":selected").text()),c=parseInt($("#toyear").find(":selected").text());
this.authorAreas={};for(const b in this.authors){const {area:e}=this.authors[b];var {year:d}=this.authors[b];if(d<a||d>c)continue;const {name:g,dept:f,count:l}=this.authors[b];d=parseFloat(l);if(!(g in this.authorAreas)){this.authorAreas[g]={};for(const h in this.areaDict)this.areaDict.hasOwnProperty(h)&&(this.authorAreas[g][h]=0)}if(!(f in this.authorAreas)){this.authorAreas[f]={};for(const h in this.areaDict)this.areaDict.hasOwnProperty(h)&&(this.authorAreas[f][h]=0)}this.authorAreas[g][e]+=d;this.authorAreas[f][e]+=
d}}buildDepartments(a,c,d,b,e,g,f,l){const h={};for(const q in this.authors){if(!this.authors.hasOwnProperty(q))continue;var k=this.authors[q];const p=k.dept;if(!this.inRegion(p,b))continue;var m=k.area;if(0===d[m])continue;var n=k.year;if(n<a||n>c)continue;if("undefined"===typeof p)continue;k=k.name;m in CSRankings.parentMap&&(m=CSRankings.parentMap[m]);m+=p;m in this.areaDeptAdjustedCount||(this.areaDeptAdjustedCount[m]=0);n=parseInt(this.authors[q].count);const r=parseFloat(this.authors[q].adjustedcount);
this.areaDeptAdjustedCount[m]+=r;k in h||(h[k]=!0,f[k]=0,l[k]=0,p in e||(e[p]=0,g[p]=[]),g[p].push(k),e[p]+=1);f[k]+=n;l[k]+=r}}computeStats(a,c,d){this.stats={};for(const b in a)if(a.hasOwnProperty(b)){this.stats[b]=1;for(const e in CSRankings.topLevelAreas){const g=e+b;g in this.areaDeptAdjustedCount||(this.areaDeptAdjustedCount[g]=0);0!=d[e]&&(this.stats[b]*=this.areaDeptAdjustedCount[g]+1)}this.stats[b]=Math.pow(this.stats[b],1/c)}}updateWeights(a){let c=0;for(let d=0;d<CSRankings.areas.length;d++){const b=
CSRankings.areas[d];a[b]=$(`input[name=${this.fields[d]}]`).prop("checked")?1:0;1!==a[b]||b in CSRankings.parentMap||c++}return c}buildDropDown(a,c,d){let b={};for(const f in a){if(!a.hasOwnProperty(f))continue;let l='<div class="table"><table class="table table-sm table-striped"><thead><th></th><td><small><em><abbr title="Click on an author\'s name to go to their home page.">Faculty</abbr></em></small></td><td align="right"><small><em> <abbr title="Total number of publications (click for DBLP entry)."># Pubs</abbr> </em></small></td><td align="right"><small><em><abbr title="Count divided by number of co-authors">Adj. #</abbr></em></small></td></thead><tbody>',
h={};for(const k of a[f])h[k]=c[k];var e=Object.keys(h);e.sort((k,m)=>h[m]===h[k]?this.compareNames(k,m):h[m]-h[k]);for(const k of e){var g=encodeURI(this.homepages[k]);e=this.dblpAuthors[k];l+="<tr><td> </td><td><small>"+`<a title="Click for author\'s home page." target="_blank" href="${g}" `+`onclick="trackOutboundLink('${g}', true); return false;"`+`>${k}</a> `;this.note.hasOwnProperty(k)&&(l+=`<span class="note" title="Note">[${`<a href="${CSRankings.noteMap[this.note[k]]}">`+
this.note[k]}</a>]</span> `);this.acmfellow.hasOwnProperty(k)&&(l+=`<span title="ACM Fellow (${this.acmfellow[k]})"><img alt="ACM Fellow" src="${this.acmfellowImage}"></span> `);this.turing.hasOwnProperty(k)&&(l+=`<span title="Turing Award"><img alt="Turing Award" src="${this.turingImage}"></span> `);l+=`<span class="areaname">${this.areaString(k).toLowerCase()}</span> `;l+=`<a title="Click for author\'s home page." target="_blank" href="${g}" `+`onclick="trackOutboundLink(\'${g}\', true); return false;"`+
">"+`<img alt=\"Home page\" src=\"${this.homepageImage}\"></a> `;this.scholarInfo.hasOwnProperty(k)&&"NOSCHOLARPAGE"!=this.scholarInfo[k]&&(g=`https://scholar.google.com/citations?user=${this.scholarInfo[k]}&hl=en&oi=ao`,l+=`<a title="Click for author\'s Google Scholar page." target="_blank" href="${g}" onclick="trackOutboundLink('${g}', true); return false;">`+'<img alt="Google Scholar" src="scholar-favicon.ico" height="10" width="10"></a> ');l+=`<a title="Click for author\'s DBLP entry." target="_blank" href="${e}" onclick="trackOutboundLink('${e}', true); return false;">`;
l+='<img alt="DBLP" src="dblp.png"></a>';l+=`<span onclick='csr.toggleChart("${escape(k)}"); ga("send", "event", "chart", "toggle", "toggle ${escape(k)} ${$("#charttype").find(":selected").val()} chart");' title="Click for author's publication profile." class="hovertip" id="${escape(k)+"-chartwidget"}">`;l+=this.ChartIcon+'</span></small></td><td align="right"><small>'+`<a title="Click for author's DBLP entry." target="_blank" href="${e}" `+`onclick="trackOutboundLink('${e}', true); return false;">${h[k]}</a>`+
'</small></td><td align="right"><small>'+(Math.round(10*d[k])/10).toFixed(1)+'</small></td></tr><tr><td colspan="4">'+`<div class="csr-chart" id="${escape(k)}-chart">`+"</div></td></tr>"}l+="</tbody></table></div>";b[f]=l}return b}buildOutputString(a,c,d,b,e){let g=this.makePrologue();g=g+'<thead><tr><th align="left"><font color="#777">#</font></th><th align="left"><font color="#777">Institution</font>'+" ".repeat(20)+'</th><th align="right"><abbr title="Geometric mean count of papers published across all areas."><font color="#777">Count</font></abbr></th><th align="right"> <abbr title="Number of faculty who have published in these areas."><font color="#777">Faculty</font></abbr></th></th></tr></thead>';
g+="<tbody>";if(0<a){a=1;let h=0;var f=9999999.999;for(var l in this.stats)this.stats[l]=Math.round(10*this.stats[l])/10;l=this.sortIndex(this.stats);for(let k=0;k<l.length;k++){const m=l[k],n=this.stats[m];if(k>=e&&n!=f)break;if(0===n)break;f!=n&&(this.useDenseRankings?h+=1:(h+=a,a=0));f=escape(m);g+="\n<tr><td>"+h;g+=" ".repeat(4-Math.ceil(Math.log10(h)));g+="</td>";g+="<td>"+`<span class="hovertip" onclick="csr.toggleFaculty('${f}');" id="${f}-widget">`+this.RightTriangle+"</span>";let q=
"us";m in c&&(q=c[m]);g+=" "+`<span onclick="csr.toggleFaculty('${f}');">${m}</span>`+` <img src="/flags/${q}.png"> `+`<span class="hovertip" onclick='csr.toggleChart("${f}"); ga("send", "event", "chart", "toggle-department", "toggle ${f} ${$("#charttype").find(":selected").val()} chart");' id='${f+"-chartwidget"}'>`+this.ChartIcon+"</span>";g+="</td>";g+=`<td align="right">${(Math.round(10*n)/10).toFixed(1)}</td>`;g+=`<td align="right">${d[m]}`;g+="</td>";g+="</tr>\n";g+=`<tr><td colspan="4"><div class="csr-chart" id="${f}-chart"></div></td></tr>`;
g+=`<tr><td colspan="4"><div style="display:none;" id="${f}-faculty">${b[m]}</div></td></tr>`;a++;f=n}g+="</tbody></table><br /></div></div>\n<br></body></html>"}else g="<h3>Please select at least one area by clicking one or more checkboxes.</h3>";return g}setAllOn(a=!0){for(let c=0;c<CSRankings.areas.length;c++){const d=`input[name=${this.fields[c]}]`;a?$(d).prop("checked",!0):$(d).prop("checked",!1);$(d).prop("disabled",!1)}}rank(a=!0){const c=performance.now();var d={},b={};let e={},g={},f={};
this.areaDeptAdjustedCount={};const l=parseInt($("#fromyear").find(":selected").text()),h=parseInt($("#toyear").find(":selected").text()),k=String($("#regions").find(":selected").val());var m=this.updateWeights(f);this.buildDepartments(l,h,f,k,b,d,e,g);this.computeStats(d,m,f);d=this.buildDropDown(d,e,g);b=this.buildOutputString(m,this.countryAbbrv,b,d,CSRankings.minToRank);m=performance.now();console.log(`Before render: rank took ${m-c} milliseconds.`);document.getElementById("success").innerHTML=
b;$("div").scroll(function(){if(this.scrollTop+this.clientHeight>this.scrollHeight-50){const n=CSRankings.updateMinimum(this);n&&$("div").scrollTop(n)}});a?this.navigoRouter.resume():this.navigoRouter.pause();a=this.updatedURL();this.navigoRouter.navigate(a);m=performance.now();console.log(`Rank took ${m-c} milliseconds.`);return!1}toggleChart(a){const c=document.getElementById(a+"-chart"),d=document.getElementById(a+"-chartwidget");"block"===c.style.display?(c.style.display="none",c.innerHTML="",
d.innerHTML=this.ChartIcon):(c.style.display="block",this.makeChart(a,this.usePieChart),d.innerHTML=this.OpenChartIcon)}toggleConferences(a){const c=document.getElementById(a+"-conferences");a=document.getElementById(a+"-widget");"block"===c.style.display?(c.style.display="none",a.innerHTML=this.RightTriangle):(c.style.display="block",a.innerHTML=this.DownTriangle)}toggleFaculty(a){const c=document.getElementById(a+"-faculty");a=document.getElementById(a+"-widget");"block"===c.style.display?(c.style.display=
"none",a.innerHTML=this.RightTriangle):(c.style.display="block",a.innerHTML=this.DownTriangle)}activateAll(a=!0){this.setAllOn(a);this.rank();return!1}activateNone(){return this.activateAll(!1)}activateSystems(a=!0){return this.activateFields(a,this.systemsFields)}activateAI(a=!0){return this.activateFields(a,this.aiFields)}activateTheory(a=!0){return this.activateFields(a,this.theoryFields)}activateOthers(a=!0){return this.activateFields(a,this.otherFields)}deactivateSystems(){return this.activateSystems(!1)}deactivateAI(){return this.activateAI(!1)}deactivateTheory(){return this.activateTheory(!1)}deactivateOthers(){return this.activateOthers(!1)}updatedURL(){let a=
"",c=0,d=0;for(var b=0;b<this.fields.length;b++){var e=`input[name=${this.fields[b]}]`;this.fields[b]in CSRankings.parentMap||(d+=1);if($(e).prop("checked")&&!(this.fields[b]in CSRankings.parentMap)){let h=1;this.fields[b]in CSRankings.childMap&&CSRankings.childMap[this.fields[b]].forEach(k=>{k=$(`input[name=${k}]`).prop("checked");h&=k?0:1});h&&(a+=`${this.fields[b]}&`,c+=1)}}0<c&&(a=a.slice(0,-1));b=$("#regions").find(":selected").val();e="";const g=(new Date).getFullYear(),f=parseInt($("#fromyear").find(":selected").text()),
l=parseInt($("#toyear").find(":selected").text());if(f!=g-10||l!=g)e+=`/fromyear/${f.toString()}`,e+=`/toyear/${l.toString()}`;e=c==d?e+"/index?all":0==c?e+"/index?none":e+`/index?${a}`;"USA"!=b&&(e+=`&${b}`);if("pie"==$("#charttype").find(":selected").val()){this.usePieChart=!0;for(const h of document.getElementsByClassName("chart_icon"))h.src="png/piechart.png";for(const h of document.getElementsByClassName("open_chart_icon"))h.src="png/piechart-open.png";for(const h of document.getElementsByClassName("closed_chart_icon"))h.src=
"png/piechart.png";this.ChartIcon=this.PieChartIcon;this.OpenChartIcon=this.OpenPieChartIcon;e+="&pie"}else{this.usePieChart=!1;for(const h of document.getElementsByClassName("chart_icon"))h.src="png/barchart.png";for(const h of document.getElementsByClassName("open_chart_icon"))h.src="png/barchart-open.png";for(const h of document.getElementsByClassName("closed_chart_icon"))h.src="png/barchart.png";this.ChartIcon=this.BarChartIcon;this.OpenChartIcon=this.OpenBarChartIcon}return e}static geoCheck(){navigator.geolocation.getCurrentPosition(a=>
{a=whichContinent(a.coords.latitude,a.coords.longitude);let c=document.getElementById("regions");switch(a){case "northamerica":return;case "europe":case "asia":case "southamerica":case "africa":c.value=a;break;default:c.value="world"}CSRankings.getInstance().rank()})}navigation(a,c){null!==a&&Object.keys(a).forEach(f=>{$("#{key}").prop("value",a[f].toString())});CSRankings.clearNonSubsetted();let d=c.split("&");c=d.some(f=>"all"==f);d.some(f=>"survey"==f)&&(document.getElementById("overlay-survey").style.display=
"block");const b=d.some(f=>"none"==f);if(d.some(f=>0<=CSRankings.regions.indexOf(f))){let f=0;d.forEach(l=>{0<=CSRankings.regions.indexOf(l)&&(d.splice(f,1),$("#regions").val(l));f+=1})}d.some(f=>"pie"==f)&&$("#charttype").val("pie");if(c)for(var e in CSRankings.topTierAreas){var g=`input[name=${e}]`;$(g).prop("checked",!0);e in CSRankings.childMap&&($(g).prop("disabled",!1),CSRankings.childMap[e].forEach(f=>{$(`input[name=${f}]`).prop("checked",!0)}))}else if(b)CSRankings.clearNonSubsetted();else{CSRankings.clearNonSubsetted();
for(g of d)"none"!=g&&""!=g&&(e=`input[name=${g}]`,$(e).prop("checked",!0),$(e).prop("disabled",!1),g in CSRankings.childMap&&CSRankings.childMap[g].forEach(f=>{$(`input[name=${f}]`).prop("checked",!0)}))}}static clearNonSubsetted(){for(const a of CSRankings.areas)if(a in CSRankings.childMap){const c=CSRankings.childMap[a];if(!CSRankings.subsetting(c)){const d=`input[name=${a}]`;$(d).prop("checked",!1);$(d).prop("disabled",!1);c.forEach(b=>{$(`input[name=${b}]`).prop("checked",!1)})}}}static subsetting(a){let c=
[],d=[];a.forEach(g=>{c.push(g)});let b=0;c.forEach(g=>{$(`input[name=${g}]`).prop("checked")&&b++});let e=0;d.forEach(g=>{$(`input[name=${g}]`).prop("checked")&&e++});a=0<e&&0!=d.length;return 0<b&&b<c.length||a}addListeners(){["toyear","fromyear","regions","charttype"].forEach(b=>{document.getElementById(b).addEventListener("change",()=>{this.countAuthorAreas();this.rank()})});for(var a=0;a<CSRankings.areas.length;a++){let b=CSRankings.areas[a];if(!(b in CSRankings.parentMap)){var c=document.getElementById(`${b}-widget`);
c&&c.addEventListener("click",()=>{this.toggleConferences(b)})}}for(a=0;a<this.fields.length;a++){const b=`input[name=${this.fields[a]}]`,e=this.fields[a];(c=document.getElementById(this.fields[a]))&&c.addEventListener("click",()=>{let g=!0;if(e in CSRankings.parentMap){g=!1;var f=CSRankings.parentMap[e],l=`input[name=${f}]`;let h=0,k=1;CSRankings.childMap[f].forEach(m=>{m=$(`input[name=${m}]`).prop("checked");h|=m;k&=m});$(l).prop("checked",h);h&&!k||$(l).prop("disabled",!1);h&&!k&&$(l).prop("disabled",
!0)}else if(f=$(b).prop("checked"),e in CSRankings.childMap)for(l of CSRankings.childMap[e])$(`input[name=${l}]`).prop("checked",f);this.rank(g)})}const d={all_areas_on:()=>{this.activateAll()},all_areas_off:()=>{this.activateNone()},ai_areas_on:()=>{this.activateAI()},ai_areas_off:()=>{this.deactivateAI()},systems_areas_on:()=>{this.activateSystems()},systems_areas_off:()=>{this.deactivateSystems()},theory_areas_on:()=>{this.activateTheory()},theory_areas_off:()=>{this.deactivateTheory()},other_areas_on:()=>
{this.activateOthers()},other_areas_off:()=>{this.deactivateOthers()}};for(const b in d)document.getElementById(b).addEventListener("click",()=>{d[b]()})}}CSRankings.minToRank=30;CSRankings.areas=[];CSRankings.topLevelAreas={};CSRankings.topTierAreas={};CSRankings.regions="europe northamerica southamerica australasia asia africa world ae ar at au bd be br ca ch cl cn co cy cz de dk ee eg es fi fr gr hk hu ie il in ir it jo jp kr lb lu mt my nl no nz ph pk pl pt qa ro ru sa se sg th tr tw uk za".split(" ");
CSRankings.nameMatcher=RegExp("(.*)\\s+\\[(.*)\\]");CSRankings.parentIndex={};CSRankings.parentMap={socc:"hpc",cgo:"plan",ppopp:"plan",ecoop:"plan"};CSRankings.childMap={};CSRankings.noteMap={Tech:"https://tech.cornell.edu/",CBG:"https://www.cis.mpg.de/cbg/",INF:"https://www.cis.mpg.de/mpi-inf/",IS:"https://www.cis.mpg.de/is/",MG:"https://www.cis.mpg.de/molgen/",SP:"https://www.cis.mpg.de/mpi-for-security-and-privacy/",SWS:"https://www.cis.mpg.de/mpi-sws/"};var csr=new CSRankings;