good improvements, ready for preprod

This commit is contained in:
Adrian Amaglio 2020-08-25 11:45:23 +02:00
parent 7f75ca2712
commit da17e1c535
3 changed files with 52 additions and 7 deletions

View File

@ -1,11 +1,28 @@
(function () {
function message (messageContainer, level, text) { function message (messageContainer, level, text) {
/* This function displays a message on top of the form */
const messageElement = document.createElement('p') const messageElement = document.createElement('p')
const messageId = 'contact-mailer-message-' + level
messageContainer.appendChild(messageElement) messageContainer.appendChild(messageElement)
messageElement.textContent = text messageElement.textContent = text
messageElement.classList.add('contact-mailer-message') messageElement.classList.add('contact-mailer-message')
messageElement.classList.add('contact-mailer-message-'+level) messageElement.classList.add(messageId)
messageElement.id = messageId
messageElement.title = 'Cliquer pour fermer'
messageElement.onclick = () => {
messageElement.parentNode.removeChild(messageElement)
}
/* Jump to message */
const url = location.href; //Save down the URL without hash.
location.href = "#"+messageId; //Go to the target element.
history.replaceState(null,null,url); //Don't like hashes. Changing it back.
setTimeout(() => { setTimeout(() => {
try {
messageContainer.removeChild(messageElement) messageContainer.removeChild(messageElement)
} catch (e) {} /* Silently fail if message was already deleted by click */
}, 10000) }, 10000)
} }
@ -22,16 +39,23 @@ function interceptForm (formId) {
/* Create the message container */ /* Create the message container */
const messageBox = document.createElement('div') const messageBox = document.createElement('div')
messageBox.classList.add('contact-mailer-message-container') messageBox.classList.add('contact-mailer-message-container')
formElem.parentNode.insertBefore(messageBox, formElem) formElem.before(messageBox)
/* Intercept the submit event */ /* Intercept the submit event */
formElem.onsubmit = async (e) => { formElem.onsubmit = async (e) => {
e.preventDefault() e.preventDefault()
/* Add loading text */
const submitButton = formElem.querySelector('[type="submit"]')
const loadingText = document.createElement('span')
loadingText.textContent = 'Envoi en cours…'
submitButton.after(loadingText)
/* XHR */
fetch(formElem.action, { fetch(formElem.action, {
method: formElem.method, method: formElem.method,
body: new FormData(formElem) body: new FormData(formElem)
}) })
.then(data => { .then(data => {
loadingText.parentNode.removeChild(loadingText)
if (!data.ok || data.status == 500) { if (!data.ok || data.status == 500) {
message(messageBox, 'error', 'Erreur du service denvoi. Réessayez plus tard ou contactez https://jean-cloud.net') message(messageBox, 'error', 'Erreur du service denvoi. Réessayez plus tard ou contactez https://jean-cloud.net')
} else if (data.ok || data.status == 200) { } else if (data.ok || data.status == 200) {
@ -40,9 +64,24 @@ function interceptForm (formId) {
} }
}) })
.catch((error) => { .catch((error) => {
loadingText.parentNode.removeChild(loadingText)
message(messageBox, 'error', 'Impossible denvoyer le formulaire. Vérifiez votre connexion internet ou réessayez plus tard.') message(messageBox, 'error', 'Impossible denvoyer le formulaire. Vérifiez votre connexion internet ou réessayez plus tard.')
}) })
} }
} }
/* 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-ZMVeO+6AH9XFYHVaNjAylDyzMg30SupfmEQ2u2VjPGLF1ZK4ZF6MXle1JGO5vYLv'
document.head.appendChild(link);
interceptForm ('contact-mailer-form') interceptForm ('contact-mailer-form')
})()

View File

@ -1,11 +1,16 @@
{ {
"name": "jean-cloud-contact-mailer-client", "name": "jean-cloud-contact-mailer-client",
"version": "1.0.0", "version": "1.0.8",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1",
"prepublishOnly": "npm-auto-version",
"postpublish": "git push origin --tags"
}, },
"author": "", "author": "",
"license": "ISC" "license": "ISC",
"dependencies": {
"npm-auto-version": "^1.0.0"
}
} }

View File

@ -6,6 +6,7 @@
border: 1px solid; border: 1px solid;
padding: 3px; padding: 3px;
border-radius: 2px; border-radius: 2px;
cursor:pointer;
} }
.contact-mailer-message-error { .contact-mailer-message-error {