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