Merge branch 'master' into bbmaster

This commit is contained in:
Helmut Merz 2011-12-04 11:24:43 +01:00
commit a218d22b93
7 changed files with 44 additions and 6 deletions

View file

@ -659,7 +659,9 @@ Breadcrumbs
>>> loopsRoot.options = ['showBreadcrumbs']
>>> m114.nodeType = 'page'
>>> m114.target = cc1
>>> view = NodeView(m114, TestRequest())
>>> request = TestRequest()
>>> view = NodeView(m114, request)
>>> request.annotations.setdefault('loops.view', {})['nodeView'] = view
>>> view.breadcrumbs()
[{'url': 'http://127.0.0.1/loops/views/m1', 'label': u'Menu'},
{'url': 'http://127.0.0.1/loops/views/m1/m11', 'label': u'Zope'},

View file

@ -416,8 +416,8 @@ class BaseView(GenericView, I18NView):
if contentType == u'text/html':
return text
return u'<pre>%s</pre>' % util.html_quote(text)
source = component.createObject(typeKey, text)
view = component.getMultiAdapter((removeAllProxies(source), self.request))
source = removeAllProxies(component.createObject(typeKey, text))
view = component.getMultiAdapter((source, self.request))
return view.render()
def renderDescription(self, text=None):

View file

@ -234,6 +234,19 @@ class ConceptView(BaseView):
def description(self):
return self.adapted.description
def breadcrumbs(self):
data = []
if self.breadcrumbsParent is not None:
data.extend(self.breadcrumbsParent.breadcrumbs())
if self.context != self.nodeView.targetObject:
data.append(dict(label=self.title,
url=self.nodeView.getUrlForTarget(self.context)))
return data
@Lazy
def breadcrumbsParent(self):
return None
def getData(self, omit=('title', 'description')):
data = self.instance.applyTemplate(context=self.context, request=self.request)
for k in omit:

View file

@ -176,6 +176,10 @@ table.records th, table.records td {
border: 1px solid black;
}
table.report td {
vertical-align: top;
}
dl.docutils dt {
font-weight: bold;
margin-top: 0.3em;

View file

@ -15,7 +15,8 @@
<div metal:define-macro="results">
<table tal:define="results view/results">
<table class="report"
tal:define="results view/results">
<tr>
<th tal:repeat="col view/displayedColumns"
tal:content="col/title"

View file

@ -21,16 +21,27 @@ Field definitions for reports.
"""
from cybertools.composer.report.field import Field
from loops.common import baseObject
from loops import util
class TextField(Field):
format = 'text/restructured'
def getDisplayValue(self, row):
value = self.getValue(row)
return row.parent.context.view.renderText(value, self.format)
class UrlField(Field):
renderer = 'target'
def getDisplayValue(self, row):
nv = row.parent.context.view.nodeView
return dict(title=self.getValue(row), url=nv.getUrlForTarget(row.context))
return dict(title=self.getValue(row),
url=nv.getUrlForTarget(baseObject(row.context)))
class TargetField(Field):

View file

@ -14,6 +14,8 @@ from zope.app.catalog.text import TextIndex
from zope.app.container.interfaces import IObjectRemovedEvent
from zope.app.principalannotation import PrincipalAnnotationUtility
from zope.app.principalannotation.interfaces import IPrincipalAnnotationUtility
from zope.app.renderer.rest import IReStructuredTextSource,\
ReStructuredTextToHTMLRenderer, ReStructuredTextSourceFactory
from zope.app.security.principalregistry import principalRegistry
from zope.app.security.interfaces import IAuthentication
from zope.app.session.interfaces import IClientIdManager, ISessionDataContainer
@ -122,8 +124,13 @@ class TestSite(object):
component.provideUtility(principalRegistry, IAuthentication)
component.provideAdapter(session.ClientId)
component.provideAdapter(session.Session)
component.provideUtility(session.RAMSessionDataContainer(), ISessionDataContainer)
component.provideUtility(session.RAMSessionDataContainer(),
ISessionDataContainer)
component.provideUtility(ClientIdManager())
component.provideUtility(ReStructuredTextSourceFactory,
name='zope.source.rest')
component.provideAdapter(ReStructuredTextToHTMLRenderer,
(IReStructuredTextSource, IBrowserRequest), Interface)
component.provideAdapter(LoopsType)
component.provideAdapter(ConceptType)