(function ($) {
$.getScript("//www.google.com/recaptcha/api.js?onload=load_invisible_recaptcha&render=explicit")
var recaptha_disabled =
<%= Recaptcha.configuration.skip_verify_env.include?(Rails.env.to_s ) %>
var print_results = function (element, result) {
if (result instanceof Array) {
var resp = "";
$.each(result, function (index, value) {
resp += "" + value + "";
});
} else {
resp = result
}
resp = '
' + resp + '
';
$(element).append(resp);
};
var add_errors = function (form, errors) {
$.each(errors, function (name, value) {
var input = $(form).find("*:not([type='hidden'])[name*='[" + name + "]']")
$(input).addClass("invalid");
if ($(input).parent().children('.error-message').length == 0) {
$(input).parent().append("" + value + "");
} else {
$('.error-message').show();
}
});
};
var clear_deafult_message = function (form) {
var message_box = $(form).parent().find(".messages")[0];
var default_message = $(message_box).find(".default_message");
var custom_message = $(message_box).find(".custom_message");
if ($(default_message).length > 0) {
$(default_message).remove();
}
if ($(custom_message).length == 0) {
$(message_box).html("");
}
}
var add_loader = function (form) {
if ($(form).children('.ajax_forms_loader').length == 0) {
$(form).append('
');
} else {
$(form).children('.ajax_forms_loader').fadeIn();
}
}
var hide_loader = function (form) {
$(form).children('.ajax_forms_loader').fadeOut();
}
var submit_function = function (form, method, action) {
$(form).trigger("submitted");
add_loader(form);
if ($(form).find("[name='_dontcare']").length < 1) {
$(form).append("")
}
var formdata = new FormData($(form)[0])
$.ajax({
method: method,
url: action,
dataType: "json",
data: formdata,
contentType: false,
processData: false,
success: function (response, status, xhr) {
clear_deafult_message(form);
var message_box = $(form).parent().find(".messages")[0];
if (!$(message_box).find(".custom_message").length > 0) {
print_results(message_box, response.messages);
}
$(form).trigger("successed");
$(message_box).addClass('ok');
$(form).trigger("reset");
},
error: function (xhr, status, errorThrown) {
var response = JSON.parse(xhr.responseText);
var message_box = $(form).parent().find(".messages")[0];
clear_deafult_message(form);
print_results(message_box, response.messages);
$(form).trigger("failed", [xhr, status, errorThrown]);
$(message_box).addClass('ko');
add_errors(form, response.errors);
},
complete: function () {
if (!recaptha_disabled) {
grecaptcha.reset();
}
$(form).find("input[type='submit']").attr("disabled", false);
hide_loader(form);
}
});
}
load_invisible_recaptcha = function () {
$(document).ready(function () {
$(".ajax_forms").each(function (element, index) {
var form = this;
var action = $(this).attr("action");
var method = $(this).attr("method");
var submit_button = $(form).find(".submit").last();
if (!recaptha_disabled) {
var container_div = $('');
$(submit_button).before(container_div);
var widget_id = grecaptcha.render(container_div[0], {
'sitekey': '<%= Recaptcha.configuration.site_key! %>',
'badge': 'inline',
'size': 'invisible',
'callback': function () {
submit_function(form, method, action);
}
});
$(form).data("widget-id", widget_id)
}
$(form).children('.ajax_forms_loader').fadeOut();
});
$(document).on("submit", ".ajax_forms", function (event) {
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
var form = $(event.target);//.closest("form");
var action = $(form).attr("action");
var method = $(form).attr("method");
var widget_id = $(form).data("widget-id");
// disable all submit buttons
$(form).find("input[type='submit']").attr("disabled", true)
if (!recaptha_disabled) {
grecaptcha.execute(widget_id)
} else {
submit_function(form, method, action);
}
});
$('.ajax_forms').on('change', '.invalid', function () {
$(this).removeClass("invalid");
$(this).parent().children('.error-message').hide();
});
});
};
})(jQuery);