forked from emeryberger/CSrankings
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcsrankings.min.js
More file actions
61 lines (61 loc) · 30.2 KB
/
csrankings.min.js
File metadata and controls
61 lines (61 loc) · 30.2 KB
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var __awaiter=this&&this.__awaiter||function(a,c,d,b){function f(h){return h instanceof d?h:new d(function(e){e(h)})}return new (d||=Promise)(function(h,e){function l(m){try{k(b.next(m))}catch(n){e(n)}}function g(m){try{k(b["throw"](m))}catch(n){e(n)}}function k(m){m.done?h(m.value):f(m.value).then(l,g)}k((b=b.apply(a,c||[])).next())})};
class CSRankings{static updateMinimum(a){return CSRankings.minToRank<=500?(a=a.scrollTop,CSRankings.minToRank=5E3,CSRankings.getInstance().rank(),a):0}static getInstance(){return CSRankings.theInstance}static promise(a){typeof Promise!=="undefined"?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.countrynamesFile="./countries.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:"ai",title:"AI"},{area:"aaai",title:"AI"},{area:"ijcai",title:"AI"},{area:"vision",title:"Vision"},{area:"cvpr",title:"Vision"},{area:"eccv",title:"Vision"},{area:"iccv",title:"Vision"},{area:"mlmining",title:"ML"},{area:"icml",title:"ML"},{area:"kdd",title:"ML"},{area:"iclr",
title:"ML"},{area:"nips",title:"ML"},{area:"nlp",title:"NLP"},{area:"acl",title:"NLP"},{area:"emnlp",title:"NLP"},{area:"naacl",title:"NLP"},{area:"inforet",title:"Web+IR"},{area:"sigir",title:"Web+IR"},{area:"www",title:"Web+IR"},{area:"arch",title:"Arch"},{area:"asplos",title:"Arch"},{area:"isca",title:"Arch"},{area:"micro",title:"Arch"},{area:"hpca",title:"Arch"},{area:"comm",title:"Networks"},{area:"sigcomm",title:"Networks"},{area:"nsdi",title:"Networks"},{area:"sec",title:"Security"},{area:"ccs",
title:"Security"},{area:"oakland",title:"Security"},{area:"usenixsec",title:"Security"},{area:"ndss",title:"Security"},{area:"pets",title:"Security"},{area:"mod",title:"DB"},{area:"sigmod",title:"DB"},{area:"vldb",title:"DB"},{area:"icde",title:"DB"},{area:"pods",title:"DB"},{area:"hpc",title:"HPC"},{area:"sc",title:"HPC"},{area:"hpdc",title:"HPC"},{area:"ics",title:"HPC"},{area:"mobile",title:"Mobile"},{area:"mobicom",title:"Mobile"},{area:"mobisys",title:"Mobile"},{area:"sensys",title:"Mobile"},
{area:"metrics",title:"Metrics"},{area:"imc",title:"Metrics"},{area:"sigmetrics",title:"Metrics"},{area:"ops",title:"OS"},{area:"sosp",title:"OS"},{area:"osdi",title:"OS"},{area:"fast",title:"OS"},{area:"usenixatc",title:"OS"},{area:"eurosys",title:"OS"},{area:"pldi",title:"PL"},{area:"popl",title:"PL"},{area:"icfp",title:"PL"},{area:"oopsla",title:"PL"},{area:"plan",title:"PL"},{area:"soft",title:"SE"},{area:"fse",title:"SE"},{area:"icse",title:"SE"},{area:"ase",title:"SE"},{area:"issta",title:"SE"},
{area:"act",title:"Theory"},{area:"focs",title:"Theory"},{area:"soda",title:"Theory"},{area:"stoc",title:"Theory"},{area:"crypt",title:"Crypto"},{area:"crypto",title:"Crypto"},{area:"eurocrypt",title:"Crypto"},{area:"log",title:"Logic"},{area:"cav",title:"Logic"},{area:"lics",title:"Logic"},{area:"graph",title:"Graphics"},{area:"siggraph",title:"Graphics"},{area:"siggraph-asia",title:"Graphics"},{area:"eurographics",title:"Graphics"},{area:"chi",title:"HCI"},{area:"chiconf",title:"HCI"},{area:"ubicomp",
title:"HCI"},{area:"uist",title:"HCI"},{area:"robotics",title:"Robotics"},{area:"icra",title:"Robotics"},{area:"iros",title:"Robotics"},{area:"rss",title:"Robotics"},{area:"bio",title:"Comp. Bio"},{area:"ismb",title:"Comp. Bio"},{area:"recomb",title:"Comp. Bio"},{area:"da",title:"EDA"},{area:"dac",title:"EDA"},{area:"iccad",title:"EDA"},{area:"bed",title:"Embedded"},{area:"emsoft",title:"Embedded"},{area:"rtas",title:"Embedded"},{area:"rtss",title:"Embedded"},{area:"visualization",title:"Visualization"},
{area:"vis",title:"Visualization"},{area:"vr",title:"Visualization"},{area:"ecom",title:"ECom"},{area:"ec",title:"ECom"},{area:"wine",title:"ECom"},{area:"csed",title:"CSEd"},{area:"sigcse",title:"CSEd"}];this.aiAreas=["ai","vision","mlmining","nlp","inforet"];this.systemsAreas="arch comm sec mod da bed hpc mobile metrics ops plan soft".split(" ");this.theoryAreas=["act","crypt","log"];this.interdisciplinaryAreas="bio graph csed ecom chi robotics visualization".split(" ");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.countryNames={};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:f}=this.areaMap[a];CSRankings.areas[a]=b;b in CSRankings.parentMap||(CSRankings.topLevelAreas[b]=b);b in CSRankings.nextTier||(CSRankings.topTierAreas[b]=b);this.areaNames[a]=f;this.fields[a]=b;this.areaDict[b]=f;this.areaPosition[b]=a}a=[...this.aiAreas.map(b=>({[this.areaDict[b]]:"ai"})),...this.systemsAreas.map(b=>({[this.areaDict[b]]:"systems"})),...this.theoryAreas.map(b=>
({[this.areaDict[b]]:"theory"})),...this.interdisciplinaryAreas.map(b=>({[this.areaDict[b]]:"interdisciplinary"}))];for(var c of a)for(var d in c)this.subareas[d]=c[d];for(const b of this.aiAreas)this.aiFields.push(this.areaPosition[b]);for(const b of this.systemsAreas)this.systemsFields.push(this.areaPosition[b]);for(const b of this.theoryAreas)this.theoryFields.push(this.areaPosition[b]);for(const b of this.interdisciplinaryAreas)this.otherFields.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);yield this.loadCountryNames(this.countryNames);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")||Math.floor(Math.random()*5)!=0||(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];parseInt(c)>0&&(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 f in d)d=this.authorAreas[a][f],f in CSRankings.parentMap&&(f=this.areaDict[f]),d>0&&(f in c||(c[f]=0),c[f]+=d,b=c[f]>b?c[f]:b);f=[];for(var h in c)f.push(c[h]);h=CSRankings.sum(f);d=0;f.length>1&&(d=Math.ceil(1*CSRankings.stddev(f)));f=[];for(const e in c)c[e]>=b-d&&1*c[e]/h>=.2&&c[e]>1&&f.push(e);b=f.sort((e,l)=>c[l]-c[e]).slice(0,3);this.areaStringMap[a]=b.map(e=>`<span class="${this.subareas[e]}-area">${e}</span>`).join(",");
return this.areaStringMap[a]}removeDisambiguationSuffix(a){return a.replace(/\s\d{4}$/,"")}compareNames(a,c){a=this.removeDisambiguationSuffix(a).split(" ");c=this.removeDisambiguationSuffix(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 f=CSRankings.topTierAreas,h=unescape(a),e=[...this.aiAreas.map(g=>({key:g,label:this.areaDict[g],color:"#377eb8"})),...this.systemsAreas.map(g=>({key:g,label:this.areaDict[g],color:"#ff7f00"})),...this.theoryAreas.map(g=>
({key:g,label:this.areaDict[g],color:"#4daf4a"})),...this.interdisciplinaryAreas.map(g=>({key:g,label:this.areaDict[g],color:"#984ea3"}))];e.forEach(g=>b[g.key]=0);for(let g in f){if(!(h in this.authorAreas))return;f=Math.round(this.authorAreas[h][g]*10)/10;f>0&&(g in CSRankings.parentMap&&(g=CSRankings.parentMap[g]),b[g]+=f)}let l=0;e.forEach(g=>{l+=b[g.key]});e.forEach((g,k)=>{d.push({index:k,area:this.areaDict[g.key],value:Math.round(b[g.key]*10)/10,ratio:b[g.key]/l});g.label=this.areaDict[g.key]});
e=e.sort((g,k)=>g.label>k.label?1:g.label<k.label?-1:0).map(g=>g.color);h={$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:e},legend:null}},width:420,height:80,padding:{left:25,top:3}};e=
{$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:e},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:e}}}},{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:e}}}}],width:400,height:250,padding:{left:25,top:3}};vegaEmbed(`div[id="${a}-chart"]`,c?e:h,{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:f=>{b(f.data)}})});for(const b of d)a[b.institution]=b.region,c[b.institution]=b.countryabbrv})}loadCountryNames(a){return __awaiter(this,void 0,void 0,function*(){const c=yield new Promise(d=>{Papa.parse(this.countrynamesFile,{header:!0,download:!0,complete:b=>
{d(b.data)}})});for(const d of c)a[d.alpha_2]=d.name})}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 f=b.match(CSRankings.nameMatcher);f&&(b=f[1].trim(),this.note[b]=f[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)||this.countryInfo[a]!="europe")return!1;break;case "northamerica":if(a in this.countryInfo&&this.countryInfo[a]!="canada")return!1;break;case "australasia":if(!(a in this.countryInfo)||this.countryInfo[a]!="australasia")return!1;break;case "southamerica":if(!(a in
this.countryInfo)||this.countryInfo[a]!="southamerica")return!1;break;case "asia":if(!(a in this.countryInfo)||this.countryInfo[a]!="asia")return!1;break;case "africa":if(!(a in this.countryInfo)||this.countryInfo[a]!="africa")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]],f=`input[name=${b}]`;$(f).prop("checked",a);b in CSRankings.childMap&&($(f).prop("disabled",!1),CSRankings.childMap[b].forEach(h=>
{const e=`input[name=${h}]`;h in CSRankings.nextTier?$(e).prop("checked",!1):$(e).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:f}=this.authors[b];if(f in CSRankings.nextTier)continue;var {year:d}=this.authors[b];if(d<a||d>
c)continue;const {name:h,dept:e,count:l}=this.authors[b];d=parseFloat(l);if(!(h in this.authorAreas)){this.authorAreas[h]={};for(const g in this.areaDict)this.areaDict.hasOwnProperty(g)&&(this.authorAreas[h][g]=0)}if(!(e in this.authorAreas)){this.authorAreas[e]={};for(const g in this.areaDict)this.areaDict.hasOwnProperty(g)&&(this.authorAreas[e][g]=0)}this.authorAreas[h][f]+=d;this.authorAreas[e][f]+=d}}buildDepartments(a,c,d,b,f,h,e,l){const g={};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(d[m]===0)continue;var n=k.year;if(n<a||n>c)continue;if(typeof p==="undefined")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 g||(g[k]=!0,e[k]=0,l[k]=0,p in f||(f[p]=0,h[p]=[]),h[p].push(k),f[p]+=1);
e[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 f in CSRankings.topLevelAreas){const h=f+b;h in this.areaDeptAdjustedCount||(this.areaDeptAdjustedCount[h]=0);d[f]!=0&&(this.stats[b]*=this.areaDeptAdjustedCount[h]+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;a[b]!==1||b in CSRankings.parentMap||
c++}return c}buildDropDown(a,c,d){let b={};for(const e in a){if(!a.hasOwnProperty(e))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>',
g={};for(const k of a[e])g[k]=c[k];var f=Object.keys(g);f.sort((k,m)=>{if(g[m]===g[k]){const n=Math.round(10*d[m])/10,q=Math.round(10*d[k])/10;return n===q?this.compareNames(k,m):n-q}return g[m]-g[k]});for(const k of f){var h=encodeURI(this.homepages[k]);f=this.dblpAuthors[k];l+="<tr><td> </td><td><small>"+`<a title="Click for author\'s home page." target="_blank" href="${h}" `+`onclick="trackOutboundLink('${h}', 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="${h}" `+
`onclick="trackOutboundLink(\'${h}\', true); return false;"`+">"+`<img alt=\"Home page\" src=\"${this.homepageImage}\"></a> `;this.scholarInfo.hasOwnProperty(k)&&this.scholarInfo[k]!="NOSCHOLARPAGE"&&(h=`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="${h}" onclick="trackOutboundLink('${h}', 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="${f}" onclick="trackOutboundLink('${f}', 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="${f}" `+`onclick="trackOutboundLink('${f}', true); return false;">${g[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[e]=l}return b}buildOutputString(a,c,d,b,f){var h;let e=this.makePrologue();e=e+'<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>';e+="<tbody>";if(a>0){a=1;let k=0;var l=9999999.999;for(var g in this.stats)this.stats[g]=Math.round(10*this.stats[g])/10;g=this.sortIndex(this.stats);for(let m=0;m<g.length;m++){const n=
g[m],q=this.stats[n];if(m>=f&&q!=l)break;if(q===0)break;l!=q&&(this.useDenseRankings?k+=1:(k+=a,a=0));l=escape(n);e+="\n<tr><td>"+k;e+=" ".repeat(4-Math.ceil(Math.log10(k)));e+="</td>";e+="<td>"+`<span class="hovertip" onclick="csr.toggleFaculty('${l}');" id="${l}-widget">`+this.RightTriangle+"</span>";let p="us";n in c&&(p=c[n]);const r=(h=this.countryNames[p.toUpperCase()])!==null&&h!==void 0?h:p.toUpperCase();e+=" "+`<span onclick="csr.toggleFaculty('${l}');">${n}</span>`+` <img title="${r}" src="/flags/${p}.png"> `+
`<span class="hovertip" onclick='csr.toggleChart("${l}"); ga("send", "event", "chart", "toggle-department", "toggle ${l} ${$("#charttype").find(":selected").val()} chart");' id='${l+"-chartwidget"}'>`+this.ChartIcon+"</span>";e+="</td>";e+=`<td align="right">${(Math.round(10*q)/10).toFixed(1)}</td>`;e+=`<td align="right">${d[n]}`;e+="</td>";e+="</tr>\n";e+=`<tr><td colspan="4"><div class="csr-chart" id="${l}-chart"></div></td></tr>`;e+=`<tr><td colspan="4"><div style="display:none;" id="${l}-faculty">${b[n]}</div></td></tr>`;
a++;l=q}e+="</tbody></table><br /></div></div>\n<br></body></html>"}else e="<h3>Please select at least one area by clicking one or more checkboxes.</h3>";return e}setAllOn(a=!0){for(let c=0;c<CSRankings.areas.length;c++){const d=this.fields[c],b=`input[name=${d}]`;a?d in CSRankings.nextTier?$(b).prop("checked",!1):($(b).prop("checked",!0),$(b).prop("disabled",!1)):($(b).prop("checked",!1),$(b).prop("disabled",!1))}}rank(a=!0){const c=performance.now();var d={},b={};let f={},h={},e={};this.areaDeptAdjustedCount=
{};const l=parseInt($("#fromyear").find(":selected").text()),g=parseInt($("#toyear").find(":selected").text()),k=String($("#regions").find(":selected").val());var m=this.updateWeights(e);this.buildDepartments(l,g,e,k,b,d,f,h);this.computeStats(d,m,e);d=this.buildDropDown(d,f,h);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");c.style.display==="block"?(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");c.style.display==="block"?(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");c.style.display==="block"?(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 f=`input[name=${this.fields[b]}]`;this.fields[b]in CSRankings.parentMap||(d+=1);if($(f).prop("checked")&&!(this.fields[b]in CSRankings.parentMap)){let g=1;this.fields[b]in CSRankings.childMap&&CSRankings.childMap[this.fields[b]].forEach(k=>{let m=$(`input[name=${k}]`).prop("checked");g=k in CSRankings.nextTier?g&(m?0:1):g&m});g&&(a+=`${this.fields[b]}&`,c+=1)}}c>0&&(a=a.slice(0,-1));b=$("#regions").find(":selected").val();f="";const h=(new Date).getFullYear(),
e=parseInt($("#fromyear").find(":selected").text()),l=parseInt($("#toyear").find(":selected").text());if(e!=h-10||l!=h)f+=`/fromyear/${e.toString()}`,f+=`/toyear/${l.toString()}`;f=c==d?f+"/index?all":c==0?f+"/index?none":f+`/index?${a}`;b!="USA"&&(f+=`&${b}`);if($("#charttype").find(":selected").val()=="pie"){this.usePieChart=!0;for(const g of document.getElementsByClassName("chart_icon"))g.src="png/piechart.png";for(const g of document.getElementsByClassName("open_chart_icon"))g.src="png/piechart-open.png";
for(const g of document.getElementsByClassName("closed_chart_icon"))g.src="png/piechart.png";this.ChartIcon=this.PieChartIcon;this.OpenChartIcon=this.OpenPieChartIcon;f+="&pie"}else{this.usePieChart=!1;for(const g of document.getElementsByClassName("chart_icon"))g.src="png/barchart.png";for(const g of document.getElementsByClassName("open_chart_icon"))g.src="png/barchart-open.png";for(const g of document.getElementsByClassName("closed_chart_icon"))g.src="png/barchart.png";this.ChartIcon=this.BarChartIcon;
this.OpenChartIcon=this.OpenBarChartIcon}return f}static geoCheck(){var a;(a=navigator.geolocation)===null||a===void 0||a.getCurrentPosition(c=>{c=whichContinent(c.coords.latitude,c.coords.longitude);let d=document.getElementById("regions");switch(c){case "northamerica":return;case "europe":case "asia":case "southamerica":case "africa":d.value=c;break;default:d.value="world"}CSRankings.getInstance().rank()})}navigation(a,c){a!==null&&Object.keys(a).forEach(e=>{$(`#${e}`).prop("value",a[e].toString())});
CSRankings.clearNonSubsetted();let d=c.split("&");c=d.some(e=>e=="all");d.some(e=>e=="survey")&&(document.getElementById("overlay-survey").style.display="block");const b=d.some(e=>e=="none");if(d.some(e=>CSRankings.regions.indexOf(e)>=0)){let e=0;d.forEach(l=>{CSRankings.regions.indexOf(l)>=0&&(d.splice(e,1),$("#regions").val(l));e+=1})}d.some(e=>e=="pie")&&$("#charttype").val("pie");if(c)for(var f in CSRankings.topTierAreas){var h=`input[name=${f}]`;$(h).prop("checked",!0);f in CSRankings.childMap&&
($(h).prop("disabled",!1),CSRankings.childMap[f].forEach(e=>{e in CSRankings.nextTier||$(`input[name=${e}]`).prop("checked",!0)}))}else if(b)CSRankings.clearNonSubsetted();else{CSRankings.clearNonSubsetted();for(h of d)h!="none"&&h!=""&&(f=`input[name=${h}]`,$(f).prop("checked",!0),$(f).prop("disabled",!1),h in CSRankings.childMap&&CSRankings.childMap[h].forEach(e=>{e in CSRankings.nextTier||$(`input[name=${e}]`).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(h=>{h in CSRankings.nextTier?d.push(h):c.push(h)});let b=0;c.forEach(h=>{$(`input[name=${h}]`).prop("checked")&&b++});let f=0;d.forEach(h=>{$(`input[name=${h}]`).prop("checked")&&f++});a=f>0&&d.length!=0;return b>0&&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]}]`,f=this.fields[a];(c=document.getElementById(this.fields[a]))&&c.addEventListener("click",
()=>{let h=!0;if(f in CSRankings.parentMap){h=!1;var e=CSRankings.parentMap[f],l=`input[name=${e}]`;let g=0,k=1;CSRankings.childMap[e].forEach(m=>{const n=$(`input[name=${m}]`).prop("checked");g|=n;k=m in CSRankings.nextTier?k&(n?0:1):k&n});$(l).prop("checked",g);g&&!k||$(l).prop("disabled",!1);g&&!k&&$(l).prop("disabled",!0)}else if(e=$(b).prop("checked"),f in CSRankings.childMap)for(l of CSRankings.childMap[f]){const g=`input[name=${l}]`;l in CSRankings.nextTier?$(g).prop("checked",!1):$(g).prop("checked",
e)}this.rank(h)})}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 lk 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={aaai:"ai",ijcai:"ai",cvpr:"vision",eccv:"vision",iccv:"vision",icml:"mlmining",iclr:"mlmining",kdd:"mlmining",nips:"mlmining",acl:"nlp",emnlp:"nlp",naacl:"nlp",sigir:"inforet",www:"inforet",asplos:"arch",isca:"arch",micro:"arch",hpca:"arch",ccs:"sec",oakland:"sec",usenixsec:"sec",ndss:"sec",pets:"sec",vldb:"mod",sigmod:"mod",icde:"mod",pods:"mod",dac:"da",iccad:"da",emsoft:"bed",rtas:"bed",rtss:"bed",sc:"hpc",hpdc:"hpc",ics:"hpc",mobicom:"mobile",mobisys:"mobile",sensys:"mobile",
imc:"metrics",sigmetrics:"metrics",osdi:"ops",sosp:"ops",eurosys:"ops",fast:"ops",usenixatc:"ops",popl:"plan",pldi:"plan",oopsla:"plan",icfp:"plan",fse:"soft",icse:"soft",ase:"soft",issta:"soft",nsdi:"comm",sigcomm:"comm",siggraph:"graph","siggraph-asia":"graph",eurographics:"graph",focs:"act",soda:"act",stoc:"act",crypto:"crypt",eurocrypt:"crypt",cav:"log",lics:"log",ismb:"bio",recomb:"bio",ec:"ecom",wine:"ecom",chiconf:"chi",ubicomp:"chi",uist:"chi",icra:"robotics",iros:"robotics",rss:"robotics",
vis:"visualization",vr:"visualization",sigcse:"csed"};CSRankings.nextTier={ase:!0,issta:!0,icde:!0,pods:!0,hpca:!0,ndss:!0,pets:!0,eurosys:!0,eurographics:!0,fast:!0,usenixatc:!0,icfp:!0,oopsla:!0,kdd:!0};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;