Reorganized NodeView - use generator of view objects instead list of dictionaries

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1012 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2006-01-17 13:19:57 +00:00
parent 6d01b8a1f2
commit e3595e882a
3 changed files with 49 additions and 49 deletions

View file

@ -214,27 +214,20 @@ Node views
----------
>>> from loops.browser.node import NodeView
>>> view = NodeView(m1, TestRequest())
>>> view.menu()
{'url': 'http://127.0.0.1/loops/views/m1',
'items': [{'url': 'http://127.0.0.1/loops/views/m1/m11', 'items': [],
'selected': False, 'title': u'Zope'}],
'selected': True, 'title': u'Menu'}
>>> view.content()
{'url': 'http://127.0.0.1/loops/views/m1', 'body': u'', 'items': [],
'editable': False, 'title': u'Menu'}
>>> view = NodeView(m11, TestRequest())
>>> view.menu()
{'url': 'http://127.0.0.1/loops/views/m1',
'items': [{'url': 'http://127.0.0.1/loops/views/m1/m11', 'items': [],
'selected': True, 'title': u'Zope'}],
'selected': False, 'title': u'Menu'}
>>> view.content()
{'url': 'http://127.0.0.1/loops/views/m1/m11', 'body': u'',
'items': [{'url': 'http://127.0.0.1/loops/views/m1/m11/m112',
'body': u'', 'items': [], 'editable': False, 'title': u'Zope 3'}],
'editable': False, 'title': u'Zope'}
>>> page = view.page()
>>> items = page.textItems()
>>> for item in items:
... print item.url, item.editable
http://127.0.0.1/loops/views/m1/m11/m112 False
>>> menu = view.menu()
>>> items = menu.menuItems()
>>> for item in items:
... print item.url, view.selected(item)
http://127.0.0.1/loops/views/m1/m11 True
Ordering Nodes
--------------

View file

@ -13,7 +13,7 @@
<metal:body fill-slot="body">
<tal:content define="item view/content;
<tal:content define="item view/page;
level level|python: 1">
<metal:block define-macro="content">
@ -24,13 +24,14 @@
zmi=window.open('${item/url}/@@edit.html', 'zmi');;
zmi.focus();; return false;;"
tal:attributes="class string:content-$level;
onclick python: item['editable'] and onclick or ''"
onclick python: item.editable and onclick or ''"
tal:content="structure body">
The body
</div>
<div tal:content="item/context/title" />
</tal:body>
<tal:sub define="level python:level+1">
<tal:items repeat="item item/items">
<tal:items repeat="item item/textItems">
<metal:portlet use-macro="views/node_macros/content" />
</tal:items>
</tal:sub>
@ -50,14 +51,14 @@
<metal:menu define-macro="menu">
<div class="menu-3"
tal:attributes="class python: 'content '
+ (item['selected'] and 'even' or 'odd')
+ (view.selected(item) and 'even' or 'odd')
+ ' menu-%i' % level">
<a href="#" class=""
tal:content="item/title"
tal:content="item/context/title"
tal:attributes="href item/url">Menu Text</a>
</div>
<tal:sub tal:define="level python:level+1">
<tal:items repeat="item item/items">
<tal:items repeat="item item/menuItems">
<metal:portlet use-macro="views/node_macros/menu" />
</tal:items>
</tal:sub>

View file

@ -55,30 +55,36 @@ class NodeView(object):
d = dc.modified or dc.created
return d and d.strftime('%Y-%m-%d %H:%M') or ''
def content(self, item=None):
if item is None:
item = self.context.getPage()
if item is None:
item = self.context
result = {'title': item.title,
'url': zapi.absoluteURL(item, self.request),
'body': self.render(item.body),
'editable': canWrite(item, 'body'),
'items': [self.content(child)
for child in item.getTextItems()]}
return result
def page(self):
page = self.context.getPage()
return page is not None and NodeView(page, self.request) or None
def menu(self, item=None):
if item is None:
item = self.context.getMenu()
if item is None:
return None
result = {'title': item.title,
'url': zapi.absoluteURL(item, self.request),
'selected': item == self.context,
'items': [self.menu(child)
for child in item.getMenuItems()]}
return result
def textItems(self):
for child in self.context.getTextItems():
yield NodeView(child, self.request)
def menuItems(self):
for child in self.context.getMenuItems():
yield NodeView(child, self.request)
def menu(self):
menu = self.context.getMenu()
return menu is not None and NodeView(menu, self.request) or None
@Lazy
def body(self):
return self.render(self.context.body)
@Lazy
def url(self):
return zapi.absoluteURL(self.context, self.request)
@Lazy
def editable(self):
return canWrite(self.context, 'body')
def selected(self, item):
return item.context == self.context
class OrderedContainerView(JustContents):