Testimonials

If the Cripia universe and its creations have touched you, you can share your feelings here.

Every glance counts and brings this world to life. Thank you for your words.

Messages are moderated before publication.


We sincerely thank you for taking the time to share them.


--
☆☆☆☆☆
Loading...

Un mot sur l’univers Cripia

Commentaires publiés

Chargement des commentaires...
`; return; } reviewsList.innerHTML = reviews.map(review => `
${escapeHtml(formatName(review.name))} ${review.is_verified ? `Client vérifié` : ``}
${renderStars(review.rating)}
${escapeHtml(formatDate(review.created_at))}
${escapeHtml(review.comment)}
`).join(""); } async function loadReviews() { let query = supabase .from("comments") .select("id, name, rating, comment, created_at, is_verified") .eq("approved", true); if (sortSelect.value === "best") { query = query.order("rating", { ascending: false }).order("created_at", { ascending: false }); } else if (sortSelect.value === "worst") { query = query.order("rating", { ascending: true }).order("created_at", { ascending: false }); } else { query = query.order("created_at", { ascending: false }); } const { data, error } = await query; if (error) { reviewsList.innerHTML = `
${t.loadError}
`; console.error(error); return; } updateSummary(data || []); renderReviews(data || []); } sortSelect.addEventListener("change", loadReviews); reviewForm.addEventListener("submit", async (e) => { e.preventDefault(); formMessage.textContent = ""; formMessage.className = "form-message"; const honeypot = reviewForm.website.value.trim(); const name = reviewForm.name.value.trim(); const rating = Number(reviewForm.rating.value); const comment = reviewForm.comment.value.trim(); const timeSpent = Date.now() - createdAtPageLoad; if (honeypot) { formMessage.textContent = t.blocked; formMessage.classList.add("error"); return; } if (timeSpent