feat: strengthen operator template and localized SEO UX

This commit is contained in:
pipeline
2026-07-21 04:01:15 +03:00
parent 363810024b
commit 14d616d1c9
18 changed files with 271 additions and 95 deletions
+88
View File
@@ -0,0 +1,88 @@
skipToContent: "Zum Inhalt springen"
playNow: "Jetzt spielen"
visitCasino: "Zum Casino"
readMore: "Mehr erfahren"
selectRegion: "Region auswählen"
toggleMenu: "Navigationsmenü öffnen"
home: "Startseite"
primaryNavigation: "Hauptnavigation"
seeBonuses: "Boni ansehen"
startHere: "Direkt einsteigen"
explore: "Entdecken"
featuredGames: "Ausgewählte Spiele"
allGames: "Alle Spiele"
gameLibrary: "Spielebibliothek"
noGames: "Neue Spiele erscheinen hier, sobald sie zur Plattform hinzugefügt werden."
readyToPlay: "Bereit zum Spielen?"
playSlots: "Slots spielen"
playerHelp: "Spielerhilfe"
frequentlyAskedQuestions: "Häufig gestellte Fragen"
faqIntro: "Öffnen Sie eine Frage, um eine direkte Antwort zu Konto, Boni, Zahlungen, Verifizierung und Spielerschutz zu erhalten."
viewAllFaq: "Alle Fragen ansehen"
footerExplore: "Entdecken"
footerLegal: "Rechtliches & Sicherheit"
footerResponsible: "Verantwortungsvoll spielen"
cookieSettings: "Cookie-Einstellungen"
affiliateDisclosure: "Partnerhinweis"
allRightsReserved: "Alle Rechte vorbehalten."
gambleResponsibly: "Verantwortungsvoll spielen"
licenceStatement: "%s ist durch %s lizenziert und reguliert (Lizenznr. %s)."
overAgeOnly: "Nur für Erwachsene"
sslSecured: "SSL-gesichert"
licensedOperator: "Lizenzierter iGaming-Anbieter"
ageGateTitle: "Bitte bestätigen Sie Ihr Alter"
ageGateConfirm: "Ich bestätige, dass ich volljährig bin"
ageGateExit: "Ich bin minderjährig – Seite verlassen"
ageGateDescription: "Diese Plattform ist ausschließlich für Personen ab %d Jahren bestimmt. Mit dem Betreten bestätigen Sie, dass Sie das gesetzliche Glücksspielalter in Ihrem Land erreicht haben."
ageGateNotice: "Glücksspiel durch Minderjährige ist verboten. Bitte spielen Sie verantwortungsvoll."
cookieTitle: "Ihre Privatsphäre ist uns wichtig"
cookieAcceptAll: "Alle akzeptieren"
cookieReject: "Nicht notwendige ablehnen"
cookieManage: "Verwalten"
cookieSave: "Auswahl speichern"
cookieNecessary: "Notwendig"
cookieAnalytics: "Analyse"
cookieMarketing: "Marketing"
filterSearch: "Suchen"
filterProvider: "Anbieter"
filterCategory: "Kategorie"
filterAllProviders: "Alle Anbieter"
filterAllCategories: "Alle Kategorien"
filterReset: "Filter zurücksetzen"
rgNeedHelp: "Brauchen Sie Hilfe? Kontaktieren Sie"
rgFindSupport: "Lokale Hilfe finden"
rgCompactIntro: "Diese Plattform ist ausschließlich für Erwachsene ab %d Jahren bestimmt. Glücksspiel ist Unterhaltung und keine Einnahmequelle."
rgFullIntro: "Glücksspiel muss Unterhaltung bleiben. Diese Plattform ist ausschließlich für Erwachsene ab %d Jahren bestimmt. Setzen Sie nie mehr ein, als Sie verlieren können, und jagen Sie Verlusten nicht hinterher."
rgControlTools: "Hilfsmittel zur Kontrolle"
rgDepositLimits: "<strong>Einzahlungslimits</strong> — begrenzen Sie Ihre Einzahlungen pro Tag, Woche oder Monat."
rgLossLimits: "<strong>Verlust- und Einsatzlimits</strong> — begrenzen Sie Einsätze oder Nettoverluste für einen Zeitraum."
rgRealityChecks: "<strong>Reality Checks</strong> — Erinnerungen an Ihre bisherige Spielzeit."
rgTimeouts: "<strong>Auszeiten</strong> — sperren Sie den Zugang für einen gewählten Zeitraum."
rgSelfExclusion: "<strong>Selbstausschluss</strong> — sperren Sie den Zugang längerfristig, einschließlich anwendbarer nationaler Systeme."
rgRegionRecommends: "Hilfe für Ihre aktuelle Region:"
rgSupportIntro: "Weitere marktspezifische Hilfsangebote finden Sie unten."
relatedPages: "Verwandte Seiten"
lastUpdated: "Zuletzt aktualisiert"
prosCons: "Vor- und Nachteile im Überblick"
ourVerdict: "Unser Fazit"
kycByRegion: "Verifizierungsdokumente nach Region"
kycByRegionIntro: "Die KYC-Anforderungen unterscheiden sich je nach Markt. Prüfen Sie unten die Dokumente für Ihre Region."
region: "Region"
requiredKyc: "Erforderliche Dokumente (KYC)"
readyToStart: "Bereit für den Einstieg?"
termsResponsible: "· Es gelten die AGB · Bitte verantwortungsvoll spielen"
paymentMethod: "Methode"
paymentType: "Typ"
minimumDeposit: "Mindesteinzahlung"
maximumDeposit: "Maximale Einzahlung"
processingTime: "Bearbeitungszeit"
fees: "Gebühren"
paymentAvailabilityNote: "Verfügbarkeit und Limits gelten für den aktuellen Markt und können je nach Zahlungsmethode abweichen."
minimumAge: "Mindestalter"
supportOrganisation: "Hilfsorganisation"
+49
View File
@@ -12,6 +12,21 @@ visitCasino: "Visit Casino"
readMore: "Read more" readMore: "Read more"
selectRegion: "Select your region" selectRegion: "Select your region"
toggleMenu: "Toggle navigation menu" toggleMenu: "Toggle navigation menu"
home: "home"
primaryNavigation: "Primary navigation"
seeBonuses: "See bonuses"
startHere: "Start here"
explore: "Explore"
featuredGames: "Featured games"
allGames: "All games"
gameLibrary: "Game library"
noGames: "New games will appear here as they are added to the platform."
readyToPlay: "Ready to play?"
playSlots: "Play slots"
playerHelp: "Player help"
frequentlyAskedQuestions: "Frequently asked questions"
faqIntro: "Open each question for a direct answer about accounts, bonuses, payments, verification and safer play."
viewAllFaq: "View all questions"
# Footer # Footer
footerExplore: "Explore" footerExplore: "Explore"
@@ -20,11 +35,18 @@ footerResponsible: "Play Responsibly"
cookieSettings: "Cookie settings" cookieSettings: "Cookie settings"
affiliateDisclosure: "Affiliate disclosure" affiliateDisclosure: "Affiliate disclosure"
allRightsReserved: "All rights reserved." allRightsReserved: "All rights reserved."
gambleResponsibly: "Gamble responsibly"
licenceStatement: "%s is licensed and regulated by %s (Licence No. %s)."
overAgeOnly: "Adults only"
sslSecured: "SSL secured"
licensedOperator: "Licensed iGaming operator"
# Age gate # Age gate
ageGateTitle: "Please confirm your age" ageGateTitle: "Please confirm your age"
ageGateConfirm: "I confirm I am of legal age" ageGateConfirm: "I confirm I am of legal age"
ageGateExit: "I am under age — leave" ageGateExit: "I am under age — leave"
ageGateDescription: "This platform is for users aged %d+ only. By entering, you confirm that you meet the legal gambling age in your jurisdiction."
ageGateNotice: "Underage gambling is prohibited. Please gamble responsibly."
# Cookie consent # Cookie consent
cookieTitle: "We value your privacy" cookieTitle: "We value your privacy"
@@ -51,3 +73,30 @@ rgFindSupport: "Find local support"
# Common # Common
relatedPages: "Related pages" relatedPages: "Related pages"
lastUpdated: "Last updated" lastUpdated: "Last updated"
prosCons: "Pros and cons at a glance"
ourVerdict: "Our verdict"
kycByRegion: "Verification documents by region"
kycByRegionIntro: "KYC requirements vary by market. Review the documents required for your region below."
region: "Region"
requiredKyc: "Required documents (KYC)"
readyToStart: "Ready to get started?"
termsResponsible: "only · T&Cs apply · Please gamble responsibly"
paymentMethod: "Method"
paymentType: "Type"
minimumDeposit: "Min. deposit"
maximumDeposit: "Max. deposit"
processingTime: "Processing time"
fees: "Fees"
paymentAvailabilityNote: "Availability and limits are shown for the current market and may differ by payment method."
minimumAge: "Min. age"
supportOrganisation: "Support organisation"
rgCompactIntro: "This platform is for adults aged %d+ only. Gambling is entertainment, never a way to make money."
rgFullIntro: "Gambling must stay entertainment. This platform is for adults aged %d+ only. Never spend more than you can afford to lose, chase losses or gamble to escape stress or debt."
rgControlTools: "Tools to stay in control"
rgDepositLimits: "<strong>Deposit limits</strong> — cap how much you can add per day, week or month."
rgLossLimits: "<strong>Loss and wager limits</strong> — set a ceiling on stakes or net losses over a period."
rgRealityChecks: "<strong>Reality checks</strong> — reminders of how long you have been playing."
rgTimeouts: "<strong>Time-outs</strong> — suspend access for a chosen period."
rgSelfExclusion: "<strong>Self-exclusion</strong> — block access for a longer period, including applicable national schemes."
rgRegionRecommends: "Support available for your current region:"
rgSupportIntro: "Other market-specific services are listed below."
+1 -1
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="{{ .Site.LanguageCode | default "en" }}"> <html lang="{{ .Language.LanguageCode | default .Language.Lang | default "en" }}">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
+13 -11
View File
@@ -1,36 +1,38 @@
{{ define "main" }} {{ define "main" }}
{{- $noCtaSlugs := slice "faq" "responsible-gambling" "terms" "privacy-policy" "cookie-policy" "affiliate-disclosure" "about" "editorial-policy" -}}
{{- $hideCta := or .Params.hideCta (in $noCtaSlugs .Slug) (eq .Section "authors") -}}
{{ partial "breadcrumbs.html" . }} {{ partial "breadcrumbs.html" . }}
<article class="site-container section"> <article class="site-container section">
<header class="mb-8 max-w-3xl"> <header class="mb-8 max-w-3xl">
<h1 class="text-3xl font-extrabold tracking-tight sm:text-4xl">{{ .Params.h1 | default .Title }}</h1> <h1 class="text-3xl font-extrabold tracking-tight sm:text-4xl">{{ .Params.h1 | default .Title }}</h1>
{{ with .Params.description }}<p class="mt-3 text-lg text-secondary/70">{{ . }}</p>{{ end }} {{ with .Params.description }}<p class="mt-3 text-lg text-secondary/70">{{ . }}</p>{{ end }}
{{ if not .Lastmod.IsZero }}<p class="mt-2 text-xs text-secondary/70">Last updated {{ .Lastmod.Format "2 January 2006" }}</p>{{ end }} {{ if not .Lastmod.IsZero }}<p class="mt-2 text-xs text-secondary/70">{{ i18n "lastUpdated" }} {{ .Lastmod | time.Format ":date_long" }}</p>{{ end }}
</header> </header>
{{ with .Content }}<div class="prose-content max-w-3xl">{{ . }}</div>{{ end }} {{ with .Content }}<div class="prose-content max-w-3xl">{{ . }}</div>{{ end }}
{{ if or .Params.pros .Params.cons }} {{ if or .Params.pros .Params.cons }}
<section class="mt-12 max-w-3xl"> <section class="mt-12 max-w-3xl">
<h2 class="mb-4 text-2xl font-bold">Pros &amp; cons at a glance</h2> <h2 class="mb-4 text-2xl font-bold">{{ i18n "prosCons" }}</h2>
{{ partial "pros-cons-table.html" . }} {{ partial "pros-cons-table.html" . }}
</section> </section>
{{ end }} {{ end }}
{{ if .Params.showRatingWidget }} {{ if .Params.showRatingWidget }}
<section class="mt-12 max-w-3xl"> <section class="mt-12 max-w-3xl">
<h2 class="mb-4 text-2xl font-bold">Our verdict</h2> <h2 class="mb-4 text-2xl font-bold">{{ i18n "ourVerdict" }}</h2>
{{ partial "rating-widget.html" . }} {{ partial "rating-widget.html" . }}
</section> </section>
{{ end }} {{ end }}
{{ if .Params.showKycByLocale }} {{ if .Params.showKycByLocale }}
<section class="mt-12 max-w-4xl"> <section class="mt-12 max-w-4xl">
<h2 class="mb-3 text-2xl font-bold">Verification documents by region</h2> <h2 class="mb-3 text-2xl font-bold">{{ i18n "kycByRegion" }}</h2>
<p class="mb-4 text-secondary/70">KYC requirements vary by market. Choose your region in the header to highlight your row; the full list is below.</p> <p class="mb-4 text-secondary/70">{{ i18n "kycByRegionIntro" }}</p>
<div class="overflow-x-auto"> <div class="overflow-x-auto">
<table class="data-table"> <table class="data-table">
<thead><tr><th scope="col">Region</th><th scope="col">Required documents (KYC)</th></tr></thead> <thead><tr><th scope="col">{{ i18n "region" }}</th><th scope="col">{{ i18n "requiredKyc" }}</th></tr></thead>
<tbody> <tbody>
{{- range .Site.Data.locales -}} {{- range .Site.Data.locales -}}
<tr data-kyc-row data-locale="{{ .locale }}"> <tr data-kyc-row data-locale="{{ .locale }}">
@@ -46,7 +48,7 @@
{{ if .Params.showFaqAccordion }} {{ if .Params.showFaqAccordion }}
<section class="mt-12"> <section class="mt-12">
<h2 class="mb-6 text-2xl font-bold">Frequently asked questions</h2> <h2 class="mb-6 text-2xl font-bold">{{ i18n "frequentlyAskedQuestions" }}</h2>
{{ partial "faq-accordion.html" . }} {{ partial "faq-accordion.html" . }}
</section> </section>
{{ end }} {{ end }}
@@ -57,11 +59,11 @@
</section> </section>
{{ end }} {{ end }}
{{ if not .Params.hideCta }} {{ if not $hideCta }}
<div class="mt-12 max-w-3xl rounded-2xl border border-primary/20 bg-primary/5 p-6"> <div class="mt-12 max-w-3xl rounded-2xl border border-primary/20 bg-primary/5 p-6">
<h2 class="text-xl font-bold">Ready to get started?</h2> <h2 class="text-xl font-bold">{{ i18n "readyToStart" }}</h2>
<p class="mt-1 text-secondary/70"><span data-age-value>{{ .Site.Data.brand.ageRestrictionDefault }}</span>+ only. T&amp;Cs apply. Please gamble responsibly.</p> <p class="mt-1 text-secondary/70"><span data-age-value>{{ .Site.Data.brand.ageRestrictionDefault }}</span>+ {{ i18n "termsResponsible" }}</p>
<div class="mt-4">{{ partial "cta-button.html" (dict "page" . "text" "Visit Casino" "size" "lg") }}</div> <div class="mt-4">{{ partial "cta-button.html" (dict "page" . "text" (i18n "visitCasino") "size" "lg") }}</div>
</div> </div>
{{ end }} {{ end }}
</article> </article>
+18 -7
View File
@@ -9,10 +9,10 @@
<h1 class="mt-2 text-4xl font-extrabold leading-tight tracking-tight sm:text-5xl">{{ .Params.h1 | default .Title }}</h1> <h1 class="mt-2 text-4xl font-extrabold leading-tight tracking-tight sm:text-5xl">{{ .Params.h1 | default .Title }}</h1>
<p class="mt-4 max-w-xl text-lg text-white/90">{{ .Params.description | default $brand.tagline }}</p> <p class="mt-4 max-w-xl text-lg text-white/90">{{ .Params.description | default $brand.tagline }}</p>
<div class="mt-8 flex flex-wrap gap-3"> <div class="mt-8 flex flex-wrap gap-3">
{{ partial "cta-button.html" (dict "page" . "text" "Play Now" "size" "lg") }} {{ partial "cta-button.html" (dict "page" . "text" (i18n "playNow") "size" "lg") }}
{{ with site.GetPage "bonuses" }}<a href="{{ .RelPermalink }}" class="btn border-2 border-white/80 text-white hover:bg-white hover:text-secondary">See bonuses</a>{{ end }} {{ with site.GetPage "bonuses" }}<a href="{{ .RelPermalink }}" class="btn border-2 border-white/80 text-white hover:bg-white hover:text-secondary">{{ i18n "seeBonuses" }}</a>{{ end }}
</div> </div>
<p class="mt-5 text-sm text-white/70"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ only &bull; T&amp;Cs apply &bull; Please gamble responsibly</p> <p class="mt-5 text-sm text-white/70"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ {{ i18n "termsResponsible" }}</p>
</div> </div>
<div class="relative"> <div class="relative">
{{ $hero := resources.Get "images/hero.png" }} {{ $hero := resources.Get "images/hero.png" }}
@@ -57,16 +57,27 @@
</section> </section>
{{ end }} {{ end }}
{{/* The homepage uses the same accessible FAQ source and accordion as /faq/. */}}
<section class="site-container section pt-0" aria-labelledby="home-faq-heading">
<div class="mb-6 max-w-3xl">
<p class="eyebrow">{{ i18n "playerHelp" }}</p>
<h2 id="home-faq-heading" class="mt-2 text-2xl font-bold">{{ i18n "frequentlyAskedQuestions" }}</h2>
<p class="mt-2 text-secondary/70">{{ i18n "faqIntro" }}</p>
</div>
{{ partial "faq-accordion.html" . }}
{{ with site.GetPage "faq" }}<p class="mt-5 text-center"><a href="{{ .RelPermalink }}" class="font-semibold text-primary">{{ i18n "viewAllFaq" }} &rarr;</a></p>{{ end }}
</section>
{{/* Quick shortcuts */}} {{/* Quick shortcuts */}}
<section class="site-container section pt-0"> <section class="site-container section pt-0">
<h2 class="mb-6 text-2xl font-bold">Start here</h2> <h2 class="mb-6 text-2xl font-bold">{{ i18n "startHere" }}</h2>
<div class="grid gap-4 sm:grid-cols-3"> <div class="grid gap-4 sm:grid-cols-3">
{{- range slice "registration" "slots" "bonuses" -}} {{- range slice "registration" "slots" "bonuses" -}}
{{ with site.GetPage . }} {{ with site.GetPage . }}
<a href="{{ .RelPermalink }}" class="card card-hover block no-underline"> <a href="{{ .RelPermalink }}" class="card card-hover block no-underline">
<span class="badge-primary">{{ .LinkTitle }}</span> <span class="badge-primary">{{ .LinkTitle }}</span>
<p class="mt-2 text-secondary/70">{{ .Params.description | truncate 90 }}</p> <p class="mt-2 text-secondary/70">{{ .Params.description | truncate 90 }}</p>
<span class="mt-3 inline-block font-semibold text-primary">Explore &rarr;</span> <span class="mt-3 inline-block font-semibold text-primary">{{ i18n "explore" }} &rarr;</span>
</a> </a>
{{ end }} {{ end }}
{{- end -}} {{- end -}}
@@ -78,8 +89,8 @@
{{ with $featured }} {{ with $featured }}
<section class="site-container section pt-0"> <section class="site-container section pt-0">
<div class="mb-6 flex items-end justify-between"> <div class="mb-6 flex items-end justify-between">
<h2 class="text-2xl font-bold">Featured games</h2> <h2 class="text-2xl font-bold">{{ i18n "featuredGames" }}</h2>
{{ with site.GetPage "slots" }}<a href="{{ .RelPermalink }}" class="font-semibold text-primary">All games &rarr;</a>{{ end }} {{ with site.GetPage "slots" }}<a href="{{ .RelPermalink }}" class="font-semibold text-primary">{{ i18n "allGames" }} &rarr;</a>{{ end }}
</div> </div>
<div class="grid gap-5 sm:grid-cols-2 lg:grid-cols-4"> <div class="grid gap-5 sm:grid-cols-2 lg:grid-cols-4">
{{- range first 4 . -}} {{- range first 4 . -}}
+2 -7
View File
@@ -9,16 +9,11 @@
<span><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+</span> <span><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+</span>
</div> </div>
<h2 id="age-gate-title" class="text-2xl font-bold text-secondary">{{ i18n "ageGateTitle" }}</h2> <h2 id="age-gate-title" class="text-2xl font-bold text-secondary">{{ i18n "ageGateTitle" }}</h2>
<p id="age-gate-desc" class="mt-3 text-secondary/80"> <p id="age-gate-desc" class="mt-3 text-secondary/80">{{ printf (i18n "ageGateDescription") $brand.ageRestrictionDefault }}</p>
This website is intended for users aged <span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ only.
By entering, you confirm you meet the legal gambling age in your jurisdiction. Gamble responsibly.
</p>
<div class="mt-6 flex flex-col gap-3"> <div class="mt-6 flex flex-col gap-3">
<button type="button" data-age-confirm class="btn-primary btn-lg">{{ i18n "ageGateConfirm" }}</button> <button type="button" data-age-confirm class="btn-primary btn-lg">{{ i18n "ageGateConfirm" }}</button>
<button type="button" data-age-exit class="btn-ghost">{{ i18n "ageGateExit" }}</button> <button type="button" data-age-exit class="btn-ghost">{{ i18n "ageGateExit" }}</button>
</div> </div>
<p class="mt-4 text-xs text-secondary/60"> <p class="mt-4 text-xs text-secondary/60">{{ i18n "ageGateNotice" }}</p>
Underage gambling is an offence. This is an independent affiliate resource, not the operator.
</p>
</div> </div>
</div> </div>
+4 -1
View File
@@ -4,7 +4,10 @@
Alpine (when present) layers single-open accordion behaviour on top via Alpine (when present) layers single-open accordion behaviour on top via
x-bind:open + the native `toggle` event — never hiding content with x-bind:open + the native `toggle` event — never hiding content with
x-cloak. The FAQPage JSON-LD is emitted separately by schema-jsonld.html. */ -}} x-cloak. The FAQPage JSON-LD is emitted separately by schema-jsonld.html. */ -}}
{{- $faqs := sort .Site.Data.faq "weight" -}} {{- $faqKey := printf "faq.%s" .Language.Lang -}}
{{- $faqs := index .Site.Data $faqKey -}}
{{- if not $faqs -}}{{- $faqs = .Site.Data.faq -}}{{- end -}}
{{- $faqs = sort $faqs "weight" -}}
<div class="mx-auto max-w-3xl divide-y divide-secondary/10 rounded-xl border border-secondary/10" x-data="{ open: null }"> <div class="mx-auto max-w-3xl divide-y divide-secondary/10 rounded-xl border border-secondary/10" x-data="{ open: null }">
{{- range $i, $f := $faqs -}} {{- range $i, $f := $faqs -}}
<details class="group" <details class="group"
+5 -7
View File
@@ -1,5 +1,4 @@
{{- /* footer.html — appears on every page. Includes (per spec): affiliate {{- /* footer.html — appears on every page. Includes licence/authority text,
disclosure link, licence/authority text (from data/brand.yaml),
responsible-gambling links, cookie policy link, an "18+ Gamble responsible-gambling links, cookie policy link, an "18+ Gamble
Responsibly" badge and a dynamic copyright year. */ -}} Responsibly" badge and a dynamic copyright year. */ -}}
{{- $brand := .Site.Data.brand -}} {{- $brand := .Site.Data.brand -}}
@@ -37,7 +36,7 @@
</div> </div>
{{/* Explore */}} {{/* Explore */}}
<nav aria-label="Footer"> <nav aria-label="{{ i18n "footerExplore" }}">
<h2 class="text-sm font-semibold uppercase tracking-wider text-white/60">{{ i18n "footerExplore" }}</h2> <h2 class="text-sm font-semibold uppercase tracking-wider text-white/60">{{ i18n "footerExplore" }}</h2>
<ul class="mt-3 space-y-2 text-sm"> <ul class="mt-3 space-y-2 text-sm">
{{- range $primary -}} {{- range $primary -}}
@@ -47,7 +46,7 @@
</nav> </nav>
{{/* Legal & safety */}} {{/* Legal & safety */}}
<nav aria-label="Legal and safety"> <nav aria-label="{{ i18n "footerLegal" }}">
<h2 class="text-sm font-semibold uppercase tracking-wider text-white/60">{{ i18n "footerLegal" }}</h2> <h2 class="text-sm font-semibold uppercase tracking-wider text-white/60">{{ i18n "footerLegal" }}</h2>
<ul class="mt-3 space-y-2 text-sm"> <ul class="mt-3 space-y-2 text-sm">
{{- range $legal -}} {{- range $legal -}}
@@ -74,12 +73,11 @@
<div class="border-t border-white/10"> <div class="border-t border-white/10">
<div class="site-container flex flex-col gap-3 py-6 text-xs text-white/60 md:flex-row md:items-center md:justify-between"> <div class="site-container flex flex-col gap-3 py-6 text-xs text-white/60 md:flex-row md:items-center md:justify-between">
<p> <p>
<span class="mr-2 inline-flex items-center rounded bg-white/10 px-2 py-1 font-bold text-white"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ Gamble Responsibly</span> <span class="mr-2 inline-flex items-center rounded bg-white/10 px-2 py-1 font-bold text-white"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span>+ {{ i18n "gambleResponsibly" }}</span>
{{ $brand.legalOperatorName }} is licensed and regulated by the {{ $brand.licenseAuthority }} (Licence No. {{ $brand.licenseNumber }}). {{ printf (i18n "licenceStatement") $brand.legalOperatorName $brand.licenseAuthority $brand.licenseNumber }}
</p> </p>
<p> <p>
&copy; {{ now.Year }} {{ $brand.name }}. {{ i18n "allRightsReserved" }} &copy; {{ now.Year }} {{ $brand.name }}. {{ i18n "allRightsReserved" }}
{{ with site.GetPage "affiliate-disclosure" }}<a href="{{ .RelPermalink }}" class="ml-2 text-white/80 underline hover:text-white">{{ i18n "affiliateDisclosure" }}</a>{{ end }}
</p> </p>
</div> </div>
</div> </div>
+2 -2
View File
@@ -5,7 +5,7 @@
{{- $title := "" -}} {{- $title := "" -}}
{{- if .IsHome -}} {{- if .IsHome -}}
{{- $title = printf "%s | %s" $brand.name $brand.tagline -}} {{- $title = .Params.title | default (printf "%s | %s" $brand.name $brand.tagline) -}}
{{- else -}} {{- else -}}
{{- $title = printf "%s | %s" (.Params.title | default .Title) $brand.name -}} {{- $title = printf "%s | %s" (.Params.title | default .Title) $brand.name -}}
{{- end -}} {{- end -}}
@@ -33,7 +33,7 @@
<meta property="og:description" content="{{ $desc }}"> <meta property="og:description" content="{{ $desc }}">
<meta property="og:url" content="{{ .Permalink }}"> <meta property="og:url" content="{{ .Permalink }}">
<meta property="og:site_name" content="{{ $brand.name }}"> <meta property="og:site_name" content="{{ $brand.name }}">
<meta property="og:locale" content="{{ replace $brand.defaultLocale "-" "_" }}"> <meta property="og:locale" content="{{ replace (.Language.LanguageCode | default .Language.Lang) "-" "_" }}">
<meta property="og:image" content="{{ $ogImage }}"> <meta property="og:image" content="{{ $ogImage }}">
<meta property="og:image:width" content="1200"> <meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630"> <meta property="og:image:height" content="630">
+8 -4
View File
@@ -4,9 +4,11 @@
The region/compliance data layer (age/RG/currency/payment filtering) is The region/compliance data layer (age/RG/currency/payment filtering) is
applied headlessly by locale-switcher.html — it no longer renders a visible applied headlessly by locale-switcher.html — it no longer renders a visible
selector, but its script must still run on every page. */ -}} selector, but its script must still run on every page. */ -}}
{{- $noCtaSlugs := slice "faq" "responsible-gambling" "terms" "privacy-policy" "cookie-policy" "affiliate-disclosure" "about" "editorial-policy" -}}
{{- $hideCta := or .Params.hideCta (in $noCtaSlugs .Slug) (eq .Section "authors") -}}
<header class="sticky top-0 z-40 border-b border-secondary/10 bg-white/95 backdrop-blur"> <header class="sticky top-0 z-40 border-b border-secondary/10 bg-white/95 backdrop-blur">
<div class="site-container flex h-16 items-center gap-3 md:gap-4"> <div class="site-container flex h-16 items-center gap-3 md:gap-4">
<a href="{{ "/" | relURL }}" class="flex shrink-0 items-center gap-2 no-underline" aria-label="{{ .Site.Data.brand.name }} home"> <a href="{{ site.Home.RelPermalink }}" class="flex shrink-0 items-center gap-2 no-underline" aria-label="{{ .Site.Data.brand.name }} {{ i18n "home" }}">
{{ partial "responsive-image.html" (dict {{ partial "responsive-image.html" (dict
"src" .Site.Data.brand.logoPath "src" .Site.Data.brand.logoPath
"alt" (printf "%s logo" .Site.Data.brand.name) "alt" (printf "%s logo" .Site.Data.brand.name)
@@ -19,9 +21,11 @@
<div class="ml-auto flex shrink-0 items-center gap-2"> <div class="ml-auto flex shrink-0 items-center gap-2">
{{ if gt (len site.Languages) 1 }}{{ partial "language-switcher.html" . }}{{ end }} {{ if gt (len site.Languages) 1 }}{{ partial "language-switcher.html" . }}{{ end }}
<span class="hidden sm:inline-flex"> {{ if not $hideCta }}
{{ partial "cta-button.html" (dict "page" . "text" (i18n "playNow")) }} <span class="hidden sm:inline-flex">
</span> {{ partial "cta-button.html" (dict "page" . "text" (i18n "playNow")) }}
</span>
{{ end }}
</div> </div>
</div> </div>
{{ partial "locale-switcher.html" . }} {{ partial "locale-switcher.html" . }}
+6 -2
View File
@@ -2,11 +2,13 @@
ordered by weight. Desktop = inline list; mobile = Alpine.js toggle. */ -}} ordered by weight. Desktop = inline list; mobile = Alpine.js toggle. */ -}}
{{- $current := . -}} {{- $current := . -}}
{{- $navPages := sort (where .Site.Pages "Params.showInNav" true) "Weight" -}} {{- $navPages := sort (where .Site.Pages "Params.showInNav" true) "Weight" -}}
{{- $noCtaSlugs := slice "faq" "responsible-gambling" "terms" "privacy-policy" "cookie-policy" "affiliate-disclosure" "about" "editorial-policy" -}}
{{- $hideCta := or $current.Params.hideCta (in $noCtaSlugs $current.Slug) (eq $current.Section "authors") -}}
{{/* Desktop — min-w-0 lets the nav shrink inside the flex row; overflow-x-auto {{/* Desktop — min-w-0 lets the nav shrink inside the flex row; overflow-x-auto
keeps a long section list on one line and scrollable instead of pushing the keeps a long section list on one line and scrollable instead of pushing the
header past the viewport. */}} header past the viewport. */}}
<nav aria-label="Primary" class="hidden min-w-0 flex-1 lg:block"> <nav aria-label="{{ i18n "primaryNavigation" }}" class="hidden min-w-0 flex-1 lg:block">
<ul class="nav-scroll flex items-center gap-1 overflow-x-auto whitespace-nowrap"> <ul class="nav-scroll flex items-center gap-1 overflow-x-auto whitespace-nowrap">
{{- range $navPages -}} {{- range $navPages -}}
{{- $active := eq $current.RelPermalink .RelPermalink -}} {{- $active := eq $current.RelPermalink .RelPermalink -}}
@@ -41,7 +43,9 @@
{{- range $navPages -}} {{- range $navPages -}}
<li><a href="{{ .RelPermalink }}" class="nav-link block">{{ .LinkTitle }}</a></li> <li><a href="{{ .RelPermalink }}" class="nav-link block">{{ .LinkTitle }}</a></li>
{{- end -}} {{- end -}}
<li class="pt-3">{{ partial "cta-button.html" (dict "page" $current "text" (i18n "playNow") "block" true) }}</li> {{ if not $hideCta }}
<li class="pt-3">{{ partial "cta-button.html" (dict "page" $current "text" (i18n "playNow") "block" true) }}</li>
{{ end }}
</ul> </ul>
</div> </div>
</details> </details>
+12 -11
View File
@@ -6,7 +6,7 @@
{{- $page := .page -}} {{- $page := .page -}}
{{- $brand := $page.Site.Data.brand -}} {{- $brand := $page.Site.Data.brand -}}
{{- $methods := $page.Site.Data.payment_methods -}} {{- $methods := $page.Site.Data.payment_methods -}}
{{- $locale := .locale -}} {{- $locale := .locale | default $page.Language.LanguageCode -}}
{{- if $locale -}} {{- if $locale -}}
{{- $f := slice -}} {{- $f := slice -}}
{{- range $methods -}}{{ if in .availableLocales $locale }}{{ $f = $f | append . }}{{ end }}{{- end -}} {{- range $methods -}}{{ if in .availableLocales $locale }}{{ $f = $f | append . }}{{ end }}{{- end -}}
@@ -14,18 +14,19 @@
{{- end -}} {{- end -}}
{{- $curr := "£" -}} {{- $curr := "£" -}}
{{- with where $page.Site.Data.locales "locale" $brand.defaultLocale -}}{{- $curr = (index . 0).currencySymbol -}}{{- end -}} {{- with where $page.Site.Data.locales "locale" $locale -}}{{- $curr = (index . 0).currencySymbol -}}{{- end -}}
{{- $isWithdrawal := eq $page.Slug "withdrawal" -}}
<div class="overflow-x-auto"> <div class="overflow-x-auto">
<table class="data-table"> <table class="data-table">
<thead> <thead>
<tr> <tr>
<th scope="col">Method</th> <th scope="col">{{ i18n "paymentMethod" }}</th>
<th scope="col">Type</th> <th scope="col">{{ i18n "paymentType" }}</th>
<th scope="col">Min. deposit</th> {{ if not $isWithdrawal }}<th scope="col">{{ i18n "minimumDeposit" }}</th>{{ end }}
<th scope="col">Max. deposit</th> {{ if not $isWithdrawal }}<th scope="col">{{ i18n "maximumDeposit" }}</th>{{ end }}
<th scope="col">Processing time</th> <th scope="col">{{ i18n "processingTime" }}</th>
<th scope="col">Fees</th> <th scope="col">{{ i18n "fees" }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -38,8 +39,8 @@
</span> </span>
</th> </th>
<td><span class="badge-muted capitalize">{{ .type }}</span></td> <td><span class="badge-muted capitalize">{{ .type }}</span></td>
<td><span data-locale-currency>{{ $curr }}</span>{{ .minDeposit }}</td> {{ if not $isWithdrawal }}<td><span data-locale-currency>{{ $curr }}</span>{{ .minDeposit }}</td>{{ end }}
<td><span data-locale-currency>{{ $curr }}</span>{{ .maxDeposit }}</td> {{ if not $isWithdrawal }}<td><span data-locale-currency>{{ $curr }}</span>{{ .maxDeposit }}</td>{{ end }}
<td>{{ .processingTime }}</td> <td>{{ .processingTime }}</td>
<td>{{ .fees }}</td> <td>{{ .fees }}</td>
</tr> </tr>
@@ -47,4 +48,4 @@
</tbody> </tbody>
</table> </table>
</div> </div>
<p class="mt-2 text-xs text-secondary/70">Availability and limits vary by region and are shown for your selected market. Select your region in the header to update this table.</p> <p class="mt-2 text-xs text-secondary/70">{{ i18n "paymentAvailabilityNote" }}</p>
+2 -2
View File
@@ -15,13 +15,13 @@
{{- end -}} {{- end -}}
{{- with $found -}} {{- with $found -}}
<section class="site-container section" aria-labelledby="related-heading"> <section class="site-container section" aria-labelledby="related-heading">
<h2 id="related-heading" class="text-xl font-bold">Related pages</h2> <h2 id="related-heading" class="text-xl font-bold">{{ i18n "relatedPages" }}</h2>
<div class="mt-4 grid gap-4 sm:grid-cols-2 lg:grid-cols-3"> <div class="mt-4 grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
{{- range . -}} {{- range . -}}
<a href="{{ .RelPermalink }}" class="card card-hover block no-underline"> <a href="{{ .RelPermalink }}" class="card card-hover block no-underline">
<span class="badge-primary">{{ .LinkTitle }}</span> <span class="badge-primary">{{ .LinkTitle }}</span>
<p class="mt-2 text-sm text-secondary/70">{{ .Params.description | default (.Summary | plainify) | truncate 110 }}</p> <p class="mt-2 text-sm text-secondary/70">{{ .Params.description | default (.Summary | plainify) | truncate 110 }}</p>
<span class="mt-3 inline-block text-sm font-semibold text-primary">Read more &rarr;</span> <span class="mt-3 inline-block text-sm font-semibold text-primary">{{ i18n "readMore" }} &rarr;</span>
</a> </a>
{{- end -}} {{- end -}}
</div> </div>
@@ -6,8 +6,9 @@
{{- $variant := .variant | default "full" -}} {{- $variant := .variant | default "full" -}}
{{- $brand := $page.Site.Data.brand -}} {{- $brand := $page.Site.Data.brand -}}
{{- $locales := $page.Site.Data.locales -}} {{- $locales := $page.Site.Data.locales -}}
{{- $currentLocale := $page.Language.LanguageCode | default $brand.defaultLocale -}}
{{- $default := "" -}} {{- $default := "" -}}
{{- with where $locales "locale" $brand.defaultLocale -}}{{- $default = index . 0 -}}{{- end -}} {{- with where $locales "locale" $currentLocale -}}{{- $default = index . 0 -}}{{- end -}}
{{- $age := $brand.ageRestrictionDefault -}} {{- $age := $brand.ageRestrictionDefault -}}
{{- $orgName := "your national support service" -}} {{- $orgName := "your national support service" -}}
{{- $orgUrl := "#" -}} {{- $orgUrl := "#" -}}
@@ -18,36 +19,33 @@
{{- end -}} {{- end -}}
{{- if eq $variant "compact" -}} {{- if eq $variant "compact" -}}
<p>This site is intended for adults aged <span data-age-value>{{ $age }}</span>+ only. Gambling should be entertainment, never a way to make money.</p> <p>{{ printf (i18n "rgCompactIntro") $age }}</p>
<p class="mt-2">Need help? Contact <a data-rg-link href="{{ $orgUrl }}" target="_blank" rel="noopener nofollow" class="font-semibold text-white underline"><span data-rg-name>{{ $orgName }}</span></a>.</p> <p class="mt-2">{{ i18n "rgNeedHelp" }} <a data-rg-link href="{{ $orgUrl }}" target="_blank" rel="noopener nofollow" class="font-semibold text-white underline"><span data-rg-name>{{ $orgName }}</span></a>.</p>
{{- else -}} {{- else -}}
<div class="prose-content"> <div class="prose-content">
<p> <p>
Gambling must stay fun. This site is intended for adults aged {{ printf (i18n "rgFullIntro") $age }}
<strong><span data-age-value>{{ $age }}</span>+</strong> only. Never bet more than you can afford to
lose, never chase losses, and never gamble to escape stress or debt. If it stops being enjoyable,
it is time to stop.
</p> </p>
<h3>Tools to stay in control</h3> <h3>{{ i18n "rgControlTools" }}</h3>
<ul> <ul>
<li><strong>Deposit limits</strong> &mdash; cap how much you can add to your account per day, week or month.</li> <li>{{ i18n "rgDepositLimits" | safeHTML }}</li>
<li><strong>Loss &amp; wager limits</strong> &mdash; set a ceiling on stakes or net losses over a period.</li> <li>{{ i18n "rgLossLimits" | safeHTML }}</li>
<li><strong>Reality checks</strong> &mdash; on-screen reminders of how long you have been playing.</li> <li>{{ i18n "rgRealityChecks" | safeHTML }}</li>
<li><strong>Time-outs</strong> &mdash; lock yourself out for 24 hours up to several weeks.</li> <li>{{ i18n "rgTimeouts" | safeHTML }}</li>
<li><strong>Self-exclusion</strong> &mdash; block access for months or years, including national schemes.</li> <li>{{ i18n "rgSelfExclusion" | safeHTML }}</li>
</ul> </ul>
<h3>Find local support</h3> <h3>{{ i18n "rgFindSupport" }}</h3>
<p> <p>
Your currently selected region recommends {{ i18n "rgRegionRecommends" }}
<a data-rg-link href="{{ $orgUrl }}" target="_blank" rel="noopener nofollow"><span data-rg-name>{{ $orgName }}</span></a>. <a data-rg-link href="{{ $orgUrl }}" target="_blank" rel="noopener nofollow"><span data-rg-name>{{ $orgName }}</span></a>.
Support services for every market we cover are listed below &mdash; all offer free, confidential help. {{ i18n "rgSupportIntro" }}
</p> </p>
<div class="overflow-x-auto"> <div class="overflow-x-auto">
<table class="data-table"> <table class="data-table">
<thead> <thead>
<tr><th scope="col">Region</th><th scope="col">Min. age</th><th scope="col">Support organisation</th></tr> <tr><th scope="col">{{ i18n "region" }}</th><th scope="col">{{ i18n "minimumAge" }}</th><th scope="col">{{ i18n "supportOrganisation" }}</th></tr>
</thead> </thead>
<tbody> <tbody>
{{- range $locales -}} {{- range $locales -}}
+26 -7
View File
@@ -22,9 +22,14 @@
-}} -}}
<script type="application/ld+json">{{ $data | jsonify | safeJS }}</script> <script type="application/ld+json">{{ $data | jsonify | safeJS }}</script>
{{- else if eq $type "FAQPage" -}} {{- end -}}
{{- if or .IsHome (eq $type "FAQPage") .Params.showFaqAccordion -}}
{{- $faqKey := printf "faq.%s" .Language.Lang -}}
{{- $faqs := index .Site.Data $faqKey -}}
{{- if not $faqs -}}{{- $faqs = .Site.Data.faq -}}{{- end -}}
{{- $items := slice -}} {{- $items := slice -}}
{{- range .Site.Data.faq -}} {{- range $faqs -}}
{{- $items = $items | append (dict {{- $items = $items | append (dict
"@type" "Question" "@type" "Question"
"name" .question "name" .question
@@ -38,9 +43,11 @@
-}} -}}
<script type="application/ld+json">{{ $data | jsonify | safeJS }}</script> <script type="application/ld+json">{{ $data | jsonify | safeJS }}</script>
{{- else if eq $type "Article" -}} {{- end -}}
{{- /* The About page is an editorial review, so we emit a Review with the
promoted operator as the reviewed item. */ -}} {{- if and (eq $type "Article") .Params.showRatingWidget -}}
{{- $authorName := .Params.authorName | default $brand.name -}}
{{- $authorType := cond (isset .Params "authorName") "Person" "Organization" -}}
{{- $data := dict {{- $data := dict
"@context" "https://schema.org" "@context" "https://schema.org"
"@type" "Review" "@type" "Review"
@@ -48,10 +55,22 @@
"url" .Permalink "url" .Permalink
"datePublished" (.Date.Format "2006-01-02") "datePublished" (.Date.Format "2006-01-02")
"dateModified" (.Lastmod.Format "2006-01-02") "dateModified" (.Lastmod.Format "2006-01-02")
"author" (dict "@type" $authorType "name" $authorName)
"publisher" (dict "@type" "Organization" "name" $brand.name "logo" (dict "@type" "ImageObject" "url" ($brand.logoPath | absURL)))
"itemReviewed" (dict "@type" "Organization" "name" $brand.name)
"reviewRating" (dict "@type" "Rating" "ratingValue" (.Params.rating | default $brand.ratingValue) "bestRating" 5 "worstRating" 1)
-}}
<script type="application/ld+json">{{ $data | jsonify | safeJS }}</script>
{{- else if eq $type "Article" -}}
{{- $data := dict
"@context" "https://schema.org"
"@type" "Article"
"headline" (.Params.h1 | default .Title)
"url" .Permalink
"datePublished" (.Date.Format "2006-01-02")
"dateModified" (.Lastmod.Format "2006-01-02")
"author" (dict "@type" "Organization" "name" $brand.name) "author" (dict "@type" "Organization" "name" $brand.name)
"publisher" (dict "@type" "Organization" "name" $brand.name "logo" (dict "@type" "ImageObject" "url" ($brand.logoPath | absURL))) "publisher" (dict "@type" "Organization" "name" $brand.name "logo" (dict "@type" "ImageObject" "url" ($brand.logoPath | absURL)))
"itemReviewed" (dict "@type" "Organization" "name" $brand.legalOperatorName)
"reviewRating" (dict "@type" "Rating" "ratingValue" $brand.ratingValue "bestRating" 5 "worstRating" 1)
-}} -}}
<script type="application/ld+json">{{ $data | jsonify | safeJS }}</script> <script type="application/ld+json">{{ $data | jsonify | safeJS }}</script>
{{- end -}} {{- end -}}
+3 -3
View File
@@ -5,7 +5,7 @@
<div class="site-container flex flex-wrap items-center justify-center gap-4 py-5 text-xs text-white/70"> <div class="site-container flex flex-wrap items-center justify-center gap-4 py-5 text-xs text-white/70">
<span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1 font-semibold"> <span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1 font-semibold">
<span class="grid h-5 w-5 place-items-center rounded-full bg-white/20"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span></span> <span class="grid h-5 w-5 place-items-center rounded-full bg-white/20"><span data-age-value>{{ $brand.ageRestrictionDefault }}</span></span>
Over-age play only {{ i18n "overAgeOnly" }}
</span> </span>
<span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1"> <span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1">
<svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3l7 4v5c0 4.4-3 8.3-7 9-4-0.7-7-4.6-7-9V7l7-4z"/></svg> <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M12 3l7 4v5c0 4.4-3 8.3-7 9-4-0.7-7-4.6-7-9V7l7-4z"/></svg>
@@ -13,10 +13,10 @@
</span> </span>
<span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1"> <span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1">
<svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg> <svg class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
SSL secured {{ i18n "sslSecured" }}
</span> </span>
<span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1"> <span class="inline-flex items-center gap-2 rounded-full border border-white/20 px-3 py-1">
Independent affiliate &mdash; not the operator {{ i18n "licensedOperator" }}
</span> </span>
</div> </div>
</div> </div>
+12 -8
View File
@@ -1,10 +1,14 @@
{{- /* {{< cta text="Play Now" style="primary" size="lg" subid="custom" >}} {{- /* {{< cta text="Play Now" style="primary" size="lg" subid="custom" >}}
Reuses partials/cta-button.html so the affiliate link is built in ONE place. */ -}} Reuses partials/cta-button.html so the affiliate link is built in ONE place. */ -}}
<div class="my-6"> {{- $noCtaSlugs := slice "faq" "responsible-gambling" "terms" "privacy-policy" "cookie-policy" "affiliate-disclosure" "about" "editorial-policy" -}}
{{ partial "cta-button.html" (dict {{- $hideCta := or .Page.Params.hideCta (in $noCtaSlugs .Page.Slug) (eq .Page.Section "authors") -}}
"page" .Page {{- if not $hideCta -}}
"text" (.Get "text" | default "Play Now") <div class="my-6">
"style" (.Get "style") {{ partial "cta-button.html" (dict
"size" (.Get "size") "page" .Page
"subid" (.Get "subid")) }} "text" (.Get "text" | default (i18n "playNow"))
</div> "style" (.Get "style")
"size" (.Get "size")
"subid" (.Get "subid")) }}
</div>
{{- end -}}
+5 -5
View File
@@ -10,19 +10,19 @@
{{ with .Content }}<div class="prose-content max-w-3xl">{{ . }}</div>{{ end }} {{ with .Content }}<div class="prose-content max-w-3xl">{{ . }}</div>{{ end }}
{{ $games := sort (where .Site.RegularPages "Section" "slots") "Title" }} {{ $games := sort (where .Site.RegularPages "Section" "slots") "Title" }}
<section class="mt-10" aria-label="Game library"> <section class="mt-10" aria-label="{{ i18n "gameLibrary" }}">
{{ if $games }} {{ if $games }}
{{ partial "games-filter.html" (dict "page" . "games" $games) }} {{ partial "games-filter.html" (dict "page" . "games" $games) }}
{{ else }} {{ else }}
<p class="rounded-lg bg-secondary/5 p-6 text-secondary/70">No games have been added yet. Add page bundles under <code>content/slots/games/&lt;slug&gt;/index.md</code>.</p> <p class="rounded-lg bg-secondary/5 p-6 text-secondary/70">{{ i18n "noGames" }}</p>
{{ end }} {{ end }}
</section> </section>
{{ if not .Params.hideCta }} {{ if not .Params.hideCta }}
<div class="mt-12 max-w-3xl rounded-2xl border border-primary/20 bg-primary/5 p-6"> <div class="mt-12 max-w-3xl rounded-2xl border border-primary/20 bg-primary/5 p-6">
<h2 class="text-xl font-bold">Ready to spin?</h2> <h2 class="text-xl font-bold">{{ i18n "readyToPlay" }}</h2>
<p class="mt-1 text-secondary/70"><span data-age-value>{{ .Site.Data.brand.ageRestrictionDefault }}</span>+ only. T&amp;Cs apply. Please gamble responsibly.</p> <p class="mt-1 text-secondary/70"><span data-age-value>{{ .Site.Data.brand.ageRestrictionDefault }}</span>+ {{ i18n "termsResponsible" }}</p>
<div class="mt-4">{{ partial "cta-button.html" (dict "page" . "text" "Play the Slots" "size" "lg") }}</div> <div class="mt-4">{{ partial "cta-button.html" (dict "page" . "text" (i18n "playSlots") "size" "lg") }}</div>
</div> </div>
{{ end }} {{ end }}
</div> </div>