From 84dbd5a3548263750abe590b0f81ca33faed7899 Mon Sep 17 00:00:00 2001 From: helmutm Date: Mon, 3 Dec 2007 16:06:15 +0000 Subject: [PATCH] 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 --- browser/action.py | 36 ++++++++++++++++++++++++++++++++++- browser/concept.py | 5 +++-- browser/form.py | 32 +++++++++++++++++++------------ browser/form_macros.pt | 13 +++++++++---- browser/node.py | 19 +++++++++--------- browser/resource.py | 10 ++++------ knowledge/glossary/browser.py | 30 +++++++++++++---------------- 7 files changed, 93 insertions(+), 52 deletions(-) diff --git a/browser/action.py b/browser/action.py index 3d8b5ff..3428ee8 100644 --- a/browser/action.py +++ b/browser/action.py @@ -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 + diff --git a/browser/concept.py b/browser/concept.py index 664bf18..443508a 100644 --- a/browser/concept.py +++ b/browser/concept.py @@ -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 diff --git a/browser/form.py b/browser/form.py index 3c12bb2..836fe29 100644 --- a/browser/form.py +++ b/browser/form.py @@ -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): diff --git a/browser/form_macros.pt b/browser/form_macros.pt index 4ba428c..e18f251 100644 --- a/browser/form_macros.pt +++ b/browser/form_macros.pt @@ -38,7 +38,10 @@
+ innerForm request/inner_form | string:inner_form.html; + typeToken python: request.get('form.type') + or '.loops/concepts/textdocument'; + fixedType request/fixed_type | nothing"> @@ -46,23 +49,25 @@ Create Information Object +
diff --git a/browser/node.py b/browser/node.py index aedd325..fb27b8d 100644 --- a/browser/node.py +++ b/browser/node.py @@ -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) diff --git a/browser/resource.py b/browser/resource.py index 914220b..eba6e48 100644 --- a/browser/resource.py +++ b/browser/resource.py @@ -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): diff --git a/knowledge/glossary/browser.py b/knowledge/glossary/browser.py index 78041a9..17155e2 100755 --- a/knowledge/glossary/browser.py +++ b/knowledge/glossary/browser.py @@ -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