Merge branch 'master' into bbmaster
This commit is contained in:
		
						commit
						a218d22b93
					
				
					 7 changed files with 44 additions and 6 deletions
				
			
		|  | @ -659,7 +659,9 @@ Breadcrumbs | ||||||
|   >>> loopsRoot.options = ['showBreadcrumbs'] |   >>> loopsRoot.options = ['showBreadcrumbs'] | ||||||
|   >>> m114.nodeType = 'page' |   >>> m114.nodeType = 'page' | ||||||
|   >>> m114.target = cc1 |   >>> m114.target = cc1 | ||||||
|   >>> view = NodeView(m114, TestRequest()) |   >>> request = TestRequest() | ||||||
|  |   >>> view = NodeView(m114, request) | ||||||
|  |   >>> request.annotations.setdefault('loops.view', {})['nodeView'] = view | ||||||
|   >>> view.breadcrumbs() |   >>> view.breadcrumbs() | ||||||
|   [{'url': 'http://127.0.0.1/loops/views/m1', 'label': u'Menu'}, |   [{'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'}, |    {'url': 'http://127.0.0.1/loops/views/m1/m11', 'label': u'Zope'}, | ||||||
|  |  | ||||||
|  | @ -416,8 +416,8 @@ class BaseView(GenericView, I18NView): | ||||||
|             if contentType == u'text/html': |             if contentType == u'text/html': | ||||||
|                 return text |                 return text | ||||||
|             return u'<pre>%s</pre>' % util.html_quote(text) |             return u'<pre>%s</pre>' % util.html_quote(text) | ||||||
|         source = component.createObject(typeKey, text) |         source = removeAllProxies(component.createObject(typeKey, text)) | ||||||
|         view = component.getMultiAdapter((removeAllProxies(source), self.request)) |         view = component.getMultiAdapter((source, self.request)) | ||||||
|         return view.render() |         return view.render() | ||||||
| 
 | 
 | ||||||
|     def renderDescription(self, text=None): |     def renderDescription(self, text=None): | ||||||
|  |  | ||||||
|  | @ -234,6 +234,19 @@ class ConceptView(BaseView): | ||||||
|     def description(self): |     def description(self): | ||||||
|         return self.adapted.description |         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')): |     def getData(self, omit=('title', 'description')): | ||||||
|         data = self.instance.applyTemplate(context=self.context, request=self.request) |         data = self.instance.applyTemplate(context=self.context, request=self.request) | ||||||
|         for k in omit: |         for k in omit: | ||||||
|  |  | ||||||
|  | @ -176,6 +176,10 @@ table.records th, table.records td { | ||||||
|     border: 1px solid black; |     border: 1px solid black; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | table.report td { | ||||||
|  |     vertical-align: top; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| dl.docutils dt { | dl.docutils dt { | ||||||
|     font-weight: bold; |     font-weight: bold; | ||||||
|     margin-top: 0.3em; |     margin-top: 0.3em; | ||||||
|  |  | ||||||
|  | @ -15,7 +15,8 @@ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <div metal:define-macro="results"> | <div metal:define-macro="results"> | ||||||
|   <table tal:define="results view/results"> |   <table class="report" | ||||||
|  |          tal:define="results view/results"> | ||||||
|     <tr> |     <tr> | ||||||
|         <th tal:repeat="col view/displayedColumns" |         <th tal:repeat="col view/displayedColumns" | ||||||
|             tal:content="col/title" |             tal:content="col/title" | ||||||
|  |  | ||||||
|  | @ -21,16 +21,27 @@ Field definitions for reports. | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| from cybertools.composer.report.field import Field | from cybertools.composer.report.field import Field | ||||||
|  | from loops.common import baseObject | ||||||
| from loops import util | 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): | class UrlField(Field): | ||||||
| 
 | 
 | ||||||
|     renderer = 'target' |     renderer = 'target' | ||||||
| 
 | 
 | ||||||
|     def getDisplayValue(self, row): |     def getDisplayValue(self, row): | ||||||
|         nv = row.parent.context.view.nodeView |         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): | class TargetField(Field): | ||||||
|  |  | ||||||
|  | @ -14,6 +14,8 @@ from zope.app.catalog.text import TextIndex | ||||||
| from zope.app.container.interfaces import IObjectRemovedEvent | from zope.app.container.interfaces import IObjectRemovedEvent | ||||||
| from zope.app.principalannotation import PrincipalAnnotationUtility | from zope.app.principalannotation import PrincipalAnnotationUtility | ||||||
| from zope.app.principalannotation.interfaces import IPrincipalAnnotationUtility | 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.principalregistry import principalRegistry | ||||||
| from zope.app.security.interfaces import IAuthentication | from zope.app.security.interfaces import IAuthentication | ||||||
| from zope.app.session.interfaces import IClientIdManager, ISessionDataContainer | from zope.app.session.interfaces import IClientIdManager, ISessionDataContainer | ||||||
|  | @ -122,8 +124,13 @@ class TestSite(object): | ||||||
|         component.provideUtility(principalRegistry, IAuthentication) |         component.provideUtility(principalRegistry, IAuthentication) | ||||||
|         component.provideAdapter(session.ClientId) |         component.provideAdapter(session.ClientId) | ||||||
|         component.provideAdapter(session.Session) |         component.provideAdapter(session.Session) | ||||||
|         component.provideUtility(session.RAMSessionDataContainer(), ISessionDataContainer) |         component.provideUtility(session.RAMSessionDataContainer(), | ||||||
|  |                                  ISessionDataContainer) | ||||||
|         component.provideUtility(ClientIdManager()) |         component.provideUtility(ClientIdManager()) | ||||||
|  |         component.provideUtility(ReStructuredTextSourceFactory, | ||||||
|  |                                  name='zope.source.rest') | ||||||
|  |         component.provideAdapter(ReStructuredTextToHTMLRenderer, | ||||||
|  |                                  (IReStructuredTextSource, IBrowserRequest), Interface) | ||||||
| 
 | 
 | ||||||
|         component.provideAdapter(LoopsType) |         component.provideAdapter(LoopsType) | ||||||
|         component.provideAdapter(ConceptType) |         component.provideAdapter(ConceptType) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue