2
0
mirror of https://github.com/offen/website.git synced 2024-11-25 18:20:28 +01:00

add markdown decorator plugin

This commit is contained in:
Frederik Ring 2019-12-06 16:55:54 +01:00
parent 4af6cdea35
commit d028d15585
4 changed files with 40 additions and 1 deletions

View File

@ -39,8 +39,12 @@ DIRECT_TEMPLATES = ['sitemap']
SITEMAP_SAVE_AS = 'sitemap.xml' SITEMAP_SAVE_AS = 'sitemap.xml'
PLUGIN_PATHS = ['./plugins'] PLUGIN_PATHS = ['./plugins']
PLUGINS = ['assets'] PLUGINS = ['decorate_content', 'assets']
DECORATE_CONTENT = {
# maps any CSS selector to a list of classes to be added
# 'p': ['pv0', 'dim']
}
GITHUB_ORG = 'https://github.com/offen' GITHUB_ORG = 'https://github.com/offen'
CONTACT_EMAIL = 'hioffen@posteo.de' CONTACT_EMAIL = 'hioffen@posteo.de'

View File

@ -0,0 +1 @@
from .decorate_content import *

View File

@ -0,0 +1,33 @@
from json import loads
from pelican import signals
from pelican.contents import Article, Page, Static
from bs4 import BeautifulSoup
def content_object_init(instance):
if isinstance(instance, (Article, Page, Static)):
plugin_settings = instance.settings.get("DECORATE_CONTENT", {})
content_overrides = (
instance.metadata.get("decorate_content", None)
if instance.metadata is not None
else None
)
settings = plugin_settings.copy()
settings.update(
loads(content_overrides) if content_overrides is not None else {}
)
soup = BeautifulSoup(instance._content, "html.parser")
for selector, class_names in settings.items():
elems = soup.find_all(selector)
for elem in elems:
elem["class"] = elem.get("class", []) + class_names
instance._content = soup.decode()
def register():
signals.content_object_init.connect(content_object_init)

View File

@ -3,3 +3,4 @@ markdown==3.1.1
git+git://github.com/miracle2k/webassets#d1f3455e383446ca4ab0c644f326ee937e68e809 git+git://github.com/miracle2k/webassets#d1f3455e383446ca4ab0c644f326ee937e68e809
cssmin==0.2.0 cssmin==0.2.0
libsass==0.19.3 libsass==0.19.3
beautifulsoup4==4.8.1