diff options
| author | Botond Hende <nettingman@gmail.com> | 2025-12-23 00:40:57 +0100 |
|---|---|---|
| committer | Botond Hende <nettingman@gmail.com> | 2025-12-23 00:40:57 +0100 |
| commit | 71c7de032edca8bfd00871e0f0fe986bbd9e60a5 (patch) | |
| tree | d4735895b56c6679c5f30af2f22b708da5ceaf97 | |
| parent | b189fb816abf0e7b0f7c85f8b465916d8ba5ff63 (diff) | |
comic basic layout
| -rw-r--r-- | __main__.py | 8 | ||||
| -rw-r--r-- | blog/templates/base.html.j2 | 8 | ||||
| -rw-r--r-- | blog/templates/sidebar.html.j2 | 2 | ||||
| -rw-r--r-- | comic/assets/css/comic.css | 18 | ||||
| -rw-r--r-- | comic/issues/001/meta.json | 5 | ||||
| -rw-r--r-- | comic/issues/1/comic.png (renamed from comic/issues/001/comic.png) | bin | 243107 -> 243107 bytes | |||
| -rw-r--r-- | comic/issues/1/meta.json | 5 | ||||
| -rw-r--r-- | comic/templates/issue.html.j2 | 30 | ||||
| -rw-r--r-- | config.py | 11 | ||||
| -rw-r--r-- | modules/blog_generate.py | 7 | ||||
| -rw-r--r-- | modules/comic_generate.py | 36 |
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 Binary files differindex f3e10c6..f3e10c6 100644 --- a/comic/issues/001/comic.png +++ b/comic/issues/1/comic.png 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> @@ -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) |
