summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBotond Hende <nettingman@gmail.com>2025-12-23 00:40:57 +0100
committerBotond Hende <nettingman@gmail.com>2025-12-23 00:40:57 +0100
commit71c7de032edca8bfd00871e0f0fe986bbd9e60a5 (patch)
treed4735895b56c6679c5f30af2f22b708da5ceaf97
parentb189fb816abf0e7b0f7c85f8b465916d8ba5ff63 (diff)
comic basic layout
-rw-r--r--__main__.py8
-rw-r--r--blog/templates/base.html.j28
-rw-r--r--blog/templates/sidebar.html.j22
-rw-r--r--comic/assets/css/comic.css18
-rw-r--r--comic/issues/001/meta.json5
-rw-r--r--comic/issues/1/comic.png (renamed from comic/issues/001/comic.png)bin243107 -> 243107 bytes
-rw-r--r--comic/issues/1/meta.json5
-rw-r--r--comic/templates/issue.html.j230
-rw-r--r--config.py11
-rw-r--r--modules/blog_generate.py7
-rw-r--r--modules/comic_generate.py36
11 files changed, 111 insertions, 19 deletions
diff --git a/__main__.py b/__main__.py
index 16c2243..fd26157 100644
--- a/__main__.py
+++ b/__main__.py
@@ -4,6 +4,7 @@ import jinja2
from .config import Config
from .modules import blog_generate
+from .modules import comic_generate
def init_jinja_env() -> jinja2.Environment:
@@ -14,9 +15,16 @@ def init_jinja_env() -> jinja2.Environment:
def main(output_root_path: str, local: bool):
if local:
Config.BLOG_ROOT_URL = "http://localhost"
+ Config.COMIC_ROOT_URL = "http://localhost"
jinja_env = init_jinja_env()
+ jinja_env.globals.update(site={
+ "assets_path": Config.ASSETS_IMPORT_PATH,
+ "assets_path_static": Config.ASSETS_IMPORT_PATH_STATIC,
+ })
+
blog_generate.generate(jinja_env, os.path.join(output_root_path, "blog"), local)
+ comic_generate.generate(jinja_env, os.path.join(output_root_path, "comic"), local)
if __name__ == '__main__':
diff --git a/blog/templates/base.html.j2 b/blog/templates/base.html.j2
index fa1f2d8..6c5845a 100644
--- a/blog/templates/base.html.j2
+++ b/blog/templates/base.html.j2
@@ -2,9 +2,9 @@
<html dir="ltr" lang="en">
<head>
<meta charset="utf-8"/>
- <title>{% block page_title %}{{ site.blog_name }}{% endblock %}</title>
+ <title>{% block page_title %}{{ blog.blog_name }}{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
- <meta property="og:title" content="{% block page_title_short %}{{ site.blog_name }}{% endblock %}" />
+ <meta property="og:title" content="{% block page_title_short %}{{ blog.blog_name }}{% endblock %}" />
<meta property="og:type" content="article" />
<meta property="og:url" content="{{ url }}" />
<link rel="stylesheet" href="{{ site.assets_path_static }}/css/bootstrap-grid.min.css" />
@@ -18,8 +18,8 @@
<a href="/" class="row dont-bother">
<header class="col-lg-9" role="banner">
<div>
- <h1 class="green blog-title">{{ site.blog_name }}</h1>
- <p>{{ site.subtitle }}</p>
+ <h1 class="green blog-title">{{ blog.blog_name }}</h1>
+ <p>{{ blog.subtitle }}</p>
</div>
<span class="ascii-art"><b><span class="green"> ccee88oo
C8O8O8Q8PoOb o8oo
diff --git a/blog/templates/sidebar.html.j2 b/blog/templates/sidebar.html.j2
index 7390145..b51cde7 100644
--- a/blog/templates/sidebar.html.j2
+++ b/blog/templates/sidebar.html.j2
@@ -23,7 +23,7 @@ Sometimes I touch upon some more artistic stuff, but mostly just to amuse myself
</a>
<h3 class="magenta">Top tags</h3>
<p>ls <a href="/tags">~/tags/</a></p>
-<p>{% for tag in site.top_tags %}<a href="/tags/{{ tag }}.html">{{ tag }}/</a>{% if not loop.last %} {% endif %}{% endfor %}</p>
+<p>{% for tag in blog.top_tags %}<a href="/tags/{{ tag }}.html">{{ tag }}/</a>{% if not loop.last %} {% endif %}{% endfor %}</p>
<h3 class="magenta">I want different colors</h3>
<p>ls ~/themes/ <a class="theme-extender" href="javascript:void(0);" onclick="setThemeExtend()">-A</a></p>
<a href="javascript:void(0);" class="icon-text theme-selector-light" onclick="setTheme('light')">
diff --git a/comic/assets/css/comic.css b/comic/assets/css/comic.css
new file mode 100644
index 0000000..c647875
--- /dev/null
+++ b/comic/assets/css/comic.css
@@ -0,0 +1,18 @@
+img.comic {
+ width: 100%;
+}
+
+header {
+ margin: auto;
+}
+
+main, header {
+ display: flex;
+ flex-flow: column;
+ align-items: center;
+ margin: auto;
+}
+
+div.huge-vertical-spacer-at-the-bottom {
+ height: 10rem;
+} \ No newline at end of file
diff --git a/comic/issues/001/meta.json b/comic/issues/001/meta.json
deleted file mode 100644
index 34d084a..0000000
--- a/comic/issues/001/meta.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "title" : "Hestia: the homemade home assistant",
- "publish_date" : "2025-01-29",
- "description" : "Hestia: the homemade home assistant"
-}
diff --git a/comic/issues/001/comic.png b/comic/issues/1/comic.png
index f3e10c6..f3e10c6 100644
--- a/comic/issues/001/comic.png
+++ b/comic/issues/1/comic.png
Binary files differ
diff --git a/comic/issues/1/meta.json b/comic/issues/1/meta.json
new file mode 100644
index 0000000..e3079db
--- /dev/null
+++ b/comic/issues/1/meta.json
@@ -0,0 +1,5 @@
+{
+ "title" : "The beginning",
+ "publish_date" : "2025-11-28",
+ "description" : "I have like twenty comic ideas figured out but not the title of the series."
+}
diff --git a/comic/templates/issue.html.j2 b/comic/templates/issue.html.j2
new file mode 100644
index 0000000..9281ec0
--- /dev/null
+++ b/comic/templates/issue.html.j2
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en">
+<head>
+ <meta charset="utf-8"/>
+ <title>{{ issue.title() }} - {{ comic.comic_name }}</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1"/>
+ <meta property="og:title" content="{{ issue.title() }}" />
+ <meta property="og:type" content="article" />
+ <meta property="og:url" content="{{ url }}" />
+ <link rel="stylesheet" href="{{ site.assets_path_static }}/css/bootstrap-grid.min.css" />
+ <link rel="stylesheet" href="{{ site.assets_path }}/css/comic.css" />
+</head>
+<body>
+<div class="bootstrap-wrapper">
+ <div class="container">
+ <a href="/" class="row dont-bother">
+ <header class="col-md-6" role="banner">TITLE</header>
+ </a>
+ <div class="row">
+ <main class="col-md-6">
+ <h1>{{ issue.title() }}</h1>
+ <img class="comic" src="{{ url }}/comic.png" />
+ <p>{{ issue.description() }}</p>
+ </main>
+ </div>
+ </div>
+</div>
+<div class="huge-vertical-spacer-at-the-bottom"></div>
+</body>
+</html>
diff --git a/config.py b/config.py
index cf6e1d5..8337d29 100644
--- a/config.py
+++ b/config.py
@@ -10,8 +10,8 @@ class Config:
TIMEZONE = datetime.timezone(datetime.timedelta(hours=2))
__DIR = os.path.dirname(__file__)
- ASSETS_SOURCE_DIR = os.path.join(__DIR, "blog/assets")
- TEMPLATES_SOURCE_DIR = os.path.join(__DIR, "blog/templates")
+ BLOG_ASSETS_SOURCE_DIR = os.path.join(__DIR, "blog/assets")
+ TEMPLATES_SOURCE_DIR = [os.path.join(__DIR, "blog/templates"), os.path.join(__DIR, "comic/templates")]
POST_SOURCE_DIR = os.path.join(__DIR, "blog/posts")
BLOG_HOSTNAME = "yggdrasil"
@@ -27,3 +27,10 @@ class Config:
@staticmethod
def get_tag_prompt(tag: str, cmd: str) -> str:
return Config.get_prompt("~/tags/{}".format("" if tag == "" else tag + "/"), cmd)
+
+
+ COMIC_NAME = "Comics by Wazul"
+ COMIC_ROOT_URL = "https://comic.wazul.moe"
+ ISSUE_SOURCE_DIR = os.path.join(__DIR, "comic/issues")
+ COMIC_ASSETS_SOURCE_DIR = os.path.join(__DIR, "comic/assets")
+
diff --git a/modules/blog_generate.py b/modules/blog_generate.py
index ff296e0..04bd673 100644
--- a/modules/blog_generate.py
+++ b/modules/blog_generate.py
@@ -27,10 +27,7 @@ def generate(jinja_env: jinja2.Environment, output_root_path: str, local: bool):
tags.sort(key=lambda key: tag_occurrence_count[key], reverse=True)
top_tags = tags[:10]
- jinja_env.globals.update(site={
- "assets_path": Config.ASSETS_IMPORT_PATH,
- "assets_path_static": Config.ASSETS_IMPORT_PATH_STATIC,
- "host_name": Config.BLOG_HOSTNAME,
+ jinja_env.globals.update(blog={
"blog_name": Config.BLOG_NAME,
"subtitle": Config.BLOG_SUBTITLE,
"top_tags": top_tags
@@ -109,4 +106,4 @@ def generate(jinja_env: jinja2.Environment, output_root_path: str, local: bool):
with open(os.path.join(output_root_path, "feed.xml"), "w") as f:
f.write(rss_template.render(ctx))
- shutil.copytree(Config.ASSETS_SOURCE_DIR, output_root_path + Config.ASSETS_IMPORT_PATH) \ No newline at end of file
+ shutil.copytree(Config.BLOG_ASSETS_SOURCE_DIR, output_root_path + Config.ASSETS_IMPORT_PATH) \ No newline at end of file
diff --git a/modules/comic_generate.py b/modules/comic_generate.py
index de8fad8..7c55521 100644
--- a/modules/comic_generate.py
+++ b/modules/comic_generate.py
@@ -10,17 +10,29 @@ from ..config import Config
META_FILE_NAME = "meta.json"
IMAGE_FILE_NAME = "comic.png"
+
+TITLE_KEY = "title"
+DESCRIPTION_KEY = "description"
PUBLISH_DATE_KEY = "publish_date"
class Issue:
def __init__(self, path: str):
self.path = path
- self.name = os.path.basename(path)
+ self.index = os.path.basename(path)
with open(os.path.join(path, META_FILE_NAME)) as f:
self.meta_data = json.load(f)
+ def title(self) -> str:
+ return self.meta_data[TITLE_KEY]
+
+ def description(self) -> str:
+ return self.meta_data[DESCRIPTION_KEY]
+
+ def get_publish_time(self) -> str:
+ return self.meta_data[PUBLISH_DATE_KEY]
+
def get_issues(path: str, local: bool) -> list[Issue]:
return_list = []
@@ -41,6 +53,26 @@ def generate(jinja_env: jinja2.Environment, output_root_path: str, local: bool):
os.mkdir(output_root_path)
- issues = get_issues(Config.POST_SOURCE_DIR, local)
+ jinja_env.globals.update(comic={
+ "comic_name": Config.COMIC_NAME,
+ })
+
+ issues = get_issues(Config.ISSUE_SOURCE_DIR, local)
+ issue_template = jinja_env.get_template("issue.html.j2")
+
+ for issue in issues:
+ output_dir = os.path.join(output_root_path, "issues", issue.index)
+ os.makedirs(output_dir, exist_ok=True)
+
+ ctx = {
+ "issue": issue,
+ "url": f"{Config.COMIC_ROOT_URL}/issues/{issue.index}"
+ }
+
+ with open(os.path.join(output_dir, "index.html"), "w") as f:
+ f.write(issue_template.render(ctx))
+
+ shutil.copyfile(os.path.join(issue.path, IMAGE_FILE_NAME), os.path.join(output_dir, IMAGE_FILE_NAME))
+ shutil.copytree(Config.COMIC_ASSETS_SOURCE_DIR, output_root_path + Config.ASSETS_IMPORT_PATH)