From 306d88b1eb5ec6a4274f0449f01a46df7f354cec Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 23 Dec 2007 15:09:15 +0000 Subject: [PATCH] improvement of popup form for creating notes via javascript git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2269 fd906abe-77d9-0310-91a1-e0d9ade77398 --- browser/form.py | 35 ++++++++++++++++++++++++----------- browser/form_macros.pt | 4 ++-- browser/loops.js | 12 ++++++++++++ browser/node.py | 7 +++++-- browser/popup.pt | 30 ------------------------------ 5 files changed, 43 insertions(+), 45 deletions(-) delete mode 100644 browser/popup.pt diff --git a/browser/form.py b/browser/form.py index d9770fb..c921577 100644 --- a/browser/form.py +++ b/browser/form.py @@ -41,6 +41,7 @@ from zope.security.proxy import isinstance, removeSecurityProxy from cybertools.ajax import innerHtml from cybertools.browser.form import FormController +from cybertools.browser.view import popupTemplate from cybertools.composer.interfaces import IInstance from cybertools.composer.schema.interfaces import ISchemaFactory from cybertools.composer.schema.browser.common import schema_macros, schema_edit_macros @@ -61,8 +62,6 @@ from loops.util import _ from loops.versioning.interfaces import IVersionable -popupTemplate = ViewPageTemplateFile('popup.pt') - # forms class ObjectForm(NodeView): @@ -80,10 +79,12 @@ class ObjectForm(NodeView): # the same object as the context (the object the view was created for) self.target = context - @Lazy - def closeAction(self): - return (self.isInnerHtml and 'dialogs["%s"].hide()' % self.dialog_name - or 'window.close()') + def closeAction(self, submit=False): + if self.isInnerHtml: + return 'dialogs["%s"].hide()' % self.dialog_name + if submit: + return "xhrSubmitPopup('dialog_form', '%s'); return false" % (self.request.URL) + return 'window.close()' @Lazy def item(self): @@ -267,11 +268,16 @@ class CreateObjectForm(ObjectForm): class CreateObjectPopup(CreateObjectForm): isInnerHtml = False + nextUrl = '' # no redirect upon submit def update(self): - super(ObjectForm, self).update() + show = super(ObjectForm, self).update() + if not show: + return False self.registerDojo() cm = self.controller.macros + cm.register('css', identifier='popup.css', resourceName='popup.css', + media='all', position=4) jsCall = ('dojo.require("dojo.widget.Dialog");' 'dojo.require("dojo.widget.ComboBox");') cm.register('js-execute', jsCall, jsCall=jsCall) @@ -389,8 +395,11 @@ class EditObject(FormController, I18NView): self.object = obj formState = self.updateFields() # TODO: error handling - url = self.view.virtualTargetUrl + '?version=this' - self.request.response.redirect(url) + url = self.view.nextUrl + if url is None: + url = self.view.virtualTargetUrl + '?version=this' + if url: + self.request.response.redirect(url) return False def updateFields(self): @@ -512,8 +521,12 @@ class CreateObject(EditObject): notify(ObjectCreatedEvent(obj)) self.object = obj self.updateFields() # TODO: suppress validation - #self.request.response.redirect(self.view.virtualTargetUrl) - self.request.response.redirect(self.view.request.URL) + # TODO: error handling + url = self.view.nextUrl + if url is None: + self.request.response.redirect(self.view.request.URL) + if url: + self.request.response.redirect(url) return False diff --git a/browser/form_macros.pt b/browser/form_macros.pt index b7110f1..7e6f491 100644 --- a/browser/form_macros.pt +++ b/browser/form_macros.pt @@ -61,7 +61,7 @@ -
+ tal:attributes="onClick python: view.closeAction(True)"> diff --git a/browser/loops.js b/browser/loops.js index c6c82f7..10c0f65 100644 --- a/browser/loops.js +++ b/browser/loops.js @@ -34,6 +34,18 @@ function submitReplacing(targetId, formId, actionUrl) { return false; } +function xhrSubmitPopup(formId, actionUrl) { + dojo.io.bind({ + url: actionUrl, + formNode: dojo.byId(formId), + method: 'post', + mimetype: "text/html", + load: function(t, d, e) { + window.close(); + } + }); +} + function submitReplacingOrReloading(targetId, formId, actionUrl) { node = dojo.byId(targetId); var args = { diff --git a/browser/node.py b/browser/node.py index f9629a1..497545f 100644 --- a/browser/node.py +++ b/browser/node.py @@ -369,13 +369,16 @@ class NodeView(BaseView): actions = dict(portlet=getPortletActions) + nextUrl = None + @Lazy def popupCreateObjectForm(self): return ("javascript:function%%20openDialog(url){" "window.open('%s/create_object_popup.html" "?title='+document.title+'" - "&form.type=.loops/concepts/note&linkUrl='+url," - "'loops_dialog','width=650,height=450,left=300,top=200');;" + "&form.type=.loops/concepts/note&fixed_type=yes&linkUrl='+url," + "'loops_dialog'," + "'width=650,height=550,left=300,top=200');;" "}" "openDialog(window.location.href);" % self.topMenu.url) diff --git a/browser/popup.pt b/browser/popup.pt deleted file mode 100644 index b31f748..0000000 --- a/browser/popup.pt +++ /dev/null @@ -1,30 +0,0 @@ - -
- -
-
-
- - - - - -
- - - -
-
\ No newline at end of file