diff --git a/src/_data/navigation.yml b/src/_data/navigation.yml index c5d9aff..03b254a 100644 --- a/src/_data/navigation.yml +++ b/src/_data/navigation.yml @@ -1,91 +1,93 @@ main: - - title: "Search" - url: index.html - - title: "Ranking" +- title: Search + url: index.html +- title: Ranking + url: combined_rankings.html + children: + - title: Author Ranking url: combined_rankings.html - children: - - title: "Author Ranking" - url: combined_rankings.html - - title: "Institution Ranking" - url: institution_rankings.html - - title: "Systems vs. Security" - url: overview.html - - title: "Geographic Statistics" - url: statistics/ - - title: "Profiles" - url: profile.html - - title: "Security" + - title: Institution Ranking + url: institution_rankings.html + - title: Systems vs. Security + url: overview.html + - title: Geographic Statistics + url: statistics/ + - title: Profiles + url: profile.html +- title: Security + url: security/ + children: + - title: Overview url: security/ - children: - - title: "Overview" - url: security/ - - title: "ACSAC" - url: security/acsac.html - - title: "CHES" - url: security/ches.html - - title: "NDSS" - url: security/ndss.html - - title: "IEEE S&P" - url: security/sp.html - - title: "PETS" - url: security/pets.html - - title: "SysTEX" - url: security/systex.html - - title: "USENIX Security" - url: security/usenixsec.html - - title: "WOOT" - url: security/woot.html - - title: "Systems" + - title: ACSAC + url: security/acsac.html + - title: CHES + url: security/ches.html + - title: IEEE S&P + url: security/sp.html + - title: NDSS + url: security/ndss.html + - title: PETS + url: security/pets.html + - title: SysTEX + url: security/systex.html + - title: USENIX Security + url: security/usenixsec.html + - title: USENIX VehicleSec + url: security/vehiclesec.html + - title: WOOT + url: security/woot.html +- title: Systems + url: systems/ + children: + - title: Overview url: systems/ - children: - - title: "Overview" - url: systems/ - - title: "ATC" - url: systems/atc.html - - title: "CAIS" - url: systems/cais.html - - title: "EuroSys" - url: systems/eurosys.html - - title: "FAST" - url: systems/fast.html - - title: "OSDI" - url: systems/osdi.html - - title: "SC" - url: systems/sc.html - - title: "SOSP" - url: systems/sosp.html - - title: "AE Committees" + - title: ACM CAIS + url: systems/cais.html + - title: EuroSys + url: systems/eurosys.html + - title: OSDI + url: systems/osdi.html + - title: SC + url: systems/sc.html + - title: SOSP + url: systems/sosp.html + - title: USENIX ATC + url: systems/atc.html + - title: USENIX FAST + url: systems/fast.html +- title: AE Committees + url: committee.html + children: + - title: Overview url: committee.html - children: - - title: "Overview" - url: committee.html - - title: "Ranking" - url: combined_rankings.html?contrib=ae - - title: "Chair Statistics" - url: ae_chairs.html - - title: "Systems Statistics" - url: systems/committee.html - - title: "Security Statistics" - url: security/committee.html - - title: "Repository Stats" + - title: Ranking + url: combined_rankings.html?contrib=ae + - title: Chair Statistics + url: ae_chairs.html + - title: Systems Statistics + url: systems/committee.html + - title: Security Statistics + url: security/committee.html +- title: Repository Stats + url: repo_stats.html + children: + - title: Overview url: repo_stats.html - children: - - title: "Overview" - url: repo_stats.html - - title: "Systems" - url: systems/repo_stats.html - - title: "Security" - url: security/repo_stats.html - - title: "Methodology" - url: methodology.html - - title: "Contribute" + - title: Systems + url: systems/repo_stats.html + - title: Security + url: security/repo_stats.html +- title: Methodology + url: methodology.html +- title: Contribute + url: about.html + children: + - title: Overview url: about.html - children: - - title: "Overview" - url: about.html - - title: "Repositories" - url: https://github.com/reprodb - - title: "Documentation" - url: https://reprodb.github.io/reprodb-pipeline/ - - title: "Data Schemas" - url: https://reprodb.github.io/data-schemas/ + - title: Repositories + url: https://github.com/reprodb + - title: Documentation + url: https://reprodb.github.io/reprodb-pipeline/ + - title: Data Schemas + url: https://reprodb.github.io/data-schemas/ diff --git a/src/_includes/head/custom.html b/src/_includes/head/custom.html index 48af5c3..612987e 100644 --- a/src/_includes/head/custom.html +++ b/src/_includes/head/custom.html @@ -36,11 +36,11 @@ Note: unsafe-eval is required by Alpine.js for expression evaluation. --> diff --git a/src/assets/css/reprodb-profile.css b/src/assets/css/reprodb-profile.css index dba72b2..803098c 100644 --- a/src/assets/css/reprodb-profile.css +++ b/src/assets/css/reprodb-profile.css @@ -111,6 +111,13 @@ .role-artifact { background:#2980b9; } .role-evaluation { background:#27ae60; } +/* Chair-star indicator used in author/institution profile cards and tables. */ +.chair-stars { + color: #d18c00; + letter-spacing: 0.02em; + white-space: nowrap; +} + /* ── Unified search result type labels ─────────────────────────────────── */ .sr-type { display:inline-block; padding:1px 6px; border-radius:3px; font-size:0.72em; color:#fff; margin-right:6px; vertical-align:middle; } .sr-type-author { background:#2980b9; } @@ -180,3 +187,4 @@ html[data-theme="dark"] .ae-detail-row td, html[data-theme="dark"] .ae-detail-row:hover { background: #23272d; } html[data-theme="dark"] .ranking-history-details summary::before { color: #aab0b8; } html[data-theme="dark"] .avail-warn { color: #f0c040; background: #332b00; border-color: #665500; } +html[data-theme="dark"] .chair-stars { color: #f5c44c; } diff --git a/src/assets/js/reprodb-profile-page.js b/src/assets/js/reprodb-profile-page.js index 5eae90a..6a3c3bf 100644 --- a/src/assets/js/reprodb-profile-page.js +++ b/src/assets/js/reprodb-profile-page.js @@ -118,7 +118,7 @@ } c += card(p.artifact_count, 'Artifacts') + card(p.total_papers, 'Total Papers') + card(p.artifact_pct + '%', 'Artifact Rate'); if (p.ae_memberships) c += card(p.ae_memberships, 'AE Memberships'); - if (p.chair_count) c += card(p.chair_count, 'Chair Roles'); + if (p.chair_count) c += card(P.chairDisplayAuthor(p.chair_count), 'Chair Roles'); document.getElementById('score-cards').innerHTML = c; // Papers table @@ -252,7 +252,7 @@ c += card((inst.artifact_pct || 0) + '%', 'Artifact Rate'); var reproRate = inst.artifact_count > 0 ? Math.round(((inst.badges_reproducible || 0) / inst.artifact_count) * 100) : 0; c += card(reproRate + '%', 'Repro Rate') + card(inst.ae_memberships || 0, 'AE Memberships'); - if (inst.chair_count) c += card(inst.chair_count, 'Chair Roles'); + if (inst.chair_count) c += card(P.chairDisplayInstitution(inst.chair_count), 'Chair Roles'); if (inst._denseRank) { c += card('#' + inst._denseRank, 'Rank'); } else if (instHistory.length >= 2) { @@ -287,7 +287,11 @@ { title: 'Artifacts', field: 'artifact_count', sorter: 'number' }, { title: 'Papers', field: 'total_papers', sorter: 'number' }, { title: 'AE Svc', field: 'ae_memberships', sorter: 'number' }, - { title: 'Chair', field: 'chair_count', sorter: 'number', formatter: function(cell) { var v = cell.getValue(); return v ? v + ' \u2605' : ''; } } + { title: 'Chair', field: 'chair_count', sorter: 'number', formatter: function(cell) { + var v = Number(cell.getValue()) || 0; + if (!v) return ''; + return P.chairDisplayAuthor(v); + } } ] }); } else { diff --git a/src/assets/js/reprodb-profile.js b/src/assets/js/reprodb-profile.js index 03f8056..a81ee2c 100644 --- a/src/assets/js/reprodb-profile.js +++ b/src/assets/js/reprodb-profile.js @@ -28,6 +28,28 @@ var ReproDBProfile = (function() { return '
' + value + '
' + label + '
'; } + function renderStars(n) { + var count = Number(n) || 0; + if (count <= 0) return ''; + return Array(count + 1).join('\u2605'); + } + + // Author profile: direct one-star-per-chair mapping. + function chairDisplayAuthor(chairCount) { + var chairs = Number(chairCount) || 0; + if (chairs <= 0) return '0'; + return chairs + ' ' + renderStars(chairs) + ''; + } + + // Institution profile: compressed mapping to reduce skew. + // Formula: stars = max(1, floor(chair_count / 2)), so 1->1, 2->1, 3->1, 4->2, 5->2. + function chairDisplayInstitution(chairCount) { + var chairs = Number(chairCount) || 0; + if (chairs <= 0) return '0'; + var stars = Math.max(1, Math.floor(chairs / 2)); + return chairs + ' ' + renderStars(stars) + ''; + } + /** * Initialise search/autocomplete, share button, and URL management. * @@ -230,6 +252,8 @@ var ReproDBProfile = (function() { cleanName: cleanName, badgeHtml: badgeHtml, card: card, + chairDisplayAuthor: chairDisplayAuthor, + chairDisplayInstitution: chairDisplayInstitution, initSearch: initSearch, parseAEEntry: parseAEEntry, renderHistoryChart: renderHistoryChart