From 5e3c61846bf5228e6467ca99a1efe577e361310d Mon Sep 17 00:00:00 2001 From: Anjo Vahldiek-Oberwagner Date: Tue, 23 Jun 2026 12:58:31 +0200 Subject: [PATCH 1/3] fix: allow Google Analytics in Content Security Policy Add https://www.googletagmanager.com to script-src and https://www.google-analytics.com, https://analytics.google.com, https://www.googletagmanager.com to connect-src so that the GA gtag script set via jekyll google_analytics config loads without CSP violations. --- src/_includes/head/custom.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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. --> From e07a75b454c0cf90be89578297bb99085912950d Mon Sep 17 00:00:00 2001 From: Anjo Vahldiek-Oberwagner Date: Tue, 23 Jun 2026 13:19:38 +0200 Subject: [PATCH 2/3] feat: add chair star visualization to author and institution profiles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Authors display 1 star per chair role (direct 1:1 mapping) - Institutions display stars = max(1, floor(chairs/2)) for compressed view - Formula: 1 chair = 1★, 2-3 chairs = 1★, 4-5 chairs = 2★, etc. - Added chair-stars CSS class with golden color styling - Integrated star display in profile score cards and contributor tables - Stars appear in author/institution detail pages and overview tables --- src/assets/css/reprodb-profile.css | 8 ++++++++ src/assets/js/reprodb-profile-page.js | 10 +++++++--- src/assets/js/reprodb-profile.js | 24 ++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) 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 From 24eaa9435ed9b714207d55d06e36a8aad33a2415 Mon Sep 17 00:00:00 2001 From: Anjo Vahldiek-Oberwagner Date: Tue, 23 Jun 2026 13:20:00 +0200 Subject: [PATCH 3/3] feat: add chair star visualization to profiles ## Summary Display chair roles as stars in author and institution profiles to visually highlight AE leadership experience. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Changes - **Authors**: Direct 1:1 mapping (1 chair = 1★) - **Institutions**: Compressed mapping (max(1, floor(chairs/2))) - 1 chair = 1★ - 2-3 chairs = 1★ - 4-5 chairs = 2★ - 6-7 chairs = 3★ - etc. ## Files Modified - `src/assets/js/reprodb-profile.js`: Added `chairDisplayAuthor()` and `chairDisplayInstitution()` helper functions with configurable star formulas - `src/assets/js/reprodb-profile-page.js`: Integrated star display in profile score cards and contributor table - `src/assets/css/reprodb-profile.css`: Added `.chair-stars` styling with golden color (#d18c00 light / #f5c44c dark) ## Rationale The compressed formula for institutions avoids visual inflation while still recognizing leadership. Authors use direct stars since chair counts are sparser (max 5). Both use `max(1, floor(...))` so single chairs receive visual credit. --- src/_data/navigation.yml | 170 ++++++++++++++++++++------------------- 1 file changed, 86 insertions(+), 84 deletions(-) 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/