diff options
Diffstat (limited to 'nikola/plugins/task/authors.py')
| -rw-r--r-- | nikola/plugins/task/authors.py | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/nikola/plugins/task/authors.py b/nikola/plugins/task/authors.py index 081d21d..ec61800 100644 --- a/nikola/plugins/task/authors.py +++ b/nikola/plugins/task/authors.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright © 2015 Juanjo Conti. +# Copyright © 2015-2016 Juanjo Conti and others. # Permission is hereby granted, free of charge, to any # person obtaining a copy of this software and associated @@ -35,6 +35,8 @@ except ImportError: from urllib.parse import urljoin # NOQA from collections import defaultdict +from blinker import signal + from nikola.plugin_categories import Task from nikola import utils @@ -47,13 +49,20 @@ class RenderAuthors(Task): def set_site(self, site): """Set Nikola site.""" + self.generate_author_pages = False if site.config["ENABLE_AUTHOR_PAGES"]: site.register_path_handler('author_index', self.author_index_path) site.register_path_handler('author', self.author_path) site.register_path_handler('author_atom', self.author_atom_path) site.register_path_handler('author_rss', self.author_rss_path) + signal('scanned').connect(self.posts_scanned) return super(RenderAuthors, self).set_site(site) + def posts_scanned(self, event): + """Called after posts are scanned via signal.""" + self.generate_author_pages = self.site.config["ENABLE_AUTHOR_PAGES"] and len(self._posts_per_author()) > 1 + self.site.GLOBAL_CONTEXT["author_pages_generated"] = self.generate_author_pages + def gen_tasks(self): """Render the author pages and feeds.""" kw = { @@ -78,12 +87,10 @@ class RenderAuthors(Task): "index_file": self.site.config['INDEX_FILE'], } - yield self.group_task() self.site.scan_posts() + yield self.group_task() - generate_author_pages = self.site.config["ENABLE_AUTHOR_PAGES"] and len(self._posts_per_author()) > 1 - self.site.GLOBAL_CONTEXT["author_pages_generated"] = generate_author_pages - if generate_author_pages: + if self.generate_author_pages: yield self.list_authors_page(kw) if not self._posts_per_author(): # this may be self.site.posts_per_author @@ -244,10 +251,13 @@ class RenderAuthors(Task): } return utils.apply_filters(task, kw['filters']) - def slugify_author_name(self, name): + def slugify_author_name(self, name, lang=None): """Slugify an author name.""" + if lang is None: # TODO: remove in v8 + utils.LOGGER.warn("RenderAuthors.slugify_author_name() called without language!") + lang = '' if self.site.config['SLUG_AUTHOR_PATH']: - name = utils.slugify(name) + name = utils.slugify(name, lang) return name def author_index_path(self, name, lang): @@ -272,13 +282,13 @@ class RenderAuthors(Task): return [_f for _f in [ self.site.config['TRANSLATIONS'][lang], self.site.config['AUTHOR_PATH'], - self.slugify_author_name(name), + self.slugify_author_name(name, lang), self.site.config['INDEX_FILE']] if _f] else: return [_f for _f in [ self.site.config['TRANSLATIONS'][lang], self.site.config['AUTHOR_PATH'], - self.slugify_author_name(name) + ".html"] if _f] + self.slugify_author_name(name, lang) + ".html"] if _f] def author_atom_path(self, name, lang): """Link to an author's Atom feed. @@ -288,7 +298,7 @@ class RenderAuthors(Task): link://author_atom/joe => /authors/joe.atom """ return [_f for _f in [self.site.config['TRANSLATIONS'][lang], - self.site.config['AUTHOR_PATH'], self.slugify_author_name(name) + ".atom"] if + self.site.config['AUTHOR_PATH'], self.slugify_author_name(name, lang) + ".atom"] if _f] def author_rss_path(self, name, lang): @@ -299,7 +309,7 @@ class RenderAuthors(Task): link://author_rss/joe => /authors/joe.rss """ return [_f for _f in [self.site.config['TRANSLATIONS'][lang], - self.site.config['AUTHOR_PATH'], self.slugify_author_name(name) + ".xml"] if + self.site.config['AUTHOR_PATH'], self.slugify_author_name(name, lang) + ".xml"] if _f] def _add_extension(self, path, extension): |
