function newsletterSubscribe()

in src/assets/js/basket-client.js [43:115]


  function newsletterSubscribe(evt) {
    var skipXHR = newsletterForm.getAttribute('data-skip-xhr');
    if (skipXHR) {
      return true;
    }
    evt.preventDefault();
    evt.stopPropagation();

    // new submission, clear old errors
    errorArray = [];
    newsletterErrors.style.display = 'none';
    while (newsletterErrors.firstChild)
      newsletterErrors.removeChild(newsletterErrors.firstChild);

    var fmt = document.getElementById('fmt').value;
    var email = document.getElementById('email').value;
    var newsletter = document.getElementById('newsletters').value;
    var privacy = document.querySelector('input[name="privacy"]:checked')
      ? '&privacy=true'
      : '';
    var params =
      'email=' +
      encodeURIComponent(email) +
      '&newsletters=' +
      newsletter +
      privacy +
      '&fmt=' +
      fmt +
      '&source_url=' +
      encodeURIComponent(document.location.href);

    var xhr = new XMLHttpRequest();

    xhr.onload = function (r) {
      if (r.target.status >= 200 && r.target.status < 300) {
        // response is null if handled by service worker
        if (response === null) {
          newsletterError(new Error());
          return;
        }
        var response = r.target.response;
        if (response.success === true) {
          newsletterForm.style.display = 'none';
          newsletterThanks();
        } else {
          if (response.errors) {
            for (var i = 0; i < response.errors.length; i++) {
              errorArray.push(response.errors[i]);
            }
          }
          newsletterError(new Error());
        }
      } else {
        newsletterError(new Error());
      }
    };

    xhr.onerror = function (e) {
      newsletterError(e);
    };

    var url = newsletterForm.getAttribute('action');

    xhr.open('POST', url, true);
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    xhr.timeout = 5000;
    xhr.ontimeout = newsletterError;
    xhr.responseType = 'json';
    xhr.send(params);

    return false;
  }