2019-05-09 18:54:39 +12:00
|
|
|
(function (window) {
|
|
|
|
"use strict";
|
|
|
|
|
2019-05-09 20:01:51 +12:00
|
|
|
window.ls.container.get('view').add(
|
2019-05-09 18:54:39 +12:00
|
|
|
{
|
|
|
|
selector: 'data-forms-recaptcha',
|
|
|
|
repeat: false,
|
|
|
|
controller: function(element, document, window) {
|
|
|
|
var form = document.getElementById(element.dataset['formsRecaptcha'] || '');
|
|
|
|
var captcha = document.createElement('input');
|
|
|
|
|
|
|
|
captcha.type = 'hidden';
|
|
|
|
captcha.name = 'g-recaptcha-response';
|
|
|
|
element.parentNode.insertBefore(captcha, element.nextSibling);
|
|
|
|
|
|
|
|
var render = function() {
|
|
|
|
window.grecaptcha.render(element, {
|
|
|
|
'sitekey': element.dataset['sitekey'] || '',
|
|
|
|
'size': 'invisible',
|
|
|
|
'badge': 'inline',
|
|
|
|
'callback': function (token) {
|
|
|
|
captcha.value = token;
|
|
|
|
form.submit();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
if(window.grecaptchaReady) {
|
|
|
|
render();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
document.addEventListener('recaptcha-loaded', render);
|
|
|
|
}
|
|
|
|
|
|
|
|
form.addEventListener('submit', function () {
|
|
|
|
if('' === captcha.value) {
|
|
|
|
event.preventDefault(); //prevent form submit before captcha is completed
|
|
|
|
window.grecaptcha.execute();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
})(window);
|