diff --git a/classes.py b/classes.py index 01062e9..d2434fe 100644 --- a/classes.py +++ b/classes.py @@ -10,13 +10,15 @@ from jinja_env import env, content_item_template, index_template class ContentItem: def render_content(self): - logger.debug(f"Rendering {self.source_filename} to {Config.OUTPUT_DIR}/{self.target_filename}") - if self.image_file.exists(): - shutil.copyfile(self.image_src_file, Path(Config.OUTPUT_DIR) / self.image) - if self.css_file.exists(): - shutil.copyfile(self.custom_css_src_file,Path(Config.OUTPUT_DIR) / self.custom_css) - if self.js_file.exists(): - shutil.copyfile(self.custom_js_src_file, Path(Config.OUTPUT_DIR) / self.custom_js) + logger.debug(f"Rendering {self.source_filename} to {self.target_filename}") + if self.image_file and self.image_file.exists(): + logger.debug(f"Copying {self.image_file} to {Path(Config.OUTPUT_DIR) / self.image_file}") + shutil.copyfile(self.image_file, Path(Config.OUTPUT_DIR) / self.image_file) + self.image_file = f"{self.image_file.stem}.jpg" + if self.css_file and self.css_file.exists(): + shutil.copyfile(self.css_file,Path(Config.OUTPUT_DIR) / self.css_file) + if self.js_file and self.js_file.exists(): + shutil.copyfile(self.js_file, Path(Config.OUTPUT_DIR) / self.js_file) with self.target_filename.open("w", encoding="utf-8") as f: f.write(content_item_template.render(content_item = self, page_title = self.title)) @@ -36,9 +38,10 @@ class ContentItem: self.date = self.data.get("date", "2000-01-01T00:00:00+03:00") self.categories = self.data.get("categories", str([])) self.hidden = self.data.get("hidden", str(False)) - self.image_file = Path(self.source_filename.stem + ".jpg") - self.css_file = Path(self.source_filename.stem + ".css") - self.js_file = Path(self.source_filename.stem + ".js") + cover_image_path = Path(self.source_filename.parent) / Path(self.source_filename.stem + ".jpg") + self.image_file = cover_image_path if cover_image_path.exists() else None + self.css_file = Path(self.source_filename.stem + ".css") if Path(self.source_filename.stem + ".css").exists() else None + self.js_file = Path(self.source_filename.stem + ".js") if Path(self.source_filename.stem + ".js").exists else None except Exception as e: logger.error(e) @@ -61,68 +64,65 @@ class ContentItem: self.source_filename = filename class Site: - def init_site(): + def __init__(self): + self.output_dir = Path(Config.OUTPUT_DIR) logger.info("Initializing new site") - content_dir = Path(Config.CONTENT_DIR) - static_dir = Path(Config.STATIC_DIR) - templates_dir = Path(Config.TEMPLATES_DIR) - images_dir = Path(f"{Config.STATIC_DIR}/images") - css_dir = Path(f"{Config.STATIC_DIR}/css") - js_dir = Path(f"{Config.STATIC_DIR}/js") + self.content_dir = Path(Config.CONTENT_DIR) + self.static_dir = Path(Config.STATIC_DIR) + self.templates_dir = Path(Config.TEMPLATES_DIR) + self.images_dir = Path(f"{Config.STATIC_DIR}/images") + self.css_dir = Path(f"{Config.STATIC_DIR}/css") + self.js_dir = Path(f"{Config.STATIC_DIR}/js") + self.output_dir = Path(Config.OUTPUT_DIR) + + def init_site(self): + # Create directories - for subdir in [content_dir, static_dir, templates_dir, images_dir, css_dir, js_dir]: + for subdir in [self.content_dir, self.static_dir, self.templates_dir, + self.images_dir, self.css_dir, self.js_dir]: os.makedirs(subdir, exist_ok=True) # Create templates from literals import templates template_names = [t for t in dir(templates) if not t.startswith('_')] for template_name in template_names: template_content = getattr(templates, template_name) - with open(templates_dir / f"{template_name}.html", "w", encoding="utf8") as f: + with open(self.templates_dir / f"{template_name}.html", "w", encoding="utf8") as f: f.write(template_content) # Create static/about.md - def build_site(self): + def build(self): # Recreate the output dir if needed - if output_dir.exists(): - shutil.rmtree(output_dir) - output_dir.mkdir() + if self.output_dir.exists(): + shutil.rmtree(self.output_dir) + self.output_dir.mkdir() # Create public subdirs - subdirs = [img_dir, css_dir, js_dir] + subdirs = [self.images_dir, self.css_dir, self.js_dir, self.content_dir] for subdir in subdirs: - subdir.mkdir(arents=True, exist_ok=True) + subdir = self.output_dir / subdir + subdir.mkdir(parents=True, exist_ok=True) # Copy static files if exist - if static_dir.exists(): - shutil.copytree(static_dir, output_dir / "static", dirs_exist_ok=True) + if self.static_dir.exists(): + shutil.copytree(self.static_dir, self.output_dir / self.static_dir, dirs_exist_ok=True) # Parse the content files content_items = [] - for md_file in content_dir.glob("*.md"): - current_content_item = ContentItemPrototype(md_file) + for md_file in self.content_dir.glob("*.md"): + current_content_item = ContentItem(md_file) + current_content_item.parse_content() current_content_item.render_content() - content_items.append({ - "slug": current_content_item.slug, - "title": current_content_item.title, - "date": current_content_item.date, - # "preview": markdown.markdown(current_content_item.preview), - "image": current_content_item.image, - }) + content_items.append(current_content_item) # Render the index file - with (output_dir / "index.html").open("w", encoding="utf-8") as f: + with (self.output_dir / "index.html").open("w", encoding="utf-8") as f: f.write(index_template.render(page_title = Config.MAIN_PAGE_TITLE, content_items=content_items)) # Render the about file - about_content = ContentItemPrototype(Path('static/about.md')) + about_content = ContentItem(Path('static/about.md')) + about_content.parse_content() about_content.render_content() - # Move 'robots.txt' into output_dir - shutil.copyfile(static_dir / 'robots.txt', output_dir / 'robots.txt') - logger.info(f"Created {len(content_items)} content items.") - - def __init__(self): - self.output_dir = Path(Config.OUTPUT_DIR) \ No newline at end of file diff --git a/functions.py b/functions.py index b270f65..b49a68c 100644 --- a/functions.py +++ b/functions.py @@ -39,9 +39,9 @@ def init_site_old(): create_content("about") def init_site(): - logger.debug(f"Initializing new site") - site = SitePrototype + site = Site() site.init_site() def build_site(): - logger.debug("Building site") \ No newline at end of file + site = Site() + site.build() \ No newline at end of file diff --git a/hydrogen.py b/hydrogen.py index a6593cf..134572e 100644 --- a/hydrogen.py +++ b/hydrogen.py @@ -4,52 +4,6 @@ from argparser import argparser from classes import * from functions import * -def build_site_old(): - logger.info(f"Building the '{Config.MAIN_PAGE_TITLE}' site.") - - # Recreate the output dir if needed - if output_dir.exists(): - shutil.rmtree(output_dir) - output_dir.mkdir() - - # Create public subdirs - subdirs = [img_dir, assets_css_dir, assets_js_dir] - for subdir in subdirs: - subdir.mkdir(parents=True, exist_ok=True) - - # Copy static files if exist - if static_dir.exists(): - shutil.copytree(static_dir, output_dir / "static", dirs_exist_ok=True) - - # Parse the content files - content_items = [] - for md_file in content_dir.glob("*.md"): - current_content_item = ContentItemPrototype(md_file) - current_content_item.render_content() - content_items.append({ - "slug": current_content_item.slug, - "title": current_content_item.title, - "date": current_content_item.date, - # "preview": markdown.markdown(current_content_item.preview), - "image": current_content_item.image, - }) - - # Render the index file - with (output_dir / "index.html").open("w", encoding="utf-8") as f: - f.write(index_template.render(page_title = Config.MAIN_PAGE_TITLE, content_items=content_items)) - - # Render the about file - about_content = ContentItemPrototype(Path('static/about.md')) - about_content.render_content() - - # Move 'robots.txt' into output_dir - shutil.copyfile(static_dir / 'robots.txt', output_dir / 'robots.txt') - - logger.info(f"Created {len(content_items)} content items.") - - - - def main(): args = argparser.parse_args() match args.command: diff --git a/templates/content_item.html b/templates/content_item.html index 0c9739d..b45666f 100644 --- a/templates/content_item.html +++ b/templates/content_item.html @@ -7,14 +7,19 @@ {% endif %} {% endblock %} +{% block menu_links %} + Home + About +{% endblock %} + {% block content %}
- {% if content_item.image %}{% endif %} + {% if content_item.image_file %}{% endif %} {% if not content_item.omit_second_title %}

{{ content_item.title }}

{% endif %}
{{ content_item.html | safe }}
- ← Back + ← Back
{% endblock %} diff --git a/templates/default.html b/templates/default.html index 148c195..0f171fb 100644 --- a/templates/default.html +++ b/templates/default.html @@ -74,9 +74,8 @@
- - Home - About + {% block menu_links %} + {% endblock %}
diff --git a/templates/index.html b/templates/index.html index c02b78d..3610502 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,20 +1,29 @@ {% extends "default.html" %} + +{% block menu_links %} + Home + About +{% endblock %} + {% block content %} -
- {% for content_item in content_items %} -
-
- {{ content_item.title }} -
-
{{ content_item.title }}
-

{{ content_item.preview | safe}}

- + +
+
+ {% for content_item in content_items %} +
+
+ {{ content_item.title }} +
+
+
{{ content_item.title }}
+

{{ content_item.preview | safe}}

+
-
+ {% endfor %}
- {% endfor %}
+ {% endblock %}