PageSourceSearch

https://www.deepal.com.pe/scripts/blog/newsletterBlog.js

js deepal.com.pe collected 2026-09-29 03:36:31 UTC 5,107 bytes, 147 lines download raw bytes

1const newsletterForm = document.querySelector("#newsletter_form");
2const nameInput = document.querySelector("#Name");
3const lastNameInput = document.querySelector("#LastName");
4const emailInput = document.querySelector("#Email");
5const disclaimerCheckbox = document.querySelector("#Disclaimer");
6const submitButton = document.querySelector(
7  ".blog_home_newsletter__form__submit"
8);
9
10newsletterForm?.addEventListener("change", (e) => {
11  if (
12    nameInput &&
13    nameInput.value != "" &&
14    lastNameInput &&
15    lastNameInput.value != "" &&
16    emailInput &&
17    emailInput.value != ""
18  ) {
19    submitButton.removeAttribute("disabled");
20}else{
21    submitButton.setAttribute("disabled", true);
22  }
23});
24
25// newsletterForm?.addEventListener("submit", async (e) => {
26//   e.preventDefault();
27//   submitButton?.setAttribute("disabled", true);
28//   submitButton.innerText = "ENVIANDO...";
29//   disclaimerCheckbox.value = disclaimerCheckbox.checked;
30
31//   await grecaptcha.ready(async function () {
32//     const token = await grecaptcha.execute(publicKey, { action: "submit" });
33//     document.querySelector("#Captchatoken").value = token;
34//     newsletterForm.submit(e);
35//   });
36// });
37
38
39newsletterForm?.addEventListener("submit", async (event) => {
40  event.preventDefault(); // Avoid default sending
41
42  submitButton?.setAttribute("disabled", true);
43  disclaimerCheckbox.value = disclaimerCheckbox.checked;
44
45  await grecaptcha.ready(async function () {
46      const token = await grecaptcha.execute(publicKey, { action: "submit" });
47      document.querySelector("#Captchatoken").value = token;
48
49      let nombre = document.getElementById("Name").value.trim();
50      let apellidos = document.getElementById("LastName").value.trim();
51      let email = document.getElementById("Email").value.trim();
52
53      let nombreValido = /^[a-zA-Z\s]+$/.test(nombre);
54      let apellidosValidos = /^[a-zA-Z\s]+$/.test(apellidos);
55      let emailValido = /^[\w.-]+@[a-zA-Z\d.-]+\.[a-zA-Z]{2,}$/.test(email);
56
57      document.querySelectorAll('.error-message').forEach((e) => e.remove());
58
59      let formValid = true;
60
61      const showError = (inputId, message) => {
62          const inputElement = document.getElementById(inputId);
63          const errorElement = document.createElement("div");
64          errorElement.className = "error-message";
65          errorElement.innerText = message;
66          inputElement.parentNode.insertBefore(errorElement, inputElement.nextSibling);
67      };
68
69      if (!nombreValido) {
70          showError('Name', errorMessageName);
71          formValid = false;
72      }
73
74      if (!apellidosValidos) {
75          showError('LastName', errorMessageLastName);
76          formValid = false;
77      }
78
79      if (!emailValido) {
80          showError('Email', errorMessageEmail);
81          formValid = false;
82      }
83
84      if (!formValid) {
85          submitButton?.removeAttribute("disabled");
86          return;
87      }
88
89      //  Use FormData to respect enctype="multipart/form-data"
90      const formData = new FormData(newsletterForm);
91      formData.append("Captchatoken", token);
92
93      try {
94          const response = await fetch(newsletterForm.getAttribute("action"), {
95              method: "POST",
96              body: formData,
97          });
98
99          const fadeIn = (element) => {
100              element.classList.remove("fade-exit", "fade-exit-active");
101              element.style.display = "block";
102              element.classList.add("fade-enter");
103              requestAnimationFrame(() => {
104                  element.classList.add("fade-enter-active");
105              });
106          };
107
108          const fadeOut = (element) => {
109              element.classList.remove("fade-enter", "fade-enter-active");
110              element.classList.add("fade-exit");
111              requestAnimationFrame(() => {
112                  element.classList.add("fade-exit-active");
113              });
114              setTimeout(() => {
115                  element.style.display = "none";
116                  element.classList.remove("fade-exit", "fade-exit-active");
117              }, 500);
118          };
119
120          if (response.ok) {
121              fadeOut(document.getElementById("newsletter_container"));
122              fadeIn(document.getElementById("thankyou_page"));
123          } else {
124              fadeOut(document.getElementById("newsletter_container"));
125              fadeIn(document.getElementById("error_page"));
126          }
127
128          // Return to the form after 15 seconds
129          setTimeout(() => {
130              fadeOut(document.getElementById("thankyou_page"));
131              fadeOut(document.getElementById("error_page"));
132
133              setTimeout(() => {
134                  const formContainer = document.getElementById("newsletter_container");
135                  fadeIn(formContainer);
136
137                  // Clear the form and reset the checkbox
138                  newsletterForm.reset();
139                  submitButton.setAttribute("disabled", true);
140              }, 500);
141          }, 15000);
142
143      } catch (error) {
144          console.error("Error al enviar el formulario:", error);
145      }
146  });
147});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.