(function () {
// === Endpoint backend (doit correspondre au host Caddy deploye) ==========
var ENDPOINT = "https://80-65-211-213.sslip.io/submit";
// === Traduzioni =========================================================
// Lingue complete : fr, nl, en, de, it, es, pt. // Qualsiasi lingua assente ricade su en (per chiave), poi fr. var T = {
fr: {
pageTitle:"Recedere dal contratto (diritto di recesso)",
intro:"Hai un diritto di recesso di 90 giorni. Compila questo modulo per esercitare tale diritto online; riceverai una ricevuta via email.",
lName:"Nome completo *", phName:"Nome e cognome",
lEmail:"Email *", phEmail:"tu@esempio.com",
lOrder:"Numero d'ordine *", phOrder:"es. #1234",
lOrderDate:"Data dell'ordine",
lItems:"Articoli interessati", phItems:"Quali prodotti desideri restituire?",
lAddress:"Indirizzo", lMessage:"Messaggio (facoltativo)",
reqNote:"* Campi obbligatori",
btnNext:"Continua",
revTitle:"Verifica la tua richiesta", revIntro:"Conferma che le informazioni sottostanti siano corrette.",
btnBack:"Modifica", btnConfirm:"Conferma il recesso",
sending:"Invio in corso...",
okTitle:"Richiesta registrata",
okBody:"La tua richiesta di recesso è stata registrata. Riferimento: {ref}. Una ricevuta ti è appena stata inviata via email.",
errFields:"Si prega di compilare nome, email e numero d'ordine.",
errEmail:"Indirizzo email non valido.",
errServer:"Si è verificato un errore. Riprova o contattaci."
},
nl: {
pageTitle:"Overeenkomst herroepen",
intro:"U heeft een herroepingsrecht van 90 dagen. Vul dit formulier in om dit recht online uit te oefenen; u ontvangt een ontvangstbevestiging per e-mail.",
lName:"Volledige naam *", phName:"Voor- en achternaam",
lEmail:"E-mail *", phEmail:"u@voorbeeld.com",
lOrder:"Bestelnummer *", phOrder:"bv. #1234",
lOrderDate:"Datum van de bestelling",
lItems:"Betreffende artikelen", phItems:"Welke producten wilt u retourneren?",
lAddress:"Adres", lMessage:"Bericht (optioneel)",
reqNote:"* Verplichte velden",
btnNext:"Doorgaan",
revTitle:"Controleer uw verzoek", revIntro:"Bevestig dat de onderstaande gegevens correct zijn.",
btnBack:"Wijzigen", btnConfirm:"Herroeping bevestigen",
sending:"Bezig met verzenden...",
okTitle:"Verzoek geregistreerd",
okBody:"Uw herroeping is geregistreerd. Referentie: {ref}. Een ontvangstbevestiging is zojuist per e-mail verzonden.",
errFields:"Vul de naam, het e-mailadres en het bestelnummer in.",
errEmail:"Ongeldig e-mailadres.",
errServer:"Er is een fout opgetreden. Probeer het opnieuw of neem contact op."
},
en: {
pageTitle:"Withdraw from contract",
intro:"You have a 90-day right of withdrawal. Fill in this form to exercise it online; you will receive an acknowledgement by email.",
lName:"Full name *", phName:"First and last name",
lEmail:"Email *", phEmail:"you@example.com",
lOrder:"Order number *", phOrder:"e.g.#1234",
lOrderDate:#1234",
lOrderDate:"Data dell'ordine",
lItems:"Articoli interessati", phItems:"Quali prodotti desidera restituire?",
lAddress:"Indirizzo", lMessage:"Messaggio (opzionale)",
reqNote:"* Campi obbligatori",
btnNext:"Continua",
revTitle:"Rivedi la tua richiesta", revIntro:"Verifica che i seguenti dati siano corretti.",
btnBack:"Modifica", btnConfirm:"Conferma il recesso",
sending:"Invio...",
okTitle:"Richiesta registrata",
okBody:"La tua richiesta di recesso è stata registrata. Riferimento: {ref}. È stato appena inviato un acconto via email.",
errFields:"Si prega di compilare nome, indirizzo e-mail e numero d'ordine.",
errEmail:"Indirizzo e-mail non valido.",
errServer:"Si è verificato un errore. Riprova o contattaci."
},
pt: {
pageTitle:"Cancelar contrato",
intro:"Tem direito de rescisão de 90 dias. Preencha este formulário para exercer online; receberá um aviso de receção por email.",
lName:"Nome completo *", phName:"Nome e apelido",
lEmail:"E-mail *", phEmail:"voce@exemplo.com",
lOrder:"Número da encomenda *", phOrder:"ex. #1234",
lOrderDate:"Data da encomenda",
lItems:"Artigos em causa", phItems:"Que produtos pretende devolver?",
lAddress:"Morada", lMessage:"Mensagem (opcional)",
reqNote:"* Campos obrigatorios",
btnNext:"Continuar",
revTitle:"Verifique o seu pedido", revIntro:"Confirme que os dados abaixo estao corretos.",
btnBack:"Editar", btnConfirm:"Confirmar a rescisão",
sending:"A enviar...",
okTitle:"Pedido registado",
okBody:"A sua rescisão foi registada. Referencia: {ref}. Um aviso de rececao acaba de ser enviado para o seu email.",
errFields:"Preencha o nome, o e-mail e o número da encomenda.",
errEmail:"Endereço de e-mail inválido.",
errServer:"Ocorreu um erro.Riprova o contattaci."
}
};
// === Detection de la langue (meme logique que la promo-box) ==============
function detectLocale() {
var raw = "";
if (window.Shopify && Shopify.locale) raw = Shopify.locale;
else if (document.documentElement.lang) raw = document.documentElement.lang;
else {
var m = window.location.pathname.match(/^\/([a-z]{2})(?:-[a-z]{2,})?(?:\/|$)/i);
if (m) raw = m[1];
}
var short = (raw || "").toLowerCase().slice(0, 2);
if (T[short]) return short;
if (short && short !== "fr") return "en";
return "fr";
}
var LOCALE = detectLocale();
function t(key) {
return (T[LOCALE] && T[LOCALE][key]) || (T.en && T.en[key]) || T.fr[key] || key;
}
// === Application des libelles ============================================
var root = document.getElementById("retract-app");
if (!root) return;
root.querySelectorAll("[data-i18n]").forEach(function (el) {
var v = t(el.getAttribute("data-i18n"));
if (v) el.textContent = v;
});
root.querySelectorAll("[data-i18n-ph]").forEach(function (el) {
var v = t(el.getAttribute("data-i18n-ph"));
if (v) el.setAttribute("placeholder", v);
});
// === Elements ============================================================
var form = document.getElementById("retract-form");
var review = document.getElementById("retract-review");
var success = document.getElementById("retract-success");
var summary = document.getElementById("retract-summary");
var err1 = document.getElementById("retract-error");
var err2 = document.getElementById("retract-error2");
var btnBack = document.getElementById("retract-back");
var btnConf = document.getElementById("retract-confirm");
function val(name) {
var el = form.elements[name];
return el ? el.value.trim() : "";
}
function isEmail(s) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(s); }
function showErr(node, msg) { node.textContent = msg; node.hidden = false; }
function hideErr(node) { node.hidden = true; }
// Etape 1 -> 2
form.addEventListener("submit", function (e) {
e.preventDefault();
hideErr(err1);
if (!val("full_name") || !val("email") || !val("order_ref")) return showErr(err1, t("errFields"));
if (!isEmail(val("email"))) return showErr(err1, t("errEmail"));
var rows = [
["lName", val("full_name")],
["lEmail", val("email")],
["lOrder", val("order_ref") + (val("order_date") ?("+ val("order_date") + ")" : "")],
["lItems", val("items")],
["lAddress", val("address")],
["lMessage", val("message")]
];
summary.innerHTML = "";
rows.forEach(function (r) {
if (!r[1]) return;
var dt = document.createElement("dt"); dt.textContent = t(r[0]).replace(" *", "");
var dd = document.createElement("dd"); dd.textContent = r[1];
summary.appendChild(dt); summary.appendChild(dd);
});
form.hidden = true; review.hidden = false;
review.scrollIntoView({ behavior: "smooth", block: "start" });
});
// Ritorno modifica
btnBack.addEventListener("click", function () {
review.hidden = true; form.hidden = false;
form.scrollIntoView({ behavior: "smooth", block: "start" });
});
// Conferma -> invio
btnConf.addEventListener("click", function () {
hideErr(err2);
btnConf.disabled = true;
var original = btnConf.textContent;
btnConf.textContent = t("sending");
var payload = {
locale: LOCALE,
full_name: val("full_name"),
email: val("email"),
order_ref: val("order_ref"),
order_date: val("order_date"),
items: val("items"),
address: val("address"),
message: val("message"),
website: val("website") // honeypot
};
fetch(ENDPOINT, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
})
.then(function (r) { return r.json().catch(function () { return { ok: false }; }); })
.then(function (data) {
if (!data || !data.ok) throw new Error("server");
document.getElementById("retract-okbody").textContent =
t("okBody").replace("{ref}", data.ref || "");
review.hidden = true; success.hidden = false;
success.scrollIntoView({ behavior: "smooth", block: "start" });
})
.catch(function () {
btnConf.disabled = false; btnConf.textContent = original;
showErr(err2, t("errServer"));
});
});
})();
WALENSKYOfferta di benvenuto
−10 % sul tuo primo quadro
Iscriviti alla nostra newsletter e ricevi il tuo codice di benvenuto, da usare sul quadro che preferisci.
Confidentialité
Nous utilisons des cookies pour améliorer votre expérience et analyser le trafic de notre site.