work in progress: breadcrumbs
This commit is contained in:
parent
a42fd38642
commit
a2bc7f570d
2 changed files with 29 additions and 10 deletions
|
@ -18,14 +18,11 @@
|
|||
|
||||
"""
|
||||
View class for Node objects.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
||||
from urlparse import urlparse, urlunparse
|
||||
from zope import component, interface, schema
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.app import zapi
|
||||
from zope.annotation.interfaces import IAnnotations
|
||||
from zope.app.catalog.interfaces import ICatalog
|
||||
from zope.app.container.browser.contents import JustContents
|
||||
|
@ -39,8 +36,11 @@ from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
|
|||
from zope.lifecycleevent import Attributes
|
||||
from zope.formlib.form import Form, FormFields
|
||||
from zope.proxy import removeAllProxies
|
||||
from zope.publisher.defaultview import getDefaultViewName
|
||||
from zope.security import canAccess, canWrite, checkPermission
|
||||
from zope.security.proxy import removeSecurityProxy
|
||||
from zope.traversing.api import getParent, getParents, getPath
|
||||
from zope.traversing.browser import absoluteURL
|
||||
|
||||
from cybertools.ajax import innerHtml
|
||||
from cybertools.browser import configurator
|
||||
|
@ -91,6 +91,17 @@ class NodeView(BaseView):
|
|||
self.recordAccess()
|
||||
return result
|
||||
|
||||
def breadcrumbs(self):
|
||||
if not self.globalOptions('showBreadcrumbs'):
|
||||
return []
|
||||
menu = self.menu
|
||||
data = [dict(label=menu.title, url=menu.url)]
|
||||
menuItem = self.nearestMenuItem
|
||||
if menuItem != menu.context:
|
||||
data.append(dict(label=menuItem.title,
|
||||
url=absoluteURL(menuItem, self.request)))
|
||||
return data
|
||||
|
||||
def recordAccess(self, viewName=''):
|
||||
target = self.virtualTargetObject
|
||||
targetUid = target is not None and util.getUidForObject(target) or ''
|
||||
|
@ -243,7 +254,7 @@ class NodeView(BaseView):
|
|||
return u''
|
||||
if text.startswith('<'): # seems to be HTML
|
||||
return text
|
||||
source = zapi.createObject(self.context.contentType, text)
|
||||
source = component.createObject(self.context.contentType, text)
|
||||
view = component.getMultiAdapter((removeAllProxies(source), self.request))
|
||||
return view.render()
|
||||
|
||||
|
@ -316,7 +327,7 @@ class NodeView(BaseView):
|
|||
menu = self.menuObject
|
||||
parentMenu = None
|
||||
while menu is not None:
|
||||
parent = zapi.getParent(menu)
|
||||
parent = getParent(menu)
|
||||
if INode.providedBy(parent):
|
||||
parentMenu = parent.getMenu()
|
||||
if parentMenu is None or parentMenu is menu:
|
||||
|
@ -348,7 +359,7 @@ class NodeView(BaseView):
|
|||
|
||||
@Lazy
|
||||
def parents(self):
|
||||
return zapi.getParents(self.context)
|
||||
return getParents(self.context)
|
||||
|
||||
@Lazy
|
||||
def nearestMenuItem(self):
|
||||
|
@ -413,7 +424,7 @@ class NodeView(BaseView):
|
|||
target = self.virtualTargetObject
|
||||
if target is not None:
|
||||
# zope.app.publisher.browser
|
||||
name = zapi.getDefaultViewName(target, self.request)
|
||||
name = getDefaultViewName(target, self.request)
|
||||
return self.targetView(name)
|
||||
return u''
|
||||
|
||||
|
@ -732,8 +743,8 @@ class ConfigureView(NodeView):
|
|||
container = type.defaultContainer
|
||||
name = form.get('create.name', '')
|
||||
if not name:
|
||||
viewManagerPath = zapi.getPath(root.getViewManager())
|
||||
name = zapi.getPath(self.context)[len(viewManagerPath)+1:]
|
||||
viewManagerPath = getPath(root.getViewManager())
|
||||
name = getPath(self.context)[len(viewManagerPath)+1:]
|
||||
name = name.replace('/', '.')
|
||||
# check for duplicates:
|
||||
num = 1
|
||||
|
@ -850,7 +861,7 @@ class NodeViewConfigurator(configurator.AnnotationViewConfigurator):
|
|||
@property
|
||||
def viewProperties(self):
|
||||
result = []
|
||||
for p in list(reversed(zapi.getParents(self.context))) + [self.context]:
|
||||
for p in list(reversed(getParents(self.context))) + [self.context]:
|
||||
if not INode.providedBy(p) or p.nodeType != 'menu':
|
||||
continue
|
||||
ann = IAnnotations(p)
|
||||
|
|
|
@ -26,6 +26,14 @@
|
|||
|
||||
<div id="content" class="span-6"
|
||||
metal:define-macro="content">
|
||||
<metal:breadcrumbs define-slot="breadcrumbs">
|
||||
<div tal:define="crumbs view/breadcrumbs"
|
||||
tal:condition="crumbs">
|
||||
<span tal:repeat="crumb crumbs">
|
||||
<a tal:attributes="href crumb/url"
|
||||
tal:content="crumb/label" />
|
||||
<span tal:condition="not:repeat/crumb/end"> / </span></span>
|
||||
</div></metal:breadcrumbs>
|
||||
<div metal:define-slot="actions"></div>
|
||||
<div metal:define-slot="message"></div>
|
||||
<metal:content define-slot="content">
|
||||
|
|
Loading…
Add table
Reference in a new issue