from flask_flatpages import FlatPages, pygments_style_defs import flask_flatpages from flask import url_for import re from utils import path_depth,pjoin2,pjoin,list_dir, page_to_link, file_to_link from functools import partial from collections import namedtuple FileLists=namedtuple("FileLists", ["list_files", "list_images", "sub_pages", "sub_index_pages", "breadcrumbs"]) # List all non *.md files within the directory list_dir_md=partial(list_dir, not_ext=["md","~"]) # List all jpg images within the directory list_dir_img=partial(list_dir, ext=["jpg", "jpeg","JPG"]) class FlatPagesIndex(FlatPages): FLATPAGES_ROOT="." @staticmethod def get_breadcrumb_paths(path): """ breadcrumbs decompose the path a/b/index -> [a/index a/b/index] """ elements = path.split('/') print "i: %s" % elements elements2 = ['index'] if len(elements)>2: for i in range(1,len(elements)): print "i: %s" % elements[0:i] elements2.append(pjoin2(elements[0:i])+u'/index') return elements2 def breadcrumbs(self, page): "Parse a path or the path of a page into breadcrumbs" if type(page) is flask_flatpages.Page: return self.get_pages( FlatPagesIndex.get_breadcrumb_paths(page.path)) else: return self.get_pages(FlatPagesIndex.get_breadcrumb_paths(page)) @staticmethod def get_paths(pages): return (p.path for p in pages) def get_pages(self, paths): if paths is None: raise AttributeError("paths for get_pages can't be None") return (self.get(p) for p in paths) def get_sub_pages(self, path): def is_subpage(path, root): return (path.startswith(root) and # is a subpage ( re.match('.*index',path) is None) and # is no index path_depth(path)