diff options
author | Daniel Schadt <kingdread@gmx.de> | 2025-10-03 17:30:23 +0200 |
---|---|---|
committer | Daniel Schadt <kingdread@gmx.de> | 2025-10-03 17:30:23 +0200 |
commit | c19f244ed4f8cd9e4f612a631149329309af2104 (patch) | |
tree | 897965306b2372470d0c29bb49bba3453b7dcb23 | |
parent | d3da26e6ab79fdb222a30854960967374a1e5c52 (diff) | |
download | fietsboek-c19f244ed4f8cd9e4f612a631149329309af2104.tar.gz fietsboek-c19f244ed4f8cd9e4f612a631149329309af2104.tar.bz2 fietsboek-c19f244ed4f8cd9e4f612a631149329309af2104.zip |
add opengraph tags
-rw-r--r-- | fietsboek/templates/details.jinja2 | 12 | ||||
-rw-r--r-- | fietsboek/templates/layout.jinja2 | 1 | ||||
-rw-r--r-- | fietsboek/views/detail.py | 32 |
3 files changed, 45 insertions, 0 deletions
diff --git a/fietsboek/templates/details.jinja2 b/fietsboek/templates/details.jinja2 index d8c9250..4fd3341 100644 --- a/fietsboek/templates/details.jinja2 +++ b/fietsboek/templates/details.jinja2 @@ -1,6 +1,18 @@ {% extends "layout.jinja2" %} {% import "util.jinja2" as util with context %} +{% block extrahead %} +<meta property="og:title" content="{{ track.title | default(track.date | format_datetime, true) }}"> +<meta property="og:type" content="website"> +<meta property="og:url" content="{{ request.url }}"> +<meta property="og:image" content="{{ request.route_url('track-map', track_id=track.id) }}"> +<meta property="og:image:url" content="{{ request.route_url('track-map', track_id=track.id) }}"> +<meta property="og:image:type" content="image/png"> +<meta property="og:image:alt" content="Track overview"> +<meta property="og:description" content="{{ (track.length / 1000) | round(2) | format_decimal }} km{% if og_description %}: {{ og_description }}{% endif %}"> +<meta property="og:site_name" content="Fietsboek"> +{% endblock %} + {% block content %} <div class="container"> <h1> diff --git a/fietsboek/templates/layout.jinja2 b/fietsboek/templates/layout.jinja2 index c96716d..e1ce5db 100644 --- a/fietsboek/templates/layout.jinja2 +++ b/fietsboek/templates/layout.jinja2 @@ -32,6 +32,7 @@ const Fullscreenbutton = true; const Legende = false; </script> + {% block extrahead %}{% endblock %} </head> <body> diff --git a/fietsboek/views/detail.py b/fietsboek/views/detail.py index acc7bfe..209b516 100644 --- a/fietsboek/views/detail.py +++ b/fietsboek/views/detail.py @@ -4,8 +4,10 @@ import datetime import gzip import io import logging +from html.parser import HTMLParser import gpxpy +from markupsafe import Markup from pyramid.httpexceptions import ( HTTPFound, HTTPInternalServerError, @@ -36,6 +38,34 @@ def _sort_key(image_name: str) -> str: return image_name.split("_", 1)[1] +class _DescriptionParser(HTMLParser): + # We don't go overboard with the parsing here, as we expect to only be fed + # output from the markdown conversion (so simple documents) + def __init__(self): + super().__init__() + self.par = False + self.text = "" + + def handle_starttag(self, tag, attrs): + if tag == "p": + self.par = True + + def handle_endtag(self, tag): + if tag == "p": + self.par = False + + def handle_data(self, data): + if self.par: + self.text += data + + +def _og_description(description: Markup) -> str: + """Returns a truncated, non-marked up description of the given input description.""" + parser = _DescriptionParser() + parser.feed(str(description)) + return parser.text + + @view_config( route_name="details", renderer="fietsboek:templates/details.jinja2", permission="track.view" ) @@ -49,6 +79,7 @@ def details(request): """ track = request.context description = util.safe_markdown(track.description) + og_description = _og_description(description) show_edit_link = track.owner == request.identity on_disk_images = [] @@ -83,6 +114,7 @@ def details(request): "mps_to_kph": util.mps_to_kph, "comment_md_to_html": util.safe_markdown, "description": description, + "og_description": og_description, "images": images, } |