page navigation
This commit is contained in:
parent
c075e4ac86
commit
f49d4ddfed
4 changed files with 28 additions and 10 deletions
4
TODO.md
4
TODO.md
|
@ -1 +1,3 @@
|
||||||
- navigating pages
|
- README & LICENSE
|
||||||
|
- basic standalone template
|
||||||
|
- git as part of software
|
|
@ -56,4 +56,10 @@ class Site:
|
||||||
custom[key] = value
|
custom[key] = value
|
||||||
|
|
||||||
return Site(custom=custom, **kwargs)
|
return Site(custom=custom, **kwargs)
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Page:
|
||||||
|
index: int
|
||||||
|
last: int
|
||||||
|
url_previous: str
|
||||||
|
url_next: str
|
20
compiler.py
20
compiler.py
|
@ -1,10 +1,11 @@
|
||||||
from json import loads
|
from json import loads
|
||||||
|
from math import ceil
|
||||||
from os import walk, mkdir
|
from os import walk, mkdir
|
||||||
from os.path import isdir, join, exists
|
from os.path import isdir, join, exists
|
||||||
from shutil import copytree
|
from shutil import copytree
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from article import Article, Site
|
from article import Article, Page, Site
|
||||||
from template import TemplateEnvironment
|
from template import TemplateEnvironment
|
||||||
|
|
||||||
def compile(work_directory: str, template_directory: str=None, target_directory: str=None, force: bool=False):
|
def compile(work_directory: str, template_directory: str=None, target_directory: str=None, force: bool=False):
|
||||||
|
@ -53,19 +54,26 @@ def compile(work_directory: str, template_directory: str=None, target_directory:
|
||||||
|
|
||||||
articles += [article]
|
articles += [article]
|
||||||
|
|
||||||
page = 1
|
page_index = 1
|
||||||
|
pages = ceil(len(articles) / articles_per_page)
|
||||||
while len(articles) > 0:
|
while len(articles) > 0:
|
||||||
if page == 1:
|
page = Page(
|
||||||
|
page_index, pages,
|
||||||
|
f'/index/page{page_index - 1}.html' if page > 1 else None,
|
||||||
|
f'/index/page{page_index + 1}.html' if page < pages else None
|
||||||
|
)
|
||||||
|
|
||||||
|
if page_index == 1:
|
||||||
fn = join(target_directory, 'index.html')
|
fn = join(target_directory, 'index.html')
|
||||||
else:
|
else:
|
||||||
fn = join(target_directory, 'index', f'page{page}.html')
|
fn = join(target_directory, 'index', f'page{page_index}.html')
|
||||||
|
|
||||||
articles_on_page = articles[:articles_per_page] # TODO make this customizable
|
articles_on_page = articles[:articles_per_page] # TODO make this customizable
|
||||||
content = template.process_index(*articles_on_page)
|
content = template.process_index(page, *articles_on_page)
|
||||||
|
|
||||||
file = open(fn, 'w')
|
file = open(fn, 'w')
|
||||||
file.write(content)
|
file.write(content)
|
||||||
file.close()
|
file.close()
|
||||||
|
|
||||||
articles = articles[articles_per_page:]
|
articles = articles[articles_per_page:]
|
||||||
page += 1
|
page_index += 1
|
|
@ -1,10 +1,11 @@
|
||||||
from article import Article, Site
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from io import TextIOWrapper
|
from io import TextIOWrapper
|
||||||
from jinja2 import Environment, Template, FileSystemLoader, select_autoescape
|
from jinja2 import Environment, Template, FileSystemLoader, select_autoescape
|
||||||
from json import loads
|
from json import loads
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
|
||||||
|
from article import Article, Page, Page
|
||||||
|
|
||||||
TEMPLATE_VERSIONS = [1]
|
TEMPLATE_VERSIONS = [1]
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
@ -55,8 +56,9 @@ class TemplateEnvironment:
|
||||||
article = article
|
article = article
|
||||||
)
|
)
|
||||||
|
|
||||||
def process_index(self, *articles: Article) -> str:
|
def process_index(self, page: Page, *articles: Article) -> str:
|
||||||
return self.index_template.render(
|
return self.index_template.render(
|
||||||
site = self.site,
|
site = self.site,
|
||||||
|
page = page,
|
||||||
articles = articles
|
articles = articles
|
||||||
)
|
)
|
Reference in a new issue