possible solution to issue 1154, onvalidation = dict(onsuccess= [...])

This commit is contained in:
mdipierro
2012-11-14 13:47:56 -06:00
parent cc4d27c6d2
commit 52ca6af024
2 changed files with 13 additions and 8 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.2.1 (2012-11-14 08:44:05) stable
Version 2.2.1 (2012-11-14 13:47:50) stable
+12 -7
View File
@@ -129,6 +129,11 @@ def xmlescape(data, quote=True):
data = cgi.escape(data, quote).replace("'", "'")
return data
def call_as_list(f,*a,**b):
if not isinstance(f, (list,tuple)):
f = [f]
for item in f:
item(*a,**b)
def truncate_string(text, length, dots='...'):
text = text.decode('utf-8')
@@ -1998,20 +2003,20 @@ class FORM(DIV):
onsuccess = onvalidation.get('onsuccess', None)
onfailure = onvalidation.get('onfailure', None)
onchange = onvalidation.get('onchange', None)
if [k for k in onvalidation if not k in (
'onsuccess','onfailure','onchange')]:
raise RuntimeError('Invalid key in onvalidate dict')
if onsuccess and status:
onsuccess(self)
call_as_list(onsuccess,self)
if onfailure and request_vars and not status:
onfailure(self)
call_as_list(onfailure,self)
status = len(self.errors) == 0
if changed:
if onchange and self.record_changed and \
self.detect_record_change:
onchange(self)
call_as_list(onchange,self)
elif status:
if isinstance(onvalidation, (list, tuple)):
[f(self) for f in onvalidation]
else:
onvalidation(self)
call_as_list(onvalidation, self)
if self.errors:
status = False
if not session is None: