summaryrefslogtreecommitdiff
path: root/docs/_templates
AgeCommit message (Collapse)Author
2026-06-17Fix Cookiebot consent dialog rendering unstyled and breaking the page ↡mergify[bot]
(#2108) (#2109) On a fresh (no-consent) load the consent banner could render completely unstyled and expand to full page height. Cookiebot delivers its dialog CSS as a constructed stylesheet on document.adoptedStyleSheets; ReadTheDocs' readthedocs-addons.js reassigns that whole-array property with a destructive replace, and when that lands after Cookiebot's network-gated adoption it drops Cookiebot's sheet, leaving #CybotCookiebotDialog at position:static expanded to ~6700px. It is a race, so it is intermittent and clears once consent is given (the dialog then never renders). - layout.html: a small adoptedStyleSheets shim, installed before any page script, that preserves Cookiebot's sheet so another library cannot drop it. - custom.css: a leak-safe safety net that keeps the dialog contained even if its adopted sheet is ever absent. It uses only properties Cookiebot itself sets, so it has verifiably no effect on the normal, styled banner. πŸ€– Generated by [robots](https://vyos.io) (cherry picked from commit dce7bb521e3947af59fe18895b609ec353e0450e) Co-authored-by: Yuriy Andamasov <yuriy@vyos.io>
2026-05-07fix(docs): add missing space after colon in personalization_storageYuriy Andamasov
πŸ€– Generated by [robots](https://vyos.io)
2026-05-07feat(docs): move Cookiebot CBID to COOKIEBOT_ID env varYuriy Andamasov
Read COOKIEBOT_ID from the environment via conf.py html_context, replacing the hardcoded data-cbid value in layout.html. Guards tightened to {% if gtm_id and cookiebot_id %} so neither GTM nor Cookiebot loads unless both IDs are present. πŸ€– Generated by [robots](https://vyos.io)
2026-05-07fix(docs): guard GTM/Cookiebot blocks with {% if gtm_id %}Yuriy Andamasov
Prevents broken googletagmanager.com requests with empty container IDs when GTM_ID is not set (local builds, preview environments). πŸ€– Generated by [robots](https://vyos.io)
2026-05-07feat(docs): read GTM_ID from environment instead of hardcodingYuriy Andamasov
Move the Google Tag Manager container ID out of the template and into conf.py via os.environ.get('GTM_ID', ''), exposed to Jinja via html_context. Set GTM_ID in the RTD project environment variables. πŸ€– Generated by [robots](https://vyos.io)
2026-05-07fix(docs): use window.dataLayer in gtag() for strict-mode safetyYuriy Andamasov
πŸ€– Generated by [robots](https://vyos.io)
2026-05-07feat(cookiebot): drop GTM noscript fallback for prior-consent complianceYuriy Andamasov
The `<noscript>` GTM iframe loads via a direct HTTP request to googletagmanager.com/ns.html and bypasses both Cookiebot's auto-blocker and Google Consent Mode v2 entirely β€” Consent Mode is JS-only (`gtag('consent', 'default')` and the update API), so a noscript request can't carry consent state. Under strict prior-consent (GDPR), JS-disabled visitors get no analytics rather than unconsented analytics. Addresses CodeRabbit review feedback on PR #1872. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(cookiebot): document the Cookiebot \xe2\x86\x92 Consent Mode v2 update pathYuriy Andamasov
Make the external dependency explicit in the template comment: Cookiebot's `uc.js` with `data-blockingmode="auto"` automatically pushes `gtag('consent','update', …)` into the dataLayer when the visitor accepts/declines categories. No in-repo update logic is needed; category mapping happens in the Cookiebot admin UI. Addresses Copilot review feedback on PR #1872. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07fix(template): remove stray </script> tag and add title to GTM noscript iframecopilot-swe-agent[bot]
Agent-Logs-Url: https://github.com/vyos/vyos-documentation/sessions/ebb95457-26ce-4636-b018-fe7b8e31778c Co-authored-by: andamasov <12631358+andamasov@users.noreply.github.com>
2026-05-07feat(docs): add Cookiebot CMP and GTM with Consent Mode v2Yuriy Andamasov
Inject Cookiebot CMP, Google Consent Mode v2 defaults, and Google Tag Manager into the Sphinx layout. Cookiebot loads first so its auto-blocker can scan and block other tags before they execute; Consent Mode v2 starts denied for all categories except security_storage and updates only after Cookiebot fires the consent update. πŸ€– Generated by [robots](https://vyos.io)
2026-05-07docs(llms.txt): point links at .md sources, not .htmlYuriy Andamasov
Per the [llms.txt spec](https://llmstxt.org/), `/llms.txt` links should point at markdown files (the spec example: `[API docs](https://example.com/api.md)`). We were using `.html` URLs, which still work but force LLM consumers through HTML parsing for content that's already available as raw MyST at the same path (the `.md` is copied to HTML root by `_copy_md_sources`). Pivot the curated llms.txt template to `.md` URLs across all 22 entries. Spec-compliant, no extra requests, LLMs get raw markdown without the navigation chrome. Verified locally: `/en/<ver>/<page>.md` returns 200 with raw MyST content (frontmatter + body) for all linked paths on this branch. Same pivot applied symmetrically across [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current), [#1876](https://github.com/vyos/vyos-documentation/pull/1876) (sagitta), and [#1903](https://github.com/vyos/vyos-documentation/pull/1903) (circinus). πŸ€– Generated by [robots](https://vyos.io)
2026-05-07docs: render llms.txt at build time (circinus)Yuriy Andamasov
Parity with [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current) and [#1876](https://github.com/vyos/vyos-documentation/pull/1876) (sagitta). Replaces the static `docs/_html_extra/llms.txt` with a Jinja template (`docs/_templates/llms.txt.j2`) rendered at build time via a `build-finished` hook in `conf.py`. URLs and the version line are interpolated from `html_baseurl` and `release`, so the rendered file always matches what circinus actually serves. Hook behavior matches `current`/`sagitta` exactly, including the two review-cycle hardenings landed on those PRs: - Skips on builders other than `html` and `readthedocs` β€” the curated template encodes `.html` URLs which don't match `dirhtml` output. - `RuntimeError` if `html_baseurl` is empty rather than silently rendering broken root-relative URLs. - Jinja `Environment(undefined=StrictUndefined)` so a typo in `llms.txt.j2` raises at build time instead of writing a half-blank `llms.txt`. The closed PR [#1875](https://github.com/vyos/vyos-documentation/pull/1875) was the previous attempt; this re-lands the change after the post-flip rebase situation cleared. Verified locally: hook tests (happy-path render, fail-fast on `html_baseurl=None`/`''`, `StrictUndefined` catches `{{ relase }}` typo, skips `dirhtml`, skips on build exception) pass against this worktree. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2024-02-19Styles refactoring (#1278)bogdankol
2023-11-16correct version in templaterebortg
2022-03-24improve coverage layoutrebortg
2021-12-29Updating stable release bannerMike Deffenbaugh
Per https://blog.vyos.io/vyos-1.3.0-lts-release
2021-05-10Template: add version warning bannerrebortg
2021-04-04layout: set user friendly versionnameRobert GΓΆhler
2018-10-07Reformat TOC and overall document styleChristian Poessinger