Newer
Older
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Generator:
def __init__(self, config, context):
self.config = config
self.context = context
def generate_context(self, pages, static_files):
# static_files
self.context['static_files'] = static_files
published_pages = []
for page in pages:
if page.status == "published":
published_pages.append(page)
# pages
all_pages = {}
for page in published_pages:
if page.lang not in all_pages:
all_pages[page.lang] = {}
if page.slug in all_pages[page.lang]:
raise Exception("duplicate language (",lang,") for slug '", slug ,"'")
all_pages[page.lang][page.slug] = page
self.context['pages'] = all_pages
# pages_modified
pages_modified = {}
for lang in self.config['lang']['supported']:
lang_pages = []
for page in published_pages:
if page.lang == lang:
lang_pages.append(page)
lang_pages.sort()
pages_modified[lang] = lang_pages
self.context['pages_modified'] = pages_modified
# TODO hidden pages
# TODO draft pages
# TODO authors
# categories
categories = {}
for page in published_pages:
if page.lang not in categories:
categories[page.lang] = {}
if page.category not in categories[page.lang]:
categories[page.lang][page.category] = []
categories[page.lang][page.category].append(page)
self.context['categories'] = categories
# tags
tags = {}
for page in published_pages:
for tag in page.tags:
if page.lang not in tags:
tags[page.lang] = {}
if tag not in tags[page.lang]:
tags[page.lang][tag] = []
tags[page.lang][tag].append(page)
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])
for prio, page in relevant_pages_tuple:
if page.lang not in relevant_pages:
relevant_pages[page.lang] = []
relevant_pages[page.lang].append(page)
self.context['relevant_pages'] = relevant_pages
self.context['relevant_pages_tuple'] = relevant_pages_tuple
def generate_homepage(self, writer, lang, path):
page = self.context['pages'][lang][self.config['theme']['homepage_slug']]
writer.write_template(page.template, path , lang, {'page': page})
def generate_output(self, writer):
for sf, raw in self.context['static_files'].items():
print ("writing binary file: ", sf)
writer.write_file(sf, raw, mode="wb")
for lang in self.config['lang']['supported']:
# all pages
for page in self.context['pages'][lang].values():
writer.write_template(page.template, page.url, lang, {'page': page})
# all tags
for tag, tagpages in self.context['tags'][lang].items():
writer.write_template('tag.html', lang + '/tag/' + tag + '.html', lang, {'tag': tag, 'tagpages': tagpages})