티스토리 수익 글 보기
window.addEventListener(“load”, function () {
let blockedDomains = [];
fetch(‘https://hubspotonwebflow.com/assets/js/blockedDomains.json’)
.then(response => response.json())
.then(data => {
blockedDomains = data;
})
.catch(error => console.error(‘Error:’, error));
const updateFormData = (formData) => {
for (let [name, value] of formData.entries()) {
switch (name) {
case “hutk”:
const cookies = document.cookie.split(“;”);
const cookieMap = {};
cookies.forEach((cookie) => {
const [name, value] = cookie.trim().split(“=”);
cookieMap[name] = value;
});
const hubspotCookie = cookieMap[“hubspotutk”];
if (hubspotCookie) {
formData.set(name, hubspotCookie);
}
break;
case “pageUri”:
formData.set(name, window.location.href);
break;
case “pageName”:
formData.set(name, document.title);
break;
case “pageId”:
formData.set(name, window.location.pathname);
break;
default:
break;
}
}
return formData;
}
const webflowHubSpotForms = document.querySelectorAll(“[data-wf-hs-form]”);
if (webflowHubSpotForms.length > 0) {
webflowHubSpotForms.forEach(async (form) => {
const actionUrl = new URL(form.action);
const pathParts = actionUrl.pathname.split(‘/’);
const id = pathParts[pathParts.length – 1];
let blockList = false;
await fetch(`https://hubspotonwebflow.com/api/forms/blockList?id=${id}`)
.then(response => response.json())
.then(data => {
blockList = data;
})
.catch(error => console.error(‘Error:’, error));
let isBlocked = false;
const submitButton = form.querySelector(‘input[type=”submit”], button[type=”submit”]’);
if(blockList && blockList.enabled) {
let additionalBlockedDomains = [];
if(blockList.additionalBlockedDomains && Array.isArray(blockList.additionalBlockedDomains) && blockList.additionalBlockedDomains.length > 0) {
additionalBlockedDomains = blockList.additionalBlockedDomains;
blockedDomains.push(…additionalBlockedDomains);
}
const emailInputs = form.querySelectorAll(‘input[type=”email”]’);
emailInputs.forEach((input) => {
input.addEventListener(‘input’, () => {
const email = input.value;
const emailDomain = email.split(‘@’)[1];
const warningMessage = document.createElement(‘p’);
warningMessage.style.color = ‘red’;
warningMessage.style.marginTop = ‘1rem’;
warningMessage.style.marginBottom = ‘1rem’;
warningMessage.style.fontSize = ‘1rem’;
warningMessage.style.display = ‘none’;
const existingWarningMessage = input.parentNode.querySelector(‘.warning-message’);
if (blockedDomains.includes(emailDomain)) {
isBlocked = true;
submitButton.disabled = true;
submitButton.style.cursor = ‘not-allowed’;
submitButton.style.backgroundColor = ‘grey’;
warningMessage.className = ‘warning-message’;
warningMessage.textContent = ‘This email domain is blocked. Please enter a different email.’;
warningMessage.style.display = ‘block’;
if (existingWarningMessage) {
input.parentNode.removeChild(existingWarningMessage);
}
input.parentNode.appendChild(warningMessage);
} else {
isBlocked = false;
submitButton.disabled = false;
submitButton.style.cursor = ”;
submitButton.style.backgroundColor = ”;
if(existingWarningMessage) {
input.parentNode.removeChild(existingWarningMessage);
}
}
});
});
}
const checkboxes = form.querySelectorAll(‘input[type=”checkbox”][required]’);
const checkboxMap = {};
checkboxes.forEach((checkbox) => {
const name = checkbox.name;
if (!checkboxMap[name]) {
checkboxMap[name] = [];
}
checkboxMap[name].push(checkbox);
});
let isCheckboxValidationFailed = false;
Object.values(checkboxMap).forEach((checkboxes) => {
if (checkboxes.length > 1) {
const errorMessage = document.createElement(‘div’);
errorMessage.textContent = ‘At least one checkbox must be checked.’;
errorMessage.style.color = ‘red’;
errorMessage.style.display = ‘none’;
errorMessage.style.marginTop = ‘1rem’;
errorMessage.style.marginBottom = ‘1rem’;
errorMessage.style.fontSize = ‘1rem’;
checkboxes.forEach((checkbox) => {
checkbox.required = false;
checkbox.addEventListener(‘change’, () => {
if (checkbox.checked) {
errorMessage.style.display = ‘none’;
isCheckboxValidationFailed = false;
}
});
});
const form = checkboxes[0].form;
form.appendChild(errorMessage);
form.addEventListener(‘submit’, (event) => {
const isChecked = checkboxes.some((checkbox) => checkbox.checked);
if (!isChecked) {
event.preventDefault();
errorMessage.style.display = ‘block’;
isCheckboxValidationFailed = true;
} else {
errorMessage.style.display = ‘none’;
isCheckboxValidationFailed = false;
}
});
}
});
form.addEventListener(“submit”, (event) => {
if (isCheckboxValidationFailed) {
return;
}
event.preventDefault();
let formData = new FormData(form);
formData = updateFormData(formData);
fetch(form.action, {
method: form.method,
body: formData,
})
.then((response) => response.json())
.then((data) => {
if (“redirectUri” in data) {
window.location.href = data.redirectUri;
}
if (“inlineMessage” in data) {
const message = document.createElement(“div”);
message.style.marginTop = “1rem”;
message.style.marginBottom = “1rem”;
message.innerHTML = data.inlineMessage;
form.appendChild(message);
message.scrollIntoView({ behavior: “smooth”, block: “center” });
}
})
.catch((error) => console.error(error));
});
});
}
const webflowForms = document.querySelectorAll(
“[data-webflow-hubspot-api-form-url]”
);
if (webflowForms.length > 0) {
webflowForms.forEach(async (form) => {
const actionUrl = new URL(form.dataset.webflowHubspotApiFormUrl);
const pathParts = actionUrl.pathname.split(‘/’);
const id = pathParts[pathParts.length – 1];
let blockList = false;
await fetch(`https://hubspotonwebflow.com/api/forms/blockList?id=${id}`)
.then(response => response.json())
.then(data => {
blockList = data;
})
.catch(error => console.error(‘Error:’, error));
let isBlocked = false;
const submitButton = form.querySelector(‘input[type=”submit”], button[type=”submit”]’);
if(blockList && blockList.enabled) {
let additionalBlockedDomains = [];
if(blockList.additionalBlockedDomains && Array.isArray(blockList.additionalBlockedDomains) && blockList.additionalBlockedDomains.length > 0) {
additionalBlockedDomains = blockList.additionalBlockedDomains;
blockedDomains.push(…additionalBlockedDomains);
}
const emailInputs = form.querySelectorAll(‘input[type=”email”]’);
emailInputs.forEach((input) => {
input.addEventListener(‘input’, () => {
const email = input.value;
const emailDomain = email.split(‘@’)[1];
const warningMessage = document.createElement(‘p’);
warningMessage.style.color = ‘red’;
warningMessage.style.marginTop = ‘1rem’;
warningMessage.style.marginBottom = ‘1rem’;
warningMessage.style.fontSize = ‘1rem’;
warningMessage.style.display = ‘none’;
const existingWarningMessage = input.parentNode.querySelector(‘.warning-message’);
if (blockedDomains.includes(emailDomain)) {
isBlocked = true;
submitButton.disabled = true;
submitButton.style.cursor = ‘not-allowed’;
submitButton.style.backgroundColor = ‘grey’;
warningMessage.className = ‘warning-message’;
warningMessage.textContent = ‘This email domain is blocked. Please enter a different email.’;
warningMessage.style.display = ‘block’;
if (existingWarningMessage) {
input.parentNode.removeChild(existingWarningMessage);
}
input.parentNode.appendChild(warningMessage);
} else {
isBlocked = false;
submitButton.disabled = false;
submitButton.style.cursor = ”;
submitButton.style.backgroundColor = ”;
if(existingWarningMessage) {
input.parentNode.removeChild(existingWarningMessage);
}
}
});
});
}
form.addEventListener(“submit”, (event) => {
event.preventDefault();
let formData = new FormData(form);
formData = updateFormData(formData);
form.querySelectorAll(“[data-wfhsfieldname]”).forEach((field) => {
if (field.type === “file”) {
formData.set(field.dataset.wfhsfieldname, field.files[0]);
} else if(field.type === ‘checkbox’) {
if(field.checked) {
formData.set(field.dataset.wfhsfieldname, field.value);
}
} else if(field.type === ‘radio’) {
if(field.checked) {
formData.set(field.dataset.wfhsfieldname, field.value);
}
} else {
formData.set(field.dataset.wfhsfieldname, field.value);
}
// formData.delete(field.name);
});
fetch(form.dataset.webflowHubspotApiFormUrl, {
method: “POST”,
body: formData,
})
.then((response) => response.json())
.catch((error) => console.error(error));
});
});
}
});