class JeanCloudContactFormNotifier { constructor (theme, messageContainer) { /* Choose the theme */ this.theme = theme ? theme : 'light' /* Create or get the message container */ if (messageContainer) { this.messageContainer = messageContainer } else { this.messageContainer = document.createElement('div') this.messageContainer.classList.add('contact-mailer-message-container') document.body.appendChild(this.messageContainer) } } message(level, text) { /* This function displays a message */ const messageElement = document.createElement('p') const messageId = 'contact-mailer-' + this.theme + '-message-' + level this.messageContainer.appendChild(messageElement) messageElement.textContent = text messageElement.classList.add('contact-mailer-message') messageElement.classList.add(messageId) messageElement.id = messageId /*add close button to the alert message*/ const closeButtonElement = document.createElement('span') messageElement.appendChild(closeButtonElement) closeButtonElement.textContent = "×" closeButtonElement.classList.add('contact-mailer-message-close-button') closeButtonElement.title = 'Cliquer pour fermer' closeButtonElement.onclick = () => { messageElement.parentNode.removeChild(messageElement) } //setTimeout(() => { // try { // messageElement.parentNode.removeChild(messageElement) // } catch (e) {} /* Silently fail if message was already deleted by click */ //}, 10000) } success (text) { this.message('success', text) } error (text) { this.message('error', text) } } function jeanCloudContactFormIntercept (formId, notifier) { /* * This function intercepts a form submission and send it via XHR. * Param formId is the HTML id of the form */ const formElem = document.getElementById(formId) if (!formElem) { console.error('You tried to intercept form with id:"' + formId + '" but it was not found.') return } if (!notifier) console.log('No notifier given, no message can be displayed') /* Intercept the submit event */ formElem.onsubmit = async (e) => { e.preventDefault() /* Add loading text */ const submitButton = formElem.querySelector('[type="submit"]') const loadingText = document.createElement('span') loadingText.classList.add("contact-mailer-sending"); loadingText.textContent = 'Envoi en cours…' submitButton.after(loadingText) /* XHR */ fetch(formElem.action, { method: formElem.method, body: new FormData(formElem) }) .then(data => { loadingText.parentNode.removeChild(loadingText) if (data.ok && data.status == 200) { notifier.success('Le message a bien été envoyé !') formElem.reset() } else if (!data.ok && data.status == 500) { notifier.error('Erreur du service d’envoi. Réessayez plus tard ou contactez https://jean-cloud.net') } else if (!data.ok && data.status == 400) { notifier.error('Une erreur est survenue dans la requête que vous avez effectué. Réessayez plus tard ou contactez le webmaster par un autre moyen.') // TODO display server’s error message } }) .catch((error) => { console.error(error) loadingText.parentNode.removeChild(loadingText) notifier.error('Impossible d’envoyer le formulaire. Vérifiez votre connexion internet ou réessayez plus tard.') }) } } (function () { /* Get the current js file location */ const path = (document.currentScript.src[-1] == '/' ? document.currentScript.src : document.currentScript.src.replace(/\/[^\/]*$/, '')) /* Adding a css file */ var link = document.createElement("link"); link.type = "text/css"; link.rel = "stylesheet"; link.crossOrigin = 'anonymous'; link.href = path + "/style.css"; link.integrity = 'sha384-D12RSMaIURTgZZljhdQqYlQzgEfXvOFwtiqzkWnNcDbKFwMWXcmsCRFO5BNii0MB' // cat style.css | openssl dgst -sha384 -binary | openssl base64 -A document.head.appendChild(link); })()