From e3595e882a3ec8a1cb6421c2dae7a2e0911542bd Mon Sep 17 00:00:00 2001 From: helmutm Date: Tue, 17 Jan 2006 13:19:57 +0000 Subject: [PATCH] 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 --- README.txt | 33 +++++++++++++------------------ browser/node.pt | 13 +++++++------ browser/node.py | 52 +++++++++++++++++++++++++++---------------------- 3 files changed, 49 insertions(+), 49 deletions(-) diff --git a/README.txt b/README.txt index 57633a2..f1d78a8 100755 --- a/README.txt +++ b/README.txt @@ -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 -------------- diff --git a/browser/node.pt b/browser/node.pt index 746f7c2..e4b6506 100644 --- a/browser/node.pt +++ b/browser/node.pt @@ -13,7 +13,7 @@ - @@ -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 +
- + @@ -50,14 +51,14 @@ - + diff --git a/browser/node.py b/browser/node.py index a2423d7..392089b 100644 --- a/browser/node.py +++ b/browser/node.py @@ -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):