register and display portlets; 'related items' portlet
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1341 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									a772e71f84
								
							
						
					
					
						commit
						aa4e337581
					
				
					 6 changed files with 69 additions and 11 deletions
				
			
		|  | @ -31,7 +31,7 @@ from zope.app.container.browser.contents import JustContents | ||||||
| from zope.app.container.browser.adding import ContentAdding | from zope.app.container.browser.adding import ContentAdding | ||||||
| from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent | from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent | ||||||
| from zope.app.pagetemplate import ViewPageTemplateFile | from zope.app.pagetemplate import ViewPageTemplateFile | ||||||
| #from zope.app.intid.interfaces import IIntIds | from zope.app.security.interfaces import IUnauthenticatedPrincipal | ||||||
| from zope.dottedname.resolve import resolve | from zope.dottedname.resolve import resolve | ||||||
| from zope.event import notify | from zope.event import notify | ||||||
| from zope.formlib.namedtemplate import NamedTemplate | from zope.formlib.namedtemplate import NamedTemplate | ||||||
|  | @ -69,6 +69,13 @@ class NodeView(BaseView): | ||||||
|         cm.register('css', identifier='loops.css', |         cm.register('css', identifier='loops.css', | ||||||
|                     resourceName='loops.css', media='all') |                     resourceName='loops.css', media='all') | ||||||
|         cm.register('js', 'loops.js', resourceName='loops.js') |         cm.register('js', 'loops.js', resourceName='loops.js') | ||||||
|  |         cm.register('portlet_left', 'navigation', title='Navigation', | ||||||
|  |                      subMacro=self.template.macros['menu']) | ||||||
|  |         if not IUnauthenticatedPrincipal.providedBy(self.request.principal): | ||||||
|  |             cm.register('portlet_right', 'actions', title='Actions', | ||||||
|  |                          subMacro=self.template.macros['actions']) | ||||||
|  |             cm.register('portlet_right', 'personal', title='Personal Items', | ||||||
|  |                          subMacro=self.template.macros['personal']) | ||||||
| 
 | 
 | ||||||
|     @Lazy |     @Lazy | ||||||
|     def view(self): |     def view(self): | ||||||
|  |  | ||||||
|  | @ -146,7 +146,11 @@ | ||||||
| 
 | 
 | ||||||
| <!-- menu --> | <!-- menu --> | ||||||
| 
 | 
 | ||||||
| <metal:menu define-macro="menu"> | <metal:menu define-macro="menu" | ||||||
|  |             tal:define="item nocall:view/menu | nothing; | ||||||
|  |                         level level|python: 1" | ||||||
|  |             tal:condition="nocall:item"> | ||||||
|  |     <metal:sub define-macro="submenu"> | ||||||
|           <div class="menu-3" |           <div class="menu-3" | ||||||
|                tal:attributes="class python: 'content ' |                tal:attributes="class python: 'content ' | ||||||
|                     + (view.selected(item) and 'even' or 'odd') |                     + (view.selected(item) and 'even' or 'odd') | ||||||
|  | @ -158,12 +162,25 @@ | ||||||
|           <tal:sub define="level python:level+1" |           <tal:sub define="level python:level+1" | ||||||
|                    condition="python: level < 4 or view.active(item)"> |                    condition="python: level < 4 or view.active(item)"> | ||||||
|             <tal:items repeat="item item/menuItems"> |             <tal:items repeat="item item/menuItems"> | ||||||
|               <metal:portlet use-macro="views/node_macros/menu" /> |               <metal:portlet use-macro="views/node_macros/submenu" /> | ||||||
|             </tal:items> |             </tal:items> | ||||||
|           </tal:sub> |           </tal:sub> | ||||||
|  |     </metal:sub> | ||||||
| </metal:menu> | </metal:menu> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | <!-- portlets --> | ||||||
|  | 
 | ||||||
|  | <metal:actions define-macro="actions"> | ||||||
|  |           <div class="menu-2">Add Resource</div> | ||||||
|  | </metal:actions> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <metal:actions define-macro="personal"> | ||||||
|  |           <div class="menu-2">Clipboard</div> | ||||||
|  | </metal:actions> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| <!-- inner HTML macros --> | <!-- inner HTML macros --> | ||||||
| 
 | 
 | ||||||
| <div metal:define-macro="inline_edit" | <div metal:define-macro="inline_edit" | ||||||
|  |  | ||||||
|  | @ -27,6 +27,7 @@ from zope.app import zapi | ||||||
| from zope.app.catalog.interfaces import ICatalog | from zope.app.catalog.interfaces import ICatalog | ||||||
| from zope.app.dublincore.interfaces import ICMFDublinCore | from zope.app.dublincore.interfaces import ICMFDublinCore | ||||||
| from zope.app.pagetemplate import ViewPageTemplateFile | from zope.app.pagetemplate import ViewPageTemplateFile | ||||||
|  | from zope.app.security.interfaces import IUnauthenticatedPrincipal | ||||||
| from zope.formlib.form import FormFields | from zope.formlib.form import FormFields | ||||||
| from zope.formlib.interfaces import DISPLAY_UNWRITEABLE | from zope.formlib.interfaces import DISPLAY_UNWRITEABLE | ||||||
| from zope.proxy import removeAllProxies | from zope.proxy import removeAllProxies | ||||||
|  | @ -84,6 +85,14 @@ class ResourceView(BaseView): | ||||||
|         else: |         else: | ||||||
|             return self.template.macros['download'] |             return self.template.macros['download'] | ||||||
| 
 | 
 | ||||||
|  |     def __init__(self, context, request): | ||||||
|  |         super(ResourceView, self).__init__(context, request) | ||||||
|  |         if not IUnauthenticatedPrincipal.providedBy(self.request.principal): | ||||||
|  |             cm = self.controller.macros | ||||||
|  |             cm.register('portlet_right', 'related', title='Related Items', | ||||||
|  |                          subMacro=self.template.macros['related'], | ||||||
|  |                          position=0, info=self) | ||||||
|  | 
 | ||||||
|     def show(self): |     def show(self): | ||||||
|         data = self.context.data |         data = self.context.data | ||||||
|         response = self.request.response |         response = self.request.response | ||||||
|  |  | ||||||
|  | @ -54,3 +54,15 @@ | ||||||
| </form> | </form> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | <metal:actions define-macro="related"> | ||||||
|  |           <div class="menu-2" | ||||||
|  |                tal:repeat="concept macro/info/concepts"> | ||||||
|  |             <a href="#" | ||||||
|  |                tal:content="concept/title" | ||||||
|  |                tal:attributes="href string:${view/url}/.target${concept/uniqueId}"> | ||||||
|  |               Concept | ||||||
|  |             </a> | ||||||
|  |           </div> | ||||||
|  | </metal:actions> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -84,7 +84,7 @@ class Search(BaseView): | ||||||
|         """ |         """ | ||||||
|         request = self.request |         request = self.request | ||||||
|         request.response.setHeader('Content-Type', 'text/plain; charset=UTF-8') |         request.response.setHeader('Content-Type', 'text/plain; charset=UTF-8') | ||||||
|         text = request.get('searchString', '') |         text = request.get('searchString', '').replace('(', ' ').replace(')', ' ') | ||||||
|         type = request.get('searchType') or 'loops:concept:*' |         type = request.get('searchType') or 'loops:concept:*' | ||||||
|         if type.endswith('*'): |         if type.endswith('*'): | ||||||
|             start = type[:-1] |             start = type[:-1] | ||||||
|  | @ -165,7 +165,7 @@ class SearchResults(BaseView): | ||||||
|         cat = self.catalog |         cat = self.catalog | ||||||
|         request = self.request |         request = self.request | ||||||
|         type = request.get('search.3.type', 'loops:concept:*') |         type = request.get('search.3.type', 'loops:concept:*') | ||||||
|         text = request.get('search.3.text') |         text = request.get('search.3.text').replace('(', ' ').replace(')', ' ') | ||||||
|         if not text and '*' in type: |         if not text and '*' in type: | ||||||
|             return None |             return None | ||||||
|         if type.endswith('*'): |         if type.endswith('*'): | ||||||
|  |  | ||||||
|  | @ -44,12 +44,25 @@ | ||||||
|       <fieldset class="box" |       <fieldset class="box" | ||||||
|                 tal:condition="request/search.submitted | nothing"> |                 tal:condition="request/search.submitted | nothing"> | ||||||
|         <legend>Search results</legend> |         <legend>Search results</legend> | ||||||
|         <div tal:repeat="row view/results"> |         <table class="listing" summary="Search results" | ||||||
|           <div> |                i18n:attributes="summary"> | ||||||
|             <a tal:attributes="href string:${view/url}/.target${row/uniqueId}" |           <thead> | ||||||
|                tal:content="row/title" /> |             <tr> | ||||||
|           </div> |               <th i18n:translate="label_title">Title</th> | ||||||
|         </div> |               <th i18n:translate="label_type">Type</th> | ||||||
|  |             </tr> | ||||||
|  |           </thead> | ||||||
|  |           <tbody> | ||||||
|  |             <tr tal:repeat="row view/results"> | ||||||
|  |               <td> | ||||||
|  |                 <a tal:attributes="href string:${view/url}/.target${row/uniqueId}" | ||||||
|  |                    tal:content="row/title" /> | ||||||
|  |               </td> | ||||||
|  |               <td tal:content="row/typeTitle"> | ||||||
|  |               </td> | ||||||
|  |             </tr> | ||||||
|  |           </tbody> | ||||||
|  |         </table> | ||||||
|       </fieldset> |       </fieldset> | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 helmutm
						helmutm