/
jquery.formchimp.js
122 lines (100 loc) · 4.22 KB
/
jquery.formchimp.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/* ==========================================================================
jQuery FormChimp - v1.2.2
A customizable MailChimp ajax plugin for jQuery
Fabio Quarantini - @febba
http://www.fabioquarantini.com/formchimp/
========================================================================== */
(function($, window, document, undefined) {
$.fn.formchimp = function(settings) {
var $form = $(this);
var $body = $('body');
var actionUrl = $form.attr('action').replace('/post?', '/post-json?').concat('&c=?');
var $button = $form.find('[type="submit"]');
var defaults = {
'appendElement': $form, // Declare where the new element, containing the messages from Mailchimp will be appended to.
'buttonSelector': $button, // Set the button selector.
'buttonText': '', // The message to be written on the submit button after a successful subscription.
'debug': false, // Activate debug message in console.
'errorMessage': '', // Set custom error message given when return an error.
'onMailChimpSuccess': function() {}, // Callback that fires on success.
'onMailChimpError': function() {}, // Callback that fires on errors.
'responseClass': 'mc-response', // Declare custom element in page for message output. (Set different classes for multiple sign-up forms)
'successMessage': '', // Set a custom success message.
'url': actionUrl, // The mailchip list subscription url, to get the JSONP address just change `post` to `post-json` and append `&c=?` at the end.
};
var originalButtonText = defaults.buttonSelector.text();
var $responseContainer;
// Merge default whith settings
$.extend(defaults, settings);
// On submit
$($form).on('submit', function(event) {
// Disable default action of submit
event.preventDefault();
// Remove status class and add the loading
$body.removeClass('mc-success mc-error').addClass('mc-loading');
// If the response container does not exists
if ($('.' + defaults.responseClass).length === 0) {
// Add response container to append element
$responseContainer = $('<div/>').addClass(defaults.responseClass).appendTo(defaults.appendElement);
} else {
// Remove old message
$responseContainer.html('');
}
// Perform an Ajax request
$.ajax({
url: defaults.url,
data: $(this).serialize(),
dataType: 'jsonp'
}).done(function(data) {
// If debug is active
if (defaults.debug) {
// Log in cosole the Mailchimp data
console.log(JSON.stringify(data));
}
// Save the Mailchimp data
var responseMessage = data.msg;
// If the message start with a number and contains "-"
if(!isNaN(responseMessage.charAt(0)) && responseMessage.charAt(2) === '-') {
// Remove first 3 characters
responseMessage = responseMessage.substring(3);
}
// Add status class and remove the loading class
$body.addClass('mc-' + data.result).removeClass('mc-loading');
// If the Mailchimp result is success
if (data.result === 'success') {
// If success message parameter is not empty
if (defaults.successMessage !== '') {
// Replace the default success message with parameter
responseMessage = defaults.successMessage;
}
// If button text parameter is not empty
if (defaults.buttonText !== '') {
// Replace the default button text with parameter
defaults.buttonSelector.text(defaults.buttonText);
}
// Add event on error
$(document).trigger('mailChimpSuccess');
// Run callback
defaults.onMailChimpSuccess.call();
} else { // If there is an error
// If error message parameter is not empty
if (defaults.errorMessage !== '') {
// Replace the default error message with parameter
responseMessage = defaults.errorMessage;
}
// If button text parameter is not empty
if (defaults.buttonText !== '') {
// Replace the default button text with the original text
defaults.buttonSelector.text(originalButtonText);
}
// Add event on error
$(document).trigger('mailChimpError');
// Run callback
defaults.onMailChimpError.call();
}
// Show the message
$responseContainer.html(responseMessage);
});
});
};
})(jQuery, window, document);