add Recaptcha(...ajax=True) to use ajax api, fix Recaptcha in LOAD
This commit is contained in:
+40
-13
@@ -757,7 +757,8 @@ class Recaptcha(DIV):
|
|||||||
error_message='invalid',
|
error_message='invalid',
|
||||||
label='Verify:',
|
label='Verify:',
|
||||||
options='',
|
options='',
|
||||||
comment = ''
|
comment = '',
|
||||||
|
ajax=False
|
||||||
):
|
):
|
||||||
self.request_vars = request and request.vars or current.request.vars
|
self.request_vars = request and request.vars or current.request.vars
|
||||||
self.remote_addr = request.env.remote_addr
|
self.remote_addr = request.env.remote_addr
|
||||||
@@ -772,6 +773,7 @@ class Recaptcha(DIV):
|
|||||||
self.label = label
|
self.label = label
|
||||||
self.options = options
|
self.options = options
|
||||||
self.comment = comment
|
self.comment = comment
|
||||||
|
self.ajax = ajax
|
||||||
|
|
||||||
def _validate(self):
|
def _validate(self):
|
||||||
|
|
||||||
@@ -825,18 +827,43 @@ class Recaptcha(DIV):
|
|||||||
server = self.API_SSL_SERVER
|
server = self.API_SSL_SERVER
|
||||||
else:
|
else:
|
||||||
server = self.API_SERVER
|
server = self.API_SERVER
|
||||||
captcha = DIV(
|
if not self.ajax:
|
||||||
SCRIPT("var RecaptchaOptions = {%s};" % self.options),
|
captcha = DIV(
|
||||||
SCRIPT(_type="text/javascript",
|
SCRIPT("var RecaptchaOptions = {%s};" % self.options),
|
||||||
_src="%s/challenge?k=%s%s" % (server, public_key, error_param)),
|
SCRIPT(_type="text/javascript",
|
||||||
TAG.noscript(
|
_src="%s/challenge?k=%s%s" % (server, public_key, error_param)),
|
||||||
IFRAME(
|
TAG.noscript(
|
||||||
_src="%s/noscript?k=%s%s" % (
|
IFRAME(
|
||||||
server, public_key, error_param),
|
_src="%s/noscript?k=%s%s" % (
|
||||||
_height="300", _width="500", _frameborder="0"), BR(),
|
server, public_key, error_param),
|
||||||
INPUT(
|
_height="300", _width="500", _frameborder="0"), BR(),
|
||||||
_type='hidden', _name='recaptcha_response_field',
|
INPUT(
|
||||||
_value='manual_challenge')), _id='recaptcha')
|
_type='hidden', _name='recaptcha_response_field',
|
||||||
|
_value='manual_challenge')), _id='recaptcha')
|
||||||
|
|
||||||
|
else: #use Google's ajax interface, needed for LOADed components
|
||||||
|
|
||||||
|
url_recaptcha_js = "%s/js/recaptcha_ajax.js" % server
|
||||||
|
RecaptchaOptions = "var RecaptchaOptions = {%s}" % self.options
|
||||||
|
script = """%(options)s;
|
||||||
|
jQuery.getScript('%(url)s',function() {
|
||||||
|
Recaptcha.create('%(public_key)s',
|
||||||
|
'recaptcha',jQuery.extend(RecaptchaOptions,{'callback':Recaptcha.focus_response_field}))
|
||||||
|
}) """ % ({'options':RecaptchaOptions,'url':url_recaptcha_js,'public_key':public_key})
|
||||||
|
captcha = DIV(
|
||||||
|
SCRIPT(
|
||||||
|
script,
|
||||||
|
_type="text/javascript",
|
||||||
|
),
|
||||||
|
TAG.noscript(
|
||||||
|
IFRAME(
|
||||||
|
_src="%s/noscript?k=%s%s" % (
|
||||||
|
server, public_key, error_param),
|
||||||
|
_height="300", _width="500", _frameborder="0"), BR(),
|
||||||
|
INPUT(
|
||||||
|
_type='hidden', _name='recaptcha_response_field',
|
||||||
|
_value='manual_challenge')), _id='recaptcha')
|
||||||
|
|
||||||
if not self.errors.captcha:
|
if not self.errors.captcha:
|
||||||
return XML(captcha).xml()
|
return XML(captcha).xml()
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user