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:
helmutm 2007-12-03 16:06:15 +00:00
parent 309f5f1e21
commit 84dbd5a354
7 changed files with 93 additions and 52 deletions

View file

@ -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

View file

@ -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

View file

@ -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):

View file

@ -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">

View file

@ -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 = []
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...',
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))
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)

View file

@ -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):

View file

@ -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