From 90ac75a6498b2631a46f171fa9dcce49a24280b7 Mon Sep 17 00:00:00 2001 From: Manuel Boillod Date: Sat, 17 Dec 2011 15:10:48 +0100 Subject: [PATCH] Attribute onSuccess: add XMLHttpRequest as third parameters of jquery success function Attributes on_ERROR_CODE: handled with jquery statusCode (see http://api.jquery.com/jQuery.ajax/) if ERROR_CODE is 2xx or 304, callback has the same parameters than success function, otherwise callback has the same parameters than error function --- .../plugins/jquery/JQueryProvider.groovy | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/groovy/org/codehaus/groovy/grails/plugins/jquery/JQueryProvider.groovy b/src/groovy/org/codehaus/groovy/grails/plugins/jquery/JQueryProvider.groovy index c7d8801..a8d37ae 100755 --- a/src/groovy/org/codehaus/groovy/grails/plugins/jquery/JQueryProvider.groovy +++ b/src/groovy/org/codehaus/groovy/grails/plugins/jquery/JQueryProvider.groovy @@ -21,6 +21,7 @@ import org.codehaus.groovy.grails.plugins.web.taglib.JavascriptProvider /** * @author Sergey Nebolsin (nebolsin@prophotos.ru) * @author Finn Herpich (finn.herpich marfinn-software de) + * @author Manuel Boillod */ class JQueryProvider implements JavascriptProvider { /** @@ -127,7 +128,7 @@ class JQueryProvider implements JavascriptProvider { out << ',' //*** success - out << 'success:function(data,textStatus){' + out << 'success:function(data,textStatus,XMLHttpRequest){' if(attrs.onLoaded) out << "${attrs.onLoaded};" @@ -162,6 +163,33 @@ class JQueryProvider implements JavascriptProvider { if(attrs.onComplete) out << ",complete:function(XMLHttpRequest,textStatus){${attrs.onComplete}}" + + //*** on_ERROR_CODE + boolean hasOnStatusCodes = false + attrs.each { k, v -> + def statusMatch = k =~ /^on(\d{3})$/ + if (statusMatch.matches()){ + //new status code + if (hasOnStatusCodes){ + out << "," + } else { + out << ",statusCode: {" + hasOnStatusCodes = true + } + int status = statusMatch[0][1] as int + //All success 2xx codes and not modified 304 code + if ( status >= 200 && status < 300 || status == 304 ) { + //success parameters + out << "${status}:function(data,textStatus,XMLHttpRequest){${v}}" + } else { + //error parameters + out << "${status}:function(XMLHttpRequest,textStatus,errorThrown){${v}}" + } + } + } + if (hasOnStatusCodes){ + out << "}" + } } /**