refining create and edit actions/dialogs for concepts
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2210 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
309f5f1e21
commit
84dbd5a354
7 changed files with 93 additions and 52 deletions
|
@ -22,6 +22,7 @@ Base classes (sort of views) for action portlet items.
|
|||
$Id$
|
||||
"""
|
||||
|
||||
from urllib import urlencode
|
||||
from zope import component
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
|
@ -58,9 +59,42 @@ class Action(object):
|
|||
return self.view.url
|
||||
|
||||
|
||||
class TargetAction(object):
|
||||
class TargetAction(Action):
|
||||
|
||||
@Lazy
|
||||
def url(self):
|
||||
return self.view.virtualTargetUrl
|
||||
|
||||
|
||||
class DialogAction(Action):
|
||||
|
||||
jsOnClick = "objectDialog('%s', '%s/%s?%s'); return false;"
|
||||
|
||||
page = None
|
||||
viewName = 'create_object.html'
|
||||
dialogName = 'create'
|
||||
qualifier = typeToken = innerForm = None
|
||||
fixedType = False
|
||||
|
||||
@Lazy
|
||||
def url(self):
|
||||
return self.viewName
|
||||
|
||||
@Lazy
|
||||
def onClick(self):
|
||||
urlParams = dict(dialog=self.dialogName)
|
||||
if self.qualifier:
|
||||
urlParams['qualifier'] = self.qualifier
|
||||
if self.typeToken:
|
||||
urlParams['form.type'] = self.typeToken
|
||||
if self.innerForm:
|
||||
urlParams['inner_form'] = self.innerForm
|
||||
if self.fixedType:
|
||||
urlParams['fixed_type'] = 'yes'
|
||||
return self.jsOnClick % (self.dialogName, self.page.virtualTargetUrl,
|
||||
self.viewName, urlencode(urlParams))
|
||||
|
||||
@Lazy
|
||||
def innerHtmlId(self):
|
||||
return 'dialog.' + self.dialogName
|
||||
|
||||
|
|
|
@ -63,8 +63,9 @@ class ConceptEditForm(EditForm):
|
|||
typeInterface = self.typeInterface
|
||||
if typeInterface is None:
|
||||
fields = FormFields(IConcept)
|
||||
elif 'title' in typeInterface: # new "complete" type interface
|
||||
fields = FormFields(typeInterface)
|
||||
elif 'title' in typeInterface: # new type interface based on ConceptSchema
|
||||
f1 = FormFields(IConcept).omit('title', 'description')
|
||||
fields = FormFields(typeInterface, f1)
|
||||
else:
|
||||
fields = FormFields(IConcept, typeInterface)
|
||||
return fields
|
||||
|
|
|
@ -206,10 +206,23 @@ class CreateObjectForm(ObjectForm):
|
|||
@property
|
||||
def macro(self): return self.template.macros['create']
|
||||
|
||||
title = _(u'Create Resource, Type = ')
|
||||
defaultTitle = u'Create Resource, Type = '
|
||||
form_action = 'create_resource'
|
||||
dialog_name = 'create'
|
||||
|
||||
@Lazy
|
||||
def title(self):
|
||||
if self.request.form.get('fixed_type'):
|
||||
return _(u'Create %s' % self.typeConcept.title)
|
||||
else:
|
||||
return _(self.defaultTitle)
|
||||
|
||||
@Lazy
|
||||
def typeConcept(self):
|
||||
typeToken = self.request.get('form.type')
|
||||
if typeToken:
|
||||
return self.loopsRoot.loopsTraverse(typeToken)
|
||||
|
||||
@Lazy
|
||||
def adapted(self):
|
||||
return self.typeInterface(Resource())
|
||||
|
@ -220,10 +233,9 @@ class CreateObjectForm(ObjectForm):
|
|||
|
||||
@Lazy
|
||||
def typeInterface(self):
|
||||
typeToken = self.request.get('form.type')
|
||||
if typeToken:
|
||||
t = self.loopsRoot.loopsTraverse(typeToken)
|
||||
return removeSecurityProxy(ITypeConcept(t).typeInterface)
|
||||
tc = self.typeConcept
|
||||
if tc:
|
||||
return removeSecurityProxy(ITypeConcept(tc).typeInterface)
|
||||
else:
|
||||
return ITextDocument
|
||||
|
||||
|
@ -240,7 +252,7 @@ class CreateObjectForm(ObjectForm):
|
|||
|
||||
class CreateConceptForm(CreateObjectForm):
|
||||
|
||||
title = _(u'Create Concept, Type = ')
|
||||
defaultTitle = u'Create Concept, Type = '
|
||||
form_action = 'create_concept'
|
||||
|
||||
@Lazy
|
||||
|
@ -260,12 +272,8 @@ class CreateConceptForm(CreateObjectForm):
|
|||
|
||||
@Lazy
|
||||
def typeInterface(self):
|
||||
typeToken = self.request.get('form.type')
|
||||
if typeToken:
|
||||
t = self.loopsRoot.loopsTraverse(typeToken)
|
||||
return removeSecurityProxy(ITypeConcept(t).typeInterface)
|
||||
else:
|
||||
return None
|
||||
if self.typeConcept:
|
||||
return removeSecurityProxy(ITypeConcept(self.typeConcept).typeInterface)
|
||||
|
||||
@property
|
||||
def assignments(self):
|
||||
|
|
|
@ -38,7 +38,10 @@
|
|||
<metal:block define-macro="create" i18n:domain="loops">
|
||||
<form method="post" enctype="multipart/form-data"
|
||||
tal:define="qualifier request/qualifier | string:resource;
|
||||
innerForm request/inner_form | string:inner_form.html">
|
||||
innerForm request/inner_form | string:inner_form.html;
|
||||
typeToken python: request.get('form.type')
|
||||
or '.loops/concepts/textdocument';
|
||||
fixedType request/fixed_type | nothing">
|
||||
<input type="hidden" name="form.action" value="create"
|
||||
tal:attributes="value view/form_action" />
|
||||
<table cellpadding="3" class="form">
|
||||
|
@ -46,23 +49,25 @@
|
|||
<span tal:replace="view/title"
|
||||
i18n:translate="">Create Information Object</span>
|
||||
<select name="form.type" id="form.type"
|
||||
tal:condition="not:fixedType"
|
||||
tal:attributes="onChange
|
||||
string:return replaceFieldsNode(
|
||||
'form.fields', 'form.type',
|
||||
'${view/url}/$innerForm')">
|
||||
<option value=".loops/concepts/note"
|
||||
i18n:translate=""
|
||||
xtal:repeat="type view/resourceTypes"
|
||||
tal:repeat="type python:
|
||||
view.getTypesVocabulary((qualifier,))"
|
||||
tal:content="type/title"
|
||||
tal:attributes="value type/token;
|
||||
selected python:
|
||||
type.token == (request.get('form.type')
|
||||
or '.loops/concepts/textdocument')">
|
||||
type.token == typeToken">
|
||||
Note
|
||||
</option>
|
||||
</select>
|
||||
<input type="hidden" name="form.type"
|
||||
tal:condition="fixedType"
|
||||
tal:attributes="value typeToken" />
|
||||
</th></tr></tbody>
|
||||
|
||||
<tbody><tr><td colspan="5">
|
||||
|
|
|
@ -51,7 +51,7 @@ from loops.interfaces import IViewConfiguratorSchema
|
|||
from loops.resource import MediaAsset
|
||||
from loops import util
|
||||
from loops.util import _
|
||||
from loops.browser.action import Action, TargetAction
|
||||
from loops.browser.action import Action, DialogAction, TargetAction
|
||||
from loops.browser.common import BaseView
|
||||
from loops.browser.concept import ConceptView
|
||||
from loops.versioning.util import getVersion
|
||||
|
@ -351,16 +351,15 @@ class NodeView(BaseView):
|
|||
|
||||
def getPortletActions(self):
|
||||
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=self.conceptMapEditorUrl))
|
||||
actions.append(Action(self, title='Create Resource...',
|
||||
url=cmeUrl))
|
||||
actions.append(DialogAction(self, title='Create Resource...',
|
||||
description='Create a new resource object.',
|
||||
url='create_object.html',
|
||||
onClick="objectDialog('create', '%s/create_object.html'); "
|
||||
"return false;" % self.virtualTargetUrl,
|
||||
innerHtmlId='dialog.create'))
|
||||
page=self))
|
||||
return actions
|
||||
|
||||
actions = dict(portlet=getPortletActions)
|
||||
|
|
|
@ -41,7 +41,7 @@ from zope.traversing.api import getName, getParent
|
|||
|
||||
from cybertools.typology.interfaces import IType
|
||||
from cybertools.xedit.browser import ExternalEditorView, fromUnicode
|
||||
from loops.browser.action import Action, TargetAction
|
||||
from loops.browser.action import Action, DialogAction, TargetAction
|
||||
from loops.browser.common import EditForm, BaseView
|
||||
from loops.browser.concept import ConceptRelationView, ConceptConfigureView
|
||||
from loops.browser.node import NodeView, node_macros
|
||||
|
@ -186,12 +186,10 @@ class ResourceView(BaseView):
|
|||
|
||||
def getPortletActions(self, page=None):
|
||||
actions = []
|
||||
actions.append(Action(self, title='Edit Resource...',
|
||||
actions.append(DialogAction(self, title='Edit Resource...',
|
||||
description='Modify resource object.',
|
||||
url='edit_object.html',
|
||||
onClick="objectDialog('edit', '%s/edit_object.html'); "
|
||||
"return false;" % page.virtualTargetUrl,
|
||||
innerHtmlId='dialog.edit'))
|
||||
viewName='edit_object.html', dialogName='edit',
|
||||
page=page))
|
||||
return actions
|
||||
|
||||
def getObjectActions(self, page=None):
|
||||
|
|
|
@ -26,7 +26,7 @@ $Id$
|
|||
from zope.cachedescriptors.property import Lazy
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
|
||||
from loops.browser.action import Action
|
||||
from loops.browser.action import Action, DialogAction
|
||||
from loops.browser.concept import ConceptView
|
||||
from loops.common import adapted
|
||||
from loops import util
|
||||
|
@ -44,16 +44,15 @@ class GlossaryView(ConceptView):
|
|||
def getActions(self, category='object', page=None):
|
||||
actions = []
|
||||
if category == 'portlet':
|
||||
actions.append(Action(self, title='Create Glossary Item...',
|
||||
actions.append(DialogAction(self, title='Create Glossary Item...',
|
||||
description='Create a new glossary item.',
|
||||
url='create_concept.html',
|
||||
onClick="objectDialog('createGlossaryItem', "
|
||||
" '%s/create_concept.html?qualifier=concept"
|
||||
"&form.type=.loops/concepts/topic"
|
||||
"&inner_form=inner_concept_form.html"
|
||||
"&dialog=createGlossaryItem'); "
|
||||
"return false;" % page.virtualTargetUrl,
|
||||
innerHtmlId='dialog.createGlossaryItem'))
|
||||
viewName='create_concept.html',
|
||||
dialogName='createGlossaryItem',
|
||||
#qualifier='concept',
|
||||
typeToken='.loops/concepts/glossaryitem',
|
||||
fixedType=True,
|
||||
innerForm='inner_concept_form.html',
|
||||
page=page))
|
||||
return actions
|
||||
|
||||
|
||||
|
@ -66,13 +65,10 @@ class GlossaryItemView(ConceptView):
|
|||
def getActions(self, category='object', page=None):
|
||||
actions = []
|
||||
if category == 'portlet':
|
||||
actions.append(Action(self, title='Edit Glossary Item...',
|
||||
actions.append(DialogAction(self, title='Edit Glossary Item...',
|
||||
description='Modify glossary item.',
|
||||
url='edit_concept.html',
|
||||
onClick="objectDialog('editGlossaryItem', "
|
||||
" '%s/edit_concept.html"
|
||||
"?dialog=editGlossaryItem'); "
|
||||
"return false;" % page.virtualTargetUrl,
|
||||
innerHtmlId='dialog.editGlossaryItem'))
|
||||
viewName='edit_concept.html',
|
||||
dialogName='editGlossaryItem',
|
||||
page=page))
|
||||
return actions
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue