From c3ef992a89c0f56843e20ede23226743941d81b7 Mon Sep 17 00:00:00 2001 From: CaffeineFueled Date: Sat, 4 Jul 2026 08:13:23 +0200 Subject: [PATCH] feat: ADD variable for URLs #29 --- picopaper.py | 70 ++++++++++++++++++++++------------------------------ 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/picopaper.py b/picopaper.py index 47b43ef..206aca0 100644 --- a/picopaper.py +++ b/picopaper.py @@ -40,6 +40,7 @@ class SSGGGenerator: self.hide_title = HIDE_TITLE self.logo_path = LOGO_PATH self.strip_image_exif = STRIP_IMAGE_EXIF + self.base_url = BASE_URL.rstrip('/') # Setup Jinja2 self.env = Environment(loader=FileSystemLoader(self.templates_dir)) @@ -166,6 +167,27 @@ class SSGGGenerator: return posts + def common_context(self, page_url): + """Template variables shared by every page. + + page_url is the current page's site-relative path (leading slash). + Templates can build absolute links from it, e.g. a share button: + {{ base_url }}{{ page_url }} or {{ page_absolute_url }} + """ + return { + 'blog_title': self.blog_title, + 'blog_description': self.blog_description, + 'navbar_items': self.navbar_items, + 'hide_logo': self.hide_logo, + 'hide_title': self.hide_title, + 'logo_path': self.logo_path, + 'rss_feed_enabled': ENABLE_RSS_FEED, + 'rss_feed_path': RSS_FEED_PATH, + 'base_url': self.base_url, + 'page_url': page_url, + 'page_absolute_url': f"{self.base_url}{page_url}", + } + def generate_index(self, posts, section_name=None, all_posts=None): """Generate index.html with all posts (or section-specific index)""" template = self.env.get_template('index.tmpl') @@ -173,25 +195,21 @@ class SSGGGenerator: if section_name: title = f"{section_name} - {self.blog_title}" output_path = self.output_dir / 'section' / section_name / 'index.html' + page_url = f"/section/{section_name}/" elif self.blogroll_path: title = self.blog_title output_path = self.output_dir / self.blogroll_path / 'index.html' + page_url = f"/{self.blogroll_path}/" else: title = self.blog_title output_path = self.output_dir / 'index.html' + page_url = "/" html = template.render( title=title, - blog_title=self.blog_title, - blog_description=self.blog_description, - navbar_items=self.navbar_items, posts=posts, all_posts=all_posts or posts, - hide_logo=self.hide_logo, - hide_title=self.hide_title, - logo_path=self.logo_path, - rss_feed_enabled=ENABLE_RSS_FEED, - rss_feed_path=RSS_FEED_PATH + **self.common_context(page_url) ) output_path.parent.mkdir(parents=True, exist_ok=True) @@ -218,16 +236,9 @@ class SSGGGenerator: html = template.render( title=title, - blog_title=self.blog_title, - blog_description=self.blog_description, - navbar_items=self.navbar_items, sections=section_list, all_posts=all_posts or [], - hide_logo=self.hide_logo, - hide_title=self.hide_title, - logo_path=self.logo_path, - rss_feed_enabled=ENABLE_RSS_FEED, - rss_feed_path=RSS_FEED_PATH + **self.common_context("/section/") ) output_path.parent.mkdir(parents=True, exist_ok=True) @@ -247,16 +258,9 @@ class SSGGGenerator: html = template.render( title=title, - blog_title=self.blog_title, - blog_description=self.blog_description, - navbar_items=self.navbar_items, posts=posts, all_posts=all_posts or posts, - hide_logo=self.hide_logo, - hide_title=self.hide_title, - logo_path=self.logo_path, - rss_feed_enabled=ENABLE_RSS_FEED, - rss_feed_path=RSS_FEED_PATH + **self.common_context(f"/{subpath}/") ) output_path.parent.mkdir(parents=True, exist_ok=True) @@ -271,16 +275,9 @@ class SSGGGenerator: html = template.render( title=f"{post['title']} - {self.blog_title}", - blog_title=self.blog_title, - blog_description=self.blog_description, - navbar_items=self.navbar_items, post=post, all_posts=all_posts or [], - hide_logo=self.hide_logo, - hide_title=self.hide_title, - logo_path=self.logo_path, - rss_feed_enabled=ENABLE_RSS_FEED, - rss_feed_path=RSS_FEED_PATH + **self.common_context(post['url']) ) # Create directory for the post slug (with parents for nested paths) @@ -300,16 +297,9 @@ class SSGGGenerator: html = template.render( title=f"{post['title']} - {self.blog_title}", - blog_title=self.blog_title, - blog_description=self.blog_description, - navbar_items=self.navbar_items, post=post, all_posts=all_posts or [], - hide_logo=self.hide_logo, - hide_title=self.hide_title, - logo_path=self.logo_path, - rss_feed_enabled=ENABLE_RSS_FEED, - rss_feed_path=RSS_FEED_PATH + **self.common_context("/") ) output_path = self.output_dir / 'index.html'