feat(IFK-9): interactive world map, charts, stats banner, timeline
All checks were successful
Deploy Internet for Kids / Build & Push (push) Successful in 9s
Deploy Internet for Kids / Deploy (push) Successful in 6s
Deploy Internet for Kids / Health Check (push) Successful in 2s
Deploy Internet for Kids / Smoke Tests (push) Successful in 4s
Deploy Internet for Kids / IndexNow Ping (push) Successful in 8s
Deploy Internet for Kids / Promote to Latest (push) Successful in 1s
Deploy Internet for Kids / Rollback (push) Has been skipped
Deploy Internet for Kids / Audit (push) Successful in 2s
All checks were successful
Deploy Internet for Kids / Build & Push (push) Successful in 9s
Deploy Internet for Kids / Deploy (push) Successful in 6s
Deploy Internet for Kids / Health Check (push) Successful in 2s
Deploy Internet for Kids / Smoke Tests (push) Successful in 4s
Deploy Internet for Kids / IndexNow Ping (push) Successful in 8s
Deploy Internet for Kids / Promote to Latest (push) Successful in 1s
Deploy Internet for Kids / Rollback (push) Has been skipped
Deploy Internet for Kids / Audit (push) Successful in 2s
- Add centralized data/countries.json with all 17 countries (EN/DE/FR) - Add Leaflet choropleth world map with TopoJSON boundaries - Add stats banner shortcode (enforced/passed/progress/guidelines counts) - Add Chart.js charts (status donut, age limits bar, legislation timeline) - Add Mermaid timeline of legislation milestones 2020-2026 - Refactor child-safety-map table to use data file (DRY) - Update all 3 language articles (EN/DE/FR) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
49
layouts/shortcodes/stats-banner.html
Normal file
49
layouts/shortcodes/stats-banner.html
Normal file
@@ -0,0 +1,49 @@
|
||||
{{ $lang := .Page.Language.Lang }}
|
||||
{{ $countries := hugo.Data.countries }}
|
||||
|
||||
{{ $enforced := 0 }}{{ $passed := 0 }}{{ $progress := 0 }}{{ $guidelines := 0 }}
|
||||
{{ range $countries }}
|
||||
{{ if eq .status "enforced" }}{{ $enforced = add $enforced 1 }}
|
||||
{{ else if eq .status "passed" }}{{ $passed = add $passed 1 }}
|
||||
{{ else if eq .status "progress" }}{{ $progress = add $progress 1 }}
|
||||
{{ else if eq .status "guidelines" }}{{ $guidelines = add $guidelines 1 }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<style>
|
||||
.ifk-stats {
|
||||
display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem;
|
||||
margin: 2rem 0; text-align: center;
|
||||
}
|
||||
.ifk-stat {
|
||||
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
|
||||
border-radius: 10px; padding: 1.25rem 0.75rem;
|
||||
border: 1px solid #e2e8f0; transition: transform 0.15s;
|
||||
}
|
||||
.ifk-stat:hover { transform: translateY(-2px); }
|
||||
.ifk-stat-num { font-size: 2rem; font-weight: 800; line-height: 1.1; }
|
||||
.ifk-stat-label { font-size: 0.75rem; color: #64748b; margin-top: 0.25rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; }
|
||||
@media (max-width: 480px) {
|
||||
.ifk-stats { grid-template-columns: repeat(2, 1fr); }
|
||||
.ifk-stat-num { font-size: 1.5rem; }
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="ifk-stats">
|
||||
<div class="ifk-stat">
|
||||
<div class="ifk-stat-num" style="color:#1e40af">{{ $enforced }}</div>
|
||||
<div class="ifk-stat-label">{{ if eq $lang "de" }}In Kraft{{ else if eq $lang "fr" }}En vigueur{{ else }}Enforced{{ end }}</div>
|
||||
</div>
|
||||
<div class="ifk-stat">
|
||||
<div class="ifk-stat-num" style="color:#3b82f6">{{ $passed }}</div>
|
||||
<div class="ifk-stat-label">{{ if eq $lang "de" }}Verabschiedet{{ else if eq $lang "fr" }}Adoptées{{ else }}Passed{{ end }}</div>
|
||||
</div>
|
||||
<div class="ifk-stat">
|
||||
<div class="ifk-stat-num" style="color:#6366f1">{{ $progress }}</div>
|
||||
<div class="ifk-stat-label">{{ if eq $lang "de" }}In Bearbeitung{{ else if eq $lang "fr" }}En cours{{ else }}In Progress{{ end }}</div>
|
||||
</div>
|
||||
<div class="ifk-stat">
|
||||
<div class="ifk-stat-num" style="color:#8b5cf6">{{ $guidelines }}</div>
|
||||
<div class="ifk-stat-label">{{ if eq $lang "de" }}Richtlinien{{ else if eq $lang "fr" }}Directives{{ else }}Guidelines{{ end }}</div>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user