emailCapture.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. define(['jquery', 'domReady!'], function ($) {
  2. 'use strict';
  3. /**
  4. * Email validation
  5. * @param {String} sEmail
  6. * @returns {Boolean}
  7. */
  8. function validateEmail(sEmail) {
  9. var filter
  10. = /^([+\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
  11. return filter.test(sEmail);
  12. }
  13. /**
  14. * Email capture for checkout
  15. * @param {String} url
  16. *
  17. */
  18. function emailCaptureCheckout(url) {
  19. var previousEmail = '';
  20. $('body').on('blur', 'input[id=customer-email]', function () {
  21. var email = $(this).val();
  22. if (email === previousEmail) {
  23. return false;
  24. }
  25. if (email && validateEmail(email)) {
  26. previousEmail = email;
  27. $.post(url, {
  28. email: email
  29. });
  30. }
  31. });
  32. }
  33. /**
  34. * Email capture for newsletter field
  35. * @param {String} url
  36. */
  37. function emailCaptureNewsletter(url) {
  38. $('input[id=newsletter]').each(function (index, element) {
  39. // Observe onblur event on element
  40. $(element).on('blur', function () {
  41. var email = $(element).val();
  42. if (email && validateEmail(email)) {
  43. $.post(url, {
  44. email: email
  45. });
  46. }
  47. });
  48. });
  49. }
  50. /**
  51. * Exported/return email capture
  52. * @param {Object} emailCapture
  53. */
  54. return function (emailCapture) {
  55. if (emailCapture.type === 'checkout') {
  56. emailCaptureCheckout(emailCapture.url);
  57. }
  58. if (emailCapture.type === 'newsletter') {
  59. emailCaptureNewsletter(emailCapture.url);
  60. }
  61. };
  62. });