diff --git a/fgs/page.py b/fgs/datatypes.py similarity index 63% rename from fgs/page.py rename to fgs/datatypes.py index cc2c7a308a0626e421084cc96b79fd1c4afdf3b9..2976725c0c26cde30b7c8871ab0356dfc2f759d6 100644 --- a/fgs/page.py +++ b/fgs/datatypes.py @@ -1,3 +1,6 @@ +import datetime +from dateutil import parser as dtparser + class Page: #filename = None @@ -63,6 +66,47 @@ class Page: # url self.url = self.lang + '/' + self.category + '/' + self.slug + ".html" + # relevance + self.relevance = {} + self.relevance['is_relevant'] = False + self.relevance['was_relevant'] = False + self.relevance['will_be_relevant'] = False + if 'relevant' in metadata: + lrel = metadata['relevant'] + if not isinstance(lrel, dict): + prio = lrel + lrel = {} + lrel['prio'] = prio + + if 'prio' in lrel: + self.relevance['prio']= lrel['prio'] + else: + self.relevance['prio']= 0 + + start = Date("min", config) + if 'start' in lrel: + start = Date(lrel['start'], config) + self.relevance['start'] = start + + end = Date("max", config) + if 'end' in lrel: + end = Date(lrel['end'], config) + self.relevance['end'] = end + + build_date = Date("now", config) + if (build_date > end): + self.relevance['was_relevant'] = True + elif (build_date < start): + self.relevance['will_be_relevant'] = True + else: + self.relevance['is_relevant'] = True + + + + + + + def tags_str_to_list(self, s): res = [] l = s.split(',') @@ -75,13 +119,23 @@ class Page: return res - def __lt__(self, other): return self.date_modified < other.date_modified class Date: def __init__(self, dt, config): + if isinstance(dt, str): + if dt == "min": + dt = dtparser.parse("1970-01-01") + elif dt == "max": + dt = dtparser.parse("9999-01-01") + elif dt == "now": + dt = datetime.datetime.now() + else: + dt = dtparser.parse(dt) + if isinstance(dt, datetime.date): + dt = datetime.datetime(dt.year, dt.month, dt.day) self.dt = dt #self.config = config # TODO various formats diff --git a/fgs/generator.py b/fgs/generator.py index e620c4aa0da86495de7be445d12e81d09b6ad8bb..5967df567a17ad5b2f6f0246d120897108759bb5 100644 --- a/fgs/generator.py +++ b/fgs/generator.py @@ -1,3 +1,4 @@ +import datatypes class Generator: def __init__(self, config, context): @@ -60,6 +61,23 @@ class Generator: tags[page.lang][tag].append(page) self.context['tags'] = tags + # build_date + self.context['build_date'] = datatypes.Date("now", self.config) + + # relevant_pages + relevant_pages_tuple = [] + for page in published_pages: + if page.relevance['is_relevant']: + relevant_pages_tuple.append((page.relevance['prio'], page)) + relevant_pages_tuple.sort(key=lambda x: x[0]) + relevant_pages_tuple.reverse() + relevant_pages = [] + for prio, page in relevant_pages_tuple: + relevant_pages.append(page) + self.context['relevant_pages'] = relevant_pages + self.context['relevant_pages_tuple'] = relevant_pages_tuple + + def generate_homepage(self, writer, lang, path): diff --git a/fgs/reader.py b/fgs/reader.py index 1e8058f379df96aefb334802b74bec0aadc1f4bc..14e6c0f8b721158fb38bd89e2a984874c006ad75 100644 --- a/fgs/reader.py +++ b/fgs/reader.py @@ -1,10 +1,9 @@ -import page +import datatypes import pandoc import frontmatter from datetime import datetime -from dateutil import parser as dtparser import subprocess import os @@ -80,9 +79,9 @@ class MarkdownReader: date_modified = datetime.fromisoformat(date_changes[0]) date_created = datetime.fromisoformat(date_changes[-1]) if 'date' in metadata: - date_created = dtparser.parse(metadata['date']) + date_created = metadata['date'] if 'modified' in metadata: - date_modified = dtparser.parse(metadata['modified']) + date_modified = metadata['modified'] #print("created: ", date_created) #print("last changed: ", date_modified) @@ -112,7 +111,7 @@ class MarkdownReader: # TODO summary - p = page.Page( + p = datatypes.Page( filename, subpath, rawfile, diff --git a/theme/templates/macros/cards.html b/theme/templates/macros/cards.html index ed39f9b06b741ee4136e183b7e38023f0ea174e6..8b21f0f8dcac8017c5c2cf24953f9fb62c169f5d 100644 --- a/theme/templates/macros/cards.html +++ b/theme/templates/macros/cards.html @@ -28,7 +28,7 @@ {{ open() }} {%- endif -%} {%- for page in pages -%} - {%- if max == None or loop.index < max -%} + {%- if max is none or loop.index < max -%} {{ cards.card_from_page(page, lang) }} {%- endif -%} {%- endfor -%} diff --git a/theme/templates/macros/renderers.html b/theme/templates/macros/renderers.html index d34240739590c599a3cb02e95e562d5849c016dc..a681666c0f0386bb5796afd610f8049c16f9c8ed 100644 --- a/theme/templates/macros/renderers.html +++ b/theme/templates/macros/renderers.html @@ -3,7 +3,11 @@ {%- import 'macros/content_renderer.html' as content_renderer with context -%} {%- macro section_news(s, lang) -%} - {{ cards.cards_from_pages(pages_modified, max=s.num) }} + {{ cards.cards_from_pages(pages_modified, max=s.num|d(None)) }} +{%- endmacro -%} + +{%- macro section_relevant(s, lang) -%} + {{ cards.cards_from_pages(relevant_pages, max=s.num|d(None)) }} {%- endmacro -%} {%- macro section_custom(s, lang) -%} @@ -29,7 +33,7 @@ <h2 {% if s.id is defined -%}id="{{ s.id }}"{%- endif %}>{{ tagtitle|e }}</h2> </header> {%- endif -%} - {{ cards.cards_from_pages(tagpages, lang, max=s.num) }} + {{ cards.cards_from_pages(tagpages, lang, max=s.num|d(None)) }} {%- if tagpage -%} {{ content_renderer.render_content(tagpage.content, lang) }} @@ -51,6 +55,8 @@ {{ section_custom(s, lang) }} {%- elif s.type == "tag" -%} {{ section_tag(s, lang) }} + {%- elif s.type == "relevant" -%} + {{ section_relevant(s, lang) }} {%- else -%} <br /> <strong>ERROR: render.section: Unknown section type: {{ s.type|e }}</strong><br />