info/action icons on listings: add 'target' argument to 'getActions()' methods

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2546 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-04-26 12:44:46 +00:00
parent 720a79a34c
commit 21743d6e52
7 changed files with 37 additions and 45 deletions

View file

@ -35,8 +35,12 @@ class TargetAction(Action):
@Lazy
def url(self):
if self.page is None:
#return self.getActionUrl(self.page.getUrlForTarget(self.view))
if self.page is None: # how could this happen?
baseUrl = self.view.virtualTargetUrl
else:
if self.target is not None:
baseUrl = self.page.getUrlForTarget(self.target)
else:
baseUrl = self.page.virtualTargetUrl
return self.getActionUrl(baseUrl)
@ -55,7 +59,12 @@ class DialogAction(Action):
@Lazy
def url(self):
return self.viewName
#return '%s/%s' % (self.page.getUrlForTarget(self.view), self.viewName)
if self.target is not None:
url = self.page.getUrlForTarget(self.target)
else:
url = self.page.virtualTargetUrl
return '%s/%s' % (url, self.viewName)
@Lazy
def onClick(self):
@ -69,6 +78,12 @@ class DialogAction(Action):
if self.fixedType:
urlParams['fixed_type'] = 'yes'
urlParams.update(self.addParams)
#url = self.page.getUrlForTarget(self.view)
#return self.jsOnClick % (self.dialogName, url, self.viewName,
# urlencode(urlParams))
if self.target is not None:
url = self.page.getUrlForTarget(self.target)
else:
url = self.page.virtualTargetUrl
return self.jsOnClick % (self.dialogName, url, self.viewName,
urlencode(urlParams))

View file

@ -392,13 +392,13 @@ class BaseView(GenericView, I18NView):
def editable(self):
return canWriteObject(self.context)
def getActions(self, category='object', page=None):
def getActions(self, category='object', page=None, target=None):
""" Return a list of actions that provide the view and edit actions
available for the context object.
"""
actions = []
if category in self.actions:
actions.extend(self.actions[category](self, page=page))
actions.extend(self.actions[category](self, page=page, target=target))
return actions
def openEditWindow(self, viewName='edit.html'):

View file

@ -349,12 +349,12 @@ class ConceptView(BaseView):
for node in self.context.getClients():
yield NodeView(node, self.request)
def getActions(self, category='object', page=None):
def getActions(self, category='object', page=None, target=None):
t = IType(self.context)
actInfo = t.optionsDict.get('action.' + category, '')
actNames = [n.strip() for n in actInfo.split(',')]
if actNames:
return actions.get(category, actNames, view=self, page=page)
return actions.get(category, actNames, view=self, page=page, target=target)
return []

View file

@ -114,7 +114,7 @@
<th i18n:translate="">Size</th>
<th i18n:translate="">Modification Date</th>
<th i18n:translate="">Author(s)</th>
<th i18n:translate="">St</th>
<th i18n:translate="">Info</th>
</tr>
<tal:items repeat="related resources">
<tal:item define="class python: repeat['related'].odd() and 'even' or 'odd';
@ -143,7 +143,8 @@
<td><span tal:replace="related/modified">2007-03-30</span></td>
<td><span tal:replace="related/creators">John</span></td>
<td style="white-space: nowrap"
tal:define="target nocall:related">
tal:define="target nocall:related;
style nothing">
<div metal:use-macro="views/node_macros/object_actions" />
</td>
</tr>

View file

@ -387,24 +387,24 @@ class NodeView(BaseView):
actions = []
self.registerDojo()
if category in self.actions:
actions.extend(self.actions[category](self))
actions.extend(self.actions[category](self, target=target))
if target is None:
target = self.virtualTarget
if target is not None:
actions.extend(target.getActions(category, page=self))
actions.extend(target.getActions(category, page=self, target=target))
return actions
def getPortletActions(self):
def getPortletActions(self, target=None):
actions = []
cmeUrl = self.conceptMapEditorUrl
if cmeUrl:
actions.append(Action(self, title='Edit Concept Map',
targetWindow='loops_cme',
description='Open concept map editor in new window',
url=cmeUrl))
url=cmeUrl, target=target))
actions.append(DialogAction(self, title='Create Resource...',
description='Create a new resource object.',
page=self))
page=self, target=target))
return actions
actions = dict(portlet=getPortletActions)
@ -508,31 +508,6 @@ class InlineEdit(NodeView):
return 'OK'
class xxxCreateObject(NodeView, Form):
template = ViewPageTemplateFile('form_macros.pt')
@property
def macro(self): return self.template.macros['create']
form_fields = FormFields(
schema.TextLine(__name__='title', title=_(u'Title')),
schema.Text(__name__='body', title=_(u'Body Text')),
schema.TextLine(__name__='linkUrl', title=_(u'Link'), required=False),
)
title = _(u'Enter Note')
form_action = 'create_note'
def __init__(self, context, request):
super(CreateObject, self).__init__(context, request)
self.setUpWidgets()
self.widgets['body'].height = 3
def __call__(self):
return innerHtml(self)
# special (named) views for nodes
class SpecialNodeView(NodeView):

View file

@ -187,7 +187,8 @@
<metal:actions define-macro="object_actions">
<div style="float: right;"
tal:define="target nocall:target|nothing">
tal:define="target nocall:target|nothing;"
tal:attributes="style style|string:float: right">
<tal:actions repeat="action python:view.getActions('object', target=target)">
<metal:action use-macro="action/macro" />
</tal:actions>

View file

@ -175,20 +175,20 @@ class ResourceView(BaseView):
# actions
def getPortletActions(self, page=None):
def getPortletActions(self, page=None, target=None):
actions = []
actions.append(DialogAction(self, title='Edit Resource...',
description='Modify resource object.',
viewName='edit_object.html', dialogName='edit',
page=page))
page=page, target=target))
return actions
def getObjectActions(self, page=None):
def getObjectActions(self, page=None, target=None):
acts = ['info']
acts.extend('state.' + st for st in statefulActions)
if self.xeditable:
acts.append('external_edit')
return actions.get('object', acts, view=self, page=page)
return actions.get('object', acts, view=self, page=page, target=target)
actions = dict(portlet=getPortletActions, object=getObjectActions)