Skip to content

Commit

Permalink
Set toc as variable of template
Browse files Browse the repository at this point in the history
  • Loading branch information
tankywoo committed Mar 19, 2020
1 parent be5616f commit 085ba60
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 15 deletions.
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Markdown==2.6.11
Markdown==3.1.1
Pygments==2.2.0
Jinja2>=2.10.1
PyYAML==5.1
Expand Down
2 changes: 1 addition & 1 deletion simiki/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ def generate_tags(self):
md_file = os.path.join(root, filename)

g.src_file = md_file
meta, _ = g.get_meta_and_content(do_render=False)
meta, _, _ = g.get_meta_and_content(do_render=False)
_tags = meta.get('tag') or [] # if None
for t in _tags:
self.tags.setdefault(t, []).append(meta)
Expand Down
17 changes: 9 additions & 8 deletions simiki/generators.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,13 @@ def to_html(self, src_file, include_draft=False):
"""
self._reset()
self._src_file = os.path.relpath(src_file, self.base_path)
self.meta, self.content = self.get_meta_and_content()
self.meta, toc, self.content = self.get_meta_and_content()
# Page set `draft: True' mark current page as draft, and will
# be ignored if not forced generate include draft pages
if not include_draft and self.meta.get('draft', False):
return None
layout = self.get_layout(self.meta)
template_vars = self.get_template_vars(self.meta, self.content)
template_vars = self.get_template_vars(self.meta, toc, self.content)
template = self.get_template(layout)
html = template.render(template_vars)

Expand All @@ -137,11 +137,11 @@ def get_meta_and_content(self, do_render=True):
meta = self.parse_meta(meta_str)
# This is the most time consuming part
if do_render and meta.get('render', True):
content = self._parse_markup(content_str)
content, toc = self._parse_markup(content_str)
else:
content = content_str
content, toc = content_str, None

return meta, content
return meta, toc, content

def get_layout(self, meta):
"""Get layout config in meta, default is `page'"""
Expand All @@ -165,10 +165,10 @@ def get_layout(self, meta):

return layout

def get_template_vars(self, meta, content):
def get_template_vars(self, meta, toc, content):
"""Get template variables, include site config and page config"""
template_vars = copy.deepcopy(self._template_vars)
page = {"content": content}
page = {"content": content, "toc": toc}
page.update(meta)
page.update({'relation': self.get_relation()})

Expand Down Expand Up @@ -239,10 +239,11 @@ def _parse_markup(self, markup_text):
self.md = markdown.Markdown(extensions=markdown_extensions)

html_content = self.md.convert(markup_text)
toc = self.md.toc
# reset markdown hashStash, otherwise consume memory and time
self.md.reset()

return html_content
return html_content, toc

def _set_markdown_extensions(self):
"""Set the extensions for markdown parser"""
Expand Down
11 changes: 6 additions & 5 deletions tests/test_generators.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def test_get_meta_and_content(self):
src_file = os.path.join(self.wiki_path, 'content', 'foo目录',
'foo_page_中文.md')
self.generator.src_file = src_file
meta, content = self.generator.get_meta_and_content()
meta, _, content = self.generator.get_meta_and_content()
expected_meta = {'date': '2013-10-17 00:03', 'layout': 'page',
'title': 'Foo Page 2', 'category': 'foo目录',
'filename': 'foo_page_中文.html'}
Expand All @@ -80,15 +80,16 @@ def test_get_template_vars(self):
src_file = os.path.join(self.wiki_path, 'content', 'foo目录',
'foo_page_中文.md')
self.generator.src_file = src_file
meta, content = self.generator.get_meta_and_content()
template_vars = self.generator.get_template_vars(meta, content)
meta, _, content = self.generator.get_meta_and_content()
template_vars = self.generator.get_template_vars(meta, '', content)
expected_template_vars = {
u'page': {
u'category': u'foo\u76ee\u5f55',
u'content': u'<p>[[simiki]]</p>\n'
'<p>Simiki is a simple wiki '
'framework, written in Python.</p>'
'\n<p>Line 1<br />\nLine 2</p>',
u'toc': '',
u'filename': u'foo_page_\u4e2d\u6587.html',
u'date': '2013-10-17 00:03',
u'layout': 'page',
Expand Down Expand Up @@ -132,15 +133,15 @@ def test_get_layout(self):
src_file = os.path.join(self.wiki_path, 'content', 'foo目录',
'foo_page_layout_old_post.md')
self.generator.src_file = src_file
meta, _ = self.generator.get_meta_and_content()
meta, _, _ = self.generator.get_meta_and_content()

layout = self.generator.get_layout(meta)
self.assertEqual(layout, 'page')

src_file = os.path.join(self.wiki_path, 'content', 'foo目录',
'foo_page_layout_without_layout.md')
self.generator.src_file = src_file
meta, _ = self.generator.get_meta_and_content()
meta, _, _ = self.generator.get_meta_and_content()

layout = self.generator.get_layout(meta)
self.assertEqual(layout, 'page')
Expand Down

0 comments on commit 085ba60

Please sign in to comment.