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 >>> 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 = NodeView(m11, TestRequest())
>>> view.menu()
{'url': 'http://127.0.0.1/loops/views/m1', >>> page = view.page()
'items': [{'url': 'http://127.0.0.1/loops/views/m1/m11', 'items': [], >>> items = page.textItems()
'selected': True, 'title': u'Zope'}], >>> for item in items:
'selected': False, 'title': u'Menu'} ... print item.url, item.editable
>>> view.content() http://127.0.0.1/loops/views/m1/m11/m112 False
{'url': 'http://127.0.0.1/loops/views/m1/m11', 'body': u'',
'items': [{'url': 'http://127.0.0.1/loops/views/m1/m11/m112', >>> menu = view.menu()
'body': u'', 'items': [], 'editable': False, 'title': u'Zope 3'}], >>> items = menu.menuItems()
'editable': False, 'title': u'Zope'} >>> for item in items:
... print item.url, view.selected(item)
http://127.0.0.1/loops/views/m1/m11 True
Ordering Nodes Ordering Nodes
-------------- --------------

View file

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

View file

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