summaryrefslogtreecommitdiff
path: root/tools/scrub.py
diff options
context:
space:
mode:
authorYuriy Andamasov <yuriy@vyos.io>2026-07-10 17:08:59 +0300
committerGitHub <noreply@github.com>2026-07-10 17:08:59 +0300
commitaba8877795899edb51482a986619b2735f39543f (patch)
treec46a2f1e859089f20bcf7f7b09eea7330cb9139d /tools/scrub.py
parentab2a80041cc389013158fd3f6152bfb479e31b6d (diff)
parent9b6c5d1ecc2eddd44db0beb556711a8be8f65f73 (diff)
downloadvyos-docs-legacy-snapshot-production.tar.gz
vyos-docs-legacy-snapshot-production.zip
Merge pull request #1 from vyos/claude/legacy-snapshot-phase4HEADproduction
docs: legacy 1.2/1.3 static snapshot + Worker deploy pipeline
Diffstat (limited to 'tools/scrub.py')
-rw-r--r--tools/scrub.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/tools/scrub.py b/tools/scrub.py
new file mode 100644
index 0000000..206a96c
--- /dev/null
+++ b/tools/scrub.py
@@ -0,0 +1,36 @@
+"""Scrub RTD-crawled HTML for self-hosted serving (spec §6):
+strip RTD platform JS, analytics, ad units, and the RTD flyout; localize
+absolute self/RTD URLs; inject our picker bundle."""
+from __future__ import annotations
+
+import re
+
+STRIP_SCRIPTS = re.compile(
+ r"<script[^>]*(?:readthedocs|googletagmanager|google-analytics|gtag/js|ethicalads)[^>]*>\s*</script>",
+ re.I,
+)
+STRIP_INLINE = re.compile(
+ r"<script[^>]*>(?:(?!</script>).)*?(?:READTHEDOCS_DATA|gtag\(|GoogleAnalyticsObject|ethicalads)(?:(?!</script>).)*?</script>",
+ re.I | re.S,
+)
+STRIP_DIVS = re.compile(
+ r'<div[^>]*(?:id="rtd-footer-container"|id="ethical-ad-placement"|class="[^"]*(?:rst-versions|ethical-sidebar)[^"]*")[^>]*>.*?</div>',
+ re.I | re.S,
+)
+ABS_SELF = re.compile(r'(href|src)="https?://docs\.vyos\.io(/[^"]*)"')
+ABS_RTD = re.compile(r'(href|src)="https?://[a-z0-9.-]*readthedocs\.(?:io|org)(/[^"]*)"')
+
+PICKER = ('<div id="vyos-version-picker"></div>'
+ '<link rel="stylesheet" href="/en/{slug}/_static/css/version-picker.css"/>'
+ '<script src="/en/{slug}/_static/js/version-picker.js"></script>')
+
+
+def scrub_html(html: str, slug: str) -> str:
+ out = STRIP_SCRIPTS.sub("", html)
+ out = STRIP_INLINE.sub("", out)
+ out = STRIP_DIVS.sub("", out)
+ out = ABS_SELF.sub(r'\1="\2"', out)
+ out = ABS_RTD.sub(r'\1="\2"', out)
+ if "vyos-version-picker" not in out:
+ out = out.replace("</body>", PICKER.format(slug=slug) + "</body>", 1)
+ return out