8ebc1da9e4
- Astro statique, EN par defaut + /fr/ + /nl/, detection langue navigateur - i18n par fichiers JSON, ajouter une langue = ajouter des traductions - Contenu original porte a l'identique (diff d'inventaire par langue) - Chronologie legislative corrigee sur sources primaires (PE, Conseil, votes) - Timeline 23 precedents + observatoire 35 items + annuaire 66 outils FOSS, chaque affirmation verifiee et sourcee - Zero requete tierce (teste), lisible JS coupe, axe WCAG AA x2 themes - Version offline monofichier par langue a chaque build - Docker multi-stage vers nginx + CSP stricte auto-generee - CI GitHub Actions (SHA-pinnees) + verification hebdo des liens - CONTRIBUTING : divulgation d'affiliation obligatoire, allowlist de domaines testee en CI
17 lines
537 B
Plaintext
17 lines
537 B
Plaintext
---
|
|
// The ONLY way to render an external link. Enforces the site's link policy:
|
|
// every external anchor carries rel="noopener noreferrer" — no exceptions,
|
|
// no per-link rel overrides (that's how PR #1 smuggled follow backlinks).
|
|
interface Props {
|
|
href: string
|
|
class?: string
|
|
}
|
|
|
|
const { href, class: className } = Astro.props
|
|
if (!href.startsWith('https://')) {
|
|
throw new Error(`Ext: external links must be https:// (got ${href})`)
|
|
}
|
|
---
|
|
|
|
<a href={href} target="_blank" rel="noopener noreferrer" class={className}><slot /></a>
|