add opengraph metadata to pages, via Markdown meta

This commit is contained in:
Brian S. Stephan 2021-01-17 23:02:14 -06:00
parent b0795999fe
commit c25fefa9e3
5 changed files with 32 additions and 2 deletions

7
incorporealcms/lib.py Normal file
View File

@ -0,0 +1,7 @@
"""Miscellaneous helper functions and whatnot."""
from flask import current_app as app
def get_meta_str(key):
"""Provide the page's metadata for the specified key, or '' if unset."""
return " ".join(app.config['md'].Meta.get(key)) if app.config['md'].Meta.get(key) else ""

View File

@ -8,6 +8,8 @@ from flask import current_app as app
from flask import make_response, redirect, render_template, request
from tzlocal import get_localzone
from incorporealcms.lib import get_meta_str
logger = logging.getLogger(__name__)
bp = Blueprint('pages', __name__, url_prefix='/')
@ -34,8 +36,9 @@ def display_page(path):
else:
content = Markup(app.config['md'].convert(entry))
logger.debug("file metadata: %s", app.config['md'].Meta)
title = " ".join(app.config['md'].Meta.get('title')) if app.config['md'].Meta.get('title') else ""
return render('base.html', title=title, content=content, navs=parent_navs,
return render('base.html', title=get_meta_str('title'), description=get_meta_str('description'),
image=get_meta_str('image'), base_url=request.base_url, content=content, navs=parent_navs,
mtime=mtime.strftime('%Y-%m-%d %H:%M:%S %Z'))

View File

@ -1,9 +1,15 @@
<!doctype html>
<title>{{ title }}{% if title %} - {% endif %}{{ config.TITLE_SUFFIX }}</title>
{% if title %}<meta property="og:title" content="{{ title }}">{% endif %}
{% if description %}<meta property="og:description" content="{{ description }}">{% endif %}
{% if image %}<meta property="og:image" content="{{ image }}">{% endif %}
<meta property="og:url" content="{{ base_url }}">
<meta name="twitter:card" content="summary_large_image">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
<link rel="stylesheet" href="{{ url_for('static', filename=user_style) }}">
<link rel="icon" href="{{ url_for('static', filename='img/favicon.png') }}">
<section class="site-wrap">
<section class="styles">
<a href="?style=dark">[dark]</a>

View File

@ -30,6 +30,15 @@ def test_page_without_title_metadata(client):
assert b'<h1>this page doesn\'t have a title!</h1>' in response.data
def test_page_with_card_metadata(client):
"""Test that a page with opengraph metadata."""
response = client.get('/more-metadata')
assert response.status_code == 200
assert b'<meta property="og:title" content="title for the page">' in response.data
assert b'<meta property="og:description" content="description of this page">' in response.data
assert b'<meta property="og:image" content="http://buh.com/test.img">' in response.data
def test_page_has_modified_timestamp(client):
"""Test that pages have modified timestamps in them."""
response = client.get('/')

View File

@ -0,0 +1,5 @@
Title: title for the page
Description: description of this page
Image: http://buh.com/test.img
hello