def make_page_breadcrumb(page: Post, site_structure: PageDir): breadcrumb = page.meta[page.default_lang].get("breadcrumb") # TODO should this compare to "False"? (a string?) if breadcrumb is None or breadcrumb != "False": return generate_breadcrumb(page.permalink(), site_structure) else: return None
def generate_index(self, site: Nikola, post: Post, data: str = None, lang: str = None, depth: int = 1) -> Tuple[str, List[str]]: """ Generate a hierarchical list of pages when shortcode is invoked. Ouput: a HTML string (nested <ul> elements containing <a> elements) and a list of file dependencies. Depth determines how far the index recurses. Set depth to 0 to recurse as much as possible. """ if not post.metadata.is_index_page: raise RuntimeError( f'Attempt to generate index on "{post.permalink()}" which is not an index page!' ) # index pages can list contents of arbitrary directory # find first which directory the page refers to index_root: PageDir = site.GLOBAL_CONTEXT["metadata"].structure() index_path: str = post.meta[post.default_lang]["index_path"] if index_path == ".": for directory_name in split_path(post.permalink()): index_root = index_root.enter(directory_name) elif index_path != "/": for directory_name in split_path(index_path): index_root = index_root.enter(directory_name) self.logger.info( f"generating index structure for {post.permalink()} that starts in {index_path}" ) html_result: str = generate_hierarchical_html(index_root, depth) # We need to regenerate indexes every time a page is added or removed. # We can not return wildcard paths or generally - paths which do not exist # but there is a hidden (undocumented) feature that does exactly this. # https://github.com/getnikola/nikola/issues/3293#issuecomment-523210046 file_dependencies = ["####MAGIC####TIMELINE"] return html_result, file_dependencies
def _is_subpage(self, subpage: Post, page: Post): # permalink of subpage starts with page's permalink return subpage.permalink().startswith(page.permalink())