Commit Graph
7 Commits
Author SHA1 Message Date
4ad88a327e feat: add GDPR cookie consent banner (#1216)
* feat: add GDPR cookie consent banner

Add a GDPR-compliant cookie consent banner that gates analytics (Google
Analytics) and functional cookies (comments) until user consent is given.

Features:
- Theme-consistent styling using CSS variables (light/dark mode)
- Settings panel with category toggles (necessary, analytics, functional)
- Consent stored in cookie for 365 days
- Google Analytics only loads after analytics consent
- Comments only load after functional consent
- Translations for all 32 supported languages
- Accessible with proper ARIA attributes and focus management

Configuration in hugo.yaml:
  params:
    cookies:
      enabled: true
      categories:
        analytics: true
        functional: true

When cookies.enabled is false, scripts load normally without consent gating.

Closes #412

* refactor: move consent-gated GA to cookies/analytics.html

Move Google Analytics consent logic to avoid shadowing Hugo's internal
`_internal/google_analytics.html` template.

Changes:
- Rename google_analytics.html → cookies/analytics.html
- Update head.html to conditionally load:
  - cookies.enabled=true: cookies/analytics.html (consent-gated)
  - cookies.enabled=false: Hugo's _internal/google_analytics.html
- Align cookies/analytics.html with Hugo's internal template:
  - Support Privacy.GoogleAnalytics.Disable setting
  - Support Privacy.GoogleAnalytics.RespectDoNotTrack setting
  - Add UA- prefix deprecation warning

Note: Custom JS is required for consent-gated GA because Hugo templates
render at build time, but consent happens at runtime. We cannot call
Hugo's internal template after the user grants consent - we must
dynamically inject the GA script via JavaScript.

* style: indent cookies/analytics.html

* refactor: don't use default, put default configurations in params.toml

* fix: don't use `description` as translation key because it's reserved and will throw error

* fix: remove footer/components/custom-font.html call

* fix: banner showSettings key

* style: indent comments/include

* Add missing article.alert translation back

* style: format i18n toml files

* style: indent head/head.html

* style adjustment

* style: add missing -

* style: format demo/config/params.toml

* style: remove redundant comments from cookies.scss

* style: update box-shadow for cookie banner content

---------

Co-authored-by: delize <4028612+delize@users.noreply.github.com>
Co-authored-by: Jimmy Cai <jimmy@cai.im>
2026-02-19 17:21:25 +01:00
JimmyandGitHub 475c956fd6 style: format TOML files (#1266)
* style: format TOML files

* style: format wrangler.toml
2026-02-17 19:20:09 +01:00
JimmyandGitHub 7d4bfa9fc0 refactor: simplify sidebar avatar configuration and don't resize (#1247) 2026-01-26 23:58:18 +01:00
JimmyandGitHub ab17b22c77 refactor: get favicon from assets folder (#1246) 2026-01-26 23:49:27 +01:00
JimmyandGitHub 211bf65153 feat: better demo site (#1241)
* demo: add image-gallery post

* demo: change language weight

* demo: add multilanguage about page

* demo: change title and url

* demo: add shortcode documentation with multi-language support

* demo: improve markdown guide post

* demo: improve Math Typesetting post

* demo: rename Markdown Syntax Guide post

* demo: remove emoji support post

* demo: remove placeholder text post

* demo: remove rich-content post

* demo: rename image gallery page bundle

* demo: add multilingual `Documentation` category

* demo: Increase pagination pager size from 3 to 5.

* demo: add multilingual links, search, and archives pages

* demo: remove `ar` from demosite
2026-01-26 13:49:47 +01:00
JimmyandGitHub c872a77edb refactor: migrate i18n files from YAML to TOML format and simplify structure (#1230)
* refactor: migrate i18n files from YAML to TOML format and simplify structure

* refactor: make translation file adjust to gohugoio/locales language code so date translation can work properly

* refactor: use hyphens instead of underscores for i18n, because that's how Hugo pick the translation file

* docs: update comments for i18n language availability and CJK language detection in hugo.toml.
2026-01-25 21:01:32 +01:00
JimmyandGitHub 406fcef7cd refactor: use TOML for configuration file (#1228)
* refactor: remove jsconfig.json

* chore: remove devcontainer config

* refactor: migrate Hugo configuration from `hugo.yaml` to dedicated `module.toml` and `params.toml` files, and update minimum Hugo version.

* refactor: migrate demo site configuration from `hugo.yaml` to `config/_default/*.toml`

* feat: enable local sidebar avatar for demo site and relocate its image to demo assets.

* feat: migrate demo site to Hugo Modules for theme management.

* fix: wrong config folder name
2026-01-25 19:51:10 +01:00