mirror of
https://github.com/kbenestad/mdcms.git
synced 2026-06-18 15:24:32 +00:00
Patch <title> in index.html with sitename during build
mdcms build now writes the sitename from config.yml into the <title> tag of index.html. WhatsApp, Slack, and other link-preview crawlers read the static HTML without executing JavaScript, so the title must be correct in the raw file. Previously it was blank (or "MD-CMS" in older templates).
This commit is contained in:
parent
269980ea28
commit
ee3d4872a0
2 changed files with 25 additions and 0 deletions
10
docs/unreleased.md
Normal file
10
docs/unreleased.md
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
# Unreleased changes
|
||||||
|
|
||||||
|
Changes on `development` not yet merged to `main`.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
|
- **`mdcms build` now patches `<title>` in `index.html` with `sitename` from `config.yml`.**
|
||||||
|
Previously the HTML `<title>` tag was a hardcoded blank (or "MD-CMS" in older templates),
|
||||||
|
so link previews in apps like WhatsApp showed the wrong name. After each build the tag
|
||||||
|
reflects the configured site name, which crawlers and preview scrapers read directly.
|
||||||
15
mdcms.py
15
mdcms.py
|
|
@ -412,6 +412,19 @@ def validate_assets(site_path: Path, cfg: dict) -> list:
|
||||||
|
|
||||||
# ─── Core build logic ─────────────────────────────────────────
|
# ─── Core build logic ─────────────────────────────────────────
|
||||||
|
|
||||||
|
_TITLE_RE = re.compile(r"<title>[^<]*</title>")
|
||||||
|
|
||||||
|
|
||||||
|
def _patch_html_title(site_path: Path, sitename: str) -> None:
|
||||||
|
index = site_path / "index.html"
|
||||||
|
if not index.exists():
|
||||||
|
return
|
||||||
|
html = index.read_text(encoding="utf-8")
|
||||||
|
new_html = _TITLE_RE.sub(f"<title>{sitename}</title>", html, count=1)
|
||||||
|
if new_html != html:
|
||||||
|
index.write_text(new_html, encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
def run_build(site_path: Path):
|
def run_build(site_path: Path):
|
||||||
"""Scan pages/ and posts/, write nav.yml and search.json. Raises ClickException on failure."""
|
"""Scan pages/ and posts/, write nav.yml and search.json. Raises ClickException on failure."""
|
||||||
if not site_path.is_dir():
|
if not site_path.is_dir():
|
||||||
|
|
@ -491,6 +504,8 @@ def run_build(site_path: Path):
|
||||||
)
|
)
|
||||||
click.echo(f" Wrote search.json ({len(live_pages) + len(post_records)} entries)")
|
click.echo(f" Wrote search.json ({len(live_pages) + len(post_records)} entries)")
|
||||||
|
|
||||||
|
_patch_html_title(site_path, cfg.get("sitename", ""))
|
||||||
|
|
||||||
pwa_enabled = str(cfg.get("pwa", "no")).lower() in ("yes", "true")
|
pwa_enabled = str(cfg.get("pwa", "no")).lower() in ("yes", "true")
|
||||||
if pwa_enabled:
|
if pwa_enabled:
|
||||||
generate_pwa(site_path, cfg)
|
generate_pwa(site_path, cfg)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue