Menu generator works

This commit is contained in:
Sebastian 2015-04-06 22:59:09 +02:00
parent 7a3b84a6aa
commit 72b8b4ff75
4 changed files with 81 additions and 1 deletions

View File

@ -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>

View File

@ -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"

View File

@ -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

View File

@ -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"