{"version":3,"sources":["../src/scripts/common/appMenuNavigation.js","../src/scripts/common/commons.js","../src/scripts/common/dialog.js","../src/scripts/common/espaceClient.js","../src/scripts/common/helpers.js","../src/scripts/common/modalPopup.js","../src/scripts/common/searchBar.js","../src/scripts/common/selection.js","../src/scripts/common/toolsPromise.js","../src/scripts/lib/autocomplete.js","../src/scripts/form/formulaireClasse.js","../src/scripts/customElements/boxes.js","../src/scripts/customElements/ScrollSnapCarousel.js"],"names":["config","module","exports","_itemsMenu","WeakMap","_objBackLibelles","appMenuNavigation","_classCallCheck","this","_classPrivateFieldInitSpec","writable","value","document","querySelectorAll","ongletDestinations","ongletEnvies","ongletEsprit","_createClass","key","event","appEC","require","espaceClient","initialize","isMenuMobile","forEach","el","removeAttribute","classList","remove","get","getElementById","helpers","getWindowWidth","settingsApp","breakpoint","undefined","body","dataset","tab","set","libelle","querySelector","innerText","self","addEventListener","e","target","parent","isOpen","JSON","parse","getAttribute","ongletTarget","pathname","href","preventDefault","_closeOnglet","window","location","_openOnglet","action","parentElement","localName","_toConsumableArray","includes","onglet","button","toggle","app","popin","open","_hideAll","dispatchEvent","CustomEvent","bubbles","detail","state","targetOnglet","_target$parentElement","tabSystem","_backNavigation","search","show","style","position","recherche","moteurRecherche","loadMoteurRecherche","id","setAttribute","link","_this","_classPrivateFieldGet","add","innerHTML","trim","_GetMenu","defaultZone","libelleBackBtn","concat","ongletOpen","hasTabOpen","param","urlPost","container","data","slugzone","urlDestination","fetch","method","headers","X-Robots-Tag","URLSearchParams","then","response","text","html","err","console","warn","elementExist","zone","substring","label","className","children","replace","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","o","minLen","_arrayLikeToArray","n","Object","prototype","toString","call","slice","constructor","name","Array","from","test","iter","Symbol","iterator","isArray","len","length","i","arr2","commons","classConfig","loading","NAVIGATOR","isiPad","navigator","userAgent","toLowerCase","isSafari","HTMLElement","isMobileSafari","match","isDeviceiPad","settings","init","convertButtonToLink","loader","loaded","configCss","flecheScrollTop","resizeScreen","customElements","define","rgpd","niveaux","attribute","arguments","element","section","voyage","classLibelle","a","arrow","btnVisibility","visibility","Number","scrollY","passive","scroll","top","left","behavior","_document$body$classL","documentElement","classDevice","pageNotIpad","classBody","isTouchDevice","push","apply","orientationScreen","getOrientation","reload","ErreurJs","title","message","objectConfig","url","_typeof","obj","instance","Constructor","_defineProperties","props","descriptor","enumerable","configurable","defineProperty","_toPropertyKey","protoProps","staticProps","arg","_toPrimitive","String","input","hint","prim","toPrimitive","res","dialogElement","btn","elem","dialogBtn","closeElement","showModal","wrapper","offset","overflow","error","close","closeDialog","_require","_super","_inherits","_createSuper","togglePopin","btnEC","urlPopin","popinIsLoaded","popinIsActive","setIsLogged","logged","contains","httpRequest","XMLHttpRequest","onreadystatechange","send","onloadend","getBoundingClientRect","width","isMobile","ontouchstart","isTablet","Boolean","innerHeight","innerWidth","getCookie","cookie","parts","split","decodeURIComponent","pop","shift","setCookie","days","d","Date","setTime","getTime","toGMTString","deleteCookie","getPage","page","identifiant","isEmptyObject","object","property","hide","display","_dispatchEventSubmitForm","selector","simulateEvent","evt","trigger","etype","custom","Event","readMore","classToggle","hasHtmlContent","states","true","false","delay","setTimeout","nbLignesAffichees","getComputedStyle","getPropertyValue","hauteurLigne","isNaN","parseInt","lineHeight","hauteurBloc","height","hauteurButton","marginBottom","marginTop","isObjectEmpty","childNodes","nodeValue","textContent","switchTelDesktop","Math","random","numero","createElement","parentNode","insertBefore","keys","rect","bodyElem","bottom","scrollTop","scrollLeft","uncheckOthersOnCheck","blockParentSelector","checkboxes","checked","setActiveItemInactiveSiblings","arrayOfItems","itemToActive","callback","activeClass","sib","modalPopup","overrideStyles","emptyOnClose","items","popupModal","popupTitle","popupContent","closeButton","overlayBody","classPopupVisible","classOverlayBodyVisible","idButtonValid","idButtonCancel","overrideStylesFunction","libelleCancelButton","libelleValidButton","reopen","eventClose","eventChoose","reinitListener","callbackFunctionLaunch","replaceWith","cloneNode","searchBar","inputSearch","URL_AUTOCOMPLETE","ev","focus","autocomplete","minLength","update","array","xhr","DONE","OK","readyState","status","suggestions","disabled","customize","inputRect","maxHeight","render","item","itemElement","indexOf","onSelect","submit","NB_MAX_CIRCUITS","favoris","nbMaxCircuits","NOM_COOKIE","nomCookie","DUREE_COOKIE","dureeCookie","ARRAY_ID_LINK_SELECTION","linkSelectionIds","TEXTE_MAX_CIRCUIT_FAVORIS","textMax","AREAS_WITH_TOGGLE_FAVORIS","areaWithToggleFavoris","selection","setLinkOrNot","pageWithToggleFavoris","checkFavori","addCircuit","_hasFavori","_toggleLink","idShow","idHide","deleteCircuit","codeProduit","mesFavoris","_convertFavorisToArray","mesFavorisNew","_deleteFavori","_setElementNotActive","_setFavori","join","codeProduitData","codeproduit","hasMaxSelectedProducted","_isCodeProduitInSelection","popupAlert","_setElementActive","_getFavoris","oldFavoris","newFavoris","alert","int","log","getConfig","nb_max_circuits","nom_cookie","duree_cookie","array_id_link_selection","texte_max_circuit_favoris","areas_with_toggle_favoris","table","_regeneratorRuntime","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","type","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","hasOwn","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","done","methodName","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","values","iterable","iteratorMethod","iteratorSymbol","Op","hasOwnProperty","desc","$Symbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","Promise","val","reverse","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","privateMap","_checkPrivateRedeclaration","privateCollection","has","receiver","_classExtractFieldDescriptor","_classApplyDescriptorGet","_optionsPromise","toolsPromise","Content-Type","x","params","options","optionsPromise","_ref","_callee","_context","json","_x","_x2","_ref2","_callee2","_context2","_x3","_x4","global","factory","amd","detach","removeChild","isIOS","MSStream","clearDebounceTimer","debounceTimer","clearTimeout","attach","doc","appendChild","containerDisplayed","clear","keypressCounter","inputValue","selected","updatePosition","containerStyle","offsetWidth","pageYOffset","offsetHeight","firstChild","currentValue","renderGroup","groupName","groupDiv","fragment","createDocumentFragment","prevGroup","group","div","stopPropagation","emptyMsg","empty","updateScroll","updateIfDisplayed","resizeEventHandler","scrollEventHandler","keyupEventHandler","keyCode","which","ignore","_i","ignore_1","startFetch","elements","getElementsByClassName","previous","previousElementSibling","offsetTop","selectBottom","containerBottom","selectPrev","selectNext","keydownEventHandler","containerIsDisplayed","preventSubmit","focusEventHandler","showOnFocus","savedKeypressCounter","debounceWaitMs","blurEventHandler","activeElement","destroy","removeEventListener","keyUpEventName","mobileFirefox","formulaireDefaults","hasCivilite","hasTelephone","hasScrollToFirstError","attribut","boxinput","btnValidation","indicatif","select","classes","errorField","selectors","fieldsList","fieldClass","fieldClassName","fieldActiveClassName","fieldFilledClassName","fieldErrorClassName","classValidation","msg","charactersForbidden","noTelephone","formatTelephone","fields","mobile","fixe","telephone","validationIdMsg","regex","charactersAlpha","regexTel","Formulaire","_objectSpread","idFormulaire","form","formSubmit","noValidate","fieldsRequired","filter","field","required","validateField","fieldsOptionnalNoEmpty","optionnal","indicatifTelephonique","fieldsTel","fieldsIndicatif","submitter","dataFormRequete","_isFormValid","validationForm","firstError","fieldsInvalides","_showError","fieldsInvalidCustom","hasTelephoneMobile","closest","indicatifFields","formSelect","_isFieldValid","atLeast","_hasAtLeastOneSelected","formMsg","_step","errors","_iterator","_createForOfIteratorHelper","s","scrollIntoView","block","inline","f","nom","prenom","nomUsage","controleSaisieCoordonnesDoublons","modale","messageDoublonNomSaisie","libellebouton","idNomUsage","$","is","attention","localisation","arrayOfUseCase","caseLibelle","isTrue","case","_getTextMessageErreur","index","libelleMessageErreur","element_1","element_2","caseNomUsageContainNom","idForm","_createErrorMsg","typeField","_validateSelect","_validateInput","_validateCheckbox","_validateEmail","_validateTel","_validateNumber","_validateTextarea","errorSelector","events","_loop","_events","validity","valueMissing","patternMismatch","date","toLocaleDateString","now","anneeMin","_input$dataset$formMs","setCustomValidity","min","valid","isCivilite","emailInput","inputNumber","rangeUnderflow","telInput","_verificationIndicatifTelephonique","checkIndicatif","idTel","idIndicatif","returnMsg","noCheckIndicatif","formulaire","checkValidity","_isTelephoneFieldValid","_isCiviliteFieldValid","validation","every","bool","oneChecked","some","valueMobile","valueFixe","hasNumero","isValid","numeroIsValid","mobileIsValid","fixeIsValid","civilite","span","format","formIndicatif","pattern","msgError","arrayFieldFem","arrayFieldVoy","typeMismatch","placeholder","tooLong","maxLength","tooShort","badInput","_el$dataset$formMsg","unite","isCallback","selectIndicatif","box","_boxInput","selectedIndex","indicatifNumerique","_HTMLElement","shadow","attachShadow","mode","onclick","shadowRoot","_wrapNativeSuper","_HTMLElement2","_this2","_super2","svg","createElementNS","fillColor","posX","level","activite","path","pos","circle","engagement","toggleField","_HTMLElement3","_this3","_super3","ScrollSnap","alignment","gap","count","hasBullets","hasBulletsHover","infinity","coeffArrow","sizeArrow","opacityArrow","cached","scrollToNextPage","bind","_assertThisInitialized","scrollToPreviousPage","calculateGalleryItemSize","isTouch","gallery","galleryScroller","currentIndex","setActivebullet","setIfLastShow","_target$closest$query","indexBullet","coeff","scrollBy","galleryItemSize","src","scrollHandler","newIndex","slotElement","nodes","assignedNodes","flatten","firstSlottedElement","find","node","nodeType","Node","ELEMENT_NODE","clientWidth","nbItemsShow","floor","lastVisible","lastShow","max","bullets","circles","_this$opacityArrow","_this$opacityArrow2","generateBullets"],"mappings":"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","file":"static/scripts/common.js.map","sourcesContent":["let config = config || {};\r\n\r\nmodule.exports = class appMenuNavigation {\r\n\r\n\t#itemsMenu = document.querySelectorAll('.app__menu [data-target]');\r\n\t#objBackLibelles = {\r\n\t\tongletDestinations: 'Nos destinations',\r\n\t\tongletEnvies: 'Nos envies',\r\n\t\tongletEsprit: 'Notre esprit'\r\n\t}\r\n\r\n\tconstructor(config) {\r\n\t\tthis.config = config;\r\n\t}\r\n\r\n\tinitialize() {\r\n\t\tthis.event();\r\n\r\n\t\t/// Module connexion espace client\r\n\t\tconst appEC = require(\"common/espaceClient\");\r\n\t\tconst espaceClient = new appEC();\r\n\t\tespaceClient.initialize();\r\n\r\n\t\t/// Spécificités mobile\r\n\t\tif (this.isMenuMobile) {\r\n\t\t\t/// Onglet envies\r\n\t\t\tdocument.querySelectorAll('.container--envies details').forEach(el => {\r\n\t\t\t\tel.removeAttribute('open')\r\n\t\t\t})\r\n\t\t\t/// Tab d'un onglet : sur mobile, aucun n'est actif\r\n\t\t\tdocument.querySelectorAll('.tab-content').forEach(el => el.classList.remove('is-active'))\r\n\t\t}\r\n\t}\r\n\r\n\tget defaultZone() {\r\n\t\tif (document.getElementById('zoneParDefaut') !== null) {\r\n\t\t\treturn document.getElementById('zoneParDefaut').value;\r\n\t\t}\r\n\t}\r\n\tget isMenuMobile() {\r\n\t\treturn helpers.getWindowWidth() < settingsApp.breakpoint;\r\n\t}\r\n\tget hasTabOpen() {\r\n\t\treturn document.body.dataset.tab !== undefined\r\n\t}\r\n\r\n\tset libelleBackBtn(libelle) {\r\n\t\tdocument.querySelector('[data-button=\"back-menu\"]').innerText = libelle\r\n\t}\r\n\r\n\tevent() {\r\n\r\n\t\tlet self = this;\r\n\r\n\t\tdocument.body.addEventListener('click', (e) => {\r\n\t\t\tconst {\r\n\t\t\t\ttarget\r\n\t\t\t} = e;\r\n\r\n\t\t\t/// Click sur les liens de 1er niveau : onglet ou fermeture ou go to url\r\n\t\t\tif (target.dataset.parent === 'menu') {\r\n\t\t\t\tlet isOpen = JSON.parse(target.getAttribute('aria-expanded'));\r\n\t\t\t\tlet ongletTarget = target.dataset.target;\r\n\t\t\t\tif (isOpen) {\r\n\t\t\t\t\t//Correspond à un [href] vide\r\n\t\t\t\t\tif (target.pathname === '/' || target.href === undefined) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tself._closeOnglet(document.getElementById(target.dataset.target))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// On click sur un lien vers la page courante\r\n\t\t\t\t\t\tif (target.pathname === window.location.pathname) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\tself._closeOnglet(document.getElementById(target.dataset.target))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tongletTarget !== undefined && self._openOnglet(target, ongletTarget);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t/// Click button fermeture onglet\r\n\t\t\telse if (target.dataset.action === 'closeOnglet') {\r\n\t\t\t\tself._closeOnglet(target.parentElement)\r\n\t\t\t}\r\n\t\t\t/// Click sur l'ombré [desktop uniquement]\r\n\t\t\telse if (target.localName === 'body' && [...target.classList].includes('has-onglet-open')) {\r\n\t\t\t\tself._closeOnglet(document.getElementById(target.dataset.onglet))\r\n\t\t\t}\r\n\t\t\t/// Bouton open menu on mobile\r\n\t\t\telse if (target.dataset.button === 'toggle-menu') {\r\n\t\t\t\tdocument.querySelector('.app__menu').classList.toggle('is-open');\r\n\t\t\t\tsettingsApp.app !== 'TCA' && document.getElementById('espace-client').classList.remove('is-active');\r\n\t\t\t\tdelete document.body.dataset.popin;\r\n\t\t\t\ttarget.classList.toggle('tcon-transform');\r\n\r\n\t\t\t\tif (document.body.dataset.open !== undefined) {\r\n\t\t\t\t\tif (JSON.parse(document.body.dataset.open)) {\r\n\t\t\t\t\t\tself._hideAll();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdocument.body.dataset.open = !JSON.parse(document.body.dataset.open);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.body.dataset.open = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Création d'un événement state menu\r\n\t\t\t\tdocument.body.dispatchEvent(\r\n\t\t\t\t\tnew CustomEvent('stateMenu', {\r\n\t\t\t\t\t\tbubbles: true,\r\n\t\t\t\t\t\tdetail: {\r\n\t\t\t\t\t\t\tstate: () => {\r\n\t\t\t\t\t\t\t\treturn document.body.dataset.open\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\t/// Click sur tab d'un onglet\r\n\t\t\telse if ((target.parentElement != null && target.parentElement.dataset.targetOnglet != null) || target.dataset.targetOnglet != null) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tif (target.parentElement.dataset.targetOnglet !== '') {\r\n\t\t\t\t\tself.tabSystem(target.parentElement.dataset.targetOnglet ?? target.dataset.targetOnglet);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (target.dataset.button === 'back-menu') {\r\n\t\t\t\tself._backNavigation(target)\r\n\t\t\t}\r\n\t\t\t/// Bouton open search on mobile\r\n\t\t\telse if (target.dataset.button == 'toggle-recherche') {\r\n\t\t\t\ttarget.classList.toggle('tcon-transform');\r\n\t\t\t\tdocument.querySelector('.search--banner').classList.toggle('is-active');\r\n\r\n\t\t\t\tif (document.body.dataset.search !== undefined) {\r\n\t\t\t\t\t// if (JSON.parse(document.body.dataset.search)) {\r\n\t\t\t\t\t// \tself._hideAll();\r\n\t\t\t\t\t// }\r\n\t\t\t\t\tdocument.body.dataset.search = !JSON.parse(document.body.dataset.search);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.body.dataset.search = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (document.querySelector('.app__account').getAttribute('style') === null) {\r\n\t\t\t\t\thelpers.show(document.querySelector('.app__account'))\r\n\t\t\t\t\tdocument.querySelector('.app__account').style.position = 'absolute';\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.querySelector('.app__account').removeAttribute('style');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Recherche avancée différente TDV|TCA vs GN : \\www.terdav.com\\Views\\Home\\Index.aspx > appel du module\r\n\t\t\telse if (target.dataset.recherche === 'advanced' && settingsApp.app === 'GNG') {\r\n\t\t\t\tconst app = require(\"common/moteurRecherche\");\r\n\t\t\t\tconst moteurRecherche = new app(settingsApp);\r\n\t\t\t\tmoteurRecherche.loadMoteurRecherche();\r\n\t\t\t} else if (target.id === \"btnSearchEngineClose\") {\r\n\t\t\t\tdocument.body.classList.remove('has-searchengine-open');\r\n\t\t\t\tdocument.getElementById('searchengine').classList.remove('is-shown')\r\n\t\t\t}\r\n\t\t\t// else {\r\n\t\t\t// \tconsole.log(target)\r\n\t\t\t// }\r\n\t\t})\r\n\t}\r\n\r\n\t_hideAll() {\r\n\t\tdelete document.body.dataset.onglet;\r\n\t\tdelete document.body.dataset.tab;\r\n\t\tdocument.body.classList.remove('has-onglet-open');\r\n\t\tdocument.querySelectorAll('.app__onglet').forEach(el => {\r\n\t\t\tel.classList.remove('is-open')\r\n\t\t});\r\n\t\tdocument.querySelectorAll('.tab-content').forEach(el => {\r\n\t\t\tel.classList.remove('is-active')\r\n\t\t});\r\n\t\tdocument.querySelectorAll('.item--section').forEach(el => {\r\n\t\t\tel.setAttribute('aria-expanded', false)\r\n\t\t});\r\n\t}\r\n\t_openOnglet(link, onglet) {\r\n\t\tthis.#itemsMenu.forEach(el => {\r\n\t\t\tthis._closeOnglet(document.getElementById(el.dataset.target))\r\n\t\t})\r\n\t\tlink.setAttribute('aria-expanded', true);\r\n\t\tdocument.getElementById(onglet).classList.add('is-open');\r\n\t\tdocument.body.classList.add('has-onglet-open');\r\n\t\tdocument.body.dataset.onglet = onglet;\r\n\r\n\t\tif (onglet === \"ongletDestinations\" && document.getElementById('divContenuZone').innerHTML.trim() === '' && helpers.getWindowWidth() >= settingsApp.breakpoint) {\r\n\t\t\tsettingsApp.app === 'GNG' && this._GetMenu(this.defaultZone, '/Menu/GetMenuParZone', 'divContenuZone');\r\n\t\t} else if (onglet === \"ongletEsprit\") {\r\n\t\t\tif (document.getElementById('esprit').innerHTML.trim() === '') {\r\n\t\t\t\tthis._GetMenu(null, '/Menu/MenuEsprit', 'esprit');\r\n\t\t\t} else {\r\n\t\t\t\tdocument.querySelector('#ongletEsprit .tab-content').classList.add('is-active')\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (helpers.getWindowWidth() < settingsApp.breakpoint) {\r\n\t\t\tthis.libelleBackBtn = this.#objBackLibelles[onglet];\r\n\t\t}\r\n\t}\r\n\t_closeOnglet(onglet) {\r\n\t\tif (onglet !== null) {\r\n\t\t\tdocument.querySelector(`[data-target=\"${onglet.id}\"]`).setAttribute('aria-expanded', false);\r\n\t\t\tonglet.classList.remove('is-open');\r\n\t\t\tdocument.body.classList.remove('has-onglet-open');\r\n\t\t\tdelete document.body.dataset.onglet;\r\n\t\t}\r\n\t}\r\n\t_backNavigation(el) {\r\n\t\tlet ongletOpen = document.body.dataset.onglet;\r\n\r\n\r\n\t\tif (this.hasTabOpen) {\r\n\t\t\tdocument.querySelectorAll('.tab-content').forEach(el => el.classList.remove('is-active'));\r\n\t\t\tthis.libelleBackBtn = this.#objBackLibelles[ongletOpen];\r\n\t\t\tdelete document.body.dataset.tab;\r\n\t\t} else {\r\n\t\t\tdocument.getElementById(ongletOpen).classList.remove('is-open');\r\n\t\t\tdocument.body.classList.remove('has-onglet-open');\r\n\t\t\tdocument.querySelector(`[data-target=\"${ongletOpen}\"]`).setAttribute('aria-expanded', false);\r\n\t\t\tdelete document.body.dataset.onglet;\r\n\t\t}\r\n\t}\r\n\t_GetMenu(param, urlPost, container) {\r\n\t\tlet data = null;\r\n\t\tif (urlPost === '/Menu/GetMenuParZone') {\r\n\t\t\tdata = {\r\n\t\t\t\tslugzone: param\r\n\t\t\t}\r\n\t\t} else if (param != null) {\r\n\t\t\tdata = {\r\n\t\t\t\turlDestination: param\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfetch(urlPost, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'X-Robots-Tag': 'noindex, nofollow'\r\n\t\t\t},\r\n\t\t\tbody: new URLSearchParams(data)\r\n\t\t}).then(function (response) {\r\n\t\t\t// The API call was successful!\r\n\t\t\treturn response.text();\r\n\t\t}).then(function (html) {\r\n\t\t\t// This is the HTML from our response as a text string\r\n\t\t\tdocument.getElementById(container).innerHTML += html;\r\n\t\t}).catch(function (err) {\r\n\t\t\t// There was an error\r\n\t\t\tconsole.warn('Something went wrong.', err);\r\n\t\t});\r\n\t}\r\n\r\n\t///\r\n\t/// Fonction gérant l'affichage du contenu des sous-onglets\r\n\t///\r\n\ttabSystem(id) {\r\n\t\tif (this.isMenuMobile) {\r\n\t\t\tdocument.body.dataset.tab = id;\r\n\t\t\tdocument.querySelectorAll('.tab-content').forEach(el => el.classList.remove('is-active'))\r\n\r\n\t\t\tif (helpers.elementExist(`#${id}`)) {\r\n\t\t\t\tdocument.getElementById(id).classList.add('is-active');\r\n\t\t\t}\r\n\r\n\t\t\tif (document.body.dataset.onglet === \"ongletDestinations\") {\r\n\t\t\t\tlet zone = id.substring(5);\r\n\t\t\t\tthis.libelleBackBtn = document.querySelector(`[data-target-onglet=\"${id}\"]`).dataset.label;\r\n\t\t\t\tif (document.getElementById(id) === null || document.getElementById(id).innerHTML.trim() === '') {\r\n\t\t\t\t\tthis._GetMenu(zone, '/Menu/GetMenuParZone', 'divContenuZone')\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (document.querySelector(`[data-target-onglet=\"${id}\"]`).className.includes('is-active')) {\r\n\t\t\t\tif (document.querySelector(`[data-target-onglet=\"${id}\"]`).href !== '') {\r\n\t\t\t\t\twindow.location.href = document.querySelector(`[data-target-onglet=\"${id}\"] a`).href\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t[...document.querySelector(`[data-target-onglet=\"${id}\"]`).parentElement.children].forEach(el => el.classList.remove('is-active'));\r\n\t\t\tdocument.querySelector(`[data-target-onglet=\"${id}\"]`).classList.add('is-active');\r\n\r\n\r\n\t\t\tif (document.getElementById(id) === null) {\r\n\t\t\t\tthis._GetMenu(id.replace('zone-', ''), '/Menu/GetMenuParZone', 'divContenuZone');\r\n\t\t\t\t[...document.getElementById('divContenuZone').children].forEach(el => el.classList.remove('is-active'));\r\n\t\t\t\tsettingsApp.app != 'GNG' && document.getElementById('zone-selection').classList.remove('is-active');\r\n\t\t\t} else {\r\n\t\t\t\t[...document.getElementById('divContenuZone').children].forEach(el => el.classList.remove('is-active'));\r\n\t\t\t\tsettingsApp.app != 'GNG' && document.getElementById('zone-selection').classList.remove('is-active');\r\n\t\t\t\tdocument.getElementById(id).classList.add('is-active');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","'use strict';\r\n\r\nvar commons = {\r\n\tclassConfig: {\r\n\t\tloading: 'loading'\r\n\t},\r\n\tNAVIGATOR: {\r\n\t\tisiPad: () => {return /ipad/i.test(navigator.userAgent.toLowerCase())},\r\n\t\tisSafari: () => {return /constructor/i.test(window.HTMLElement)},\r\n\t\tisMobileSafari: () => {return navigator.userAgent.match(/(iPod|iPhone|iPad)/) && navigator.userAgent.match(/AppleWebKit/)},\r\n\t\tisDeviceiPad: (settings) => {return /safari/i.test(navigator.userAgent.toLowerCase()) && settings.helpers.getWindowWidth() === 768}\r\n\t},\r\n\r\n\tinit(settings) {\r\n\t\t/// Appel des méthodes communes à l'ensemble du site\r\n\t\tthis.convertButtonToLink();\r\n\t\tthis.loader.loaded();\r\n\t\tthis.configCss(settings, this.NAVIGATOR);\r\n\t\tthis.flecheScrollTop();\r\n\t\tthis.resizeScreen(settings, this);\r\n\r\n\t\t/// Appel des customs elements\r\n\t\tcustomElements.define('box-rgpd', rgpd);\r\n\t\tcustomElements.define('box-niveaux', niveaux);\r\n\t},\r\n\r\n\tconvertButtonToLink(attribute = 'data-url') {\r\n\t\t[...document.querySelectorAll(`[${attribute}]`)].forEach(element => {\r\n\t\t\telement.addEventListener('click', () => {\r\n\t\t\t\twindow.location.href = element.getAttribute(attribute);\r\n\t\t\t});\r\n\t\t\t/// Sur les LR Belge (#13768), on supprime l'attribut\r\n\t\t\tif (settingsApp.section === 'listeresultats') {\r\n\t\t\t\tdelete element.dataset.voyage;\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\tloader: {\r\n\t\tclassLibelle: 'loading',\r\n\t\tstate: false,\r\n\t\tloaded: function () {\r\n\t\t\tdocument.body.classList.remove(this.classLibelle);\r\n\t\t\tthis.state = false;\r\n\t\t},\r\n\t\tloading: function () {\r\n\t\t\tdocument.body.classList.add(this.classLibelle);\r\n\t\t\tthis.state = true;\r\n\t\t}\r\n\t},\r\n\r\n\tflecheScrollTop(a = '#uparrow') {\r\n\t\tlet arrow = document.querySelector(a);\r\n\t\tconst btnVisibility = () => {\r\n\t\t\tconst visibility = ['hidden','visible']\r\n\t\t\tarrow.style.visibility = visibility[Number(window.scrollY > 50)];\r\n\t\t\tarrow.classList.toggle('fadeIn',window.scrollY > 50);\r\n\t\t};\r\n\t\tdocument.addEventListener('scroll', btnVisibility, { passive: true });\r\n\t\tarrow.addEventListener('click', () => {\r\n\t\t\twindow.scroll({\r\n\t\t\t\ttop: 0,\r\n\t\t\t\tleft: 0,\r\n\t\t\t\tbehavior: 'smooth'\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\tconfigCss(settings) {\r\n\t\tdocument.documentElement.classList.remove('nojs');\r\n\t\tconst classDevice = ['not-touch','touch'],\r\n\t\t\t\t\tpageNotIpad = ['produit','inscription','relanceoption','relancedevis','relancesolde','paiementlibre'];\r\n\t\tlet classBody = [\r\n\t\t\tclassDevice[Number(settings.helpers.isTouchDevice())]\r\n\t\t]\r\n\t\tif (this.NAVIGATOR.isSafari() || this.NAVIGATOR.isMobileSafari()) {\r\n\t\t\tclassBody.push('safari');\r\n\t\t}\r\n\t\tif ((this.NAVIGATOR.isiPad() || this.NAVIGATOR.isDeviceiPad(settings)) && pageNotIpad.includes(settingsApp.section)) {\r\n\t\t\tclassBody.push('isiPad');\r\n\t\t}\r\n\t\tdocument.body.classList.add(...classBody);\r\n\t},\r\n\r\n\tresizeScreen(config, self) {\r\n\t\tlet orientationScreen = config.helpers.getOrientation();\r\n\t\twindow.addEventListener('resize', () => {\r\n\t\t\tself.configCss(config);\r\n\t\t\tif (self.NAVIGATOR.isMobileSafari()) {\r\n\t\t\t\tif (orientationScreen !== config.helpers.getOrientation()) {\r\n\t\t\t\t\twindow.location.reload()\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t// * MODULES\r\n\tErreurJs(title, message, objectConfig) {\r\n\r\n\t\tlet url = \"/Application/ErreurJs\",\r\n\t\t\tdata = {\r\n\t\t\t\ttitle: title,\r\n\t\t\t\tmessage: message,\r\n\t\t\t\tobjectConfig: objectConfig\r\n\t\t\t};\r\n\r\n\t\tfetch(url, {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'X-Robots-Tag': 'noindex, nofollow'\r\n\t\t\t\t},\r\n\t\t\t\tbody: new URLSearchParams(data)\r\n\t\t\t})\r\n\t\t\t.catch(function (err) {\r\n\t\t\t\t// There was an error\r\n\t\t\t\tconsole.warn('Something went wrong.', err);\r\n\t\t\t});\r\n\t}\r\n}\r\nmodule.exports = commons;","'use strict';\r\n\r\nconst helpers = require(\"./helpers\");\r\n\r\nmodule.exports = class dialogElement {\r\n\tconstructor() {\r\n\t\tthis.btn = document.querySelectorAll('[data-dialog-btn]');\r\n\t}\r\n\tinitialize() {\r\n\t\tthis.btn.forEach(elem => {\r\n\t\t\tlet dialogElement = document.getElementById(elem.dataset.dialogBtn),\r\n\t\t\t\t\tcloseElement = dialogElement.querySelector('[value=\"close\"]');\r\n\t\t\telem.addEventListener('click', function onOpen(e) {\r\n\t\t\t\tif(e.target.value !== 'close') {\r\n\t\t\t\t\tif (typeof dialogElement.showModal === \"function\") {\r\n\t\t\t\t\t\tif(!helpers.isTouchDevice()) {\r\n\t\t\t\t\t\t\tlet wrapper = dialogElement.parentElement;\r\n\t\t\t\t\t\t\tdialogElement.style.left = helpers.offset(wrapper).left + \"px\";\r\n\t\t\t\t\t\t\tdialogElement.style.top = helpers.offset(wrapper).top + \"px\";\r\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'hidden';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdialogElement.showModal();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconsole.error(\"L'API n'est pas prise en charge par ce navigateur.\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tcloseElement.addEventListener('click', function onOpen(e) {\r\n\t\t\t\tif (typeof dialogElement.close === \"function\") {\r\n\t\t\t\t\t!helpers.isTouchDevice() && document.body.removeAttribute('style');\r\n\t\t\t\t\tdialogElement.close();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.error(\"L'API n'est pas prise en charge par ce navigateur.\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.closeDialog(dialogElement)\r\n\t\t});\r\n\r\n\r\n\t}\r\n\tcloseDialog(el) {\r\n\t\tdocument.body.addEventListener('click', (e) => {\r\n\t\t\tif(e.target.localName === 'dialog') {\r\n\t\t\t\tif (typeof el.close === \"function\") {\r\n\t\t\t\t\tel.close();\r\n\t\t\t\t\t!helpers.isTouchDevice() && document.body.removeAttribute('style');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.error(\"L'API n'est pas prise en charge par ce navigateur.\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n}","module.exports = class espaceClient extends require(\"common/appMenuNavigation\") {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t}\r\n\tinitialize() {\r\n\t\tthis.togglePopin()\r\n\t}\r\n\ttogglePopin() {\r\n\t\t// Définition des variables et des états\r\n\t\tlet btnEC = document.getElementById('btnAccountEc');\r\n\t\tlet urlPopin = '/EspaceClient/Account/popinConnexion';\r\n\t\tlet popin = document.getElementById('espace-client');\r\n\t\tlet popinIsLoaded = false; // par défaut #espace-client est vide\r\n\t\tlet popinIsActive = false; // par défaut la popin est masquée\r\n\r\n\t\tif (btnEC != null) {\r\n\t\t\tbtnEC.addEventListener('click', function () {\r\n\t\t\t\t// Maj des états au click\r\n\t\t\t\tpopinIsLoaded = popin.innerHTML == '' ? false : true;\r\n\t\t\t\tpopinIsActive = popin.classList.contains('is-active');\r\n\t\t\t\tfunction setIsLogged() {\r\n\t\t\t\t\tif (document.querySelector('.is-connected') !== null) {\r\n\t\t\t\t\t\tdocument.getElementById('header').dataset.logged = 'True';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdocument.getElementById('header').dataset.logged = 'False';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Si la popin n'est pas loadée,\r\n\t\t\t\t// on fait la requête ajax\r\n\t\t\t\tif (!popinIsLoaded) {\r\n\t\t\t\t\tvar httpRequest = new XMLHttpRequest();\r\n\t\t\t\t\thttpRequest.onreadystatechange = function (data) {\r\n\t\t\t\t\t\tpopin.innerHTML = data.target.response;\r\n\t\t\t\t\t\tpopin.classList.add('is-active');\r\n\t\t\t\t\t};\r\n\t\t\t\t\thttpRequest.open(\"GET\", urlPopin);\r\n\t\t\t\t\thttpRequest.send();\r\n\t\t\t\t\thttpRequest.onloadend = document.getElementById('id1').value === 'home' && setIsLogged;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (popinIsActive) {\r\n\t\t\t\t\tdelete document.body.dataset.popin;\r\n\t\t\t\t\tpopin.classList.remove('is-active');\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tdocument.body.dataset.popin = 'ec';\r\n\t\t\t\t\tpopin.classList.add('is-active');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}","'use strict';\r\n\r\nconst helpers = {\r\n\tgetWindowWidth() {\r\n\t\treturn document.body.getBoundingClientRect().width;\r\n\t},\r\n\r\n\tisMobile: function () {\r\n\t\treturn !(this.getWindowWidth() >= 768);\r\n\t},\r\n\r\n\tisTouchDevice: function () {\r\n\t\treturn window.ontouchstart !== undefined;\r\n\t},\r\n\r\n\tisTablet: function () {\r\n\t\tBoolean(document.body.getBoundingClientRect().width < 1024 && document.body.getBoundingClientRect().width > 768);\r\n\t},\r\n\r\n\t/// @TOSEEScreen.orientation\r\n\tgetOrientation: function () {\r\n\t\treturn window.innerHeight > window.innerWidth ? 'portrait' : 'paysage';\r\n\t},\r\n\r\n\tgetCookie: function (name) {\r\n\t\tlet value = `; ${document.cookie}`;\r\n\t\tlet parts = value.split(`; ${name}=`);\r\n\t\tif (parts.length === 2) return decodeURIComponent(parts.pop().split(';').shift());\r\n\t},\r\n\r\n\tsetCookie: function (name, value, days) {\r\n\t\tvar d = new Date;\r\n\t\td.setTime(d.getTime() + 24 * 60 * 60 * 1000 * days);\r\n\t\tdocument.cookie = name + \"=\" + value + \";path=/;expires=\" + d.toGMTString();\r\n\t},\r\n\r\n\tdeleteCookie: function (name) {\r\n\t\tthis.setCookie(name, '', -1);\r\n\t},\r\n\r\n\tgetPage(page) {\r\n\t\tif (page !== undefined) {\r\n\t\t\treturn document.getElementById('id1').value === page; /// on est bien sur la page correspondante à id\r\n\t\t} else {\r\n\t\t\treturn document.getElementById('id1').value;\r\n\t\t}\r\n\t},\r\n\r\n\telementExist(identifiant) {\r\n\t\treturn document.querySelector(identifiant) !== null;\r\n\t},\r\n\r\n\tisEmptyObject(object) {\r\n\t\tfor (const property in object) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\thide(el) {\r\n\t\tel.style.display = 'none';\r\n\t},\r\n\r\n\tshow(el, value = 'block') {\r\n\t\tel.style.display = value;\r\n\t},\r\n\r\n\t_dispatchEventSubmitForm(obj, selector) {\r\n\t\tdocument.querySelector(selector).dispatchEvent(\r\n\t\t\tnew CustomEvent('submitForm', {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tdetail: {\r\n\t\t\t\t\tlibelle: () => {\r\n\t\t\t\t\t\treturn obj\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\t},\r\n\r\n\tsimulateEvent(id, evt) {\r\n\r\n\t\tconst trigger = (el, etype, custom) => {\r\n\t\t\tconst evt = custom ?? new Event(etype, {\r\n\t\t\t\tbubbles: true\r\n\t\t\t});\r\n\t\t\tel.dispatchEvent(evt);\r\n\t\t};\r\n\t\ttrigger(document.querySelector(`[data-simulated=\"${id}\"]`), evt);\r\n\t},\r\n\r\n\treadMore(container = '', selector, classToggle, hasHtmlContent, states) {\r\n\t\tlet self = this,\r\n\t\t\tlibelle = states || {\r\n\t\t\t\ttrue: 'Afficher plus',\r\n\t\t\t\tfalse: 'Afficher moins'\r\n\t\t\t},\r\n\t\t\tdelay = 200;\r\n\r\n\t\t// On masque le contenu avec un décalage\r\n\t\tsetTimeout(function () {\r\n\t\t\tdocument.querySelectorAll(`${container} [data-hide=\"true\"]`).forEach(el => {\r\n\r\n\t\t\t\tif (el.id === 'partageValeur') {\r\n\t\t\t\t\tlibelle = {\r\n\t\t\t\t\t\ttrue: 'En savoir plus',\r\n\t\t\t\t\t\tfalse: 'Moins de détails'\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// Cas Présentation\r\n\r\n\t\t\t\tif (el.querySelector('[data-readmore]') !== null) {\r\n\t\t\t\t\tlet nbLignesAffichees = +getComputedStyle(el).getPropertyValue('--nblines'),\r\n\t\t\t\t\t\thauteurLigne = isNaN(parseInt(getComputedStyle(el).lineHeight, 10)) ? parseInt(getComputedStyle(el).getPropertyValue('--app-lineHeight')) : parseInt(getComputedStyle(el.querySelector('[data-readmore]')).lineHeight, 10),\r\n\t\t\t\t\t\thauteurBloc = self.offset(el.querySelector('[data-readmore]')).height,\r\n\t\t\t\t\t\thauteurButton = el.querySelector('[data-toggle]') !== null ? self.offset(el.querySelector('[data-toggle]')).height + parseInt(getComputedStyle(el.querySelector('[data-readmore]')).marginBottom, 10) + parseInt(getComputedStyle(el.querySelector('[data-toggle]')).marginTop, 10) : 0;\r\n\t\t\t\t\t/// Si la hauteur du bloc non masqué > (Nombre de lignes affichées + 1) * hauteur d'une ligne\r\n\t\t\t\t\t/// on masque les lignes 2 + n\r\n\t\t\t\t\t/// sinon on masque le bouton 'Lire la suite'\r\n\t\t\t\t\tif (hauteurBloc > (nbLignesAffichees * hauteurLigne + hauteurButton)) {\r\n\t\t\t\t\t\tel.classList.add('is-overflow');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tel.querySelector('[data-toggle]') != null && el.querySelector('[data-toggle]').remove();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.classList.add('is-overflow');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}, delay);\r\n\r\n\t\tdocument.querySelectorAll(`${container} ${selector}`).forEach(el => {\r\n\t\t\tel.addEventListener('click', function (e) {\r\n\t\t\t\te.target.parentElement.classList.toggle(classToggle);\r\n\t\t\t\te.target.dataset.toggle = !JSON.parse(e.target.dataset.toggle);\r\n\t\t\t\t/// On garde le \r\n\t\t\t\tif (hasHtmlContent) {\r\n\t\t\t\t\tif (!self.isObjectEmpty(libelle)) {\r\n\t\t\t\t\t\te.target.childNodes[1].nodeValue = libelle[e.target.dataset.toggle];\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.target.textContent = libelle[e.target.dataset.toggle];\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t});\r\n\t},\r\n\r\n\t///\r\n\t/// Switch lien mobile span si desktop\r\n\t///\r\n\tswitchTelDesktop: function (a) {\r\n\t\tlet id = a;\r\n\r\n\t\tif (a === '') {\r\n\t\t\tid = `tel-${Math.random().toString(36).slice(2)}`;\r\n\t\t\tdocument.querySelectorAll('main [href^=\"tel:\"]').forEach(el => {\r\n\t\t\t\tel.id = id;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tlet selector = document.getElementById(id),\r\n\t\t\tnumero = selector.innerText,\r\n\t\t\twrapper = document.createElement('span');\r\n\t\twrapper.id = id;\r\n\r\n\t\tselector.parentNode.insertBefore(wrapper, selector);\r\n\t\tselector.remove();\r\n\r\n\t\twrapper.innerText = numero\r\n\t},\r\n\r\n\tisObjectEmpty(obj) {\r\n\t\treturn Object.keys(obj).length === 0 && obj.constructor === Object\r\n\t},\r\n\r\n\toffset(elem) {\r\n\t\tvar rect = elem.getBoundingClientRect(),\r\n\t\t\tbodyElem = document.body;\r\n\t\treturn {\r\n\t\t\tbottom: rect.bottom,\r\n\t\t\theight: rect.height,\r\n\t\t\ttop: rect.top + bodyElem.scrollTop,\r\n\t\t\tleft: rect.left + bodyElem.scrollLeft\r\n\t\t}\r\n\t},\r\n\r\n\tuncheckOthersOnCheck(blockParentSelector) {\r\n\t\tlet checkboxes = document.querySelectorAll(`${blockParentSelector} input`);\r\n\t\tdocument.querySelector(`${blockParentSelector}`).addEventListener('change', function (e) {\r\n\t\t\tcheckboxes.forEach((el) => {\r\n\t\t\t\tel.checked = el.id !== e.target.id ? false : e.target.checked;\r\n\t\t\t})\r\n\t\t});\r\n\t},\r\n\r\n\tsetActiveItemInactiveSiblings(arrayOfItems, itemToActive, callback, activeClass = 'is-active') {\r\n\t\t[...arrayOfItems].forEach(sib => sib.classList.remove(activeClass));\r\n\t\titemToActive.classList.add(activeClass);\r\n\t\ttypeof callback === 'function' && callback();\r\n\t}\r\n}\r\n\r\nmodule.exports = helpers;","var modalPopup = {\r\n\r\n\toverrideStyles: true,\r\n\temptyOnClose: true,\r\n\r\n\titems: {\r\n\t\tpopupModal: '[data-popup-modal=\"modal\"]',\r\n\t\tpopupTitle: '.popup-title',\r\n\t\tpopupContent: '.popup-content',\r\n\t\tcloseButton: '.popup-modal__close',\r\n\t\toverlayBody: '.body-blackout',\r\n\t\tclassPopupVisible: 'is--visible',\r\n\t\tclassOverlayBodyVisible: 'is-blacked-out',\r\n\t\tclassBody: 'has-overlay',\r\n\t\tidButtonValid: 'popupValidButton',\r\n\t\tidButtonCancel: 'popupCancelButton'\r\n\t},\r\n\r\n\toverrideStylesFunction: function () {\r\n\t\tvar items = this.items;\r\n\r\n\t\tdocument.querySelector(items.popupModal).style.width = '800px';\r\n\t\tdocument.querySelector(items.closeButton).style.width = '30px';\r\n\t\tdocument.querySelector(items.closeButton).style.height = '30px';\r\n\t},\r\n\r\n\topen: function (text, title, libelleCancelButton, libelleValidButton) {\r\n\t\tvar items = this.items;\r\n\t\tdocument.querySelector(items.popupModal).classList.add(items.classPopupVisible);\r\n\t\tdocument.querySelector(items.overlayBody).classList.add(items.classOverlayBodyVisible);\r\n\t\tdocument.body.classList.add(items.classBody);\r\n\t\tdocument.querySelector(items.popupModal).querySelector(items.popupTitle).innerHTML = (title === undefined) ? '' : title;\r\n\t\tdocument.querySelector(items.popupModal).querySelector(items.popupContent).innerHTML = text;\r\n\t\tif (document.getElementById(this.items.idButtonCancel) != null) {\r\n\t\t\tdocument.getElementById(this.items.idButtonCancel).textContent = libelleCancelButton;\r\n\t\t}\r\n\t\tif (document.getElementById(this.items.idButtonValid) != null) {\r\n\t\t\tdocument.getElementById(this.items.idButtonValid).textContent = libelleValidButton;\r\n\t\t}\r\n\r\n\t\tif (document.getElementById(this.items.idButtonValid) !== null) {\r\n\t\t\tif (libelleValidButton === \"\")\r\n\t\t\t\tdocument.getElementById(this.items.idButtonValid).style.visibility = \"hidden\";\r\n\t\t\telse {\r\n\t\t\t\tdocument.getElementById(this.items.idButtonValid).style.visibility = \"visible\";\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\treopen: function () {\r\n\t\tvar items = this.items;\r\n\t\tdocument.querySelector(items.popupModal).classList.add(items.classPopupVisible);\r\n\t\tdocument.querySelector(items.overlayBody).classList.add(items.classOverlayBodyVisible);\r\n\t\tdocument.body.classList.add(items.classBody);\r\n\t},\r\n\r\n\tclose: function () {\r\n\t\tvar items = this.items;\r\n\t\tdocument.querySelector(items.popupModal).classList.remove(items.classPopupVisible);\r\n\t\tdocument.querySelector(items.overlayBody).classList.remove(items.classOverlayBodyVisible);\r\n\t\tdocument.body.classList.remove(items.classBody);\r\n\t\tif (modalPopup.emptyOnClose) {\r\n\t\t\tdocument.querySelector(items.popupModal).querySelector(items.popupTitle).innerHTML = '';\r\n\t\t\tdocument.querySelector(items.popupModal).querySelector(items.popupContent).innerHTML = '';\r\n\t\t}\r\n\r\n\t},\r\n\r\n\teventClose: function () {\r\n\t\tvar items = this.items;\r\n\t\tdocument.querySelector(items.closeButton).addEventListener('click', function () {\r\n\t\t\tmodalPopup.close();\r\n\t\t});\r\n\t\tdocument.querySelector(items.overlayBody).addEventListener('click', function () {\r\n\t\t\tmodalPopup.close();\r\n\t\t});\r\n\t},\r\n\r\n\teventChoose: function () {\r\n\t\tmodalPopup.reinitListener();\r\n\t\tmodalPopup.eventClose();\r\n\t\tif (document.getElementById(this.items.idButtonValid) != null) {\r\n\t\t\tdocument.getElementById(this.items.idButtonValid).addEventListener('click', function () {\r\n\t\t\t\tmodalPopup.callback();\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (document.getElementById(this.items.idButtonCancel) != null) {\r\n\t\t\tdocument.getElementById(this.items.idButtonCancel).addEventListener('click', function () {\r\n\t\t\t\tmodalPopup.close();\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tcallbackFunctionLaunch() {\r\n\t\tif (\"callback\" in modalPopup) {\r\n\t\t\tmodalPopup.eventChoose();\r\n\t\t}\r\n\t},\r\n\r\n\treinitListener() {\r\n\t\t/// Permet de remove tous les listeners\r\n\t\tdocument.querySelector(this.items.popupModal).replaceWith(document.querySelector(this.items.popupModal).cloneNode(true));\r\n\t},\r\n\r\n\tinit: function (text, title, libelleCancelButton, libelleValidButton) {\r\n\t\tthis.open(text, title, libelleCancelButton, libelleValidButton);\r\n\t\tthis.eventClose();\r\n\t\tthis.callbackFunctionLaunch();\r\n\t\tthis.overrideStyles && this.overrideStylesFunction();\r\n\t}\r\n}\r\n\r\nmodule.exports = modalPopup;","////\r\n////\tBarre de recherche pages internes\r\n////\t(hors tunnel, devis et home)\r\n////\tFunction appelée dans menuNavigation.js\r\n\r\nconst commons = require(\"./commons\");\r\nconst helpers = require(\"./helpers\");\r\n\r\nmodule.exports = class searchBar {\r\n\tinit() {\r\n\t\tvar input = document.getElementById('autocomplete');\r\n\t\tconst inputSearch = document.getElementById('hidden-input-search');\r\n\t\tconst URL_AUTOCOMPLETE = '/MoteurRecherche/GetRechercheLibre';\r\n\t\t// if (settingsApp.section === 'home') {\r\n\t\t// \tdocument.querySelector('#moteurRecherche .btn-search').disabled = (inputSearch.value === '')\r\n\t\t// }\r\n\r\n\t\tif (helpers.getWindowWidth() >= settingsApp.breakpoint && settingsApp.section !== 'home') {\r\n\t\t\tdocument.querySelector('#moteurRecherche .btn-search').addEventListener('click', function (ev) {\r\n\t\t\t\tdocument.querySelector('.search-box').classList.remove('is-open');\r\n\t\t\t\t!document.querySelector('.search--banner').classList.contains('is-active') && input.focus();\r\n\t\t\t\tdocument.querySelector('.search--banner').classList.toggle('is-active');\r\n\t\t\t});\r\n\r\n\t\t\tdocument.body.addEventListener('click', function (e) {\r\n\t\t\t\tif (!e.target.classList.contains('btn-search') && !e.target.classList.contains('input-search')) {\r\n\t\t\t\t\tdocument.querySelector('.search--banner').classList.remove('is-active');\r\n\t\t\t\t\tinputSearch.value = '';\r\n\t\t\t\t\tinput.value = '';\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\t//console.log('home ')\r\n\t\t}\r\n\r\n\t\tautocomplete({\r\n\t\t\tminLength: 3,\r\n\t\t\tinput: input,\r\n\t\t\tfetch: function (text, update) {\r\n\t\t\t\ttext = text.toLowerCase();\r\n\t\t\t\tvar request = [];\r\n\t\t\t\tvar array;\r\n\t\t\t\tif (text.length > 2) {\r\n\t\t\t\t\tvar xhr = new XMLHttpRequest();\r\n\t\t\t\t\txhr.open('GET', URL_AUTOCOMPLETE + '?term=' + text);\r\n\t\t\t\t\txhr.send(null);\r\n\t\t\t\t\txhr.onreadystatechange = function () {\r\n\t\t\t\t\t\tvar DONE = 4; // readyState 4 means the request is done.\r\n\t\t\t\t\t\tvar OK = 200; // status 200 is a successful return.\r\n\t\t\t\t\t\tif (xhr.readyState === DONE) {\r\n\t\t\t\t\t\t\tif (xhr.status === OK) {\r\n\t\t\t\t\t\t\t\tarray = JSON.parse(xhr.response);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// else {\r\n\t\t\t\t\t\t\t// \tconsole.log('Error: ' + xhr.status); // An error occurred during the request.\r\n\t\t\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t\tvar suggestions = array;\r\n\r\n\t\t\t\t\t\t\tif (Array.isArray(suggestions)) {\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\tupdate(suggestions);\r\n\t\t\t\t\t\t\t\t\tdocument.querySelector('.search-box').classList.add('is-open');\r\n\t\t\t\t\t\t\t\t\t/// On met à jour la value\r\n\t\t\t\t\t\t\t\t\tinputSearch.value = suggestions[1].value;\r\n\t\t\t\t\t\t\t\t\tdocument.querySelector('#moteurRecherche .btn-search').disabled = (inputSearch.value === '')\r\n\t\t\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\t\t\tconsole.error(error);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tinputSearch.value = '';\r\n\t\t\t\t\t\t\t\tdocument.querySelector('#moteurRecherche .btn-search').disabled = true;\r\n\t\t\t\t\t\t\t\tdocument.querySelector('.search-box').classList.remove('is-open');\r\n\t\t\t\t\t\t\t\tdocument.querySelector('.autocomplete') !== null && document.querySelector('.autocomplete').remove();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.querySelector('.search-box').classList.remove('is-open');\r\n\t\t\t\t\tif (settingsApp.section === 'home') {\r\n\t\t\t\t\t\tdocument.querySelector('#moteurRecherche .btn-search').disabled = (inputSearch.value === '')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tcustomize: function (input, inputRect, container, maxHeight) {\r\n\t\t\t\tcontainer.style.maxHeight = '327px';\r\n\t\t\t},\r\n\t\t\trender: function (item, value) {\r\n\t\t\t\tvar itemElement = document.createElement('li');\r\n\r\n\t\t\t\t// let hasSelected = false;\r\n\t\t\t\t// On ajoute une classe spécifique aux catégories\r\n\t\t\t\tif (item.value.indexOf('cat#') > -1) {\r\n\t\t\t\t\titemElement.classList.add('is-categorie');\r\n\t\t\t\t} else {\r\n\t\t\t\t\titemElement.title = item.label\r\n\t\t\t\t}\r\n\t\t\t\t// else if (firstValue) {\r\n\t\t\t\t// \tinputSearch.value = item.value;\r\n\t\t\t\t// \tfirstValue = false;\r\n\t\t\t\t// \tconsole.log(item.label)\r\n\t\t\t\t// }\r\n\r\n\t\t\t\titemElement.innerHTML = item.label;\r\n\t\t\t\treturn itemElement;\r\n\t\t\t},\r\n\t\t\tonSelect: function (item) {\r\n\t\t\t\tconst moteurRecherche = document.getElementById('moteurRecherche');\r\n\r\n\t\t\t\tif (item.value.indexOf('cat#') == -1 && item.value !== '') {\r\n\t\t\t\t\tinputSearch.value = item.value;\r\n\t\t\t\t\tmoteurRecherche.submit();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n}\r\n","////\r\n////\tGestion des produits sélectionnés\r\n////\t\r\n'use strict';\r\n\r\nlet helpers = require('common/helpers');\r\nconst NB_MAX_CIRCUITS = settingsApp.favoris.nbMaxCircuits || 4; // Nombre de circuits dans mes favoris = 4 par défaut sinon valeur definie via settingsApp.favoris (head-terdav.ascx)\r\nconst NOM_COOKIE = settingsApp.favoris.nomCookie || 'myselection'; // Nom du cookie Mes favoris = myselection par défaut sinon valeur definie via settingsApp.favoris (head-terdav.ascx)\r\nconst DUREE_COOKIE = settingsApp.favoris.dureeCookie || 365; // Durée du cookie Mes favoris = myselection par défaut sinon valeur definie via settingsApp.favoris (head-terdav.ascx)\r\nconst ARRAY_ID_LINK_SELECTION = settingsApp.favoris.linkSelectionIds || ['yourSelectionLink', 'yourSelectionNoLink'];\r\nconst TEXTE_MAX_CIRCUIT_FAVORIS = settingsApp.favoris.textMax || 'La sélection ne peut comporter que 4 voyages au maximum';\r\nconst AREAS_WITH_TOGGLE_FAVORIS = settingsApp.favoris.areaWithToggleFavoris || ['listeresultats', 'produit', 'selection'];\r\n\r\nconst selection = {\r\n\tinit: function (settings) {\r\n\t\t/// On vérifie la présence du cookie mySelection\r\n\t\t/// On affiche ou l'on masque le lien /selection dans .nav--account\r\n\t\tthis.setLinkOrNot();\r\n\t\tlet pageWithToggleFavoris = false;\r\n\t\tfor (var i = 0; i < AREAS_WITH_TOGGLE_FAVORIS.length; i++) {\r\n\t\t\tif (helpers.getPage(AREAS_WITH_TOGGLE_FAVORIS[i])) {\r\n\t\t\t\tpageWithToggleFavoris = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (pageWithToggleFavoris) {\r\n\t\t\t/// On appelle les deux méthodes suivantes que si l'on peut ajouter ou retirer un circuit de la sélection\r\n\t\t\tthis.checkFavori('[data-codeproduit]');\r\n\t\t\tthis.addCircuit('[data-codeproduit]');\r\n\t\t}\r\n\t},\r\n\t/// Méthodes principales\r\n\tsetLinkOrNot() {\r\n\t\tthis._hasFavori() ? this._toggleLink(ARRAY_ID_LINK_SELECTION[0], ARRAY_ID_LINK_SELECTION[1]) : this._toggleLink(ARRAY_ID_LINK_SELECTION[1], ARRAY_ID_LINK_SELECTION[0]);\r\n\t},\r\n\t_toggleLink(idShow, idHide) {\r\n\t\thelpers.show(document.getElementById(idShow))\r\n\t\thelpers.hide(document.getElementById(idHide))\r\n\t},\r\n\tdeleteCircuit(codeProduit) {\r\n\t\t/// On stocke les codes produit du cookie dans un tableau \r\n\t\t/// on supprime le cookie puis on pousse les codes produit restants\r\n\t\tlet mesFavoris = this._convertFavorisToArray(),\r\n\t\t\tmesFavorisNew = [];\r\n\t\tthis._deleteFavori(NOM_COOKIE);\r\n\r\n\t\tfor (var i = 0; i < mesFavoris.length; i++) {\r\n\t\t\tif (mesFavoris[i] === codeProduit) {\r\n\t\t\t\tthis._setElementNotActive(codeProduit)\r\n\t\t\t} else {\r\n\t\t\t\tmesFavorisNew.push(mesFavoris[i])\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (mesFavorisNew.length > 0) {\r\n\t\t\tthis._setFavori(mesFavorisNew.join('_'));\t\r\n\t\t\tif (helpers.getPage('selection')) {\r\n\t\t\t\tdocument.getElementById(`selected-${codeProduit}`).remove();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis._deleteFavori(NOM_COOKIE);\r\n\t\t\tif (helpers.getPage('selection')) {\r\n\t\t\t\twindow.location.href = '/';\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setLinkOrNot();\r\n\t},\r\n\taddCircuit(btn) {\r\n\t\tlet self = this;\r\n\t\tdocument.querySelectorAll(btn).forEach((element) => {\r\n\t\t\telement.addEventListener('click', function (e) {\r\n\t\t\t\tlet mesFavoris = self._convertFavorisToArray(),\r\n\t\t\t\t\tcodeProduitData = e.target.dataset.codeproduit.toLowerCase();\r\n\r\n\t\t\t\t/// On empêche l'ajout d'un circuit si NB_MAX_CIRCUITS est atteint\r\n\t\t\t\tif (self.hasMaxSelectedProducted(mesFavoris, NB_MAX_CIRCUITS)) {\r\n\t\t\t\t\tif (self._isCodeProduitInSelection(e.target.dataset.codeproduit)) {\r\n\t\t\t\t\t\tself.deleteCircuit(codeProduitData);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tself.popupAlert()\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t/// Si le circuit a déjà été ajouté\r\n\t\t\t\t\tif (mesFavoris.includes(codeProduitData)) {\r\n\t\t\t\t\t\tself.deleteCircuit(codeProduitData);\r\n\t\t\t\t\t\tself._setElementNotActive(codeProduitData);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t/// On ajoute le circuit aux favoris\r\n\t\t\t\t\t/// On met à jour le bouton\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tself._setFavori(codeProduitData);\r\n\t\t\t\t\t\tself._setElementActive(codeProduitData);\r\n\t\t\t\t\t\tself._hasFavori() && self._toggleLink(ARRAY_ID_LINK_SELECTION[0], ARRAY_ID_LINK_SELECTION[1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t})\r\n\t},\r\n\tcheckFavori(btn) {\r\n\t\tlet self = this;\r\n\t\tdocument.querySelectorAll(btn).forEach((element) => {\r\n\t\t\tlet codeProduit = element.dataset.codeproduit,\r\n\t\t\t\tmesFavoris = self._convertFavorisToArray();\r\n\r\n\t\t\tif (mesFavoris.length > 0 && mesFavoris.includes(codeProduit)) {\r\n\t\t\t\tself._setElementActive(codeProduit);\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t/// Méthodes utilitaires\r\n\t_getFavoris() {\r\n\t\treturn helpers.getCookie(NOM_COOKIE);\r\n\t},\r\n\t_hasFavori() {\r\n\t\treturn helpers.getCookie(NOM_COOKIE) === undefined ? false : true;\r\n\t},\r\n\t_setFavori(codeProduit) {\r\n\t\tlet oldFavoris = this._getFavoris() === undefined ? '' : `${this._getFavoris()}_`,\r\n\t\t\tnewFavoris = `${oldFavoris}${codeProduit}`;\r\n\t\thelpers.setCookie(NOM_COOKIE, newFavoris, DUREE_COOKIE)\r\n\t},\r\n\t_deleteFavori(name) {\r\n\t\thelpers.deleteCookie(name);\r\n\t},\r\n\tpopupAlert() {\r\n\t\talert(TEXTE_MAX_CIRCUIT_FAVORIS);\r\n\t},\r\n\thasMaxSelectedProducted(array, int) {\r\n\t\treturn array.length === int;\r\n\t},\r\n\t_convertFavorisToArray() {\r\n\t\treturn this._hasFavori() ? this._getFavoris().split('_') : '';\r\n\t},\r\n\t_isCodeProduitInSelection(codeProduit) {\r\n\t\tlet arr = this._convertFavorisToArray();\r\n\t\treturn arr.includes(codeProduit);\r\n\t},\r\n\t_setElementActive(codeProduit) {\r\n\t\tlet element = document.querySelector(`[data-codeproduit=${codeProduit}]`),\r\n\t\t\tpage = helpers.getPage();\r\n\t\tswitch (page) {\r\n\t\tcase 'listeresultats':\r\n\t\t\telement.dataset.state = 'added';\r\n\t\t\telement.title = 'Retirer de mes favoris';\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tconsole.log(`Le produit ${codeProduit} a été ajouté à mes favoris`);\r\n\t\t}\r\n\t},\r\n\t_setElementNotActive(codeProduit) {\r\n\t\tlet element = document.querySelector(`[data-codeproduit=${codeProduit}]`),\r\n\t\t\tpage = helpers.getPage();\r\n\r\n\t\tswitch (page) {\r\n\t\tcase 'listeresultats':\r\n\t\t\tdelete element.dataset.state;\r\n\t\t\telement.title = 'Ajouter à mes favoris';\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tconsole.log(`Le produit ${codeProduit} a été retiré de mes favoris`);\r\n\t\t}\r\n\t},\r\n\tgetConfig() {\r\n\t\tfunction log(nb_max_circuits, nom_cookie, duree_cookie, array_id_link_selection, texte_max_circuit_favoris, areas_with_toggle_favoris) {\r\n\t\t\tthis.nb_max_circuits = nb_max_circuits;\r\n\t\t\tthis.nom_cookie = nom_cookie;\r\n\t\t\tthis.duree_cookie = duree_cookie;\r\n\t\t\tthis.array_id_link_selection = array_id_link_selection.toString();\r\n\t\t\tthis.texte_max_circuit_favoris = texte_max_circuit_favoris;\r\n\t\t\tthis.areas_with_toggle_favoris = areas_with_toggle_favoris.join(', ');\r\n\t\t}\r\n\t\tconsole.table(new log(NB_MAX_CIRCUITS, NOM_COOKIE, DUREE_COOKIE, ARRAY_ID_LINK_SELECTION, TEXTE_MAX_CIRCUIT_FAVORIS, AREAS_WITH_TOGGLE_FAVORIS));\r\n\t}\r\n};\r\n\r\nmodule.exports = selection;","'use strict';\r\n\r\n/// Dans /src/scripts/common/\r\n\r\nmodule.exports = class toolsPromise {\r\n\t#optionsPromise = {\r\n\t\tmethod: 'POST',\r\n\t\theaders: {\r\n\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\r\n\t\t},\r\n\t\tbody: ''\r\n\t}\r\n\r\n\tget optionsPromise() {\r\n\t\treturn this.#optionsPromise;\r\n\t}\r\n\tset optionsPromise(x) {\r\n\t\tthis.#optionsPromise.body = x;\r\n\t}\r\n\r\n\tgetPromiseJson(url, params) {\r\n\t\tlet options = params ?? this.optionsPromise;\r\n\t\treturn new Promise(async function (resolve, reject) {\r\n\t\t\tconst res = await fetch(url, options)\r\n\t\t\tresolve(res.json());\r\n\t\t\treject(res);\r\n\t\t});\r\n\t}\r\n\tgetPromiseTxt(url) {\r\n\t\tlet options = this.optionsPromise;\r\n\t\treturn new Promise(async function (resolve, reject) {\r\n\t\t\tconst res = await fetch(url, options)\r\n\t\t\tresolve(res.text());\r\n\t\t\treject(res);\r\n\t\t});\r\n\t}\r\n}","(function (global, factory) {\r\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n\t\ttypeof define === 'function' && define.amd ? define(factory) :\r\n\t\t(global = global || self, global.autocomplete = factory());\r\n}(this, function () {\r\n\t'use strict';\r\n\r\n\t/*\r\n\t * https://github.com/kraaden/autocomplete\r\n\t * Copyright (c) 2016 Denys Krasnoshchok\r\n\t * MIT License\r\n\t */\r\n\tfunction autocomplete(settings) {\r\n\t\t// just an alias to minimize JS file size\r\n\t\tvar doc = document;\r\n\t\tvar container = doc.createElement(\"ul\");\r\n\t\tvar containerStyle = container.style;\r\n\t\tvar userAgent = navigator.userAgent;\r\n\t\tvar mobileFirefox = userAgent.indexOf(\"Firefox\") !== -1 && userAgent.indexOf(\"Mobile\") !== -1;\r\n\t\tvar debounceWaitMs = settings.debounceWaitMs || 0;\r\n\t\tvar preventSubmit = settings.preventSubmit || false;\r\n\t\t// 'keyup' event will not be fired on Mobile Firefox, so we have to use 'input' event instead\r\n\t\tvar keyUpEventName = mobileFirefox ? \"input\" : \"keyup\";\r\n\t\tvar items = [];\r\n\t\tvar inputValue = \"\";\r\n\t\tvar minLen = 2;\r\n\t\tvar showOnFocus = settings.showOnFocus;\r\n\t\tvar selected;\r\n\t\tvar keypressCounter = 0;\r\n\t\tvar debounceTimer;\r\n\t\tif (settings.minLength !== undefined) {\r\n\t\t\tminLen = settings.minLength;\r\n\t\t}\r\n\t\tif (!settings.input) {\r\n\t\t\tthrow new Error(\"input undefined\");\r\n\t\t}\r\n\t\tvar input = settings.input;\r\n\t\tcontainer.className = \"autocomplete \" + (settings.className || \"\");\r\n\t\tcontainerStyle.position = \"fixed\";\r\n\t\t/**\r\n\t\t * Detach the container from DOM\r\n\t\t */\r\n\t\tfunction detach() {\r\n\t\t\tvar parent = container.parentNode;\r\n\t\t\tif (parent) {\r\n\t\t\t\tparent.removeChild(container);\r\n\t\t\t}\r\n\t\t}\r\n\t\t/**\r\n\t\t * Detect if the script is running on IOS\r\n\t\t */\r\n\t\tfunction isIOS() {\r\n\t\t\treturn /iPad|iPhone|iPod/.test(window.navigator.userAgent) && !window.MSStream;\r\n\t\t}\r\n\t\t/**\r\n\t\t * Clear debouncing timer if assigned\r\n\t\t */\r\n\t\tfunction clearDebounceTimer() {\r\n\t\t\tif (debounceTimer) {\r\n\t\t\t\twindow.clearTimeout(debounceTimer);\r\n\t\t\t}\r\n\t\t}\r\n\t\t/**\r\n\t\t * Attach the container to DOM\r\n\t\t */\r\n\t\tfunction attach() {\r\n\t\t\tif (!container.parentNode) {\r\n\t\t\t\tdoc.body.appendChild(container);\r\n\t\t\t}\r\n\t\t}\r\n\t\t/**\r\n\t\t * Check if container for autocomplete is displayed\r\n\t\t */\r\n\t\tfunction containerDisplayed() {\r\n\t\t\treturn !!container.parentNode;\r\n\t\t}\r\n\t\t/**\r\n\t\t * Clear autocomplete state and hide container\r\n\t\t */\r\n\t\tfunction clear() {\r\n\t\t\tkeypressCounter++;\r\n\t\t\titems = [];\r\n\t\t\tinputValue = \"\";\r\n\t\t\tselected = undefined;\r\n\t\t\tdetach();\r\n\t\t}\r\n\t\t/**\r\n\t\t * Update autocomplete position\r\n\t\t */\r\n\t\tfunction updatePosition() {\r\n\t\t\tif (!containerDisplayed()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tcontainerStyle.height = \"auto\";\r\n\t\t\tcontainerStyle.width = input.offsetWidth + \"px\";\r\n\t\t\tvar inputRect = input.getBoundingClientRect();\r\n\t\t\tvar top = isIOS() ?\r\n\t\t\t\tinputRect.top + window.pageYOffset // a fix for buggy getBoundingClientRect on IOS\r\n\t\t\t\t:\r\n\t\t\t\tinputRect.top;\r\n\t\t\ttop = top + input.offsetHeight;\r\n\t\t\tvar maxHeight = window.innerHeight - (inputRect.top + input.offsetHeight);\r\n\t\t\tif (maxHeight < 0) {\r\n\t\t\t\tmaxHeight = 0;\r\n\t\t\t}\r\n\t\t\tcontainerStyle.top = top + \"px\";\r\n\t\t\tcontainerStyle.bottom = \"\";\r\n\t\t\tcontainerStyle.left = inputRect.left + \"px\";\r\n\t\t\tcontainerStyle.maxHeight = maxHeight + \"px\";\r\n\t\t\tif (settings.customize) {\r\n\t\t\t\tsettings.customize(input, inputRect, container, maxHeight);\r\n\t\t\t}\r\n\t\t}\r\n\t\t/**\r\n\t\t * Redraw the autocomplete div element with suggestions\r\n\t\t */\r\n\t\tfunction update() {\r\n\t\t\t// delete all children from autocomplete DOM container\r\n\t\t\twhile (container.firstChild) {\r\n\t\t\t\tcontainer.removeChild(container.firstChild);\r\n\t\t\t}\r\n\t\t\t// function for rendering autocomplete suggestions\r\n\t\t\tvar render = function (item, currentValue) {\r\n\t\t\t\tvar itemElement = doc.createElement(\"div\");\r\n\t\t\t\titemElement.textContent = item.label || \"\";\r\n\t\t\t\treturn itemElement;\r\n\t\t\t};\r\n\t\t\tif (settings.render) {\r\n\t\t\t\trender = settings.render;\r\n\t\t\t}\r\n\t\t\t// function to render autocomplete groups\r\n\t\t\tvar renderGroup = function (groupName, currentValue) {\r\n\t\t\t\tvar groupDiv = doc.createElement(\"div\");\r\n\t\t\t\tgroupDiv.textContent = groupName;\r\n\t\t\t\treturn groupDiv;\r\n\t\t\t};\r\n\t\t\tif (settings.renderGroup) {\r\n\t\t\t\trenderGroup = settings.renderGroup;\r\n\t\t\t}\r\n\t\t\tvar fragment = doc.createDocumentFragment();\r\n\t\t\tvar prevGroup = \"#9?$\";\r\n\t\t\titems.forEach(function (item) {\r\n\t\t\t\tif (item.group && item.group !== prevGroup) {\r\n\t\t\t\t\tprevGroup = item.group;\r\n\t\t\t\t\tvar groupDiv = renderGroup(item.group, inputValue);\r\n\t\t\t\t\tif (groupDiv) {\r\n\t\t\t\t\t\tgroupDiv.className += \" group\";\r\n\t\t\t\t\t\tfragment.appendChild(groupDiv);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tvar div = render(item, inputValue);\r\n\t\t\t\tif (div) {\r\n\t\t\t\t\tdiv.addEventListener(\"click\", function (ev) {\r\n\t\t\t\t\t\tsettings.onSelect(item, input);\r\n\t\t\t\t\t\tclear();\r\n\t\t\t\t\t\tev.preventDefault();\r\n\t\t\t\t\t\tev.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (item === selected) {\r\n\t\t\t\t\t\tdiv.className += \" selected\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfragment.appendChild(div);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tcontainer.appendChild(fragment);\r\n\t\t\tif (items.length < 1) {\r\n\t\t\t\tif (settings.emptyMsg) {\r\n\t\t\t\t\tvar empty = doc.createElement(\"div\");\r\n\t\t\t\t\tempty.className = \"empty\";\r\n\t\t\t\t\tempty.textContent = settings.emptyMsg;\r\n\t\t\t\t\tcontainer.appendChild(empty);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tclear();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tattach();\r\n\t\t\tupdatePosition();\r\n\t\t\tupdateScroll();\r\n\t\t}\r\n\r\n\t\tfunction updateIfDisplayed() {\r\n\t\t\tif (containerDisplayed()) {\r\n\t\t\t\tupdate();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction resizeEventHandler() {\r\n\t\t\tupdateIfDisplayed();\r\n\t\t}\r\n\r\n\t\tfunction scrollEventHandler(e) {\r\n\t\t\tif (e.target !== container) {\r\n\t\t\t\tupdateIfDisplayed();\r\n\t\t\t} else {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction keyupEventHandler(ev) {\r\n\t\t\tvar keyCode = ev.which || ev.keyCode || 0;\r\n\t\t\tvar ignore = [38 /* Up */ , 13 /* Enter */ , 27 /* Esc */ , 39 /* Right */ , 37 /* Left */ , 16 /* Shift */ , 17 /* Ctrl */ , 18 /* Alt */ , 20 /* CapsLock */ , 91 /* WindowsKey */ , 9 /* Tab */ ];\r\n\t\t\tfor (var _i = 0, ignore_1 = ignore; _i < ignore_1.length; _i++) {\r\n\t\t\t\tvar key = ignore_1[_i];\r\n\t\t\t\tif (keyCode === key) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// the down key is used to open autocomplete\r\n\t\t\tif (keyCode === 40 /* Down */ && containerDisplayed()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tstartFetch(0 /* Keyboard */ );\r\n\t\t}\r\n\t\t/**\r\n\t\t * Automatically move scroll bar if selected item is not visible\r\n\t\t */\r\n\t\tfunction updateScroll() {\r\n\t\t\tvar elements = container.getElementsByClassName(\"selected\");\r\n\t\t\tif (elements.length > 0) {\r\n\t\t\t\tvar element = elements[0];\r\n\t\t\t\t// make group visible\r\n\t\t\t\tvar previous = element.previousElementSibling;\r\n\t\t\t\tif (previous && previous.className.indexOf(\"group\") !== -1 && !previous.previousElementSibling) {\r\n\t\t\t\t\telement = previous;\r\n\t\t\t\t}\r\n\t\t\t\tif (element.offsetTop < container.scrollTop) {\r\n\t\t\t\t\tcontainer.scrollTop = element.offsetTop;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar selectBottom = element.offsetTop + element.offsetHeight;\r\n\t\t\t\t\tvar containerBottom = container.scrollTop + container.offsetHeight;\r\n\t\t\t\t\tif (selectBottom > containerBottom) {\r\n\t\t\t\t\t\tcontainer.scrollTop += selectBottom - containerBottom;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t/**\r\n\t\t * Select the previous item in suggestions\r\n\t\t */\r\n\t\tfunction selectPrev() {\r\n\t\t\tif (items.length < 1) {\r\n\t\t\t\tselected = undefined;\r\n\t\t\t} else {\r\n\t\t\t\tif (selected === items[0]) {\r\n\t\t\t\t\tselected = items[items.length - 1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfor (var i = items.length - 1; i > 0; i--) {\r\n\t\t\t\t\t\tif (selected === items[i] || i === 1) {\r\n\t\t\t\t\t\t\tselected = items[i - 1];\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t/**\r\n\t\t * Select the next item in suggestions\r\n\t\t */\r\n\t\tfunction selectNext() {\r\n\t\t\tif (items.length < 1) {\r\n\t\t\t\tselected = undefined;\r\n\t\t\t}\r\n\t\t\tif (!selected || selected === items[items.length - 1]) {\r\n\t\t\t\tselected = items[0];\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tfor (var i = 0; i < (items.length - 1); i++) {\r\n\t\t\t\tif (selected === items[i]) {\r\n\t\t\t\t\tselected = items[i + 1];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction keydownEventHandler(ev) {\r\n\t\t\tvar keyCode = ev.which || ev.keyCode || 0;\r\n\t\t\tif (keyCode === 38 /* Up */ || keyCode === 40 /* Down */ || keyCode === 27 /* Esc */ ) {\r\n\t\t\t\tvar containerIsDisplayed = containerDisplayed();\r\n\t\t\t\tif (keyCode === 27 /* Esc */ ) {\r\n\t\t\t\t\tclear();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (!containerDisplayed || items.length < 1) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tkeyCode === 38 /* Up */ ?\r\n\t\t\t\t\t\tselectPrev() :\r\n\t\t\t\t\t\tselectNext();\r\n\t\t\t\t\tupdate();\r\n\t\t\t\t}\r\n\t\t\t\tev.preventDefault();\r\n\t\t\t\tif (containerIsDisplayed) {\r\n\t\t\t\t\tev.stopPropagation();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (keyCode === 13 /* Enter */ ) {\r\n\t\t\t\tif (selected) {\r\n\t\t\t\t\tsettings.onSelect(selected, input);\r\n\t\t\t\t\tclear();\r\n\t\t\t\t}\r\n\t\t\t\tif (preventSubmit) {\r\n\t\t\t\t\tev.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction focusEventHandler() {\r\n\t\t\tif (showOnFocus) {\r\n\t\t\t\tstartFetch(1 /* Focus */ );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction startFetch(trigger) {\r\n\t\t\t// if multiple keys were pressed, before we get update from server,\r\n\t\t\t// this may cause redrawing our autocomplete multiple times after the last key press.\r\n\t\t\t// to avoid this, the number of times keyboard was pressed will be\r\n\t\t\t// saved and checked before redraw our autocomplete box.\r\n\t\t\tvar savedKeypressCounter = ++keypressCounter;\r\n\t\t\tvar val = input.value;\r\n\t\t\tif (val.length >= minLen || trigger === 1 /* Focus */ ) {\r\n\t\t\t\tclearDebounceTimer();\r\n\t\t\t\tdebounceTimer = window.setTimeout(function () {\r\n\t\t\t\t\tsettings.fetch(val, function (elements) {\r\n\t\t\t\t\t\tif (keypressCounter === savedKeypressCounter && elements) {\r\n\t\t\t\t\t\t\titems = elements;\r\n\t\t\t\t\t\t\tinputValue = val;\r\n\t\t\t\t\t\t\tselected = items.length > 0 ? items[0] : undefined;\r\n\t\t\t\t\t\t\tupdate();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 0 /* Keyboard */ );\r\n\t\t\t\t}, trigger === 0 /* Keyboard */ ? debounceWaitMs : 0);\r\n\t\t\t} else {\r\n\t\t\t\tclear();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction blurEventHandler() {\r\n\t\t\t// we need to delay clear, because when we click on an item, blur will be called before click and remove items from DOM\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tif (doc.activeElement !== input) {\r\n\t\t\t\t\tclear();\r\n\t\t\t\t}\r\n\t\t\t}, 200);\r\n\t\t}\r\n\t\t/**\r\n\t\t * Fixes #26: on long clicks focus will be lost and onSelect method will not be called\r\n\t\t */\r\n\t\tcontainer.addEventListener(\"mousedown\", function (evt) {\r\n\t\t\tevt.stopPropagation();\r\n\t\t\tevt.preventDefault();\r\n\t\t});\r\n\t\t/**\r\n\t\t * This function will remove DOM elements and clear event handlers\r\n\t\t */\r\n\t\tfunction destroy() {\r\n\t\t\tinput.removeEventListener(\"focus\", focusEventHandler);\r\n\t\t\tinput.removeEventListener(\"keydown\", keydownEventHandler);\r\n\t\t\tinput.removeEventListener(keyUpEventName, keyupEventHandler);\r\n\t\t\tinput.removeEventListener(\"blur\", blurEventHandler);\r\n\t\t\twindow.removeEventListener(\"resize\", resizeEventHandler);\r\n\t\t\tdoc.removeEventListener(\"scroll\", scrollEventHandler, true);\r\n\t\t\tclearDebounceTimer();\r\n\t\t\tclear();\r\n\t\t\t// prevent the update call if there are pending AJAX requests\r\n\t\t\tkeypressCounter++;\r\n\t\t}\r\n\t\t// setup event handlers\r\n\t\tinput.addEventListener(\"keydown\", keydownEventHandler);\r\n\t\tinput.addEventListener(keyUpEventName, keyupEventHandler);\r\n\t\tinput.addEventListener(\"blur\", blurEventHandler);\r\n\t\tinput.addEventListener(\"focus\", focusEventHandler);\r\n\t\twindow.addEventListener(\"resize\", resizeEventHandler);\r\n\t\tdoc.addEventListener(\"scroll\", scrollEventHandler, true);\r\n\t\treturn {\r\n\t\t\tdestroy: destroy\r\n\t\t};\r\n\t}\r\n\r\n\treturn autocomplete;\r\n\r\n}));\r\n//# sourceMappingURL=autocomplete.js.map","///\r\n/// Validation des formulaires\r\n///\r\n\r\n\r\n/// HTML TEMPLATE BASIQUE\r\n/// {name} : variable à remplir\r\n/// [[paramètre]] : attribut à compléter/ajouter\r\n///
\r\n///
\r\n/// \t\r\n/// \t[[
{Indicatif téléphonique}
]]\r\n/// \t\r\n///
\r\n///
\r\n/// \t
libelle
\r\n/// \t\r\n//
\r\n/// \r\n\r\n/// CONFIGURATION PAR DÉFAULT\r\nconst formulaireDefaults = {\r\n\thasCivilite: false,\r\n\thasTelephone: false,\r\n\thasScrollToFirstError: true,\r\n\tattribut: {\r\n\t\tboxinput: '[data-form-boxinput]',\r\n\t\tbtnValidation: '[data-form-submit]',\r\n\t\tindicatif: '[data-form-indicatif]',\r\n\t\tselect: '[data-form-select]'\r\n\t},\r\n\tclasses: {\r\n\t\tdisabled: 'is-disabled',\r\n\t\terror: 'is-error',\r\n\t\terrorField: 'field-validation-error'\r\n\t},\r\n\tselectors: {\r\n\t\tfieldsList: '.field__select, .field__input, .field__textarea',\r\n\t\tfieldClass: '.field',\r\n\t\tfieldClassName: 'field',\r\n\t\tfieldActiveClassName: 'form-field--is-active',\r\n\t\tfieldFilledClassName: 'form-field--is-filled',\r\n\t\tfieldErrorClassName: 'form-field--is-error',\r\n\t\tclassValidation: 'field-validation-error'\r\n\t},\r\n\tmsg: {\r\n\t\tcharactersForbidden: /[a-zA-Z]+/g,\r\n\t\tindicatif: 'Indicatif obligatoire.',\r\n\t\tnoTelephone: 'Vous devez saisir au moins un numéro de téléphone.',\r\n\t\tformatTelephone: 'Le format de votre numéro de téléphone est invalide.',\r\n\t\tfields: {\r\n\t\t\tindicatif: {\r\n\t\t\t\tmobile: 'Inscription_Coordonnees_CodeIsoForMobile',\r\n\t\t\t\tfixe: 'Inscription_Coordonnees_CodeIsoForFixe'\r\n\t\t\t},\r\n\t\t\ttelephone: {\r\n\t\t\t\tmobile: 'Inscription_Coordonnees_TelephonePortable',\r\n\t\t\t\tfixe: 'Inscription_Coordonnees_TelephoneFixe'\r\n\t\t\t}\r\n\t\t},\r\n\t\tvalidationIdMsg: {\r\n\t\t\tmobile: 'validationMessageTelMobile',\r\n\t\t\tfixe: 'validationMessageTelFixe'\r\n\t\t},\r\n\t},\r\n\tregex: {\r\n\t\tcharactersAlpha: /[a-zA-Z]+/g\r\n\t},\r\n\tregexTel: /^((\\+\\d{1,3}(-| )?\\(?\\d\\)?(-| )?\\d{1,5})|(\\(?\\d{2,6}\\)?))(-| )?(\\d{3,4})(-| )?(\\d{4})(( x| ext)\\d{1,5}){0,1}$/\r\n}\r\n\r\nclass Formulaire {\r\n\tconstructor(settings) {\r\n\t\t/// On surcharge {settings} par {defaults}\r\n\t\t/// les propriétés de {defaults} ne sont ajoutées que si elles n'existent pas\r\n\t\tthis.settings = {\r\n\t\t\t...formulaireDefaults,\r\n\t\t\t...settings\r\n\t\t};\r\n\t}\r\n\r\n\tinitialize(idFormulaire) {\r\n\t\tlet self = this;\r\n\t\tlet settings = this.settings;\r\n\r\n\t\tconst form = document.getElementById(idFormulaire);\r\n\t\tlet btn = document.querySelector(settings.attribut.btnValidation);\r\n\t\tlet fields = Array.from(form.elements);\r\n\r\n\t\tif (btn.dataset.formSubmit !== '') {\r\n\t\t\tbtn = document.querySelector(`[data-form-submit=${idFormulaire}]`);\r\n\t\t}\r\n\r\n\t\t/// Disable Default Form Validation\r\n\t\tform.noValidate = true;\r\n\r\n\t\t/// on ne garde que les champs ayant un attribut required\r\n\t\tconst fieldsRequired = fields.filter(field => field.required);\r\n\t\tfieldsRequired.forEach(el => {\r\n\t\t\tself.validateField(el);\r\n\t\t});\r\n\r\n\t\t/// On valide les champs optionnels non vides\r\n\t\tconst fieldsOptionnalNoEmpty = fields.filter(field => field.dataset.optionnal);\r\n\t\tfieldsOptionnalNoEmpty.forEach(el => {\r\n\t\t\tel.addEventListener('change', function (element) {\r\n\t\t\t\telement.target.value != '' && self.validateField(el);\r\n\t\t\t})\r\n\r\n\t\t});\r\n\r\n\t\t/// Gestion de l'affichage de l'indicatif téléphonique\r\n\t\t/// Appel de la méthode de validation\r\n\t\tif (settings.hasTelephone) {\r\n\t\t\tthis.indicatifTelephonique(false, null);\r\n\t\t\tconst fieldsTel = document.querySelectorAll('[type=\"tel\"]');\r\n\t\t\tconst fieldsIndicatif = document.querySelectorAll(settings.attribut.indicatif);\r\n\t\t\tconst elements = Array.prototype.slice.call(fieldsTel).concat(Array.prototype.slice.call(fieldsIndicatif));\r\n\t\t\telements.forEach(el => {\r\n\t\t\t\tself.validateField(el);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/// Gestion de l'affichage d'erreurs au submit\r\n\t\tform.addEventListener('submit', function (e) {\r\n\t\t\t// On n'affiche pas les messages d'erreur lorsque l'on clique sur un bouton précédent\r\n\t\t\tif (e.submitter.name !== 'precedent' && e.submitter.dataset.dataFormRequete !== 'fetch') {\r\n\t\t\t\tif (!self._isFormValid(form)) {\r\n\t\t\t\t\t/// Le formulaire est invalide, on stoppe le submit\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tconsole.error('Le formulaire est invalide');\r\n\t\t\t\t\tself.validationForm(form);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconsole.log(e)\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t/// @submit\r\n\t/// Function appelée lorsque l'utilisateur soumet un formulaire\r\n\t/// mais que ce dernier n'est pas valide\r\n\tvalidationForm(form) {\r\n\t\tlet self = this;\r\n\t\tlet settings = this.settings;\r\n\r\n\t\t/// Gestion des erreurs génériques\r\n\t\tlet firstError = null;\r\n\t\tlet fieldsInvalides = form.querySelectorAll(':invalid');\r\n\t\tfieldsInvalides.forEach(el => {\r\n\t\t\tlet error = el.parentElement.querySelector(`.${settings.classes.errorField}`);\r\n\t\t\tif (el.type === 'radio') {\r\n\t\t\t\terror = document.getElementById(`${el.name}ErrorMsg`);\r\n\t\t\t}\r\n\t\t\tself._showError(el, error);\r\n\t\t});\r\n\r\n\t\t/// On filtre les différents éléments du formulaire\r\n\t\t/// pour ne garder que ceux concernés par une validation spécifique\r\n\t\t/// (hors Constraint validation API)\r\n\t\tconst elements = Array.from(form.elements)\r\n\t\t\t.filter(element => {\r\n\t\t\t\treturn element.type !== 'hidden' && element.type !== 'fieldset' &&\r\n\t\t\t\t\telement.localName !== 'button';\r\n\t\t\t});\r\n\t\tlet fieldsInvalidCustom = elements.filter(x => !Array.from(fieldsInvalides).includes(x));\r\n\r\n\t\tif (settings.hasTelephoneMobile) {\r\n\t\t\tdocument.querySelector(`#${settings.msg.fields.telephone.mobile} + .${settings.classes.errorField}`).textContent = '';\r\n\t\t\tdocument.querySelector(settings.attribut.indicatif).parentElement.querySelector(`.${settings.classes.errorField}`).textContent = '';\r\n\t\t\tif (document.getElementById(settings.msg.fields.telephone.mobile).value == '') {\r\n\t\t\t\tdocument.querySelector(`#${settings.msg.fields.telephone.mobile} + .${settings.classes.errorField}`).textContent = settings.msg.noTelephone;\r\n\t\t\t\tdocument.querySelector(`#${settings.msg.fields.telephone.mobile}`).closest(settings.selectors.fieldClass).classList.add(settings.classes.error)\r\n\t\t\t} else {\r\n\t\t\t\t/// Si le format du mobile est incorrect\r\n\t\t\t\tif (document.getElementById(settings.msg.fields.telephone.mobile).value !== '' && !settings.regexTel.test(document.getElementById(settings.msg.fields.telephone.mobile).value)) {\r\n\t\t\t\t\tself._showError(document.querySelector(`#${settings.msg.fields.telephone.mobile}`), document.querySelector(`#${settings.msg.fields.telephone.mobile} + .${settings.classes.errorField}`));\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} /// Gestion des champs téléphoniques\r\n\t\telse if (settings.hasTelephone) {\r\n\t\t\t/// On reset le texte du message d'erreur (pour éviter message \"au moins un téléphone\" && \"problème format\")\r\n\t\t\tdocument.querySelector(`#${settings.msg.fields.telephone.mobile} + .${settings.classes.errorField}`).textContent = '';\r\n\t\t\tlet indicatifFields = document.querySelectorAll(settings.attribut.indicatif);\r\n\t\t\tindicatifFields.forEach(el => el.parentElement.querySelector(`.${settings.classes.errorField}`).textContent = '')\r\n\t\t\t/// Si aucun numéro de téléphone n'est renseigné\r\n\t\t\tif (document.getElementById(settings.msg.fields.telephone.mobile).value == '' && document.getElementById(settings.msg.fields.telephone.fixe).value == '') {\r\n\t\t\t\tdocument.querySelector(`#${settings.msg.fields.telephone.mobile} + .${settings.classes.errorField}`).textContent = settings.msg.noTelephone;\r\n\t\t\t} else {\r\n\t\t\t\t/// Si le format du mobile est incorrect\r\n\t\t\t\tif (document.getElementById(settings.msg.fields.telephone.mobile).value !== '' && !settings.regexTel.test(document.getElementById(settings.msg.fields.telephone.mobile).value)) {\r\n\t\t\t\t\tself._showError(document.querySelector(`#${settings.msg.fields.telephone.mobile}`), document.querySelector(`#${settings.msg.fields.telephone.mobile} + .${settings.classes.errorField}`));\r\n\t\t\t\t}\r\n\t\t\t\t/// Si le format du fixe est incorrect\r\n\t\t\t\tif (document.getElementById(settings.msg.fields.telephone.fixe).value !== '' && !settings.regexTel.test(document.getElementById(settings.msg.fields.telephone.fixe).value)) {\r\n\t\t\t\t\tself._showError(document.querySelector(`#${settings.msg.fields.telephone.fixe}`), document.querySelector(`#${settings.msg.fields.telephone.fixe} + .${settings.classes.errorField}`));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// Gestion des champs civilités\r\n\t\tif (settings.hasCivilite) {\r\n\t\t\tfieldsInvalidCustom.forEach(el => {\r\n\t\t\t\tconst error = el.parentElement.querySelector(`.${settings.classes.errorField}`);\r\n\t\t\t\tif (el.dataset.formSelect === 'civilite') {\r\n\t\t\t\t\tlet value = parseInt(el.value);\r\n\t\t\t\t\tif (value === 1 || value === 2) {\r\n\t\t\t\t\t\tself._isFieldValid(error, el);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tself._showError(el, error);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\t/// Gestion des champs où au moins un checkbox doit être coché\r\n\t\tif (settings.hasOwnProperty('form') && settings.form.hasOwnProperty('atLeast')) {\r\n\t\t\tconst error = document.querySelector(`[data-parent-atLeast=${settings.form.atLeast}]`);\r\n\t\t\tif (self._hasAtLeastOneSelected(settings.form.atLeast)) {\r\n\t\t\t\terror.textContent = '';\r\n\t\t\t} else {\r\n\t\t\t\terror.textContent = error.dataset.formMsg;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// On scroll jusqu'à l'erreur\r\n\t\tif (settings.hasScrollToFirstError) {\r\n\t\t\tlet errors = document.querySelectorAll(`.${settings.classes.error}`);\r\n\r\n\t\t\tfor (let item of errors) {\r\n\t\t\t\tlet error = item.querySelector(`.${settings.classes.errorField}`);\r\n\t\t\t\tif (error.textContent !== '') {\r\n\t\t\t\t\tfirstError = item;\r\n\t\t\t\t\tfirstError.scrollIntoView({\r\n\t\t\t\t\t\tbehavior: 'smooth',\r\n\t\t\t\t\t\tblock: \"start\",\r\n\t\t\t\t\t\tinline: \"nearest\"\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/// @modal\r\n\t/// Function appelant une modale et affichant le contenu des champs en doublons\r\n\t/// Appelé sur la création de compte (création spontanée ou espace client)\r\n\tlaunchModale(callback) {\r\n\t\tlet self = this;\r\n\r\n\t\tlet nom = document.getElementById('Nom').value,\r\n\t\t\tprenom = document.getElementById('Prenom').value,\r\n\t\t\tnomUsage = document.getElementById('NomUsage').value,\r\n\t\t\tobj = self.controleSaisieCoordonnesDoublons(nom, prenom, nomUsage, '');\r\n\r\n\t\tif (obj.modale) {\r\n\t\t\tmodalPopup.callback = function () {\r\n\t\t\t\tmodalPopup.close();\r\n\t\t\t\tcallback();\r\n\t\t\t}\r\n\t\t\tmodalPopup.init(obj.messageDoublonNomSaisie, \"\", \"Corriger\", obj.libellebouton);\r\n\t\t\tconsole.error('Le formulaire est invalide');\r\n\t\t} else if (typeof callback === 'function') {\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\t/// @submit\r\n\t/// Function qui renvoie un objet\r\n\t/// obj {modale: boolean, libellebouton: string || '', messageDoublonNomSaisie: string}\r\n\tcontroleSaisieCoordonnesDoublons(nom, prenom, nomUsage, idNomUsage) {\r\n\t\t/// la méthode includes est sensible à la casse\r\n\t\tnom = nom.toLowerCase();\r\n\t\tprenom = prenom.toLowerCase();\r\n\r\n\t\t/// Gestion du nom d'usage selon la civilité\r\n\t\tif ($(\"#NomUsage\").is(\":visible\")) {\r\n\t\t\tnomUsage = nomUsage.toLowerCase();\r\n\t\t} else if (idNomUsage !== '' && idNomUsage !== null) {\r\n\t\t\tif (document.getElementById(idNomUsage) !== null && $(`#${idNomUsage}`).is(\":visible\")) {\r\n\t\t\t\tnomUsage = document.getElementById(idNomUsage).value.toLowerCase();\r\n\t\t\t} else {\r\n\t\t\t\tnomUsage = \"\"\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tnomUsage = \"\";\r\n\t\t}\r\n\t\t/// Initialisation de l'object retourné par la function\r\n\t\tlet obj = {};\r\n\r\n\t\t/// Paramètres de la function _getTextMessageErreur()\r\n\t\tlet params = {\r\n\t\t\tattention: 'Attention :
',\r\n\t\t}\r\n\t\t/// Selon la page (cas : demande de devis, création de compte, coordonnées passager sur le tunnel) sur laquelle nous sommes le libellé de la zone erronée est différent\r\n\t\tlet page = document.getElementById('id1').value;\r\n\t\tif (page === 'account' || document.getElementById('id2').value === 'creationcompte') {\r\n\t\t\tparams.localisation = '« Vos informations »';\r\n\t\t} else if (page === 'inscription') {\r\n\t\t\t//#Inscription_ColInfoVoyageur_${i}__NomUsage\r\n\t\t\tparams.localisation = `Voyageur ${parseInt(idNomUsage.charAt(28)) + 1}`;\r\n\t\t}\r\n\t\t// else if (page === 'devisweb') {\r\n\t\t// \tparams.localisation = 'rubrique « Vos coordonnées »';\r\n\t\t// }\r\n\r\n\t\t/// Cas possibles\r\n\t\tlet arrayOfUseCase = [{\r\n\t\t\tcaseLibelle: 'nomEqualPrenom',\r\n\t\t\tisTrue: (nom === prenom),\r\n\t\t\tcase: 'equal'\r\n\t\t}, {\r\n\t\t\tcaseLibelle: 'nomUsageEqualPrenom',\r\n\t\t\tisTrue: nomUsage === prenom,\r\n\t\t\tcase: 'equal'\r\n\t\t}, {\r\n\t\t\tcaseLibelle: 'nomEqualNomUsage',\r\n\t\t\tisTrue: nom === nomUsage,\r\n\t\t\tcase: 'equal'\r\n\t\t}, {\r\n\t\t\tcaseLibelle: 'nomContainPrenom',\r\n\t\t\tisTrue: nom !== \"\" && nom.includes(prenom) && nom !== prenom,\r\n\t\t\tcase: 'contain'\r\n\t\t}, {\r\n\t\t\tcaseLibelle: 'nomUsageContainPrenom',\r\n\t\t\tisTrue: nomUsage !== \"\" && nomUsage.includes(prenom) && nomUsage !== prenom,\r\n\t\t\tcase: 'contain'\r\n\t\t}, {\r\n\t\t\tcaseLibelle: 'prenomContainNom',\r\n\t\t\tisTrue: nom !== \"\" && prenom.includes(nom) && prenom !== nom,\r\n\t\t\tcase: 'contain'\r\n\t\t}, {\r\n\t\t\tcaseLibelle: 'prenomContainNomUsage',\r\n\t\t\tisTrue: nomUsage !== \"\" && prenom.includes(nomUsage) && prenom !== nomUsage,\r\n\t\t\tcase: 'contain'\r\n\t\t}, {\r\n\t\t\tcaseLibelle: 'nomUsageContainNom',\r\n\t\t\tisTrue: nomUsage !== \"\" && nom !== \"\" && nomUsage.includes(nom) && nomUsage !== nom,\r\n\t\t\tcase: 'contain'\r\n\t\t}, {\r\n\t\t\tcaseLibelle: 'nomContainNomUsage',\r\n\t\t\tisTrue: nomUsage !== \"\" && nom !== \"\" && nom.includes(nomUsage) && nom !== nomUsage,\r\n\t\t\tcase: 'contain'\r\n\t\t}, ];\r\n\r\n\t\tif ((nom !== \"\" || nomUsage !== \"\") && prenom !== \"\") {\r\n\t\t\tobj.messageDoublonNomSaisie = this._getTextMessageErreur(arrayOfUseCase, params);\r\n\t\t\tobj.libellebouton = '';\r\n\r\n\t\t\t/// Dans le cas où le nom de jeune fille apparaît dans le nom d'épouse,\r\n\t\t\t/// on laisse la possibilité à l'utilisatrice de confirmer les champs renseignés\r\n\t\t\tarrayOfUseCase.forEach(function (element, index) {\r\n\t\t\t\tif (element.caseLibelle === 'nomUsageContainNom' && element.isTrue) {\r\n\t\t\t\t\tobj.modale = true;\r\n\t\t\t\t\tobj.libellebouton = \"Confirmer \" + nom + \"/\" + nomUsage;\r\n\t\t\t\t} else if (element.isTrue) {\r\n\t\t\t\t\tobj.modale = true;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn obj;\r\n\t}\r\n\r\n\t_getTextMessageErreur(array, config) {\r\n\r\n\t\tlet libelleMessageErreur = '',\r\n\t\t\tcaseEqual = false,\r\n\t\t\tcaseContain = false;\r\n\r\n\t\tlet element_1 = '',\r\n\t\t\telement_2 = '',\r\n\t\t\tmsg = '',\r\n\t\t\tcaseNomUsageContainNom = false;\r\n\r\n\t\tarray.forEach(function (element, index) {\r\n\t\t\tif (element.isTrue) {\r\n\t\t\t\tif (element.case === 'equal') {\r\n\t\t\t\t\tswitch (element.caseLibelle) {\r\n\t\t\t\t\tcase 'nomEqualPrenom':\r\n\t\t\t\t\t\telement_1 = 'nom';\r\n\t\t\t\t\t\telement_2 = 'prénom';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'nomUsageEqualPrenom':\r\n\t\t\t\t\t\telement_1 = 'nom d\\'usage';\r\n\t\t\t\t\t\telement_2 = 'prénom';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'nomEqualNomUsage':\r\n\t\t\t\t\t\telement_1 = 'noms de naissance';\r\n\t\t\t\t\t\telement_2 = 'd\\'usage';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tconsole.error(`Sorry, we are out of ${element.caseLibelle}.`);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmsg = `Les ${element_1} et ${element_2} sont identiques (${config.localisation}).
Veuillez corriger cette information.`;\r\n\t\t\t\t}\r\n\t\t\t\t/// Cas où la value d'un champ est contenu dans un autre\r\n\t\t\t\telse {\r\n\t\t\t\t\tswitch (element.caseLibelle) {\r\n\t\t\t\t\tcase 'nomContainPrenom':\r\n\t\t\t\t\t\telement_1 = 'nom';\r\n\t\t\t\t\t\telement_2 = 'prénom';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'nomUsageContainPrenom':\r\n\t\t\t\t\t\telement_1 = 'nom d\\'usage';\r\n\t\t\t\t\t\telement_2 = 'prénom';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'prenomContainNom':\r\n\t\t\t\t\t\telement_1 = 'prénom';\r\n\t\t\t\t\t\telement_2 = 'nom';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'prenomContainNomUsage':\r\n\t\t\t\t\t\telement_1 = 'prenom';\r\n\t\t\t\t\t\telement_2 = 'nom d\\'usage';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'nomUsageContainNom':\r\n\t\t\t\t\t\telement_1 = 'nom d\\'usage';\r\n\t\t\t\t\t\telement_2 = 'nom de naissance';\r\n\t\t\t\t\t\tcaseNomUsageContainNom = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'nomContainNomUsage':\r\n\t\t\t\t\t\telement_1 = 'nom de naissance';\r\n\t\t\t\t\t\telement_2 = 'nom d\\'usage';\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tconsole.error(`Sorry, we are out of ${element.caseLibelle}.`);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn msg = `Votre ${element_2} apparaît aussi dans le ${element_1} (${config.localisation}).
Veuillez corriger cette information${caseNomUsageContainNom ? ' ou la confirmer' :''}.`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlibelleMessageErreur = `${config.attention} ${msg}`;\r\n\t\treturn libelleMessageErreur;\r\n\t}\r\n\r\n\t/// Gestion dqe\r\n\tdqe(idForm, object, array) {\r\n\t\tdocument.getElementById(idForm).addEventListener('change', function (e) {\r\n\r\n\t\t\tif (e.target.id == 'NumeroLibelleVoie') {\r\n\t\t\t\te.target.dispatchEvent(\r\n\t\t\t\t\tnew CustomEvent('adresseChange', {\r\n\t\t\t\t\t\tbubbles: true\r\n\t\t\t\t\t})\r\n\t\t\t\t)\r\n\t\t\t}\r\n\t\t});\r\n\t\tdocument.addEventListener('adresseChange', function (e) {\r\n\t\t\t// Liste des id des champs remplis par le DQE\r\n\t\t\tlet arr = ['CodePostal', 'Ville'];\r\n\t\t\tif (array !== undefined) {\r\n\t\t\t\tarr = array\r\n\t\t\t}\r\n\r\n\t\t\tarr.forEach(el => {\r\n\t\t\t\tlet parent = document.getElementById(el).parentElement;\r\n\t\t\t\tif (el.value !== '') {\r\n\t\t\t\t\tparent.classList.remove('is-error');\r\n\t\t\t\t\tif (parent.querySelector('.field-validation-error') !== null) {\r\n\t\t\t\t\t\tparent.querySelector('.field-validation-error').style.display = 'none';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t})\r\n\t}\r\n\r\n\r\n\t/// ==========================================================================\r\n\r\n\t/// @Fields\r\n\t/// Function appelant les functions de validation correspondant au type d'un champ {el} donné\r\n\tvalidateField(el) {\r\n\t\tlet self = this;\r\n\t\tlet settings = this.settings;\r\n\r\n\t\t/// Pour chaque ${el}, on créer le bloc message erreur s'il n'existe pas\r\n\t\tself._createErrorMsg(el);\r\n\t\tlet error = el.parentElement.querySelector(`.${settings.classes.errorField}`);\r\n\t\tlet typeField = el.type;\r\n\r\n\t\tswitch (typeField) {\r\n\t\tcase 'select-one':\r\n\t\t\tself._validateSelect(el, error);\r\n\t\t\tbreak;\r\n\t\tcase 'text':\r\n\t\t\tself._validateInput(el, error);\r\n\t\t\tbreak;\r\n\t\tcase 'radio':\r\n\t\t\terror = document.getElementById(`${el.name}ErrorMsg`);\r\n\t\t\tself._validateCheckbox(el, error);\r\n\t\t\tbreak;\r\n\t\tcase 'checkbox':\r\n\t\t\tself._validateCheckbox(el, error);\r\n\t\t\tbreak;\r\n\t\tcase 'password':\r\n\t\t\tself._validateInput(el, error);\r\n\t\t\tbreak;\r\n\t\tcase 'date':\r\n\t\t\tself._validateInput(el, error);\r\n\t\t\tbreak;\r\n\t\tcase 'email':\r\n\t\t\tself._validateEmail(el, error);\r\n\t\t\tbreak;\r\n\t\tcase 'tel':\r\n\t\t\tself._validateTel(el, error);\r\n\t\t\tbreak;\r\n\t\tcase 'number':\r\n\t\t\tself._validateNumber(el, error);\r\n\t\t\tbreak;\r\n\t\tcase 'textarea':\r\n\t\t\tself._validateTextarea(el, error);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tconsole.log(`Sorry, we are out of ${typeField}. : ${el.id}`);\r\n\t\t}\r\n\t}\r\n\t/// @Fields, @event\r\n\t/// Function de validation d'un \r\n\t_validateTextarea(input, errorSelector) {\r\n\t\tlet self = this;\r\n\r\n\t\tlet events = ['blur', 'focusin', 'focusout', 'keyup'];\r\n\t\tfor (let event of events) {\r\n\t\t\t/// Au focus dans le champ, on masque le message d'erreur\r\n\t\t\tinput.addEventListener(event, () => {\r\n\t\t\t\tself._isFieldValid(errorSelector, input);\r\n\r\n\t\t\t\tif (input.validity.valueMissing && event === 'focusout') {\r\n\t\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\t/// @Fields, @event\r\n\t/// Function de validation d'un \r\n\t_validateInput(input, errorSelector) {\r\n\t\tlet self = this;\r\n\r\n\t\t/// Au focus dans le champ, on masque le message d'erreur\r\n\t\tinput.addEventListener('focusin', () => {\r\n\t\t\tself._isFieldValid(errorSelector, input);\r\n\t\t});\r\n\r\n\t\t/// Lorsque l'utilisateur tape sur son clavier,\r\n\t\t/// on vérifie qu'il n'entre pas des caractères interdits\r\n\t\tif (input.id !== 'DateNaissance' && input.id.indexOf('DateNaissance') < 0) {\r\n\t\t\tinput.addEventListener('keyup', () => {\r\n\t\t\t\tif (input.validity.patternMismatch) {\r\n\t\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tself._isFieldValid(errorSelector, input);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/// Lorsque le champ perd le focus\r\n\t\t/// (à la différence de focus, l'événement blur ne se propage pas)\r\n\t\tinput.addEventListener('blur', () => {\r\n\t\t\t/// Gestion cas input date de naissance\r\n\t\t\tif (input.id === 'DateNaissance' || input.id.indexOf('DateNaissance') > 0 || input.id.indexOf('naissance') > 0) {\r\n\t\t\t\tlet items = input.value.split('/');\r\n\t\t\t\tlet date = new Date(`${items[2]}/${items[1]}/${items[0]}`).toLocaleDateString(\r\n\t\t\t\t\t'fr-FR'\r\n\t\t\t\t);\r\n\t\t\t\tlet msg = 'La date indiquée est invalide';\r\n\t\t\t\tif (input.value === '') {\r\n\t\t\t\t\terrorSelector.textContent = 'La date de naissance est obligatoire';\r\n\t\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t\t} else if (date === 'Invalid Date') {\r\n\t\t\t\t\terrorSelector.textContent = msg;\r\n\t\t\t\t} else if (date !== input.value) {\r\n\t\t\t\t\terrorSelector.textContent = msg;\r\n\t\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t\t} else if (new Date(input.value) > Date.now()) {\r\n\t\t\t\t\terrorSelector.textContent = `La date de naissance doit être antérieure à aujourd'hui.`;\r\n\t\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t\t} else if (parseInt(items[2]) < 1900) {\r\n\t\t\t\t\terrorSelector.textContent = `L'année de naissance doit être postérieure à 1900.`;\r\n\t\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t\t} else if(input.dataset.anneeMin) {\r\n\t\t\t\t\tif (parseInt(items[2]) < parseInt(input.dataset.anneeMin)) {\r\n\t\t\t\t\t\terrorSelector.textContent = input.dataset.formMsg ?? `L'année de naissance doit être postérieure à ${input.dataset.anneeMin}.`;\r\n\t\t\t\t\t\tinput.setCustomValidity(`L'année de naissance doit être postérieure à ${input.dataset.anneeMin}.`);\r\n\t\t\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tinput.setCustomValidity('');\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tself._isFieldValid(errorSelector, input);\r\n\t\t\t\t}\r\n\t\t\t} else if (parseInt(input.value) < parseInt(input.dataset.min)) {\r\n\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t} else if (input.validity.valid) {\r\n\t\t\t\tself._isFieldValid(errorSelector, input);\r\n\t\t\t} else {\r\n\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/// Function de validation d'un \r\n\t_validateCheckbox(input, errorSelector) {\r\n\t\tlet self = this;\r\n\r\n\t\t/// Lorsque l'utilisateur coche\r\n\t\tinput.addEventListener('change', (el) => {\r\n\t\t\tif (input.validity.valid) {\r\n\t\t\t\tself._isFieldValid(errorSelector, input);\r\n\t\t\t} else {\r\n\t\t\t\tself._showError(input, errorSelector);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t/// @Fields, @event\r\n\t/// Function de validation d'un \r\n\t_validateEmail(emailInput, errorSelector) {\r\n\t\tlet self = this;\r\n\r\n\t\t/// Au focus dans le champ, on masque le message d'erreur\r\n\t\temailInput.addEventListener('focusin', () => {\r\n\t\t\tself._isFieldValid(errorSelector, emailInput);\r\n\t\t});\r\n\r\n\t\t/// Lorsque le champ perd le focus\r\n\t\t/// (à la différence de focus, l'événement blur ne se propage pas)\r\n\t\temailInput.addEventListener('blur', () => {\r\n\t\t\tif (emailInput.validity.valid) {\r\n\t\t\t\tself._isFieldValid(errorSelector, emailInput);\r\n\t\t\t} else {\r\n\t\t\t\tself._showError(emailInput, errorSelector);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t/// @Fields, @event\r\n\t/// Function de validation d'un \r\n\t_validateNumber(inputNumber, errorSelector) {\r\n\t\tlet self = this;\r\n\t\tlet settings = this.settings;\r\n\r\n\t\t/// Au focus dans le champ, on masque le message d'erreur\r\n\t\tinputNumber.addEventListener('focusin', () => {\r\n\t\t\tself._isFieldValid(errorSelector, inputNumber);\r\n\t\t});\r\n\r\n\t\t/// Gestion de l'erreur en cas de caractères interdits\r\n\t\tinputNumber.addEventListener('keyup', (el) => {\r\n\t\t\tif (inputNumber.value === '') {\r\n\t\t\t\tself._showError(inputNumber, errorSelector);\r\n\t\t\t} else {\r\n\t\t\t\tself._isFieldValid(errorSelector, inputNumber);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tinputNumber.addEventListener('blur', (el) => {\r\n\t\t\tif (el.target.validity.rangeUnderflow || inputNumber.value === '') {\r\n\t\t\t\tself._showError(inputNumber, errorSelector);\r\n\t\t\t} else {\r\n\t\t\t\tself._isFieldValid(errorSelector, inputNumber);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t/// @Fields, @event\r\n\t/// Function de validation d'un \r\n\t_validateTel(telInput, errorSelector) {\r\n\t\tlet self = this;\r\n\t\tlet settings = this.settings;\r\n\r\n\t\t/// Au focus dans le champ, on masque le message d'erreur\r\n\t\ttelInput.addEventListener('focusin', () => {\r\n\t\t\tself._isFieldValid(errorSelector, telInput);\r\n\t\t});\r\n\r\n\t\t/// Gestion de l'erreur en cas de caractères interdits\r\n\t\ttelInput.addEventListener('keyup', (el) => {\r\n\t\t\tlet charactersForbidden = settings.regex.charactersAlpha;\r\n\t\t\tif (!charactersForbidden.test(telInput.value)) {\r\n\t\t\t\tself._isFieldValid(errorSelector, telInput);\r\n\t\t\t} else {\r\n\t\t\t\tself._showError(telInput, errorSelector);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\ttelInput.addEventListener('blur', (el) => {\r\n\t\t\tif (settings.regexTel.test(telInput.value)) {\r\n\t\t\t\tself._verificationIndicatifTelephonique();\r\n\t\t\t} else {\r\n\t\t\t\tself._showError(telInput, errorSelector);\r\n\t\t\t}\r\n\t\t\t/// On affiche un message d'erreur au blur uniquement s'il y a une value\r\n\t\t\tif (el.target.value === '') {\r\n\t\t\t\tself._isFieldValid(errorSelector, telInput);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t/// @Fields, @boolean\r\n\t/// Function gérant l'affichage des messages d'erreur liés aux indicatifs téléphoniques\r\n\t_verificationIndicatifTelephonique() {\r\n\r\n\t\tlet settings = this.settings;\r\n\t\tlet msg = settings.msg;\r\n\r\n\t\tfunction checkIndicatif(idTel, idIndicatif) {\r\n\t\t\treturn document.getElementById(idTel).value !== '' && document.getElementById(idIndicatif).value === '';\r\n\t\t}\r\n\r\n\t\tfunction returnMsg(id, message) {\r\n\t\t\tdocument.getElementById(id).innerText = message;\r\n\t\t}\r\n\r\n\t\tif (!settings.noCheckIndicatif) {\r\n\r\n\t\t\tif (msg.fields.telephone.mobile !== undefined) {\r\n\t\t\t\tif (checkIndicatif(msg.fields.telephone.mobile, msg.fields.indicatif.mobile)) {\r\n\t\t\t\t\treturnMsg(msg.validationIdMsg.mobile, msg.indicatif);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturnMsg(msg.validationIdMsg.mobile, '');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (msg.fields.telephone.fixe !== undefined) {\r\n\t\t\t\tif (checkIndicatif(msg.fields.telephone.fixe, msg.fields.indicatif.fixe)) {\r\n\t\t\t\t\treturnMsg(msg.validationIdMsg.fixe, msg.indicatif);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturnMsg(msg.validationIdMsg.fixe, '');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\t/// ==========================================================================\r\n\r\n\t/// @Validation\r\n\t/// Retourne un boolean\r\n\t_isFormValid(formulaire) {\r\n\t\tlet self = this;\r\n\t\tlet settings = this.settings;\r\n\r\n\t\tlet arr = [formulaire.checkValidity()];\r\n\r\n\t\tif (settings.hasTelephone) {\r\n\t\t\tarr.push(self._isTelephoneFieldValid());\r\n\t\t}\r\n\t\tif (settings.hasCivilite) {\r\n\t\t\tarr.push(self._isCiviliteFieldValid(formulaire));\r\n\t\t}\r\n\t\tif (settings.hasOwnProperty('form') && settings.form.hasOwnProperty('atLeast')) {\r\n\t\t\tarr.push(self._hasAtLeastOneSelected(settings.form.atLeast))\r\n\t\t}\r\n\r\n\t\t/// Vaut true si tous les items de [arr] valent true\r\n\t\tlet validation = arr.every(bool => bool);\r\n\r\n\t\treturn validation;\r\n\t}\r\n\t/// @Validation\r\n\t/// Retourne un boolean\r\n\t/// au mois un checkbox checked\r\n\t_hasAtLeastOneSelected(attribut) {\r\n\t\tlet arr = [];\r\n\t\tdocument.querySelectorAll(`[data-form-atLeast=${attribut}]`).forEach(el => arr.push(el.checked))\r\n\t\tconst oneChecked = (element) => element === true;\r\n\t\treturn arr.some(oneChecked);\r\n\t}\r\n\r\n\t/// @Validation\r\n\t/// Retourne un boolean\r\n\t_isTelephoneFieldValid() {\r\n\t\tlet settings = this.settings;\r\n\t\tlet msg = this.settings.msg;\r\n\r\n\r\n\t\tlet valueMobile = Object.is(document.getElementById(msg.fields.telephone.mobile), null) ? '' : document.getElementById(msg.fields.telephone.mobile).value;\r\n\t\tlet valueFixe = Object.is(document.getElementById(msg.fields.telephone.fixe), null) ? '' : document.getElementById(msg.fields.telephone.fixe).value;\r\n\r\n\t\tlet hasNumero = !(valueMobile === '' && valueFixe === '');\r\n\t\tlet isValid = hasNumero;\r\n\r\n\t\tif (hasNumero) {\r\n\t\t\tlet numeroIsValid = true,\r\n\t\t\t\tmobileIsValid = true,\r\n\t\t\t\tfixeIsValid = true;\r\n\r\n\t\t\tif (document.getElementById(msg.fields.telephone.mobile) !== null && document.getElementById(msg.fields.telephone.mobile).value !== '') {\r\n\t\t\t\tmobileIsValid = settings.regexTel.test(document.getElementById(msg.fields.telephone.mobile).value);\r\n\t\t\t}\r\n\t\t\tif (document.getElementById(msg.fields.telephone.fixe) !== null && document.getElementById(msg.fields.telephone.fixe).value !== '') {\r\n\t\t\t\tfixeIsValid = settings.regexTel.test(document.getElementById(msg.fields.telephone.fixe).value);\r\n\t\t\t}\r\n\r\n\t\t\tnumeroIsValid = mobileIsValid && fixeIsValid;\r\n\t\t\tisValid = hasNumero && numeroIsValid;\r\n\t\t}\r\n\r\n\t\treturn isValid;\r\n\t}\r\n\t/// @Validation\r\n\t/// retourne un boolean si un champ[settings.attribut.select] existe\r\n\t/// sinon retourne @null\r\n\t_isCiviliteFieldValid(formulaire) {\r\n\t\tlet settings = this.settings;\r\n\r\n\t\tlet select = formulaire.querySelector(settings.attribut.select);\r\n\t\tif (select.dataset.formSelect === 'civilite') {\r\n\t\t\tlet civilite = select;\r\n\t\t\tlet value = parseInt(civilite.value);\r\n\t\t\tif (value === 1 || value === 2) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\t/// @Validation\r\n\t_isFieldValid(error, input) {\r\n\t\tlet settings = this.settings;\r\n\r\n\t\tif (error === null) {\r\n\t\t\tthrow new Error(`Le champ ${input.name} n'a pas de error`);\r\n\t\t}\r\n\t\t// si le champ est valide,\r\n\t\t// on vide le message d'erreur et l'on retire la classe `settings.classes.error`\r\n\t\terror.textContent = '';\r\n\t\tinput.parentElement.classList.remove(settings.classes.error);\r\n\r\n\t\tif (input.type === 'tel') {\r\n\t\t\tinput.closest(settings.selectors.fieldClass).classList.remove(settings.classes.error);\r\n\t\t} else if (input.type === 'radio') {\r\n\t\t\tinput.closest(`.${settings.classes.error}`) !== null && input.closest(`.${settings.classes.error}`).classList.remove(settings.classes.error);\r\n\t\t} else if (input.type === 'date' || input.type === 'number') {\r\n\t\t\tinput.closest(`.${settings.classes.error}`) !== null && input.closest(`.${settings.classes.error}`).classList.remove(settings.classes.error);\r\n\t\t}\r\n\t}\r\n\r\n\t/// ==========================================================================\r\n\r\n\t/// @Erreurs\r\n\t/// On génère dynamiquement le {selector} d'erreur\r\n\t/// lors d'un retour serveur, ce dernier est non null (<%= this.Html.ValidationMessageFor(model => model)%>)\r\n\t_createErrorMsg(selector) {\r\n\t\tlet settings = this.settings;\r\n\r\n\t\tif (selector.parentElement.querySelector(`.${settings.classes.errorField}`) === null) {\r\n\t\t\tlet span = document.createElement('span');\r\n\t\t\tlet container = selector.parentElement;\r\n\t\t\tif (container.querySelector('.field-validation') !== null) {\r\n\t\t\t\tcontainer = container.querySelector('.field-validation')\r\n\t\t\t}\r\n\t\t\tcontainer.appendChild(span);\r\n\t\t\tcontainer.querySelector('span').classList.add(settings.classes.errorField);\r\n\t\t\tcontainer.querySelector('span').setAttribute('aria-live', 'polite'); // Accessibilité, voir https://developer.mozilla.org/fr/docs/Web/Accessibility/ARIA/ARIA_Live_Regions\r\n\t\t}\r\n\t}\r\n\t/// @Erreurs\r\n\t/// Génération du message d'erreur\r\n\t_showError(el, error) {\r\n\t\tlet self = this;\r\n\t\tlet settings = this.settings;\r\n\t\tlet format = '';\r\n\t\tlet libelle = '';\r\n\t\tif (el.dataset.formIndicatif && el.value === '') {\r\n\t\t\tlibelle = 'indicatif';\r\n\t\t\terror.textContent = `L'${libelle} est obligatoire.`;\r\n\t\t\tel.parentElement.parentElement.querySelector(`[type=\"tel\"] + .${settings.classes.errorField}`).textContent = '';\r\n\t\t} else if (el.type !== 'tel') {\r\n\t\t\tif (el.parentElement.querySelector('label') != null) {\r\n\t\t\t\tlibelle = el.parentElement.querySelector('label').innerText.toLowerCase();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tlibelle = 'téléphone';\r\n\t\t}\r\n\r\n\t\t/// Pattern\r\n\t\tif (el.pattern === '[a-zA-ZÀ-ÖØ-öø-ÿ -]+') {\r\n\t\t\tformat = 'lettres, espace ou tiret';\r\n\t\t} else if (el.pattern === '[0-9]{1,}') {\r\n\t\t\tformat = 'chiffres';\r\n\t\t} else {\r\n\t\t\tformat = el.pattern;\r\n\t\t}\r\n\r\n\t\t/// Type\r\n\t\tif (el.type === 'tel') {\r\n\t\t\tformat = settings.msg.formatTelephone;\r\n\t\t\tif (el.parentElement.parentElement.querySelector(`${settings.attribut.indicatif} + .${settings.classes.errorField}`) !== null) {\r\n\t\t\t\tel.parentElement.parentElement.querySelector(`${settings.attribut.indicatif} + .${settings.classes.errorField}`).textContent = '';\r\n\t\t\t}\r\n\t\t\terror.textContent = format;\r\n\t\t} else if (el.type === 'date') {\r\n\t\t\tlet msgError = 'La date est invalide.';\r\n\t\t\tlet date = new Date(`${el.value}`).toLocaleDateString('fr-FR');\r\n\t\t\tif (new Date(el.value) <= Date.now()) {\r\n\t\t\t\tmsgError = `La date doit être postérieure à aujourd'hui.`;\r\n\t\t\t}\r\n\t\t\terror.textContent = msgError;\r\n\t\t}\r\n\r\n\t\tlet arrayFieldFem = ['civilité', 'ville', 'destination'];\r\n\t\tlet arrayFieldVoy = ['a', 'e', 'i', 'o', 'u'];\r\n\t\t/// La valeur est manquante\r\n\t\tif (el.validity.valueMissing) {\r\n\t\t\tif (el.dataset.formMsg) {\r\n\t\t\t\terror.textContent = el.dataset.formMsg;\r\n\t\t\t} else if (el.type === 'radio') {\r\n\t\t\t\tlibelle = document.getElementById(`${el.name}ErrorMsg`).dataset.formMsg;\r\n\t\t\t\terror.textContent = libelle === '' ? 'Ce champs est obligatoire' : libelle;\r\n\t\t\t} else if (arrayFieldVoy.includes(libelle.charAt(0))) {\r\n\t\t\t\terror.textContent = `L'${libelle} est obligatoire.`;\r\n\t\t\t} else if (arrayFieldFem.includes(libelle)) {\r\n\t\t\t\terror.textContent = `La ${libelle} est obligatoire.`;\r\n\t\t\t} else {\r\n\t\t\t\terror.textContent = `Le ${libelle} est obligatoire.`;\r\n\t\t\t\tif (el.type === 'tel') {\r\n\t\t\t\t\tel.closest('[data-fieldset=\"telephone\"]').classList.add('is-error');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// Format invalide (email, tel, number)\r\n\t\telse if (el.validity.typeMismatch) {\r\n\t\t\terror.textContent = `Le format ${el.type} est invalide.`;\r\n\t\t}\r\n\t\t/// Le format ne correspond pas au motif de la value\r\n\t\telse if (el.validity.patternMismatch && el.placeholder !== 'jj/mm/aaaa') {\r\n\t\t\tif (el.dataset.format === 'identite') {\r\n\t\t\t\terror.textContent = `Seules les lettres, espace et tiret sont autorisés.`;\r\n\t\t\t} else if (el.dataset.format === 'number') {\r\n\t\t\t\terror.textContent = `Seuls les chiffres sont autorisés.`;\r\n\t\t\t} else {\r\n\t\t\t\terror.textContent = `Votre ${libelle} ne doit comporter que des ${format}.`\r\n\t\t\t}\r\n\t\t} else if (el.dataset.format === 'number' && el.value !== '' && (parseInt(el.value) < parseInt(el.dataset.min))) {\r\n\t\t\terror.textContent = `Le nombre minimal est de ${el.dataset.min}`;\r\n\t\t}\r\n\t\t/// La value est trop longue\r\n\t\telse if (el.validity.tooLong) {\r\n\t\t\terror.textContent = `Votre ${libelle} doit comporter moins de ${el.maxLength} caractères, vous en avez entré ${el.value.length}.`;\r\n\t\t}\r\n\t\t/// La value est trop courte\r\n\t\telse if (el.validity.tooShort) {\r\n\t\t\terror.textContent = `Votre ${libelle} doit comporter au moins ${ el.minLength } caractères, vous n'en avez entré que ${el.value.length}.`;\r\n\t\t}\r\n\t\t///\r\n\t\t/// Gestion des cas spécifiques (hors Constraint validation API)\r\n\t\telse if (el.dataset.formSelect === 'civilite') {\r\n\t\t\terror.textContent = `La civilité est obligatoire.`;\r\n\t\t} else if (el.dataset.formSelect === 'pays') {\r\n\t\t\terror.textContent = `Le pays est obligatoire.`;\r\n\t\t}\r\n\r\n\t\t/// La valeur n'est pas bonne (type=number)\r\n\t\tif (el.validity.badInput && el.type === 'number') {\r\n\t\t\terror.textContent = `Seuls les chiffres sont autorisés.`;\r\n\t\t\tif (el.parentElement.querySelector('label') === null) {\r\n\t\t\t\tel.parentElement.parentElement.classList.add('is-error')\r\n\t\t\t}\r\n\t\t} else if (el.validity.rangeUnderflow && el.type === 'number') {\r\n\t\t\terror.textContent = el.dataset.formMsg ?? `La valeur minimale est de ${el.min} ${el.dataset.unite}`;\r\n\r\n\t\t\tif (el.parentElement.querySelector('label') === null) {\r\n\t\t\t\tel.parentElement.parentElement.classList.add('is-error')\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/// On ajoute la classe .is-error pour modifier la couleur des éléments du bloc concerné\r\n\t\tlet block = el.parentElement;\r\n\t\tif (el.type === 'fieldset') {\r\n\t\t\tblock = el;\r\n\t\t}\r\n\t\tblock.classList.add(settings.classes.error);\r\n\t\terror.style.display = 'block';\r\n\t}\r\n\r\n\t/// ==========================================================================\r\n\r\n\t/// @Indicatif Téléphonique\r\n\t/// @event\r\n\t/// Appelle la function _boxInput pour\r\n\t/// tous les indicatifs téléphoniques présents et lors d'un change du select\r\n\t/// isCallback : la function appelée lors d'un changement d'un select pays permet de récupérer la bonne valeur et de mettre l'indicatif tél. correspondant\r\n\tindicatifTelephonique(isCallback, value) {\r\n\t\tlet self = this;\r\n\t\tlet settings = this.settings;\r\n\r\n\t\tlet selectIndicatif = document.querySelectorAll(settings.attribut.indicatif);\r\n\r\n\t\tselectIndicatif.forEach(function (el) {\r\n\t\t\tlet box = el.parentElement.querySelector(settings.attribut.boxinput);\r\n\t\t\tif (isCallback) {\r\n\t\t\t\tel.value = value;\r\n\t\t\t\tself._boxInput(el, box)\r\n\t\t\t} else {\r\n\t\t\t\tel.addEventListener('change', function (element) {\r\n\t\t\t\t\tself._boxInput(element.target, box)\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/// @Indicatif Téléphonique\r\n\t/// Appelée dans indicatifTelephonique\r\n\t/// Affiche seulement l'indicatif et non \"Pays (+Indicatif)\"\r\n\t_boxInput(el, box) {\r\n\t\tlet text = el.options[el.selectedIndex].text;\r\n\t\tif (text != '----' && text != '--') {\r\n\t\t\tlet value = text.split('(');\r\n\t\t\tlet indicatifNumerique = value[1].slice(0, -1);\r\n\t\t\tif (box != null) {\r\n\t\t\t\tbox.innerText = indicatifNumerique;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tbox.innerText = '';\r\n\t\t}\r\n\t}\r\n\r\n\t/// Au cas où le champ soit en erreur,\r\n\t/// au focus, on retire l'erreur\r\n\t_callbackFocus(el) {\r\n\t\tlet self = this;\r\n\t\tlet selectors = self.settings.selectors;\r\n\r\n\t\tconst field = el.parentNode.classList.contains(selectors.fieldClassName) ? el.parentNode : el.parentNode.parentNode;\r\n\t\tfield.classList.remove(selectors.fieldErrorClassName);\r\n\t}\r\n\r\n\t/// UTILITIES\r\n\t/// permet de détécter si un input a un placeholder\r\n\t_placeholderActive(selector) {\r\n\t\treturn !!document.querySelector(selector + ':placeholder-shown');\r\n\t}\r\n\r\n}","/**\r\n * Le block appelé pour informer de la politiqué RGPD de Terdav\r\n */\r\nclass rgpd extends HTMLElement {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\t// Create a shadow root\r\n\t\tconst shadow = this.attachShadow({\r\n\t\t\tmode: 'open'\r\n\t\t});\r\n\r\n\t\t// Create element\r\n\t\tconst wrapper = document.createElement('div');\r\n\t\tconst text = document.createElement('div');\r\n\r\n\t\t// Le libellé du block\r\n\t\tconst span = document.createElement('span');\r\n\t\tspan.textContent = 'En savoir plus sur notre politique de confidentialité des données';\r\n\r\n\t\t// Le contenu du bloc à afficher\r\n\t\ttext.id = \"rgpdMsg\";\r\n\t\ttext.innerHTML = this.getAttribute('msg');\r\n\r\n\t\t// Styles\r\n\t\tconst style = document.createElement('style');\r\n\t\tstyle.textContent = `\r\n\t\t\tdiv {\r\n\t\t\t\tmargin-top: 20px;\r\n\t\t\t\tfont-size: 12px;\r\n\t\t\t}\r\n\t\t\tspan {\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\ttext-decoration:underline;\r\n\t\t\t}\r\n\t\t\t#rgpdMsg {\r\n\t\t\t\tmax-height:0;\r\n\t\t\t\tline-height: 1.2;\r\n\t\t\t\ttext-align: justify;\r\n\t\t\t\toverflow: hidden;\r\n\t\t\t\ttransition: max-height 1s ease;\r\n\t\t\t}\r\n\r\n\t\t\ta {\r\n\t\t\t\tcolor: var(--app-color-primary);\r\n\t\t\t}\r\n\r\n\t\t\t#rgpdMsg.is-show {\r\n\t\t\t\tmax-height: none;\r\n\t\t\t\ttransition: max-height 0.25s ease-in;\r\n\t\t\t}\r\n\t\t`;\r\n\r\n\t\t// On ajoute les éléments\r\n\t\twrapper.appendChild(span);\r\n\t\twrapper.appendChild(text);\r\n\t\tshadow.appendChild(style);\r\n\t\tshadow.appendChild(wrapper);\r\n\t}\r\n\tconnectedCallback() {\r\n\t\tthis.addEventListener(\"click\", this.onclick);\r\n\t}\r\n\tonclick() {\r\n\t\tthis.shadowRoot.querySelector('#rgpdMsg').classList.toggle('is-show');\r\n\t}\r\n}\r\n\r\n/**\r\n * Le block \"> qui affiche 5 bullets avec le niveau correspondant\r\n */\r\nclass niveaux extends HTMLElement {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tconst svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n\t\tconst width = this.dataset.width === undefined ? 90 : this.dataset.width;\r\n\t\tconst height = this.dataset.height === undefined ? 14 : this.dataset.height;\r\n\t\tlet fillColor = this.dataset.fillColor === undefined ? getComputedStyle(document.documentElement).getPropertyValue('--app-color-primary') : this.dataset.fillColor;\r\n\r\n\t\tsvg.setAttribute('width', width);\r\n\t\tsvg.setAttribute('height', height);\r\n\r\n\t\tif (this.dataset.niveaux !== undefined) {\r\n\t\t\tlet posX = 5;\r\n\t\t\tconst level = parseInt(this.dataset.niveaux);\r\n\t\t\tconst activite = this.dataset.activite === undefined ? 0 : parseInt(this.dataset.activite);\r\n\r\n\t\t\tif (activite === 91 || activite === 94) {\r\n\t\t\t\tfor (let i = 1; i <= 5; i++) {\r\n\t\t\t\t\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\r\n\t\t\t\t\tpath.setAttribute('d', 'M6.2,0.1C5.4,4.4,7.7,5.5,11.1,6c1.1,0.2,2.4-0.1,3.1,0.6c0,1.3,0.4,1.9,0.1,2.7c-0.6,1.5-5.2,2.2-7.5,1.4 c-0.6-0.2-0.9-1-1.4-1c-0.8,0-0.9,1-1.4,1.2c-5.9,1-3.2-5.1-3.9-8.8c0.4-1,2.2-1.4,3.1-0.5C4.5,1.5,4.3-0.3,6.2,0.1');\r\n\t\t\t\t\tlet pos = 18 * (i - 1);\r\n\t\t\t\t\tpath.setAttribute('transform', `translate(${pos}, 0)`);\r\n\t\t\t\t\tif (i <= level) {\r\n\t\t\t\t\t\tpath.setAttribute('fill', fillColor);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsvg.appendChild(path);\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\t\t\t\tfor (let i = 1; i <= 5; i++) {\r\n\t\t\t\t\tconst circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\r\n\t\t\t\t\tif (i > level) {\r\n\t\t\t\t\t\tfillColor = \"#bbb\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcircle.setAttribute('fill', fillColor);\r\n\t\t\t\t\tcircle.setAttribute('cx', posX);\r\n\t\t\t\t\tcircle.setAttribute('cy', 8);\r\n\t\t\t\t\tcircle.setAttribute('r', 5);\r\n\t\t\t\t\tsvg.appendChild(circle);\r\n\t\t\t\t\tposX += 15;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.dataset.engagement !== undefined) {\r\n\t\t\tlet posX = 5;\r\n\t\t\tconst level = parseInt(this.dataset.engagement);\r\n\t\t\tfor (let i = 0; i < 5; i++) {\r\n\t\t\t\tconst rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\r\n\t\t\t\tif (i + 1 > level) {\r\n\t\t\t\t\tfillColor = \"#bbb\";\r\n\t\t\t\t}\r\n\t\t\t\trect.setAttribute('x', 20 * i);\r\n\t\t\t\trect.setAttribute('y', 30 - posX);\r\n\t\t\t\trect.setAttribute('rx', 2);\r\n\t\t\t\trect.setAttribute('ry', 2);\r\n\t\t\t\trect.setAttribute('width', 15);\r\n\t\t\t\trect.setAttribute('height', posX);\r\n\t\t\t\trect.setAttribute('fill', fillColor);\r\n\t\t\t\tsvg.appendChild(rect);\r\n\t\t\t\tposX += 5;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tthis.appendChild(svg);\r\n\t}\r\n}\r\n\r\n/**\r\n * Gestion de l'affichage du block téléphone optionnel\r\n */\r\nclass toggleField extends HTMLElement {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\t// Create a shadow root\r\n\t\tconst shadow = this.attachShadow({\r\n\t\t\tmode: 'open'\r\n\t\t});\r\n\r\n\t\t// Create element\r\n\t\tconst wrapper = document.createElement('div');\r\n\r\n\t\t// Le libellé du block\r\n\t\tconst span = document.createElement('span');\r\n\t\tspan.textContent = 'Ajouter un numéro de téléphone fixe';\r\n\r\n\t\t// Styles\r\n\t\tconst style = document.createElement('style');\r\n\t\tstyle.textContent = ``;\r\n\r\n\t\t// On ajoute les éléments\r\n\t\twrapper.appendChild(span);\r\n\t\tshadow.appendChild(wrapper);\r\n\t}\r\n\tconnectedCallback() {\r\n\t\tthis.addEventListener(\"click\", this.onclick);\r\n\t}\r\n\tonclick() {\r\n\t\t//this.shadowRoot.querySelector('#rgpdMsg').classList.toggle('is-show');\r\n\t}\r\n}","/**\r\n * Le block appelé pour afficher un slider\r\n * DOC : https://developer.mozilla.org/fr/docs/Web/API/Web_components/Using_custom_elements\r\n */\r\nclass ScrollSnap extends HTMLElement {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.shadow = this.attachShadow({\r\n\t\t\tmode: \"open\"\r\n\t\t});\r\n\r\n\t\t/// Les attributs permettant de personnaliser le carousel\r\n\t\tthis.alignment = this.dataset.alignment === undefined ? \"center\" : this.dataset.alignment;\r\n\t\tthis.width = this.dataset.width === undefined ? \"100%\" : this.dataset.width;\r\n\t\tthis.gap = this.dataset.gap === undefined ? 0 : this.dataset.gap;\r\n\t\tthis.count = this.dataset.count === undefined ? 4 : this.dataset.count;\r\n\t\tthis.hasBullets = (this.dataset.hasBullets !== undefined && this.count > 1);\r\n\t\tthis.hasBulletsHover = (this.dataset.hasBulletsHover == undefined);\r\n\t\tthis.infinity = this.dataset.infinity === undefined ? false : this.dataset.infinity;\r\n\t\tthis.coeffArrow = this.dataset.sizeArrow === undefined ? 1 : this.dataset.sizeArrow;\r\n\t\tthis.opacityArrow = this.dataset.opacityArrow;\r\n\t\tthis.cached = this.dataset.cached !== undefined;\r\n\r\n\t\t/// Les méthodes appelées\r\n\t\tthis.scrollToNextPage = this.scrollToNextPage.bind(this);\r\n\t\tthis.scrollToPreviousPage = this.scrollToPreviousPage.bind(this);\r\n\t\tthis.calculateGalleryItemSize = this.calculateGalleryItemSize.bind(this);\r\n\r\n\t\tthis.isTouch = window.ontouchstart !== undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * @memberof ScrollSnap\r\n\t * Appelé lorsque l'élément personnalisé est connecté pour la première fois au DOM du document\r\n\t */\r\n\tconnectedCallback() {\r\n\t\tthis.render();\r\n\r\n\t\tthis.gallery = this.shadowRoot.querySelector(\".gallery\");\r\n\t\tthis.galleryScroller = this.gallery.querySelector(\".gallery-scroller\");\r\n\r\n\t\tthis.currentIndex = 0\r\n\t\tthis.hasBullets && !this.isTouch && this.setActivebullet(0);\r\n\t\tthis.calculateGalleryItemSize();\r\n\t\tthis.setIfLastShow();\r\n\r\n\t\t/// Evenements\r\n\t\tthis.gallery.addEventListener(\"click\", e => {\r\n\t\t\tlet self = this;\r\n\r\n\t\t\tconst {\r\n\t\t\t\ttarget\r\n\t\t\t} = e;\r\n\r\n\t\t\ttarget.dispatchEvent(\r\n\t\t\t\tnew CustomEvent('clickGallery', {\r\n\t\t\t\t\tbubbles: true,\r\n\t\t\t\t\tdetail: {\r\n\t\t\t\t\t\tlibelle: () => {\r\n\t\t\t\t\t\t\treturn target.dataset.libelle\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t);\r\n\r\n\t\t\t/// Permettre lorsque l'utilisateur click sur l'image, cela suive le lien [data-expand-link]\r\n\t\t\t/// @use : block circuit des LR\r\n\t\t\tif (target.localName === 'img' && target.closest('[data-expand-target=\"true\"]') != null) {\r\n\t\t\t\twindow.location.href = target.closest('[data-expand-target=\"true\"]').querySelector('[data-expand-link]').href ?? target.closest('[data-expand-target=\"true\"]').querySelector('[data-expand-link]').dataset.url;\r\n\t\t\t}\r\n\t\t\t///\r\n\t\t\t/// La navigation par bullets\r\n\t\t\telse if (target.localName === 'circle' && this.hasBullets) {\r\n\t\t\t\tlet indexBullet = [...target.parentElement.children].indexOf(target);\r\n\t\t\t\tlet coeff = indexBullet - this.currentIndex;\r\n\t\t\t\tthis.galleryScroller.scrollBy(coeff * this.galleryItemSize, 0);\r\n\t\t\t\tthis.currentIndex = indexBullet;\r\n\t\t\t\tthis.setActivebullet(indexBullet);\r\n\t\t\t}\r\n\r\n\t\t\tif (self.cached) {\r\n\t\t\t\tself.querySelectorAll('img').forEach((el, index) => {\r\n\t\t\t\t\tif (index > 0 && el.src != el.dataset.src && el.src.includes('VIDE')) {\r\n\t\t\t\t\t\tel.src = el.dataset.src;\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (this.count > 1) {\r\n\t\t\tthis.gallery.addEventListener('touchstart', (e) => {\r\n\t\t\t\tthis.scrollHandler(e, this.gallery)\r\n\t\t\t});\r\n\r\n\t\t\tthis.galleryScroller.scrollLeft = 0;\r\n\r\n\t\t\tthis.gallery\r\n\t\t\t\t.querySelector(\"button.next\")\r\n\t\t\t\t.addEventListener(\"click\", this.scrollToNextPage);\r\n\r\n\t\t\tthis.gallery\r\n\t\t\t\t.querySelector(\"button.previous\")\r\n\t\t\t\t.addEventListener(\"click\", this.scrollToPreviousPage);\r\n\t\t}\r\n\r\n\r\n\t\t/** Recalculate the gallery item size when the window is resized. */\r\n\t\twindow.addEventListener(\"resize\", this.calculateGalleryItemSize);\r\n\t}\r\n\r\n\t/**\r\n\t * Getter : on récupère l'index du premier item affiché\r\n\t * @memberof ScrollSnap\r\n\t */\r\n\tget currentIndex() {\r\n\t\treturn this.shadowRoot.querySelector(\".gallery\").dataset.index === undefined ? 0 : this.shadowRoot.querySelector(\".gallery\").dataset.index\r\n\t}\r\n\r\n\t/**\r\n\t * Setter : on update l'index du premier item affiché\r\n\t * @memberof ScrollSnap\r\n\t */\r\n\tset currentIndex(newIndex) {\r\n\t\tthis.shadowRoot.querySelector(\".gallery\").dataset.index = newIndex\r\n\t}\r\n\r\n\t/**\r\n\t * Called when the element is removed from the DOM.\r\n\t * @memberof ScrollSnap\r\n\t */\r\n\tdisconnectedCallback() {\r\n\t\twindow.removeEventListener(\"resize\", this.calculateGalleryItemSize);\r\n\t}\r\n\r\n\t/**\r\n\t * On calcule la largeur d'un item\r\n\t * @memberof ScrollSnap\r\n\t */\r\n\tcalculateGalleryItemSize() {\r\n\t\tconst slotElement = this.galleryScroller.querySelector(\"slot\");\r\n\t\tconst nodes = slotElement.assignedNodes({\r\n\t\t\tflatten: true\r\n\t\t});\r\n\t\tconst firstSlottedElement = nodes.find(\r\n\t\t\t(node) => node.nodeType === Node.ELEMENT_NODE\r\n\t\t);\r\n\t\tthis.galleryItemSize = firstSlottedElement.clientWidth === 0 ? this.parentNode.clientWidth : firstSlottedElement.clientWidth;\r\n\t}\r\n\t/**\r\n\t * Renvoie un boolean indiquant si le dernier item du carousel est visible ou non\r\n\t * @memberof ScrollSnap\r\n\t */\r\n\tsetIfLastShow(index) {\r\n\t\t// On calcule le nombre d'items affichés simulatnément\r\n\t\tthis.nbItemsShow = Math.floor(this.parentNode.clientWidth / (Number(this.gap), this.galleryItemSize));\r\n\r\n\t\t// Quel est l'index du dernier élément visible ?\r\n\t\tthis.lastVisible = (this.lastVisible || Number(this.nbItemsShow)) + (index || 0);\r\n\r\n\t\t// On set un boolean pour gérer les flèches\r\n\t\tthis.gallery.dataset.lastShow = (Number(this.count) - this.lastVisible) === 0;\r\n\t}\r\n\r\n\t/**\r\n\t * On détect si l'on swipe\r\n\t * @memberof ScrollSnap\r\n\t */\r\n\tscrollHandler(e) {\r\n\t\t[...e.target.parentElement.children].forEach((el, index) => {\r\n\t\t\tif (index > 0 && el.src != el.dataset.src && el.src.includes('VIDE')) {\r\n\t\t\t\tel.src = el.dataset.src;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Go to item précédent\r\n\t * @memberof ScrollSnap\r\n\t */\r\n\tscrollToPreviousPage() {\r\n\t\tthis.galleryScroller.scrollBy(-this.galleryItemSize, 0);\r\n\t\tlet currentIndex = this.gallery.dataset.index === undefined ? 0 : this.gallery.dataset.index;\r\n\t\tthis.gallery.dataset.index = Math.max(Number(currentIndex) - 1, 0);\r\n\t\t(this.hasBullets && !this.isTouch) && this.setActivebullet(this.gallery.dataset.index)\r\n\t\tthis.setIfLastShow(-1);\r\n\t}\r\n\r\n\t/**\r\n\t * Go to item suivant\r\n\t * @memberof ScrollSnap\r\n\t */\r\n\tscrollToNextPage() {\r\n\t\tthis.galleryScroller.scrollBy(this.galleryItemSize, 0);\r\n\t\tlet currentIndex = this.gallery.dataset.index === undefined ? 0 : this.gallery.dataset.index;\r\n\t\tthis.gallery.dataset.index = Math.min(Number(currentIndex) + 1, Number(this.count - 1));\r\n\t\t(this.hasBullets && !this.isTouch) && this.setActivebullet(this.gallery.dataset.index);\r\n\r\n\t\tif (JSON.parse(this.gallery.dataset.lastShow) && this.infinity) {\r\n\t\t\tthis.galleryScroller.scrollLeft = 0;\r\n\t\t\tthis.gallery.dataset.index = 0;\r\n\t\t\tthis.setIfLastShow(-1 * this.count);\r\n\t\t} else {\r\n\t\t\tthis.setIfLastShow(1);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Active bullet\r\n\t * @memberof ScrollSnap\r\n\t */\r\n\tsetActivebullet(index) {\r\n\t\tthis.bullets = this.gallery.querySelectorAll(`circle`);\r\n\t\tthis.bullets.forEach(el => el.classList.remove('is-active'))\r\n\t\tthis.bullets[index].classList.add('is-active')\r\n\t}\r\n\r\n\t/**\r\n\t * Génération des bullets\r\n\t * @memberof ScrollSnap\r\n\t * @returns [HTML]\r\n\t */\r\n\tgenerateBullets() {\r\n\t\tlet circles = '';\r\n\t\tfor (let i = 0; i < this.count; i++) {\r\n\t\t\tcircles += ``;\r\n\t\t}\r\n\r\n\t\tlet bullets = `${circles}`;\r\n\t\tbullets = this.hasBullets ? bullets : '';\r\n\t\tbullets = !this.isTouch ? bullets : '';\r\n\t\tbullets = this.count > 1 ? bullets : '';\r\n\t\treturn bullets;\r\n\t}\r\n\t/**\r\n\t * Handles the rendering of the component markup and CSS.\r\n\t */\r\n\trender() {\r\n\r\n\t\tthis.shadowRoot.innerHTML = `\r\n\t\t\t\r\n\r\n\t\t\t
\r\n\t\t\t\t\t${this.count > 1 ? `\r\n\t\t\t\t\t` : \"\"}\r\n\t\t\t\t\t${this.generateBullets() }\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t`;\r\n\t}\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n\t/// On ajoute le nouvel élément\r\n\tcustomElements.define(\"carousel-img\", ScrollSnap);\r\n})"]}