94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
let newsletter_form;
|
||
|
let newsletter_input_submit;
|
||
|
let newsletter_feedback;
|
||
|
let newsletter_feedback_wait;
|
||
|
let newsletter_feedback_success;
|
||
|
let newsletter_feedback_failure;
|
||
|
|
||
|
window.addEventListener("load", function(){
|
||
|
// STORE ELEMENTS //
|
||
|
newsletter_form = document.getElementById("newsletter-signup-form");
|
||
|
newsletter_input_submit = document.getElementById("newsletter-signup-form-submit");
|
||
|
newsletter_feedback = document.getElementById("newsletter-signup-form-feedback");
|
||
|
newsletter_feedback_wait = document.getElementById("newsletter-signup-form-feedback-wait");
|
||
|
newsletter_feedback_success = document.getElementById("newsletter-signup-form-feedback-success");
|
||
|
newsletter_feedback_failure = document.getElementById("newsletter-signup-form-feedback-failure");
|
||
|
|
||
|
|
||
|
// INITIALIZE INPUTS //
|
||
|
newsletter_init_submit();
|
||
|
});
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* HELPER: Initialize submit button input.
|
||
|
*/
|
||
|
async function newsletter_init_submit(){
|
||
|
// REGISTER CLICK HANDLER //
|
||
|
newsletter_input_submit.addEventListener("click", newsletter_submit);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* CALLBACK: Maybe submit the form.
|
||
|
*/
|
||
|
async function newsletter_submit(){
|
||
|
// SHOW WAIT FEEDBACK //
|
||
|
newsletter_feedback.classList.remove("hidden", "gone");
|
||
|
newsletter_form.classList.add("hidden");
|
||
|
newsletter_feedback_wait.classList.remove("hidden", "gone");
|
||
|
|
||
|
|
||
|
// COLLECT VALUES //
|
||
|
// mail address
|
||
|
const url_params = new URLSearchParams(window.location.search);
|
||
|
let mail_address = url_params.get("mail_address");
|
||
|
|
||
|
// unsubscribe_key
|
||
|
let unsubscribe_key = url_params.get("key");
|
||
|
|
||
|
|
||
|
// SEND API REQUEST //
|
||
|
var xhr = new XMLHttpRequest();
|
||
|
xhr.open("POST", "/api/newsletter/unsubscribe", true);
|
||
|
xhr.setRequestHeader("Content-Type", "application/json");
|
||
|
xhr.send(JSON.stringify({
|
||
|
mail_address: mail_address,
|
||
|
unsubscribe_key: unsubscribe_key
|
||
|
}));
|
||
|
|
||
|
xhr.onload = function(){
|
||
|
let success = true;
|
||
|
|
||
|
// validate http status code
|
||
|
if(xhr.status !== 200) success = false;
|
||
|
|
||
|
// check response
|
||
|
if(success){
|
||
|
let response = null;
|
||
|
try {
|
||
|
response = JSON.parse(xhr.response);
|
||
|
} catch(e){}
|
||
|
|
||
|
if(typeof response !== "object") success = false;
|
||
|
if(success && response === null) success = false;
|
||
|
if(success && response.success !== true) success = false;
|
||
|
}
|
||
|
|
||
|
// positive feedback
|
||
|
if(success){
|
||
|
newsletter_feedback_wait.classList.add("gone");
|
||
|
newsletter_feedback_success.classList.remove("hidden", "gone");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// negative feedback
|
||
|
newsletter_feedback_wait.classList.add("gone");
|
||
|
newsletter_feedback_failure.classList.remove("hidden", "gone");
|
||
|
}
|
||
|
}
|