tag listings
This commit is contained in:
parent
715ddbc39f
commit
c36ce7dd20
@ -28,4 +28,11 @@ for d in ./articles/*/; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
mkdir -p "./html/tags/"
|
||||||
|
./tools/tag_listing_generator.py ./articles/ ./html/ | ./tools/mmd/build/multimarkdown > "./html/tags.html"
|
||||||
|
|
||||||
|
for f in ./html/tags/*.html; do
|
||||||
|
echo $(cat "$f" | ./tools/mmd/build/multimarkdown) > "$f"
|
||||||
|
done
|
||||||
|
|
||||||
./tools/feed_generator.py ./articles/ $URL > ./html/feed.xml
|
./tools/feed_generator.py ./articles/ $URL > ./html/feed.xml
|
||||||
|
@ -18,7 +18,7 @@ def parse_metadata(filepath: str) -> {}:
|
|||||||
if key == "Date":
|
if key == "Date":
|
||||||
result["Date"] = time.gmtime(int(val))
|
result["Date"] = time.gmtime(int(val))
|
||||||
elif key == "Tags":
|
elif key == "Tags":
|
||||||
result["Tags"] = val.split(",")
|
result["Tags"] = [v.strip() for v in val.split(",")]
|
||||||
else:
|
else:
|
||||||
result[key] = val
|
result[key] = val
|
||||||
result["Last Edit"] = time.gmtime(int(subprocess.getoutput(r"stat -c %Y " + filepath)))
|
result["Last Edit"] = time.gmtime(int(subprocess.getoutput(r"stat -c %Y " + filepath)))
|
||||||
|
@ -24,7 +24,7 @@ with open(argv[1], "r") as f:
|
|||||||
metadata = parse_metadata(argv[1])
|
metadata = parse_metadata(argv[1])
|
||||||
directory = path.split(path.dirname(path.abspath(argv[1])))[-1]
|
directory = path.split(path.dirname(path.abspath(argv[1])))[-1]
|
||||||
|
|
||||||
title = metadata.get("Title", "Oopsie, somebody forgot to name the article!")
|
title = metadata["Title"]
|
||||||
article_head = "\n# " + title + "\n"
|
article_head = "\n# " + title + "\n"
|
||||||
|
|
||||||
brief = metadata.get("Brief")
|
brief = metadata.get("Brief")
|
||||||
@ -41,10 +41,12 @@ if not last_edit is None:
|
|||||||
last_edit.tm_mday != date.tm_mday or last_edit.tm_year != date.tm_year:
|
last_edit.tm_mday != date.tm_mday or last_edit.tm_year != date.tm_year:
|
||||||
article_head += f"-- Edited: *{MONTHS[last_edit.tm_mon]} {last_edit.tm_mday}, {last_edit.tm_year} UTC*\n\n"
|
article_head += f"-- Edited: *{MONTHS[last_edit.tm_mon]} {last_edit.tm_mday}, {last_edit.tm_year} UTC*\n\n"
|
||||||
|
|
||||||
# todo: Hyperlinks to appropriate tag pages.
|
|
||||||
tags = metadata.get("Tags")
|
tags = metadata.get("Tags")
|
||||||
if tags:
|
if tags:
|
||||||
article_head += f"""-- Tags: *{",".join(tags)}*\n\n"""
|
tag_links = []
|
||||||
|
for tag in tags:
|
||||||
|
tag_links.append(f"[{tag}](/tags/{urllib.parse.quote(tag.lower())}.html)")
|
||||||
|
article_head += f"""-- Tags: *{", ".join(tag_links)}*\n\n"""
|
||||||
|
|
||||||
article_head += "---\n\n"
|
article_head += "---\n\n"
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ HEAD_EMBED = """
|
|||||||
<li><a href="/articles/mjestečko.html">about</a></li>
|
<li><a href="/articles/mjestečko.html">about</a></li>
|
||||||
<li><a href="https://modarchive.org/index.php?request=view_artist_modules&query=96070">tracks</a></li>
|
<li><a href="https://modarchive.org/index.php?request=view_artist_modules&query=96070">tracks</a></li>
|
||||||
<li><a rel="me" href="https://poto.cafe/@veclavtalica">mastodon</a></li>
|
<li><a rel="me" href="https://poto.cafe/@veclavtalica">mastodon</a></li>
|
||||||
|
<li><a href="/tags.html">tags</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
54
tools/tag_listing_generator.py
Executable file
54
tools/tag_listing_generator.py
Executable file
@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# todo: Problems might arise with casing if there are overlaps such as 'Tag' and 'tag'.
|
||||||
|
|
||||||
|
from sys import argv, exit
|
||||||
|
import time, urllib.parse, re
|
||||||
|
from os import walk
|
||||||
|
import os.path as path
|
||||||
|
|
||||||
|
from article_utils import the_line_after_metadata, parse_metadata
|
||||||
|
from page_shares import wrap_page
|
||||||
|
|
||||||
|
tag_listing_header = "CSS: /style.css\n\n"
|
||||||
|
main_listing_header = "CSS: /style.css\n\n"
|
||||||
|
|
||||||
|
if len(argv) <= 1:
|
||||||
|
print("No article directory was supplied")
|
||||||
|
exit(-1)
|
||||||
|
|
||||||
|
if len(argv) <= 2:
|
||||||
|
print("No tag listing output directory was supplied")
|
||||||
|
exit(-1)
|
||||||
|
|
||||||
|
tag_to_tag_page = {}
|
||||||
|
tag_to_articles = {}
|
||||||
|
tag_counts = {}
|
||||||
|
article_to_title = {}
|
||||||
|
|
||||||
|
for root, dirs, _ in walk(argv[1]):
|
||||||
|
for d in dirs:
|
||||||
|
metadata = parse_metadata(path.abspath(root + '/' + d + "/page.mmd"))
|
||||||
|
article = "/articles/" + urllib.parse.quote(d) + ".html"
|
||||||
|
for tag in metadata.get('Tags', []):
|
||||||
|
tag_to_articles[tag] = tag_to_articles.get(tag, []) + [article]
|
||||||
|
tag_counts[tag] = tag_counts.get(tag, 0) + 1
|
||||||
|
article_to_title[article] = metadata['Title']
|
||||||
|
break
|
||||||
|
|
||||||
|
for tag in tag_to_articles:
|
||||||
|
tag_page = f"/tags/{urllib.parse.quote(tag.lower())}.html"
|
||||||
|
tag_to_tag_page[tag] = tag_page
|
||||||
|
|
||||||
|
with open(argv[2] + tag_page, 'w') as f:
|
||||||
|
tagged_article_listing = f"\n# Tagged {tag} #\n---\n" + \
|
||||||
|
'\n'.join(f"- [{article_to_title[article]}]({article})" \
|
||||||
|
for article in tag_to_articles[tag])
|
||||||
|
f.write(tag_listing_header + wrap_page(tagged_article_listing))
|
||||||
|
|
||||||
|
main_listing = "\n# Tag Listing #\n---\n" + \
|
||||||
|
', '.join(f"[{tag}]({tag_to_tag_page[tag]}) ({tag_counts[tag]})" \
|
||||||
|
for tag in sorted(tag_counts.keys(), key=lambda x: tag_counts[x], reverse=True)) + \
|
||||||
|
'\n\n'
|
||||||
|
|
||||||
|
print(main_listing_header + wrap_page(main_listing))
|
Loading…
Reference in New Issue
Block a user