{"version":3,"sources":["Scripts/src/common/geoplugin.js","Scripts/src/common/rgpd.js","../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":["redirectionTld","init","API_KEY","PAGE","URL_GEOPLUGIN","concat","fetch","then","data","json","url","URL","window","location","href","country","geoplugin_countryCode","paramCanada","searchParams","get","helpers","require","setCookie","deleteCookie","RedirectCanada","getCookie","includes","exclusions","include","replace","getURLParameters","match","reduce","a","v","slice","indexOf","isStringOrObjectOrArrayEmpty","val","Object","keys","length","testGeoplugin","geoloc","console","log","info","error","module","exports","tld","origin","split","pop","cookiesSettings","typeCookies","defaultCookieInfos","path","domain","hostname","objCookies","facebook_pixel","nameCookies","hasStorage","hasFunction","Bing","nameLocalStorageItems","Google_Ads","ABTasty","nameSessionStorageItems","terdav","google_analytics","clarity","emarsys","removeCookie","trackeur","i","removeStorage","undefined","localStorage","removeItem","removeData","removeAllCookies","injectionTrakers","launchFB","f","b","e","n","t","s","fbq","callMethod","apply","arguments","queue","push","_fbq","loaded","version","createElement","async","src","getElementsByTagName","parentNode","insertBefore","document","launchGoogleAd","el","setAttribute","body","appendChild","setPopinObligatoire","css","type","styles","styleSheet","cssText","createTextNode","setPopinCentre","property","expires","_axcb","axeptio","on","choices","axeptioSettings","terdavConsentObligatoire","terdavPopinMiddle","config","_itemsMenu","WeakMap","_objBackLibelles","appMenuNavigation","_classCallCheck","this","_classPrivateFieldInitSpec","writable","value","querySelectorAll","ongletDestinations","ongletEnvies","ongletEsprit","_createClass","key","event","appEC","espaceClient","initialize","isMenuMobile","forEach","removeAttribute","classList","remove","getElementById","getWindowWidth","settingsApp","breakpoint","dataset","tab","set","libelle","querySelector","innerText","self","addEventListener","target","parent","isOpen","JSON","parse","getAttribute","ongletTarget","pathname","preventDefault","_closeOnglet","_openOnglet","action","parentElement","localName","_toConsumableArray","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","link","_this","_classPrivateFieldGet","add","innerHTML","trim","_GetMenu","defaultZone","libelleBackBtn","ongletOpen","hasTabOpen","param","urlPost","container","slugzone","urlDestination","method","headers","X-Robots-Tag","URLSearchParams","response","text","html","err","warn","elementExist","zone","substring","label","className","children","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","TypeError","o","minLen","_arrayLikeToArray","prototype","toString","call","constructor","name","Array","from","test","iter","Symbol","iterator","isArray","len","arr2","commons","classConfig","loading","NAVIGATOR","isiPad","navigator","userAgent","toLowerCase","isSafari","HTMLElement","isMobileSafari","isDeviceiPad","settings","convertButtonToLink","loader","configCss","flecheScrollTop","resizeScreen","customElements","define","rgpd","niveaux","attribute","element","section","voyage","classLibelle","arrow","btnVisibility","visibility","Number","scrollY","passive","scroll","top","left","behavior","_document$body$classL","documentElement","classDevice","pageNotIpad","classBody","isTouchDevice","orientationScreen","getOrientation","reload","ErreurJs","title","message","objectConfig","_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","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","cookie","parts","decodeURIComponent","shift","days","d","Date","setTime","getTime","toGMTString","getPage","page","identifiant","isEmptyObject","object","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","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","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","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","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","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","Promise","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","_x","_x2","_ref2","_callee2","_context2","_x3","_x4","global","factory","amd","detach","removeChild","isIOS","MSStream","clearDebounceTimer","debounceTimer","clearTimeout","attach","doc","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","scrollIntoView","block","inline","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","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","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":["const redirectionTld = {\r\n\r\n\tinit: function (API_KEY, PAGE) {\r\n\r\n\t\tconst URL_GEOPLUGIN = `https://ssl.geoplugin.net/json.gp?k=${API_KEY}&jsoncallback=`;\r\n\r\n\t\tfetch(URL_GEOPLUGIN).then(\r\n\t\t\tdata => data.json()\r\n\t\t).then(function (data) {\r\n\t\t\t/// URL API\r\n\t\t\tconst url = new URL(window.location.href);\r\n\t\t\tlet country = data.geoplugin_countryCode,\r\n\t\t\t\tparamCanada = url.searchParams.get('canada'),\r\n\t\t\t\thelpers = require('common/helpers');\r\n\t\t\t/// Paramètre canada\r\n\t\t\t/// ➞ permet à TCA d'accéder au .com\r\n\t\t\tif (paramCanada !== null && paramCanada !== \"\" && paramCanada === \"ok\") {\r\n\t\t\t\thelpers.setCookie('CanadaOk', 'ok', 365);\r\n\t\t\t}\r\n\t\t\t/// Si le paramètre canada est vide, on delete le cookie\r\n\t\t\telse if (paramCanada !== null && paramCanada === \"\") {\r\n\t\t\t\thelpers.deleteCookie('CanadaOk');\r\n\t\t\t}\r\n\r\n\t\t\tlet RedirectCanada = helpers.getCookie('CanadaOk');\r\n\r\n\t\t\t/// CANADA\r\n\t\t\t/// S'il n'y a pas le cookie CanadaOk ET que geoplugin renvoie CA ET que l'url contient terdav.com\r\n\t\t\t/// on est redirigé sur TCA\r\n\t\t\tif (RedirectCanada === null || RedirectCanada === \"\" || RedirectCanada !== \"ok\") {\r\n\t\t\t\tconst exclusions = [\"inscription\", \"relanceoption\", \"relancedevis\", \"relancesolde\", \"paiementlibre\"];\r\n\t\t\t\t// Test // ?testCanada=true\r\n\t\t\t\t// if (!exclusions.includes(PAGE) && url.searchParams.get('testCanada')) {\r\n\t\t\t\t// \tlet url = window.location.href.replace(\".com\", \".ca\");\r\n\t\t\t\t// \twindow.location.href = \"https://www.terdav.ca\";\r\n\t\t\t\t// }\r\n\t\t\t\tif (country == 'CA' && window.location.href.includes('terdav.com')) {\r\n\t\t\t\t\tconst exclusions = [\"inscription\", \"relanceoption\", \"relancedevis\", \"relancesolde\", \"paiementlibre\", \"account\", \"espaceclient\"];\r\n\r\n\t\t\t\t\tif (!exclusions.include(PAGE)) {\r\n\t\t\t\t\t\tlet url = window.location.href.replace(\".com\", \".ca\");\r\n\t\t\t\t\t\twindow.location.href = url;\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/// BELGIQUE\r\n\t\t\t/// Si le geoplugin renvoie BE ET que l'url contient terdav.com\r\n\t\t\t/// on est redirigé sur terdav.be\r\n\t\t\tif (country == 'BE' && window.location.href.includes('terdav.com')) {\r\n\t\t\t\tlet url = window.location.href.replace(\".com\", \".be\");\r\n\t\t\t\twindow.location.href = url;\r\n\t\t\t}\r\n\r\n\t\t\t/// Log\r\n\t\t\t/// pour débuger\r\n\t\t\tconst getURLParameters = url => (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(\r\n\t\t\t\t(a, v) => (\r\n\t\t\t\t\t(a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a\r\n\t\t\t\t), {}\r\n\t\t\t);\r\n\t\t\tconst isStringOrObjectOrArrayEmpty = val => val == null || !(Object.keys(val) || val).length; // bool | number => true\r\n\t\t\tconst testGeoplugin = getURLParameters(window.location.href).geoloc;\r\n\t\t\tif (!isStringOrObjectOrArrayEmpty(testGeoplugin)) {\r\n\t\t\t\tswitch (testGeoplugin) {\r\n\t\t\t\tcase 'data':\r\n\t\t\t\t\tconsole.log(data);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'cookie':\r\n\t\t\t\t\tconsole.log(`Le cookie canada vaut ${helpers.getCookie(\"CanadaOk\")}.`)\r\n\t\t\t\t\thelpers.getCookie(\"CanadaOk\") === 'ok' ? console.log(`Il est possible d'accèder à TDV depuis le Canada`) : console.log(`Il est impossible d'accèder à TDV depuis le Canada`);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'redirect':\r\n\t\t\t\t\tconsole.log(`Les conditions pour la redirection : \\n Country : ${country == 'CA'} \\n URL : ${window.location.href.includes('terdav.com')}`);\r\n\t\t\t\t\thelpers.getCookie(\"CanadaOk\") === 'ok' ? console.log(`Le cookie est présent. Il est possible d'accèder à TDV depuis le Canada`) : console.log(`Le cookie n'est pas présent. Il est impossible d'accèder à TDV depuis le Canada`);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tconsole.info('La valeur du paramètre geoloc est incorrecte.')\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}).catch(function (error) {\r\n\t\t\tconsole.error(error)\r\n\t\t})\r\n\t}\r\n}\r\n\r\nmodule.exports = redirectionTld;","/*\r\n * Configuration RGPD\r\n */\r\n\r\nconst tld = window.location.origin.split('.').pop();\r\n\r\nlet cookiesSettings = {\r\n\r\n\ttypeCookies: [\r\n\t\t\"facebook_pixel\", \"Bing\", \"Google_Ads\", \"ABTasty\", \"terdav\", \"google_analytics\", \"emarsys\", \"clarity\"\r\n\t],\r\n\r\n\tdefaultCookieInfos: {\r\n\t\tpath: '/',\r\n\t\tdomain: window.location.hostname === 'localhost' ? window.location.hostname : '.terdav.' + tld\r\n\t},\r\n\r\n\tobjCookies: require('common/helpers').getCookie(),\r\n\r\n\t/// Liste des cookies\r\n\tfacebook_pixel: {\r\n\t\tnameCookies: ['_fbp'],\r\n\t\thasStorage: false,\r\n\t\thasFunction: true\r\n\t},\r\n\tBing: {\r\n\t\tnameCookies: ['_uetvid', '_uetsid', 'MUID'],\r\n\t\tdomain: 'bing.com',\r\n\t\thasStorage: true,\r\n\t\tnameLocalStorageItems: ['_uetvid', '_uetvid_exp', '_uetsid', '_uetsid_exp']\r\n\t},\r\n\tGoogle_Ads: {\r\n\t\tnameCookies: ['APISID', 'SAPISID', 'SSID', 'IDE'],\r\n\t\thasStorage: false\r\n\t},\r\n\tABTasty: {\r\n\t\tnameCookies: ['ABTasty', 'ABTastySession', 'ABTastyDomainTest'],\r\n\t\thasStorage: true,\r\n\t\tnameLocalStorageItems: ['ABTastyData', 'ABTastyWidgets'],\r\n\t\tnameSessionStorageItems: ['ABTastyUA', 'ABTastyGeoloc']\r\n\t},\r\n\tterdav: {\r\n\t\tnameCookies: ['terdav'],\r\n\t\thasStorage: false\r\n\t},\r\n\tgoogle_analytics: {\r\n\t\tnameCookies: ['_ga', '_gid', '_gat_gaLegacy', '_gali', '_dc_gtm_UA-39580963-3', '_gat_UA-39580963-3', '_pctx', '_pcid'],\r\n\t\thasStorage: false\r\n\t},\r\n\tclarity: {\r\n\t\tnameCookies: ['_clsk', '_clck', '_cltk'],\r\n\t\thasStorage: true\r\n\t},\r\n\temarsys: {\r\n\t\tnameCookies: ['scarab.visitor', 'scarab.profile'],\r\n\t\thasStorage: false\r\n\t},\r\n\r\n\tremoveCookie: function (trackeur) {\r\n\t\t/// On récupère la liste des cookies de l'objet cookiesSettings[trackeur]\r\n\t\t/// on les supprime\r\n\t\tfor (var i = 0; i < cookiesSettings[trackeur].nameCookies.length; i++) {\r\n\t\t\trequire('common/helpers').deleteCookie(cookiesSettings[trackeur].nameCookies[i])\r\n\t\t}\r\n\t},\r\n\r\n\tremoveStorage: function (trackeur) {\r\n\t\t/// On supprime les datas dans localStorage et sessionStorage de trackeur\r\n\t\tif (cookiesSettings[trackeur].nameLocalStorageItems != undefined) {\r\n\t\t\tfor (var i = 0; i < cookiesSettings[trackeur].nameLocalStorageItems.length; i++) {\r\n\t\t\t\tlocalStorage.removeItem(cookiesSettings[trackeur].nameLocalStorageItems[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (cookiesSettings[trackeur].nameSessionStorageItems != undefined) {\r\n\t\t\tfor (var i = 0; i < cookiesSettings[trackeur].nameSessionStorageItems.length; i++) {\r\n\t\t\t\tlocalStorage.removeItem(cookiesSettings[trackeur].nameSessionStorageItems[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tremoveData: function (trackeur) {\r\n\t\tcookiesSettings.removeCookie(trackeur);\r\n\t\tif (cookiesSettings[trackeur].hasStorage) {\r\n\t\t\tcookiesSettings.removeStorage(trackeur);\r\n\t\t}\r\n\t},\r\n\r\n\tremoveAllCookies: function () {\r\n\t\tfor (var i = 0; i < cookiesSettings.typeCookies.length; i++) {\r\n\t\t\tcookiesSettings.removeCookie(cookiesSettings.typeCookies[i]);\r\n\t\t}\r\n\t}\r\n\r\n\t// info: function () {\r\n\t// \tfor (var i = 0; i < cookiesSettings.typeCookies.length; i++) {\r\n\t// \t\tlet nameOfService = cookiesSettings.typeCookies[i];\r\n\t// \t\tlet numberOfCookies = cookiesSettings[nameOfService].nameCookies.length;\r\n\t// \t\tlet listOfCookies = [];\r\n\r\n\t// \t\tconsole.log(numberOfCookies)\r\n\r\n\t// \t\tfor (var i = 0; i < numberOfCookies; i++) {\r\n\t// \t\t\tlistOfCookies.push(cookiesSettings[nameOfService].nameCookies[i])\r\n\t// \t\t}\r\n\t// \t\tconsole.info(`${nameOfService} dépose ${numberOfCookies} cookies : ${listOfCookies}`);\r\n\r\n\t// \t}\r\n\t// }\r\n}\r\n\r\n\r\n/*\r\n * Implémentation des trackeurs\r\n */\r\nconst injectionTrakers = {\r\n\r\n\tlaunchFB() {\r\n\t\t! function (f, b, e, v, n, t, s) {\r\n\t\t\tif (f.fbq) return;\r\n\t\t\tn = f.fbq = function () {\r\n\t\t\t\tn.callMethod ?\r\n\t\t\t\t\tn.callMethod.apply(n, arguments) : n.queue.push(arguments)\r\n\t\t\t};\r\n\t\t\tif (!f._fbq) f._fbq = n;\r\n\t\t\tn.push = n;\r\n\t\t\tn.loaded = !0;\r\n\t\t\tn.version = '2.0';\r\n\t\t\tn.queue = [];\r\n\t\t\tt = b.createElement(e);\r\n\t\t\tt.async = !0;\r\n\t\t\tt.src = v;\r\n\t\t\ts = b.getElementsByTagName(e)[0];\r\n\t\t\ts.parentNode.insertBefore(t, s)\r\n\t\t}(window,\r\n\t\t\tdocument, 'script', 'https://connect.facebook.net/en_US/fbevents.js');\r\n\r\n\t\tfbq('init', '1903867123167252');\r\n\t\tfbq('track', \"PageView\");\r\n\t},\r\n\r\n\tlaunchGoogleAd() {\r\n\t\tvar el = document.createElement('script');\r\n\t\tel.setAttribute('async', true);\r\n\t\tel.setAttribute('src', '//www.googleadservices.com/pagead/conversion.js');\r\n\t\tdocument.body.appendChild(el);\r\n\t}\r\n}\r\n\r\n\r\n/*\r\n * Gestion style si l'on bloque la navigation jusqu'à l'acceptation ou non des cookies\r\n */\r\nconst setPopinObligatoire = function (a) {\r\n\tif (a) {\r\n\t\tvar css = document.createElement('style');\r\n\t\tcss.type = 'text/css';\r\n\r\n\t\tvar styles = '.axeptio-widget--open .axeptio_mount { background: rgba(0, 0, 0, .5); height: 100%; width: 100%; position: absolute; top: 0; }';\r\n\t\tstyles += '.axeptio-widget--open { overflow-y: hidden;}';\r\n\r\n\t\tif (css.styleSheet) css.styleSheet.cssText = styles;\r\n\t\telse css.appendChild(document.createTextNode(styles));\r\n\r\n\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(css);\r\n\t}\r\n}\r\n/*\r\n * Gestion style : popin au centre de la page\r\n */\r\nconst setPopinCentre = function (a) {\r\n\tif (a) {\r\n\t\tvar css = document.createElement('style');\r\n\t\tcss.type = 'text/css';\r\n\r\n\t\tvar styles = '@media(min-width:450px){.ax-widget-container {left: 50%!important;bottom:50vh!important; transform: translate( -50%,50%)!important; } .ax-widget-container .Illustration__Img{transform:translateX(20px)}}';\r\n\r\n\t\tif (css.styleSheet) css.styleSheet.cssText = styles;\r\n\t\telse css.appendChild(document.createTextNode(styles));\r\n\r\n\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(css);\r\n\t}\r\n}\r\n\r\n/*\r\n * Si le consentment n'a pas été donné, on supprime les cookies\r\n */\r\nif (require('common/helpers').getCookie('axeptio_cookies') === undefined) {\r\n\tfor (const property in cookiesSettings.objCookies) {\r\n\t\trequire('common/helpers').setCookie(property, '', {\r\n\t\t\texpires: 7\r\n\t\t}) /// On le redéclare pour pouvoir l'effacer (cas date expiré)\r\n\t\trequire('common/helpers').deleteCookie(property);\r\n\t}\r\n}\r\n\r\n/*\r\n * Initialisation popin Axeptio\r\n */\r\nvoid 0 === window._axcb && (window._axcb = []);\r\nwindow._axcb.push(function (axeptio) {\r\n\r\n\t/// À l'ouverture de la popin, on détecte si l'option consentement obligatoire est true ; si oui, on ajoute le style adéquat\r\n\taxeptio.on('ready', function (choices) {\r\n\t\tsetPopinObligatoire(axeptioSettings.terdavConsentObligatoire);\r\n\t\tsetPopinCentre(axeptioSettings.terdavPopinMiddle);\r\n\t});\r\n\r\n\taxeptio.on('cookies:complete', function (choices) {\r\n\r\n\t\t///\r\n\t\t/// Les logiciels tiers gérés depuis le back\r\n\t\t///\r\n\t\t/// FACEBOOK PIXEL\r\n\t\tif (choices.facebook_pixel) {\r\n\t\t\tinjectionTrakers.launchFB();\r\n\t\t} else {\r\n\t\t\tcookiesSettings.removeData('facebook_pixel');\r\n\t\t}\r\n\r\n\t\t/// GOOGLE ADS\r\n\t\tif (choices.Google_Ads) {\r\n\t\t\tinjectionTrakers.launchGoogleAd();\r\n\t\t} else {\r\n\t\t\tcookiesSettings.removeData('Google_Ads');\r\n\t\t}\r\n\r\n\t\t/// TERDAV\r\n\t\tif (!choices.terdav || choices.terdav === undefined) {\r\n\t\t\tcookiesSettings.removeData('terdav');\r\n\t\t}\r\n\r\n\t\t///\r\n\t\t/// Les cookies installés par un logiciel tiers depuis GTM\r\n\t\t///\r\n\r\n\t\t/// GOOGLE ANALYTICS\r\n\t\tif (!choices.google_analytics || choices.google_analytics === undefined) {\r\n\t\t\tcookiesSettings.removeData('google_analytics');\r\n\t\t}\r\n\r\n\t\t/// AB TASTY\r\n\t\tif (!choices.ABTasty || choices.ABTasty === undefined) {\r\n\t\t\tcookiesSettings.removeData('ABTasty');\r\n\t\t}\r\n\r\n\t\t/// BING\r\n\t\tif (!choices.Bing || choices.Bing === undefined) {\r\n\t\t\tcookiesSettings.removeData('Bing');\r\n\t\t}\r\n\r\n\t\t/// clarity\r\n\t\tif (!choices.clarity || choices.clarity === undefined) {\r\n\t\t\tcookiesSettings.removeData('clarity');\r\n\t\t}\r\n\t\t/// Emarsys\r\n\t\tif (!choices.emarsys || choices.emarsys === undefined) {\r\n\t\t\tcookiesSettings.removeData('emarsys');\r\n\t\t}\r\n\t});\r\n});","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})"]}