Move strip_toc_summary plugin to lib/ directory

The pelican-plugins/ directory is gitignored, so moved the plugin
to lib/ which is tracked. Updated PLUGIN_PATHS to include lib/.

This plugin provides the strip_anchors Jinja2 filter that removes
TOC divs and toc-backref anchor links from article summaries on
the homepage, preventing broken anchor links in excerpts.
This commit is contained in:
Russell Ballestrini 2025-10-13 09:46:25 -04:00
parent 3a51b633a0
commit 71c8d78853
2 changed files with 44 additions and 1 deletions

43
lib/strip_toc_summary.py Normal file
View file

@ -0,0 +1,43 @@
"""
Pelican plugin to strip Table of Contents and anchor links from article summaries.
This prevents TOC links and heading anchor links with invalid anchors
from appearing on the homepage.
"""
from pelican import signals
import re
def strip_anchors(text):
"""Jinja2 filter to strip TOC and anchor links from HTML text."""
if not text:
return text
# Remove the entire <div class="contents"> ... </div> block
text = re.sub(
r'<div\s+class="contents[^"]*"[^>]*>.*?</div>',
'',
text,
flags=re.DOTALL | re.IGNORECASE
)
# Remove anchor links from headings
# Converts <a class="toc-backref" href="#id1">text</a> to just text
text = re.sub(
r'<a[^>]*class="[^"]*toc-backref[^"]*"[^>]*>(.*?)</a>',
r'\1',
text,
flags=re.DOTALL | re.IGNORECASE
)
return text
def add_filter(pelican):
"""Add the strip_anchors filter to Jinja2."""
pelican.env.filters.update({'strip_anchors': strip_anchors})
def register():
"""Register the plugin with Pelican."""
signals.generator_init.connect(add_filter)

View file

@ -105,7 +105,7 @@ OUTPUT_SOURCES_EXTENSION = '.rst'
# Setup filters and plugins.
PLUGIN_PATHS = ["pelican-plugins"]
PLUGIN_PATHS = ["pelican-plugins", "lib"]
PLUGINS = ["random_article", "strip_toc_summary"]
# register filters.