Menu generator works
This commit is contained in:
parent
7a3b84a6aa
commit
72b8b4ff75
|
@ -3,6 +3,8 @@
|
|||
<title>{{page_title}}</title>
|
||||
</head>
|
||||
<body>
|
||||
{{menu}}
|
||||
<br/>
|
||||
{{content}}
|
||||
<br/>
|
||||
Created: {{content_creation_time.strftime('%d.%m.%Y %H:%M:%S')}}</br>
|
||||
|
|
|
@ -8,13 +8,22 @@ from verdandi.modules.page import Page
|
|||
|
||||
class TestPage1(Page):
|
||||
title = "A cool new Page"
|
||||
menu_title = "New Page"
|
||||
menu_label = "new_cool_page"
|
||||
|
||||
|
||||
class TestPage2(Page):
|
||||
title = "An other cool Page"
|
||||
url = "page2.html"
|
||||
menu_title = "Other new Page"
|
||||
menu_label = "cool_page1"
|
||||
|
||||
|
||||
class TestPage3(Page):
|
||||
title = "Yet an other cool Page"
|
||||
menu_title = "Other new Page2"
|
||||
menu_label = "cool_page2"
|
||||
menu_parent = "cool_page1"
|
||||
url = "subdir/page3.html"
|
||||
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@ class MenuItemMixin(object):
|
|||
menu_label = None
|
||||
menu_parent = None
|
||||
url = "index.html"
|
||||
|
||||
menu_items = None
|
||||
|
||||
def process_message(self, message):
|
||||
if message == None:
|
||||
|
@ -14,5 +16,72 @@ class MenuItemMixin(object):
|
|||
'parent' : self.menu_parent,
|
||||
'label' : self.menu_label,
|
||||
'url' : self.url}]
|
||||
elif message['type'] == 'menu_add_item':
|
||||
|
||||
if self.menu_items == None:
|
||||
self.menu_items = {}
|
||||
|
||||
label = message['label']
|
||||
if label in self.menu_items.keys():
|
||||
print '[Warn] Depulicate menu item label: %s in %s' % (label, self.menu_label)
|
||||
return []
|
||||
|
||||
self.menu_items[label] = {}
|
||||
|
||||
for key in ['title', 'parent', 'label', 'url']:
|
||||
self.menu_items[label][key] = message[key]
|
||||
|
||||
return []
|
||||
|
||||
|
||||
def get_menu_path(self):
|
||||
path = [self.menu_label]
|
||||
while self.menu_items[path[0]]['parent'] != None:
|
||||
path = [self.menu_items[path[0]]['parent']] + path
|
||||
|
||||
return path
|
||||
|
||||
|
||||
def get_menu_level(self, parent):
|
||||
return filter(lambda x: x['parent'] == parent, self.menu_items.values())
|
||||
|
||||
|
||||
def generate_levels(self, path):
|
||||
level = path[0]
|
||||
next_level = None
|
||||
if len(path) > 1:
|
||||
next_level = path[1]
|
||||
|
||||
res = '<ul>'
|
||||
|
||||
sorted_level = sorted(self.get_menu_level(level), key=lambda x: x['label'])
|
||||
for item in sorted_level:
|
||||
if item['label'] == self.menu_label:
|
||||
res += '<li><b>%s</b><br>' % item['title']
|
||||
res += self.generate_levels(path[1:])
|
||||
res += '</li>'
|
||||
elif item['label'] == next_level:
|
||||
res += '<li><i><a href="/%s">%s</a></i><br/>' % (item['url'], item['title'])
|
||||
res += self.generate_levels(path[1:])
|
||||
res += '</li>'
|
||||
else:
|
||||
res += '<li><a href="/%s">%s</a></li>' % (item['url'], item['title'])
|
||||
|
||||
res += '</ul>'
|
||||
|
||||
return res
|
||||
|
||||
def generate_menu(self):
|
||||
|
||||
path = self.get_menu_path()
|
||||
|
||||
return self.generate_levels([None] + path)
|
||||
|
||||
|
||||
def get_context(self):
|
||||
context = super(MenuItemMixin, self).get_context()
|
||||
|
||||
context['menu'] = self.generate_menu()
|
||||
|
||||
return context
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ from verdandi.mixins.templatemixin import TemplateMixin
|
|||
from verdandi.mixins.menuitemmixin import MenuItemMixin
|
||||
from verdandi.constants import CONTENT_DIRECTORY
|
||||
|
||||
class Page(TemplateMixin, MenuItemMixin):
|
||||
class Page(MenuItemMixin, TemplateMixin):
|
||||
|
||||
title = "Page Title"
|
||||
content_file = "content.md"
|
||||
|
|
Loading…
Reference in New Issue