]> oss.titaniummirror.com Git - webber.git/blobdiff - plugins/hierarchy.py
hierarchy.py: preliminary get_hierarchal_sitemap()
[webber.git] / plugins / hierarchy.py
index 1a33597cc4710b9759963c04391cc7e0b80d994c..5940ed4ff12c0fcd64fb9a7f619965688f68929e 100644 (file)
@@ -31,7 +31,7 @@ def memorize_parent(title, parent, order=100):
                _childs[parent] = []
        _childs[parent].append( (order, title) )
        _parent[title] = parent
-       
+
 
 #
 # The "scan" plugins should scan for meta-data, mostly for links.
@@ -43,6 +43,11 @@ def memorize_parent(title, parent, order=100):
 @set_hook("scan")
 def scan(params):
        file = params["file"]
+
+       # Ignore hidden pages
+       if file.has_key("hide") and file.hide:
+               return
+
        if file.has_key("links"):
                memorize_links(file.linktitle, file.links)
        if file.has_key("parent"):
@@ -122,15 +127,54 @@ def get_sidemenu(root="Home", level=1):
 
 
 
-@set_function("get_sitemap")
-def get_sitemap(root="Home", show_orphans=False, level=1):
+@set_function("get_hierarchical_sitemap")
+def get_hierarchical_sitemap(root="Home", show_orphans=False):
        page = get_current_file()
        if not isinstance(root, webber.File):
                root = get_file_for(root)
 
-       res = [(0, root, get_link_from(page, root))]
+       visited = {root: True}
+       def do_menu(pg):
+               res = []
+               if _childs.has_key(pg.linktitle):
+                       for p in _childs[pg.linktitle]:
+                               subpage = get_file_for(p[1])
+                               visited[subpage] = True
+                               res.append( do_menu(subpage) )
+               return (pg, get_link_from(root, pg), res)
+               
+       res = do_menu(root)
+
+
+       if show_orphans:
+               for f in files:
+                       #print f
+                       file = files[f]
+                       if not file.has_key("linktitle"):
+                               continue
+                       try:
+                               if file in visited:
+                                       #print "found", file.linktitle
+                                       continue
+                       except KeyError:
+                               continue
+                       #print "not found:", file.linktitle
+                       res.append( (file, get_link_from(page, file.linktitle), []) )
+
+       #import pprint
+       #pprint.pprint(res, indent=4)
+       return res
+
+
+@set_function("get_linear_sitemap")
+def get_linear_sitemap(root="Home", show_orphans=False, level=1):
+       page = get_current_file()
+       if not isinstance(root, webber.File):
+               root = get_file_for(root)
 
        visited = {root: None}
+       res = [(0, root, )]
+
        def do_menu(pg, level):
                #print "pg:", pg
                #, _childs.has_key(pg.linktitle)
@@ -161,7 +205,8 @@ def get_sitemap(root="Home", show_orphans=False, level=1):
                                continue
                        #print "not found:", file.linktitle
                        res.append( (0, file, get_link_from(page, file.linktitle)))
-       #for t in res: print t
+       import pprint
+       pprint.pprint(res)
        return res
 
 
@@ -179,9 +224,7 @@ def get_recently(page=None, max_items=10):
                res.append( (page, get_link_from(orig_page, page)) )
                if _childs.has_key(page.linktitle):
                        for c in _childs[page.linktitle]:
-                               if len(res) < max_items:
-                                       addPage(res, get_file_for(c[1]))
+                               addPage(res, get_file_for(c[1]))
        addPage(res, orig_page)
-       res.sort(cmp = lambda x,y: x[0].mtime < y[0].mtime)
-       #for p in res: print p
-       return res
+       res.sort(cmp = lambda x,y: cmp(y[0].mtime, x[0].mtime))
+       return res[:max_items]