ADD feature 5 random posts at the end of a post #17

This commit is contained in:
Caffeine Fueled 2025-10-23 22:41:36 +02:00
parent af2f800321
commit 1b8f77cb4b
Signed by: cf7
GPG key ID: CA295D643074C68C
3 changed files with 46 additions and 10 deletions

View file

@ -24,6 +24,14 @@ class SSGGGenerator:
# Setup Jinja2
self.env = Environment(loader=FileSystemLoader(self.templates_dir))
# Add custom filter for random sampling
def random_sample(items, count):
import random
items_list = list(items)
return random.sample(items_list, min(count, len(items_list)))
self.env.filters['random_sample'] = random_sample
# Setup markdown with toc extension for header anchors
self.md = markdown.Markdown(extensions=['extra', 'toc'])
@ -118,7 +126,7 @@ class SSGGGenerator:
return posts
def generate_index(self, posts, feed_name=None):
def generate_index(self, posts, feed_name=None, all_posts=None):
"""Generate index.html with all posts (or feed-specific index)"""
template = self.env.get_template('index.tmpl')
@ -134,7 +142,8 @@ class SSGGGenerator:
blog_title=self.blog_title,
blog_description=self.blog_description,
navbar_items=self.navbar_items,
posts=posts
posts=posts,
all_posts=all_posts or posts
)
output_path.parent.mkdir(parents=True, exist_ok=True)
@ -143,7 +152,7 @@ class SSGGGenerator:
print(f"✓ Generated {output_path}")
def generate_feeds_overview(self, feeds):
def generate_feeds_overview(self, feeds, all_posts=None):
"""Generate /feed/index.html with list of all non-excluded feeds"""
template = self.env.get_template('feeds.tmpl')
@ -164,7 +173,8 @@ class SSGGGenerator:
blog_title=self.blog_title,
blog_description=self.blog_description,
navbar_items=self.navbar_items,
feeds=feed_list
feeds=feed_list,
all_posts=all_posts or []
)
output_path.parent.mkdir(parents=True, exist_ok=True)
@ -173,7 +183,7 @@ class SSGGGenerator:
print(f"✓ Generated {output_path}")
def generate_post_page(self, post):
def generate_post_page(self, post, all_posts=None):
"""Generate individual post page for 'long' posts"""
template = self.env.get_template('post.tmpl')
@ -182,7 +192,8 @@ class SSGGGenerator:
blog_title=self.blog_title,
blog_description=self.blog_description,
navbar_items=self.navbar_items,
post=post
post=post,
all_posts=all_posts or []
)
# Create directory for the post slug
@ -246,7 +257,7 @@ class SSGGGenerator:
and p['feed'] not in self.exclude_feeds]
# Generate main index with filtered feed posts
self.generate_index(feed_posts)
self.generate_index(feed_posts, all_posts=feed_posts)
# Group posts by feed (include all posts, not just those in main feed)
feeds = {}
@ -256,16 +267,16 @@ class SSGGGenerator:
# Generate feed-specific pages
for feed_name, posts in feeds.items():
self.generate_index(posts, feed_name)
self.generate_index(posts, feed_name, all_posts=feed_posts)
# Generate feeds overview page
if feeds:
self.generate_feeds_overview(feeds)
self.generate_feeds_overview(feeds, all_posts=feed_posts)
# Generate individual pages for long posts, short posts, and pages
for post in all_posts:
if post['type'] in ['long', 'short', 'page']:
self.generate_post_page(post)
self.generate_post_page(post, all_posts=feed_posts)
# Copy assets
self.copy_assets()

View file

@ -14,6 +14,8 @@
{{ post.content | safe }}
</div>
</article>
{% include 'random_posts.tmpl' %}
</main>
{% include 'footer.tmpl' %}

View file

@ -0,0 +1,23 @@
{% if all_posts %}
{# Filter out pages and current post, then randomly select 5 #}
{% set available_posts = all_posts | selectattr('type', 'ne', 'page') | list %}
{% if post %}
{% set available_posts = available_posts | rejectattr('slug', 'equalto', post.slug) | list %}
{% endif %}
{% if available_posts %}
{% set random_posts = available_posts | random_sample(5) %}
{% if random_posts %}
<div class="random-posts">
<h3>More Posts</h3>
<ul>
{% for p in random_posts %}
<li>
<a href="{{ p.url }}">{{ p.title }}</a>
<span class="date">{{ p.date }}</span>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% endif %}
{% endif %}