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:
parent
6d01b8a1f2
commit
e3595e882a
3 changed files with 49 additions and 49 deletions
33
README.txt
33
README.txt
|
@ -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
|
||||||
--------------
|
--------------
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Add table
Reference in a new issue