1/* 2 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). 3 * This devtool is neither made for production nor for readable output files. 4 * It uses "eval()" calls to create a separate source file in the browser devtools. 5 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) 6 * or disable the default devtool with "devtool: false". 7 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). 8 */ 9/******/ (() => { // webpackBootstrap 10/******/ var __webpack_modules__ = ({ 11 12/***/ 2120 13() { 14 15eval("{// dailymotion.js - Refacto 2025 AM\n\nlet adsAfterInitListenerAdded = false; //utile pour éviter d'ajouter plusieurs fois l'EventListener \"ads:afterSasOneCall\" à document\n\nfunction isDebugDM() {\n const hash = window.location.hash.replace(/^#/, '');\n return hash.split('&').some(p => p.toLowerCase() === 'debugdm=1');\n}\nif (isDebugDM()) console.log(\"dailymotion.js\");\n// Configuration des players\nconst playersIds = {\n noautoplayandnoPIP: 'x1bnvm',\n noAutoplayPIP: 'x7tnz',\n autoplayPIP: 'x6sw5'\n};\nlet startCalled = false;\nlet sdkLoaded = false;\nlet currentSdkPlayerId = null;\n\n/**\r\n * Chargement dynamique du bon SDK Dailymotion\r\n */\nfunction loadDailymotionSDK(playerId) {\n return new Promise((resolve, reject) => {\n // Si le SDK est déjà chargé avec le même player ID\n if (window.dailymotion && currentSdkPlayerId === playerId) {\n resolve();\n return;\n }\n\n // Si un SDK différent est déjà chargé, on doit nettoyer\n if (window.dailymotion && currentSdkPlayerId !== playerId) {\n // Supprimer l'ancien script\n const oldScript = document.querySelector(`script[src*=\"geo.dailymotion.com/player/${currentSdkPlayerId}.js\"]`);\n if (oldScript) {\n oldScript.remove();\n }\n // Reset de l'objet dailymotion\n delete window.dailymotion;\n }\n const existingScript = document.querySelector(`script[src*=\"geo.dailymotion.com/player/${playerId}.js\"]`);\n if (existingScript) {\n existingScript.onload = () => {\n currentSdkPlayerId = playerId;\n resolve();\n };\n return;\n }\n const script = document.createElement('script');\n script.src = `https://geo.dailymotion.com/player/${playerId}.js`;\n script.onload = () => {\n currentSdkPlayerId = playerId;\n sdkLoaded = true;\n resolve();\n };\n script.onerror = () => reject(`Impossible de charger le SDK Dailymotion pour player ${playerId}`);\n document.body.appendChild(script);\n });\n}\n\n/**\r\n * Attente réelle de disponibilité de createPlayer\r\n */\nfunction waitForCreatePlayer() {\n return new Promise(resolve => {\n const check = () => {\n if (window.dailymotion?.createPlayer) {\n resolve();\n } else {\n setTimeout(check, 50);\n }\n };\n check();\n });\n}\n\n/**\r\n * Initialisation du module. l'IIFE : (function initDailymotionModule() { ... })(); permet d'exécuter ce code immédiatement après sa définition, assurant que le module est prêt à être utilisé dès que le script est chargé.\r\n */\n(function initDailymotionModule() {\n if (window.__dailymotionInitialized) {\n document.dispatchEvent(new CustomEvent('dailymotionPlayerLoaded', {\n detail: {}\n }));\n return;\n }\n window.__dailymotionInitialized = true;\n if (document.readyState === \"complete\" || document.readyState === \"interactive\") {\n start();\n } else {\n document.addEventListener('DOMContentLoaded', start);\n window.addEventListener('load', start);\n }\n\n // au chargment Didomi: relancer l'init après consentement si long à arriver\n try {\n window.didomiOnReady = window.didomiOnReady || [];\n window.didomiOnReady.push(Didomi => {\n const trigger = () => {\n if (typeof window.dailymotionConsentRefresh === 'function') {\n window.dailymotionConsentRefresh();\n }\n };\n // Quand la notice se ferme ou que les préférences sont sauvegardées: relancer\n Didomi.on('notice.hide', trigger);\n Didomi.on('preferences.clicksavechoices', trigger);\n Didomi.on('consent.changed', trigger);\n });\n } catch (e) {\n // rien si Didomi non présent\n }\n})();\n\n/**\r\n * Vérifie s'il y a des liens Dailymotion sur la page\r\n */\nfunction hasDailymotionLinks() {\n const links = document.querySelectorAll('a[href*=\"dailymotion.com\"], a[href*=\"dai.ly\"]');\n const hasLink = Array.from(links).some(link => {\n const href = link.href;\n return href.includes('dai.ly') || href.includes('dailymotion.com/video');\n });\n const iframes = document.querySelectorAll('iframe[src*=\"dailymotion.com\"], iframe[src*=\"dai.ly\"]');\n const hasIframe = Array.from(iframes).some(iframe =>
15 {\n const src = iframe.src;\n return src.includes('dai.ly') || src.includes('dailymotion.com/video') || src.includes('dailymotion.com/player.html?video');\n });\n return hasLink || hasIframe;\n}\n\n/**\r\n * Point d'entrée principal\r\n */\nasync function start() {\n if (startCalled) return;\n startCalled = true;\n if (!hasDailymotionLinks()) {\n setTimeout(() => {\n document.dispatchEvent(new CustomEvent('dailymotionPlayerLoaded', {\n detail: {}\n }));\n }, 3000);\n return;\n }\n\n // Déterminer le SDK à charger une seule fois pour toute la page\n let playerKey = 'autoplayPIP';\n if (typeof pooolBuilder !== 'undefined' && typeof isPremium !== 'undefined' && isPremium == \"True\") {\n playerKey = 'noautoplayandnoPIP';\n }\n const sdkPlayerId = playersIds[playerKey];\n if (isDebugDM()) console.log(\"dailymotion.js : Chargement SDK unique\", sdkPlayerId);\n try {\n // Charger le SDK une seule fois\n await loadDailymotionSDK(sdkPlayerId);\n await waitForCreatePlayer();\n parseLinks();\n parseIFrames();\n parseText();\n\n // Dispatch l'événement après traitement\n setTimeout(() => {\n document.dispatchEvent(new CustomEvent('dailymotionPlayerLoaded', {\n detail: {}\n }));\n }, 1000);\n } catch (err) {\n console.error(\"Erreur chargement SDK:\", err);\n }\n}\n\n/**\r\n * Parsing des liens Dailymotion\r\n */\nfunction parseLinks() {\n Array.from(document.querySelectorAll('a[href*=\"dailymotion.com\"], a[href*=\"dai.ly\"]')).forEach(link => new PlayerInfos(link.href).replace(link));\n}\n\n/**\r\n * Parsing des iframes Dailymotion\r\n */\nfunction parseIFrames() {\n Array.from(document.querySelectorAll('iframe[src*=\"dailymotion.com\"], iframe[src*=\"dai.ly\"]')).forEach(iframe => new PlayerInfos(iframe.src).replace(iframe));\n}\n\n/**\r\n * Parsing des URLs dans le texte\r\n */\nfunction parseText() {\n const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);\n let node;\n while (node = walker.nextNode()) {\n const value = node.nodeValue.trim();\n if (!value || node.parentNode.nodeName.toLowerCase() === 'script') continue;\n const matches = [...node.nodeValue.matchAll(/(?:https?:)?\\/\\/(?:dai\\.ly|(?:www\\.)?dailymotion\\.com)\\/[^\\s\"'<>]*/gmi)];\n if (!matches.length) continue;\n matches.forEach(match => new PlayerInfos(match[0]).replace(node));\n }\n}\n\n/**\r\n * Classe de gestion des players\r\n */\nclass PlayerInfos {\n constructor(url) {\n this.url = url;\n this.playerId = `player-${Math.random().toString(36).slice(2, 11)}`;\n this.withAutoplay = this.checkAutoplayParam();\n this.videoId = this.extractVideoId();\n }\n extractVideoId() {\n try {\n if (!this.url) return null;\n const urlParsed = new URL(this.url);\n const pathParts = urlParsed.pathname.split('/').filter(Boolean);\n\n // 1. cas standard : /video/{id}\n const videoIndex = pathParts.indexOf('video');\n if (videoIndex !== -1 && pathParts[videoIndex + 1]) {\n return pathParts[videoIndex + 1];\n }\n\n // 2. cas court : dai.ly/{id}\n if (urlParsed.hostname.includes('dai.ly')) {\n return pathParts[0] || null;\n }\n\n // ð« 3. ignorer les pages de chaîne / user / playlists\n if (pathParts[0] && !['video'].includes(pathParts[0])) {\n return null;\n }\n return null;\n } catch (e) {\n console.error(\"Erreur d'extraction videoID:\", e, this.url);\n return null;\n }\n }\n checkAutoplayParam() {\n try {\n if (!this.url) return false;\n const urlParsed = new URL(this.url);\n return urlParsed.searchParams.get('autoplay') === '1';\n } catch (e) {\n return false;\n }\n }\n replace(node) {\n if (isDebugDM()) console.log(\"dailymotion.js : Remplacement pour\", node);\n if (!this.videoId) {\n if (isDebugDM()) console.warn(\"dailymotion.js : Pas de videoId pour\", this.url);\n return;\n }\n if (document.getElementById(this.playerId)) return;\n if (!node.isConnected) return; //si le node a déjà été remplacé.\n\n // Créer le conteneur\n const container = document.createElement('div');\n container.id = this.playerId;\n container.style.width = '100%';\n container.style.aspectRatio = '16/9';\n container.dataset.video = this.videoId;\n container.dataset.autoplay = this.withAutoplay;\n if (node.parentNode) {\n node.parentNode.replaceChild(container, node);\n }\n\n // Le SDK est déjà chargé, on peut directement créer le player\n if (window.dailymotion?.createPlayer) {\n const initPlayer = async () => {\n try {\n if (isDebugDM()) console.log(`dailymotion.js : Controle de l'existance du player ${this.playerId}`);\n const player = await window.getDailymotionPlayer(this.playerId);\n if (player) {\n if (isDebugDM()) console.log(`dailymotion.js : Player existant`);\n return; //on évite de créer deux fois le meme player\n }\n if (isDebugDM()) console.log(`dailymotion.js : Création player ${this.playerId}`);\n if (isDebugDM()) console.log(\"dailymotion.js : keywords = \", window.apiPub?.keywords);\n if (isDebugDM()) console.log(\"dailymotion.js : category = \", window.dataLayer ? window.dataLayer[0]?.page?.tags?.find(item => item?.principal)?.label : null);\n if (isDebugDM()) console.log(\"dailymotion.js : pageId = \", window.apiPub?._sasConf?.pageId);\n\n /*\r\n Nous n'avons malheureusement pas de documentation spécifique mais voici quelques informations supplémentaires : \r\n \tdynamiciu : permet de passer dynamiquement lâad unit dans lâappel publicitaire sans avoir à intégrer différents tags\r\n \tkeyvalues : transmet les cust_params vers le tag publicitaire (section, catégorieâ¦)\r\n \tkeyvalues2 : extension pour passer un second bloc de keyvalues\r\n \tkeyvalues3 : extension supplémentaire\r\n \totherparams : permet de passer des données additionnelles qui ne rentrent pas dans les autres clés (ex: media URL, video metadata spécifiques...)\r\n \totherparams2 : extension supplémentaire\r\n \tppid : permet de transmettre le Publisher Provided ID\r\n \tpremium (premium=true/false) : indique si lâinventaire est premium ou non\r\n \tplcmt : transmet le type de placement (comme par exemple instream/outstream) pour qual
15ifier la nature de lâinentaire\r\n \tdescriptionurl : permet de passer une URL de description personnalisée dans l'appel publicitaire\r\n \turl : permet de passer lâURL de la page où est embarqué le player\r\n */\n player = window.dailymotion.createPlayer(this.playerId, {\n video: this.videoId,\n params: {\n autostart: this.withAutoplay ? 'on' : 'off',\n 'player-pipable': this.withAutoplay,\n mute: 1,\n customConfig: {\n dynamiciu: '40781',\n keyvalues: window.apiPub?.keywords,\n // Récupération sécurisée des keywords\n keyvalues2: window.dataLayer ? window.dataLayer[0]?.page?.tags?.find(item => item?.principal)?.label : null,\n keyvalues3: window.apiPub?._sasConf?.pageId,\n url: window.location.href\n }\n }\n });\n } catch (err) {\n console.error(\"Erreur création player:\", err, this.playerId, this.videoId);\n }\n };\n //ce test permet de s'assurer que les keywords sont bien chargés. Ces derniers sont chargés en meme temps que la confi sas...\n if (window.apiPub && window.apiPub.keywords && window.apiPub.keywords.length > 0) {\n if (isDebugDM()) console.log(\"dailymotion.js : window.apiPub et window.apiPub.keywords dispo\");\n initPlayer();\n } else {\n if (isDebugDM()) console.log(\"dailymotion.js : window.apiPub ou window.apiPub.keywords n'est pas dispo\");\n // 1. Attente de l'événement d'initialisation de la pub\n const onAdsAfterInit = () => {\n if (isDebugDM()) console.log(\"dailymotion.js : ads:afterSasOneCall a été levé\");\n clearTimeout(fallbackTimeout);\n initPlayer();\n };\n if (!adsAfterInitListenerAdded) {\n if (isDebugDM()) console.log(\"dailymotion.js : ajout de l'EventListener ads:afterSasOneCall\");\n document.addEventListener(\"ads:afterSasOneCall\", onAdsAfterInit, {\n once: true\n });\n adsAfterInitListenerAdded = true;\n }\n\n // 2. Timeout de sécurité (fallback après 2 secondes)\n const fallbackTimeout = setTimeout(() => {\n if (isDebugDM()) console.warn(\"dailymotion.js : Timeout ads:afterSasOneCall dépassé, chargement sans pub.\");\n document.removeEventListener(\"ads:afterSasOneCall\", onAdsAfterInit);\n initPlayer();\n }, 5000);\n }\n } else {\n if (isDebugDM()) console.warn(\"SDK Dailymotion non disponible pour\", this.playerId);\n }\n }\n}\n\n// Getters pour les players\nwindow.getDailymotionPlayer = async playerId => {\n try {\n return (await window.dailymotion?.getPlayer(playerId)) || null;\n } catch (e) {\n return null;\n }\n};\nwindow.getAllDailymotionPlayers = () => window.dailymotion?.getAllPlayers() || Promise.resolve([]);\n\n/**\r\n * Regénère tous les players existants avec le playerKey donné\r\n * @param {string} newPlayerKey - Clé du player à charger (ex: 'autoplayPIP')\r\n */\nwindow.regenerateAllDailymotionPlayers = function (newPlayerKey) {\n if (!playersIds[newPlayerKey]) {\n console.error(`PlayerKey \"${newPlayerKey}\" inconnu`);\n return;\n }\n const sdkPlayerId = playersIds[newPlayerKey];\n const containers = document.querySelectorAll('div[id^=\"player-\"]');\n if (!containers.length) {\n if (isDebugDM()) console.warn(\"Aucun player à regénérer\");\n return;\n }\n loadDailymotionSDK(sdkPlayerId).then(() => waitForCreatePlayer()).then(() => {\n containers.forEach(container => {\n const videoId = container.dataset.video;\n const withAutoplay = container.dataset.autoplay === 'true'; // FIX: variable manquante\n\n // Générer un nouvel ID unique pour éviter conflit Dailymotion\n const newPlayerId = `player-${Math.random().toString(36).slice(2, 11)}`;\n\n // Créer le nouveau container\n const newContainer = document.createElement('div');\n newContainer.id = newPlayerId;\n newContainer.style.width = '100%';\n newContainer.style.aspectRatio = '16/9';\n newContainer.dataset.video = videoId;\n newContainer.dataset.autoplay = withAutoplay;\n\n // Remplacer le container dans le DOM\n container.replaceWith(newContainer);\n\n // Créer le nouveau player\n const player = window.dailymotion.createPlayer(ne
15wPlayerId, {\n video: videoId,\n params: {\n autostart: withAutoplay ? 'on' : 'off',\n 'player-pipable': withAutoplay,\n mute: 1\n }\n });\n });\n }).catch(err => console.error(err));\n};\n\n// Permettre une relance après consentement sans reload\nwindow.dailymotionConsentRefresh = function () {\n try {\n // Si la première passe a échoué faute de consentement, on relance un cycle complet\n startCalled = false;\n start();\n } catch (e) {\n console.error(\"Erreur lors du refresh Dailymotion après consentement:\", e);\n }\n};\n\n//# sourceURL=webpack://Ngpa.ToolKat.FO.WebAgri/../../Modules/Ngpa.ToolKat.FO.Module.CMS/wwwroot/js/dailymotion.js?\n}"); 16 17/***/ }, 18 19/***/ 3441 20() { 21 22eval("{var timeOutFunctionId;\nwindow.addEventListener(\"load\", resizePaddingTopBody);\nwindow.addEventListener(\"resize\", function () {\n // clearTimeOut() resets the setTimeOut() timer\n // due to this the function in setTimeout() is\n // fired after we are done resizing\n clearTimeout(timeOutFunctionId);\n\n // setTimeout returns the numeric ID which is used by\n // clearTimeOut to reset the timer\n timeOutFunctionId = setTimeout(resizePaddingTopBody, 500);\n});\n//Gestion de l'emplacement des différentes pubs de type 'Habillage' selon les menus actifs (niv1/niv2)\nfunction resizePaddingTopBody() {\n var height = CalculHeightHeader();\n //console.log(this.scrollY, height); \n\n //100 = taille du header en mode shrink + securité pour gérer les différentes tailles d'écran\n if (height > 100 || this.scrollY == 0) {\n document.body.style.setProperty(\"background-position-y\", height + \"px\");\n document.body.style.setProperty(\"padding-top\", height + \"px\");\n }\n}\nfunction CalculHeightHeader() {\n var header = document.getElementsByTagName('header')[0];\n var heightSousMenu = 0;\n var heightNav = header.clientHeight;\n if (header.getElementsByClassName('nav-secondary-container').length > 0) {\n heightSousMenu = header.getElementsByClassName('nav-secondary-container')[0].clientHeight;\n }\n var height = heightNav + heightSousMenu;\n return height;\n}\nvar timeOutFunctionId;\nwindow.addEventListener(\"scroll\", function () {\n clearTimeout(timeOutFunctionId);\n timeOutFunctionId = setTimeout(resizePaddingTopBody, 500);\n});\nfunction NavHorizontal() {\n let currentScrollPosition = 0;\n let scrollAmount = 100;\n document.querySelectorAll(\"button.btn-left\").forEach(function (element) {\n element.addEventListener(\"click\", function (e) {\n e.preventDefault();\n const hScroll = e.target.closest(\".horizontal-scroll\");\n const sCont = hScroll.parentNode.querySelector(\"ul.nav-container\");\n currentScrollPosition += scrollAmount;\n let maxScroll = -sCont.offsetWidth + hScroll.offsetWidth;\n if (currentScrollPosition >= 0) {\n currentScrollPosition = 0;\n hScroll.getElementsByClassName(\"btn-left\")[0].style.display = 'none';\n } else {\n hScroll.getElementsByClassName(\"btn-left\")[0].style.display = 'block';\n }\n if (currentScrollPosition <= maxScroll) {\n currentScrollPosition = maxScroll;\n hScroll.getElementsByClassName(\"btn-right\")[0].style.display = 'none';\n } else {\n hScroll.getElementsByClassName(\"btn-right\")[0].style.display = 'block';\n }\n sCont.style.left = currentScrollPosition + 'px';\n });\n });\n document.querySelectorAll(\"button.btn-right\").forEach(function (element) {\n const wHScroll = element.closest(\".horizontal-scroll\").offsetWidth;\n const wSCont = element.closest(\".horizontal-scroll\").parentNode.querySelector(\"ul.nav-container\").offsetWidth;\n if (wHScroll < wSCont) {\n element.style.display = 'block';\n } else {\n element.style.display = 'none';\n }\n element.addEventListener(\"click\", function (e) {\n e.preventDefault();\n const hScroll = e.target.closest(\".horizontal-scroll\");\n const sCont = hScroll.parentNode.querySelector(\"ul.nav-container\");\n currentScrollPosition += -scrollAmount;\n sCont.style.left += currentScrollPosition;\n let maxScroll = -sCont.offsetWidth + hScroll.offsetWidth;\n if (currentScrollPosition >= 0) {\n currentScrollPosition = 0;\n hScroll.getElementsByClassName(\"btn-left\")[0].style.display = 'none';\n } else {\n hScroll.getElementsByClassName(\"btn-left\")[0].style.display = 'block';\n }\n if (currentScrollPosition <= maxScroll) {\n currentScrollPosition = maxScroll;\n hScroll.getElementsByClassName(\"btn-right\")[0].style.display = 'none';\n } else {\n hScroll.getElementsByClassName(\"btn-right\")[0].style.display = 'block';\n }\n sCont.style.left = currentScrollPosition + 'px';\n });\n });\n}\nwindow.addEventListener(\"load\", NavHorizontal);\n// SG: #36029 Bout de code en js pour gérer afficher et cacher menu si scroll haut/bas(évenement touch)\n/* SG : #36029 On efface temporairement les modifications à c
22ause du player Dailymotion ð\r\n\r\n let lastTouchY = 0; // Position verticale précédente du toucher\r\n let isScrolling = false;\r\n \r\nconst isMobile = window.matchMedia(\"(max-width: 767px)\"); // Vérifie si la version mobile est active via matchMedia\r\n\r\n function handleTouchMove(event) {\r\n if (!isMobile.matches) return; // Ne fait rien si ce n'est pas mobile device\r\n\r\n\r\n const currentTouchY = event.touches[0].clientY;\r\n const menuStickyHeader = document.getElementsByClassName('menuStickyMobile')[0];\r\n\r\n const getDvhUnit = window.innerHeight / 100;\r\n\r\n // Récupère la hauteur réelle du menu sticky en pixels puis on le convertis en dvh\r\n const getMenuStickyHeightPixel = menuStickyHeader.getBoundingClientRect().height;\r\n const ConvertMenuStickyHeightDvh = getMenuStickyHeightPixel / getDvhUnit;\r\n \r\n if (!isScrolling) {\r\n //Action utilisateur: On reset l'état pour déterminer touch up ou touch down\r\n isScrolling = true; \r\n lastTouchY = currentTouchY; \r\n return;\r\n }\r\n\r\n if (currentTouchY < lastTouchY) {\r\n // Touch down ! On cache le menu header \r\n menuStickyHeader.transform = \"translateY(100%)\";\r\n menuStickyHeader.style.top = `calc(100dvh + ${ConvertMenuStickyHeightDvh}dvh)`;\r\n\r\n } else if (currentTouchY > lastTouchY) {\r\n // Touch up! On fais apparaitre le menu header\r\n menuStickyHeader.transform = \"translateY(100%)\";\r\n menuStickyHeader.style.top = `calc(100dvh - ${ConvertMenuStickyHeightDvh}dvh)`;\r\n\r\n }\r\n lastTouchY = currentTouchY; // Mise à jour de la position précédente\r\n }\r\n function handleTouchEnd() {\r\n isScrolling = false; // Fin action utilisateur\r\n }\r\n\r\n // Reset du header changement window\r\n isMobile.addEventListener(\"change\", () => {\r\n if (!isMobile.matches) {\r\n if (menuStickyHeader) {\r\n menuStickyHeader.transform = \"translateY(0)\";\r\n }\r\n \r\n \r\n\r\n }\r\n });\r\n\r\n window.addEventListener(\"touchmove\", handleTouchMove);\r\n window.addEventListener(\"touchend\", handleTouchEnd);\r\n\r\n */\n\n//# sourceURL=webpack://Ngpa.ToolKat.FO.WebAgri/./src/js/shared/header.js?\n}"); 23 24/***/ }, 25 26/***/ 3585 27(__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) { 28 29"use strict"; 30eval("{\n// EXTERNAL MODULE: ../../node_modules/.pnpm/[email protected]/node_modules/headroom.js/dist/headroom.js\nvar headroom_namespaceFn = () => {\n\treturn __webpack_require__(4863);\n};\n\n// EXTERNAL MODULE: external \"jQuery\"\nvar external_jQuery_ = __webpack_require__(1669);\nvar external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery_);\n// EXTERNAL MODULE: ../../node_modules/.pnpm/[email protected]/node_modules/whatwg-fetch/dist/fetch.umd.js\nvar fetch_umd = __webpack_require__(5044);\n// EXTERNAL MODULE: ../../node_modules/.pnpm/[email protected]/node_modules/bootstrap.native/dist/bootstrap-native.js\nvar bootstrap_native = __webpack_require__(1046);\n// EXTERNAL MODULE: ../../node_modules/.pnpm/[email protected]/node_modules/vanilla-lazyload/dist/lazyload.min.js\nvar lazyload_min = __webpack_require__(8611);\n// EXTERNAL MODULE: ./src/ts/core/notify.ts\nvar notify = __webpack_require__(8355);\n;// ./src/ts/core/searchEngine.ts\n\r\nclass SearchEngine {\r\n constructor() {\r\n this.search = document.getElementById('search-engine-container');\r\n this.btnToggle = document.getElementById('search-button');\r\n document.addEventListener(\"keyup\", (e) => {\r\n if (e.key === \"Escape\" && this.search.classList.contains('active')) {\r\n this.clickFn();\r\n }\r\n });\r\n this.btnToggle.addEventListener('click', () => this.clickFn());\r\n }\r\n clickFn() {\r\n this.search.classList.toggle('active');\r\n setTimeout(() => {\r\n this.search.querySelector('.search-engine-input').focus();\r\n this.LoadArticle();\r\n this.InitFuzzySearch();\r\n }, 1000);\r\n }\r\n ;\r\n debounce(func, wait, immediate = false) {\r\n var timeout;\r\n return (...args) => {\r\n var later = () => {\r\n timeout = null;\r\n if (!immediate)\r\n func.apply(this, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow)\r\n func.apply(this, args);\r\n };\r\n }\r\n ;\r\n InitFuzzySearch() {\r\n var containerNews = this.search.querySelector('.search-container-news');\r\n var containerResults = this.search.querySelector('.search-container-results');\r\n var input = this.search.querySelector('.search-engine-input');\r\n input.addEventListener('keyup', this.debounce(() => {\r\n containerResults.innerHTML = '';\r\n containerResults.classList.add('is-loading');\r\n var q = input.value;\r\n if (q != '' && q.length > 2) {\r\n fetch('/search/fuzzy?q=' + q)\r\n .then((response) => {\r\n response.json().then((data) => {\r\n containerResults.innerHTML = '';\r\n if (data.length == 0) {\r\n containerResults.innerHTML = '<div class=\"search-result-item\" >Aucun résultat</div>';\r\n }\r\n else {\r\n data.forEach((it) => {\r\n var img = '';\r\n if (it.imageUrl) {\r\n img = '<div class=\"img\"><img src=\"' + it.imageUrl + '\" alt=\"\"/></div>';\r\n }\r\n containerResults.insertAdjacentHTML('beforeend', '<a class=\"search-result-item\" href=\"' + it.url + '\">' + img + '<div class=\"text\"><div class=\"title\"><span class=\"type\">' + it.type + ' > </span>' + it.title + '</div><p class=\"desc\">' + (it.description != null ? it.description : '') + '</p></div></a>');\r\n });\r\n }\r\n ;\r\n containerResults.classList.remove('is-loading');\r\n });\r\n })\r\n .catch(function () {\r\n containerResults.classList.remove('is-loading');\r\n });\r\n }\r\n else {\r\n containerResults.classList.remove('is-loading');\r\n }\r\n }, 400));\r\n }\r\n LoadArticle() {\r\n var newsContainer = this.search.querySelector('.search-container-news');\r\n if (newsContainer.innerHTML === '') {\r\n fetch('/article/news').then((response) => {\r\n response.text().then((data) => {\r\n newsContainer.innerHTML = data;\r\n var lazy = new lazyload_min();\r\n newsContainer.querySelectorAll('img').forEach((it) => {\r\n lazy.load(it, true);\r\n });\r\n });\r\n });\r\n }\r\n }\r\n}\r\n\n;// ./src/ts/article/readLater.ts\n\r\nclass ReadLater {\r\n constructor() {\r\n this.iconRefresh = \"zmdi-refresh\";\r\n this.iconBookmark = \"zmdi-time\";\r\n this.iconBookmarked = \"zmdi-check-circle\";\r\n this.$btns = document.querySelectorAll('.read-later-button');\r\n if (this.$btns.length > 0) {\r\n if (!this.isAuthenticated()) {\r\n this.$btns.forEach(($btn) => {\r\n $btn.addEventListener('click', (e) => {\r\n (0,notify/* default */.A)(\"Vous devez vous <a href=\\\"/account/signin\\\">connecter</a> ou <a href=\\\"/account/signup\\\">créer un compte</a> pour sauvegarder un article pour plus tard !\", \"info\");\r\n });\r\n });\r\n }\r\n else {\r\n this.getBookmarks().then((response) => {\r\n response.json().then((data) => {\r\n this.bookmarks = data;\r\n this.$btns.forEach((item) => {\r\n var articleId = item.getAttribute('data-articleId');\r\n this.bookmarks.forEach((it) => {\r\n if (it.objectId == articleId)\r\n this.switchState(item, true);\r\n });\r\n this.bind(item);\r\n });\r\n });\r\n });\r\n }\r\n }\r\n }\r\n isAuthenticated() {\r\n return window[\"UserData\"] != undefined;\r\n }\r\n getBookmarks() {\r\n return fetch('/article/bookmarks', {\r\n method: 'GET'\r\n });\r\n }
30\r\n deleteBookmark($btn, articleId) {\r\n let $icon = $btn.querySelector('i');\r\n $icon.classList.add(this.iconRefresh, 'rotate');\r\n fetch('/article/deletebookmark/' + articleId, {\r\n method: 'DELETE'\r\n })\r\n .then((response) => {\r\n if (response.ok) {\r\n this.switchState($btn, false);\r\n }\r\n })\r\n .finally(() => $icon.classList.remove(this.iconRefresh, 'rotate'));\r\n }\r\n addBookmark($btn, articleId) {\r\n let $icon = $btn.querySelector('i');\r\n $icon.classList.add(this.iconRefresh, 'rotate');\r\n fetch('/article/addbookmark/' + articleId, {\r\n method: 'POST'\r\n }).then((response) => {\r\n if (response.ok) {\r\n this.switchState($btn, true);\r\n (0,notify/* default */.A)('Cet article a été ajouté à votre liste de lecture, <a href=\"/article/bookmarkspage\">retrouvez-le ici</a> !', \"success\");\r\n }\r\n else {\r\n if (response.status == 400) {\r\n (0,notify/* default */.A)('Vous ne pouvez pas voter deux fois de suite pour le même article');\r\n }\r\n else if (response.status == 401) {\r\n (0,notify/* default */.A)(`<div><p>Vous devez vous connecter pour sauvegarder un article</p><a href=\"/account/signin?urlReferrer=${encodeURIComponent(window.location.href)}\" class=\"btn btn-outline-primary\">Connexion</button></a></div>`);\r\n }\r\n else {\r\n (0,notify/* default */.A)('Erreur inconnue');\r\n }\r\n }\r\n })\r\n .finally(() => $icon.classList.remove(this.iconRefresh, 'rotate'));\r\n }\r\n isBookmarked($btn) {\r\n var $icon = $btn.querySelector('i');\r\n return ($icon.classList.contains(this.iconBookmarked));\r\n }\r\n switchState($btn, bookmarked) {\r\n var $icon = $btn.querySelector('i');\r\n console.log(bookmarked);\r\n if (bookmarked) {\r\n $icon.classList.remove(this.iconBookmark);\r\n $icon.classList.add(this.iconBookmarked);\r\n }\r\n else {\r\n $icon.classList.remove(this.iconBookmarked);\r\n $icon.classList.add(this.iconBookmark);\r\n }\r\n }\r\n bind($btn) {\r\n var articleId = parseInt($btn.getAttribute('data-articleid'));\r\n $btn.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n if (!this.isBookmarked($btn))\r\n this.addBookmark($btn, articleId);\r\n else\r\n this.deleteBookmark($btn, articleId);\r\n });\r\n }\r\n}\r\n\n;// ./src/ts/article/zoomImg.ts\n\r\nfunction _toConsumableArray(arr) {\r\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\r\n}\r\nfunction _nonIterableSpread() {\r\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\r\n}\r\nfunction _unsupportedIterableToArray(o, minLen = null) {\r\n if (!o)\r\n return;\r\n if (typeof o === \"string\")\r\n return _arrayLikeToArray(o, minLen);\r\n var n = Object.prototype.toString.call(o).slice(8, -1);\r\n if (n === \"Object\" && o.constructor)\r\n n = o.constructor.name;\r\n if (n === \"Map\" || n === \"Set\")\r\n return Array.from(o);\r\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))\r\n return _arrayLikeToArray(o, minLen);\r\n}\r\nfunction _iterableToArray(iter) {\r\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null)\r\n return Array.from(iter);\r\n}\r\nfunction _arrayWithoutHoles(arr) {\r\n if (Array.isArray(arr))\r\n return _arrayLikeToArray(arr);\r\n}\r\nfunction _arrayLikeToArray(arr, len = null) {\r\n if (len == null || len > arr.length)\r\n len = arr.length;\r\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\r\n arr2[i] = arr[i];\r\n }\r\n return arr2;\r\n}\r\nfunction ngpaZoom() {\r\n var imgs = document.querySelectorAll('img[srcset]');\r\n var imgContainer;\r\n var imgElement;\r\n function createImgContainer() {\r\n document.body.style.height = '100vh';\r\n var imgContainer = document.createElement('DIV');\r\n imgContainer.style.position = 'absolute';\r\n imgContainer.style.width = '100vw';\r\n imgContainer.style.height = '100vh';\r\n imgContainer.style.zIndex = '10000';\r\n imgContainer.style.backgroundColor = 'rgba(0,0,0,.5)';\r\n imgContainer.style.transition = '.2s';\r\n imgContainer.style.left = '0';\r\n imgContainer.style.display = 'flex';\r\n imgContainer.style.alignItems = 'center';\r\n imgContainer.style.justifyContent = 'center';\r\n var img = document.createElement('IMG');\r\n img.style.cursor = 'pointer';\r\n imgContainer.appendChild(img);\r\n document.body.appendChild(imgContainer);\r\n img.addEventListener('load', imgLoadHandler);\r\n return {\r\n container: imgContainer,\r\n img: img\r\n };\r\n }\r\n function scrollHandler() {\r\n imgContainer.style.top = window.scrollY + 'px';\r\n }\r\n function clickHandler() {\r\n imgContainer.style.display = 'none';\r\n window.removeEventListener('scroll', scrollHandler);\r\n imgContainer.removeEventListener('click', clickHandler);\r\n window.removeEventListener('keydown', keydownHandler);\r\n }\r\n function keydownHandler(event) {\r\n if (event.key.toLowerCase() === 'escape') {\r\n clickHandler();\r\n }\r\n }\r\n function imgLoadHandler() {\r\n if (imgElement.width >= imgElement.height) {\r\n imgElement.style.width = '50vw';\r\n imgElement.style.height = 'auto';\r\n }\r\n else {\r\n imgElement.style.height = '50vh';\r\n imgElement.style.width = 'auto';\r\n }\r\n }\r\n function getMaxSrc(img) {\r\n var result = '';\r\n if (img.dataset.fullsize) {\r\n result = img.dataset.fullsize;\r\n }\r\n else {\r\n var srcset = img.srcset;\r\n var srcs = srcset && srcset.split(',');\r\n srcs = srcs && srcs.reduce(function (data, src) {\r\n var splitted = src.trim().split(' ');\r\n data = [].concat(_toConsumableArray(data), [{\r\n src: splitted[0],\r\n width: parseInt(splitted[1])\r\n }]);\r\n return data;\r\n }, []).sort(function (a, b) {\r\n return b.width - a.width;\r\n });\r\n result = srcs && srcs[0].src;\r\n }\r\n return result;\r\n }\r\n function displayImgContainer(src) {\r\n if (!imgContainer) {\r\n var elements = createImgContainer();\r\n imgElement = elements.img;\r\n imgContainer = elements.container;\r\n }\r\n imgElement.src = src;\r\n imgContainer.style.display = 'flex';\r\n imgContainer.style.top = window.scrollY + 'px';\r\n imgContainer.addEventListener('click', clickHandler);\r\n window.addEventListener('keydown', keydownHandler);\r\n window.addEventListener('scroll', scrollHandler);\r\n }\r\n if (window.innerWidth >
30 480) {\r\n imgs && imgs.forEach(function (img) {\r\n var src = getMaxSrc(img);\r\n if (src) {\r\n img.addEventListener('click', function () {\r\n if (imgContainer) {\r\n imgElement.src = \"\";\r\n }\r\n displayImgContainer(src);\r\n });\r\n }\r\n });\r\n }\r\n}\r\n\n// EXTERNAL MODULE: ../../node_modules/.pnpm/[email protected]/node_modules/tiny-slider/src/tiny-slider.js + 41 modules\nvar tiny_slider = __webpack_require__(9028);\n;// ./src/ts/core/carousel.ts\n\r\nfunction InitCarousel() {\r\n var $carousels = document.querySelectorAll(\".js-carousel\");\r\n if ($carousels.length > 0) {\r\n for (var i = 0; i < $carousels.length; i++) {\r\n new Carousel($carousels[i]);\r\n }\r\n ;\r\n }\r\n}\r\nclass Carousel {\r\n constructor(elt) {\r\n this.tns = (0,tiny_slider/* tns */.U)({\r\n container: elt,\r\n nav: true,\r\n controlsText: ['<', '>'],\r\n slideBy: 'page',\r\n items: 3,\r\n responsive: {\r\n 0: {\r\n items: 1,\r\n nav: true\r\n },\r\n 600: {\r\n items: 2,\r\n nav: false\r\n },\r\n 1000: {\r\n items: 3,\r\n nav: true,\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\n;// ./src/ts/core/formValidation.ts\nfunction FormValidation() {\r\n (function () {\r\n 'use strict';\r\n window.addEventListener('load', function () {\r\n var forms = document.querySelectorAll('.needs-validation .form-group');\r\n var validation = Array.prototype.filter.call(forms, function (form) {\r\n var input = form.querySelector('input,textarea,select');\r\n input.addEventListener('keyup', function (event) {\r\n if (input.checkValidity() === false) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n else {\r\n input.setCustomValidity(\"\");\r\n }\r\n form.classList.add('was-validated');\r\n }, false);\r\n });\r\n }, false);\r\n })();\r\n}\r\n\n;// ./src/ts/core/pageLoader.ts\nfunction InitPageLoader() {\r\n window.addEventListener('beforeunload', function (e) {\r\n document.body.classList.add('page-loading');\r\n });\r\n}\r\n\n;// ./src/ts/core/survey.ts\nfunction InitSurvey() {\r\n var survey = document.querySelector('.form-survey');\r\n if (survey) {\r\n var form = survey.querySelector('form');\r\n form.addEventListener('submit', function (e) {\r\n e.preventDefault();\r\n var formData = new FormData(form);\r\n var id = form.querySelector('input[name=\"surveyId\"]').getAttribute('value');\r\n var card = survey.closest('.card');\r\n fetch(form.getAttribute('action'), {\r\n method: \"POST\",\r\n mode: 'no-cors',\r\n body: formData\r\n }).then(c => {\r\n fetch('/survey/result/' + id).then((response) => {\r\n response.text().then(text => { card.innerHTML = text; });\r\n });\r\n });\r\n return false;\r\n });\r\n }\r\n}\r\n\n;// ./src/ts/core/accesMarches.ts\nfunction InitAccesMarches() {\r\n const accesMarchesSelects = document.querySelectorAll(\".acces-marches-select\");\r\n accesMarchesSelects.forEach(function (accesMarchesSelect) {\r\n accesMarchesSelect.addEventListener(\"change\", function (event) {\r\n var url = accesMarchesSelect.value;\r\n window.location.href = url;\r\n });\r\n });\r\n}\r\n\n// EXTERNAL MODULE: ../../node_modules/.pnpm/[email protected]/node_modules/jsonform/lib/jsonform.js\nvar jsonform = __webpack_require__(4194);\n;// ./src/ts/form/index.ts\n/* provided dependency */ var $ = __webpack_require__(1669);\n\r\nconst url = '/api/form/';\r\nvar RenderForm = (id) => {\r\n var $form = $('<form class=\"is-loading\"></form>');\r\n $('#form-' + id).after($form);\r\n $.get('/api/form/' + id).done((data) => {\r\n $form.removeClass('is-loading');\r\n var schema = JSON.parse(data.jsonSchema);\r\n var options = JSON.parse(data.formOption);\r\n var initValues = Object.fromEntries(new URL(document.location.toString()).searchParams);\r\n var formId = data.id;\r\n var $errors = $('<div class=\"jsonform-errors\" style=\"display:none;\"></div>');\r\n $form.before($errors);\r\n var urlPost = '/api/form';\r\n $form.jsonForm({\r\n schema: schema,\r\n value: initValues,\r\n form: options,\r\n onSubmitValid: function (values) {\r\n console.log(values);\r\n },\r\n onSubmit: function (errors, values) {\r\n $errors.hide();\r\n $errors.html('');\r\n if (!errors) {\r\n $.post(urlPost, { values: JSON.stringify(values), formId: formId })\r\n .done(function (data) {\r\n if (data.messageResult)\r\n $form.html(data.messageResult);\r\n })\r\n .fail(function (err) {\r\n console.log(err);\r\n if (err.status == 400) {\r\n for (var key in err.responseJSON) {\r\n appendError(err.responseJSON[key][0]);\r\n }\r\n }\r\n else\r\n appendError('Erreur de type inconnu');\r\n });\r\n }\r\n else {\r\n appendError('\"Le formulaire n\\'est pas correctement rempli');\r\n }\r\n return false;\r\n }\r\n });\r\n function appendError(message) {\r\n $errors.show();\r\n $errors.append('<div class=\"jsonform-error-item\">' + message + '</div>');\r\n }\r\n $form.children('div').addClass('row');\r\n $(\".help-block\").each(function (i, el) {\r\n var placeholder = $(el).text();\r\n if (placeholder != \"\") {\r\n var $input = $(el).closest(\".controls\").find(\"input, textarea\");\r\n if ($input.length != 0) {\r\n $input.attr(\"placeholder\", placeholder);\r\n $(el).hide();\r\n }\r\n }\r\n });\r\n });\r\n};\r\n/* harmony default export */ const ts_form = (RenderForm);\r\n\n;// ./src/ts/core/poool.ts\nfunction LaunchPoool(enablePoool, configPoool) {\r\n if (!enablePoool) {\r\n document.querySelectorAll(\".poool-hide\").forEach((item) => {\r\n item.classList.remove(\"poool-hide\");\r\n });\r\n return;\r\n }\r\n function whenPooolAvailable(name, callback) {\r\n var interval = 10;\r\n var timer = null;\r\n if (window['whenPooolAvailableStart' + name] == undefined) {\r\n window['whenPooolAvailableStart' + name] = new Date();\r\n }\r\n var diff = Math.abs((new Date()).getTime() - (window['whenPooolAvailableStart' + name]).getTime());\r\n if (diff < 5000) {\r\n timer = window.setTimeout(function () {\r\n if (window[name]) {\r\n callback(window[name]);\r\n }\r\n else {\r\n whenPooolAvailable(name, callback);\r\n }\r\n }, interval);\r\n }\r\n else {\r\n window.clearTimeout(timer);\r\n }\r\n }\r\n function cryptPoool() {\r\n window['PooolData'] = [];\r\n document.querySelectorAll(\".poool-crypt\").forEach((item, index) => {\r\n window['PooolData'].push(item.innerHTML);\r\n item.innerHTML = \"#\" + index + \"#\";\r\n });\r\n }\r\n function unCryptPoool() {\r\n document.querySelectorAll(\".poool-crypt\").forEach((item, index) => {\r\n var code = item.innerHTML.replace(/#/g, '');\r\n item.innerHTML = window['PooolData'].at(code);\r\n });\r\n window['PooolData'] = [];\r\n }\r\n cryptPoool();\r\n whenPooolAvailable(\"Access\", function (t) {\r\n window['didomiOnReady'] = window['didomiOnReady'] || [];\r\n window['didomiOnReady'].push(Didomi => {\r\n function createPayWallPoool(event) {\r\n event.preventDefault();\r\n var modalHtml = '<div class=\"modal fade\" id=\"poool-paywall\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"Poool\" aria-hidden=\"true\">' +\r\n '<div class=\"modal-dialog\" role = \"document\" > ' +\r\n '<div class=\"modal-content\">
30' +\r\n '<div class=\"modal-body\">' +\r\n '<div id=\"poool-widget\"></div>' +\r\n '</div>' +\r\n '</div>' +\r\n '</div>' +\r\n '</div>';\r\n document.body.insertAdjacentHTML('beforeend', modalHtml);\r\n poool.createPaywall({\r\n target: '#poool-widget',\r\n pageType: 'premium',\r\n });\r\n var pooolModal = document.getElementById('poool-paywall');\r\n var modalInitJS = new window['BSN'].Modal(pooolModal);\r\n modalInitJS.show();\r\n }\r\n var consent = Didomi.getUserConsentStatusForVendor('c:poool-VyhCit7N');\r\n var config = {\r\n mode: 'excerpt',\r\n cookies_enabled: consent == undefined ? true : consent,\r\n };\r\n if (configPoool != undefined) {\r\n config = configPoool;\r\n }\r\n const poool = window['Access'].init('JDH7I-0O707-4FEUQ-346OZ')\r\n .config(config);\r\n poool.variables('host', location.hostname);\r\n poool.on('lock', event => {\r\n });\r\n poool.on('release', event => {\r\n document.querySelectorAll(\".poool-hide\").forEach((item) => {\r\n item.classList.remove(\"poool-hide\");\r\n item.removeEventListener('click', createPayWallPoool, false);\r\n });\r\n window.removeEventListener('pooolClick', createPayWallPoool);\r\n unCryptPoool();\r\n var pooolModal = document.getElementById('poool-paywall');\r\n var modalInitJS = new window['BSN'].Modal(pooolModal);\r\n modalInitJS.hide();\r\n window.dispatchEvent(new Event('pooolReleased'));\r\n });\r\n document.querySelectorAll(\".poool-hide\").forEach((item) => {\r\n item.addEventListener('click', createPayWallPoool, false);\r\n });\r\n window.addEventListener('pooolClick', createPayWallPoool);\r\n });\r\n });\r\n}\r\n\n;// ./src/ts/core/newsletter.ts\nfunction initNLListener() {\r\n document.querySelectorAll(\".encart-newsletter .email-fieldCard\").forEach(elt => {\r\n elt.addEventListener(\"input\", function (e) {\r\n elt.closest(\".encart-newsletter\").querySelector(\".newsletter-legal\").style.display = '';\r\n });\r\n });\r\n document.querySelectorAll(\".encart-newsletter .societe-FieldCard\").forEach(chp => { chp.style.display = \"none\"; });\r\n document.querySelectorAll(\".encart-newsletter .newsletter-submit\").forEach(btn => {\r\n btn.addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n var parent = btn.closest(\".encart-newsletter\");\r\n var email = parent.querySelector(\".email-fieldCard\").value;\r\n var media = parent.querySelector(\".media-fieldCard\").value;\r\n var theme = parent.querySelector(\".theme-fieldCard\").value;\r\n var societe = parent.querySelector(\".societe-FieldCard\").value;\r\n let url = \"/Newsletter/SignupAjax\";\r\n let check_communication = document.querySelector(\"#check_communication\");\r\n if (check_communication != null && check_communication.checked === true) {\r\n fetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n Email: email,\r\n Societe: societe,\r\n Abonnement: '0',\r\n Media: 'PUBCLIENT',\r\n Theme: 'ALL'\r\n }),\r\n headers: { 'Content-Type': 'application/json; charset=UTF-8' }\r\n });\r\n }\r\n else {\r\n fetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n Email: email,\r\n Societe: societe,\r\n Abonnement: '1',\r\n Media: 'PUBCLIENT',\r\n Theme: 'ALL'\r\n }),\r\n headers: { 'Content-Type': 'application/json; charset=UTF-8' }\r\n });\r\n }\r\n fetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n Email: email,\r\n Media: media,\r\n Theme: theme\r\n }),\r\n headers: { 'Content-Type': 'application/json; charset=UTF-8' }\r\n })\r\n .then(r => r.json().then(data => {\r\n parent.querySelectorAll(\"input, button, .afficheMessage, .newsletter-legal\").forEach(elt => elt.setAttribute(\"style\", \"display:none;\"));\r\n if (r.status === 200 && data.ok === true) {\r\n parent.querySelector(\".inscriptionSuccess\").style.display = '';\r\n }\r\n else {\r\n var container = parent.querySelector(\".afficheMessage\");\r\n container.style.display = '';\r\n container.innerHTML = data.msg;\r\n }\r\n }));\r\n });\r\n });\r\n}\r\n\n// EXTERNAL MODULE: ../../node_modules/.pnpm/[email protected]_@[email protected]/node_modules/bootstrap/dist/js/bootstrap.esm.js + 1 modules\nvar bootstrap_esm = __webpack_require__(8229);\n;// ./src/ts/bootstrap.ts\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar Headroom = (headroom_namespaceFn());\r\nfunction BootstrapApp() {\r\n var domUpdatedEvent = new Event(\"DomUpdated\", { bubbles: true, cancelable: false });\r\n window[\"EntryPoint\"] = {\r\n RenderForm: (id) => {\r\n ts_form(id);\r\n },\r\n InitForm: (formSelector, feedback) => {\r\n __webpack_require__.e(/* import() */ 788).then(() => (__webpack_require__(1788))).then(({ default: InitForm }) => InitForm(formSelector, feedback));\r\n },\r\n BindApplauseButton: (id) => {\r\n __webpack_require__.e(/* import() */ 260).then(() => (__webpack_require__(8260))).then(({ default: ApplauseButton }) => new ApplauseButton(id));\r\n },\r\n Notify: notify/* default */.A,\r\n InitFormUpload: (formSelector) =>
30 {\r\n __webpack_require__.e(/* import() */ 931).then(() => (__webpack_require__(7931))).then(({ default: InitFormUpload }) => InitFormUpload(formSelector));\r\n },\r\n Modal: bootstrap_esm/* Modal */.aF,\r\n Offcanvas: bootstrap_esm/* Offcanvas */.go,\r\n LaunchPoool: LaunchPoool,\r\n DomUpdatedEvent: domUpdatedEvent\r\n };\r\n InitSurvey();\r\n InitCarousel();\r\n FormValidation();\r\n InitPageLoader();\r\n InitAccesMarches();\r\n initNLListener();\r\n new SearchEngine();\r\n let images = document.querySelectorAll(\"img[data-src]\");\r\n const lazy = new lazyload_min(images);\r\n if (document.readyState !== 'loading') {\r\n ngpaZoom();\r\n }\r\n else {\r\n document.addEventListener('DOMContentLoaded', ngpaZoom, {\r\n once: true\r\n });\r\n }\r\n var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'));\r\n var tooltipList = [...tooltipTriggerList].map(tooltipTriggerList => new bootstrap_esm/* Tooltip */.m_(tooltipTriggerList, { html: true }));\r\n window.addEventListener('load', function () {\r\n new ReadLater();\r\n });\r\n document.addEventListener('DomUpdated', function (event) {\r\n initNLListener();\r\n });\r\n let startedEvent = new Event('tk-started');\r\n setTimeout(() => window.dispatchEvent(startedEvent));\r\n const popoverTriggerList = document.querySelectorAll('[data-bs-toggle=\"popover\"]');\r\n const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap_esm/* Popover */.AM(popoverTriggerEl, { html: true }));\r\n var sliders = Array.from(document.querySelectorAll(\"[id^='slider-article-']\"));\r\n console.log(sliders);\r\n sliders.forEach(function (el) {\r\n console.log(el);\r\n var carousel = new bootstrap_esm/* Carousel */.FN(el, {\r\n ride: false\r\n });\r\n });\r\n}\r\n\n;// ./src/js/paywall.js\n\n\n/*\r\n * Fonctions de gestion du déclenchement du paywall selon les comportement voulu \r\n * par défaut le serveur renvoi le contenu tel qu'un non abonné devrait le voir\r\n * par conséquent, ces fonctions libèrent le contenu pour les abonnées (principalement)\r\n */\n// Initialisation de la variable pwData\n\nwindow.pwData = [];\n//Cette fonction libère le contenu (flou, event au clic...) en fonction du statut de l'abonné\nfunction ProcessPaywallInitiators(rootElement) {\n console.log(\"ProcessPaywallInitiators\", rootElement);\n if (!rootElement) {\n rootElement = document;\n }\n\n //on détermine si l'utilisateur est abonné ou pas\n var users = dataLayer.find(x => x.user);\n var abo = users ? users.user.roles.split(',').includes(\"wapro\") : false;\n\n //suppression des class liées au paywall\n if (abo) {\n rootElement.querySelectorAll(\".paywall, .paywall-blur\").forEach(element => {\n //si l'élément est vide, on enlève tous les styles qui modifieraient l'ergo éventuelle\n if (element.innerHTML.trim() == \"\") {\n element.removeAttribute(\"style\");\n }\n //on supprime les class qui marque cet élément comme déclencheur du paywall.\n element.classList.remove(\"paywall\");\n element.classList.remove(\"paywall-blur\");\n element.classList.remove(\"modal-over\");\n element.removeAttribute(\"data-modalid\");\n });\n return;\n } else {\n //obfuscation des données\n // Sélection de tous les éléments avec la classe .paywall-blur\n var paywallBlurElements = Array.from(rootElement.getElementsByClassName(\"paywall-blur\")).filter(el => !el.id);\n // Parcours de chaque élément\n for (let i = 0; i < paywallBlurElements.length; i++) {\n const element = paywallBlurElements[i];\n // Génération d'un ID unique\n const randomId = 'p-' + generateRandomString(5);\n const randomValue = generateRandomString(Math.floor(Math.random() * 4) + 1); //element.innerText.trim().length\n //console.log(element);\n //console.log(`${randomId}, ${element.innerHTML.trim()}, ${element.innerText.trim()}, ${element.innerText.trim().length}, ${randomValue}`);\n // Stockage de la valeur et de l'ID dans pwData\n window.pwData.push({\n id: randomId,\n value: element.innerHTML.trim()\n });\n // Remplacement de la valeur dans le HTML par une chaîne aléatoire de la même longueur\n element.i
30d = randomId;\n element.innerHTML = randomValue;\n }\n }\n\n //parcours de tous les paywalls\n rootElement.querySelectorAll(\".paywall\").forEach(element => {\n //suppression des events préexistant sur le bouton ou autre.\n element.outerHTML = element.outerHTML;\n });\n\n /**\r\n * Génère une chaîne de caractères aléatoire de longueur spécifiée\r\n * @param {any} length\r\n * @returns\r\n */\n function generateRandomString(length) {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * characters.length));\n }\n return result;\n }\n\n //je ne sais pas pourquoi, mais il est nécessaire de faire une seconde boucle pour que ça marche...\n rootElement.querySelectorAll(\".paywall\").forEach(element => {\n //bizare, le event.preventDefault() ci dessous ne fonctionne pas...\n element.removeAttribute('href');\n element.removeAttribute('onclick');\n\n //au clic sur un élément avec une class \"paywall\"\n element.addEventListener(\"click\", event => {\n event.preventDefault();\n //identifiant de la modal à activer\n var modalId = element.getAttribute('data-modalid');\n //si j'ai pas l'info... on prend la modal supposée par défaut\n if (!modalId) {\n if (document.getElementById(\"abonneModal\")) {\n modalId = \"abonneModal\";\n }\n }\n if (modalId == undefined) {\n console.warn(\"Veuillez définir un attribut [data-modalid] ayant pour valeur la modal à afficher, VPD : \");\n return;\n }\n\n //affichage de la modal\n var myModal = new bootstrap_esm/* Modal */.aF(document.getElementById(modalId), {\n keyboard: false\n });\n myModal.show();\n });\n });\n}\n\n//cet évenement (PaywallDomUpdated) doit être levé à chaque fois qu'un contenu est récupérer de la BDD et affiché dans la page (pratique en cas d'ajax)\ndocument.addEventListener('PaywallDomUpdated', function (event) {\n console.log(\"PaywallDomUpdated\", event);\n ProcessPaywallInitiators(event.target);\n});\n\n//on s'assure que tout soit chargé car on vire les event éventuellement ajouté par d'autre script... donc il faut attendre vraiment tout.\ndocument.addEventListener('readystatechange', function (event) {\n //doc https://ryfarlane.com/article/on-load-vanilla-javascript\n if (document.readyState === \"complete\") {\n //paywall de la navigation au clic sur \"ma sélection\"\n var links = document.querySelectorAll('.nav-link.paywall.market');\n if (links) {\n links.forEach(link => {\n link.setAttribute(\"data-modalid\", \"myMarket_modal\");\n });\n }\n\n /*************************** tronc commun *******************/\n ProcessPaywallInitiators();\n }\n});\n// EXTERNAL MODULE: ./src/js/shared/header.js\nvar header = __webpack_require__(3441);\n;// ./src/js/shared/sideNav.js\n//Bouton d'ouverture du menu\nconst sideNav_button = document.querySelector('.side-menu-btn');\n//Div de la navigation latérale\nconst sideNav = document.querySelector('.side-nav');\n//Nvigation principale\nconst mainNav = document.querySelector('.header-nav');\n\n/**\r\n * Sur un click du bouton, on affiche ou masque le menu latéral\r\n */\nfunction SideNav() {\n sideNav_button && sideNav_button.addEventListener('click', () => {\n toggleMenu();\n });\n}\n\n/**\r\n * Fonction d'affichage et masquage du menu latéral\r\n */\nfunction toggleMenu() {\n //Mise à jour du bouton\n sideNav_button.classList.toggle('active');\n\n //Mise à jour des menus\n mainNav && mainNav.classList.toggle('hidden');\n sideNav && sideNav.classList.toggle('visible');\n\n //Si le menu est ouvert, on active son masquage depuis un click n'importe où\n //Sauf sur le menu lui même et le bouton\n if (sideNav_button.classList.contains('active')) {\n sideNav && sideNav.addEventListener('click', stopPropagation, false);\n document.addEventListener('click', windowClickHandler, false);\n } else {\n sideNav && sideNav.removeEventListener('click', stopPropagation, false);\n document.removeEventListener('click', windowClickHandler, false);\n }\n}\nfunction windowClickHandler(event) {\n if (event.target !== sideNav_button) toggleMenu();\n}\nfunction stopPropagation(event) {\n event.stopPropagation();\n}\n// EXTERNAL MODULE: ../../Modules/Ngpa.ToolKat.FO.Module.CMS/wwwroot/js/dailymotion.js\nvar dailymotion = __webpack_require__(2120);\n;// ./src/app.ts\n/* provided dependency */ var __webpack_provided_window_dot_jQuery = __webpack_require__(1669);\n\r\nwindow['$'] = (external_jQuery_default());\r\n__webpack_provided_window_dot_jQuery = (external_jQuery_default());
30\r\n\r\nwindow.fetch = Request ? (('signal' in new Request('')) ? window.fetch : fetch_umd.fetch) : fetch_umd.fetch;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nBootstrapApp();\r\nconst BSN = window['BSN'];\r\nBSN && BSN.supports && BSN.supports.forEach(arr => {\r\n !BSN[arr[0]] && (BSN[arr[0]] = arr[1]);\r\n});\r\n\n\n//# sourceURL=webpack://Ngpa.ToolKat.FO.WebAgri/./src/app.ts_+_14_modules?\n}"); 31 32/***/ }, 33 34/***/ 8355 35(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 36 37"use strict"; 38eval("{/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: () => (/* binding */ Notify)\n/* harmony export */ });\nclass Alert {\r\n constructor(message, type) {\r\n this.Message = message;\r\n this.Type = type;\r\n this.Id = '_' + Math.random().toString(36).substr(2, 9);\r\n }\r\n}\r\nclass NotificationCenter {\r\n constructor() {\r\n this.queue = [];\r\n var elt = document.createElement('div');\r\n elt.classList.add('toast-container');\r\n document.body.append(elt);\r\n this.$container = elt;\r\n }\r\n alert(message, type, timeout = 10000) {\r\n var alert = new Alert(message, type);\r\n var createdId = alert.Id;\r\n alert.Element = this.renderItem(alert);\r\n this.$container.prepend(alert.Element);\r\n this.queue.unshift(alert);\r\n setTimeout(() => {\r\n this.remove(createdId);\r\n }, timeout);\r\n }\r\n renderItem(item) {\r\n var elt = document.createElement('div');\r\n elt.classList.add('toast-item');\r\n elt.classList.add('toast-item-' + item.Type);\r\n elt.innerHTML = item.Message;\r\n var btnClose = document.createElement('button');\r\n btnClose.classList.add('close');\r\n btnClose.innerHTML = \"×\";\r\n elt.append(btnClose);\r\n btnClose.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n this.remove(item.Id);\r\n });\r\n return elt;\r\n }\r\n remove(id) {\r\n var idxToDelete = null;\r\n this.queue.forEach((data, idx) => {\r\n if (data.Id == id) {\r\n idxToDelete = idx;\r\n data.Element.remove();\r\n }\r\n });\r\n this.queue.splice(idxToDelete, 1);\r\n }\r\n}\r\nfunction Notify(message, type = \"info\") {\r\n notificationCenter.alert(message, type);\r\n}\r\nvar notificationCenter = new NotificationCenter();\r\n\n\n//# sourceURL=webpack://Ngpa.ToolKat.FO.WebAgri/./src/ts/core/notify.ts?\n}"); 39 40/***/ }, 41 42/***/ 1669 43(module) { 44 45"use strict"; 46module.exports = jQuery; 47 48/***/ } 49 50/******/ }); 51/************************************************************************/ 52/******/ // The module cache 53/******/ const __webpack_module_cache__ = {}; 54/******/ 55/******/ // The require function 56/******/ function __webpack_require__(moduleId) { 57/******/ // Check if module is in cache 58/******/ const cachedModule = __webpack_module_cache__[moduleId]; 59/******/ if (cachedModule !== undefined) { 60/******/ return cachedModule.exports; 61/******/ } 62/******/ // Create a new module (and put it into the cache) 63/******/ const module = __webpack_module_cache__[moduleId] = { 64/******/ // no module.id needed 65/******/ // no module.loaded needed 66/******/ exports: {} 67/******/ }; 68/******/ 69/******/ // Execute the module function 70/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 71/******/ 72/******/ // Return the exports of the module 73/******/ return module.exports; 74/******/ } 75/******/ 76/******/ // expose the modules object (__webpack_modules__) 77/******/ __webpack_require__.m = __webpack_modules__; 78/******/ 79/************************************************************************/ 80/******/ /* webpack/runtime/chunk loaded */ 81/******/ (() => { 82/******/ const deferred = []; 83/******/ __webpack_require__.O = (result, chunkIds, fn) => { 84/******/ if(chunkIds) { 85/******/ deferred.push([chunkIds, fn]); 86/******/ return; 87/******/ } 88/******/ for (var i = 0; i < deferred.length; i++) { 89/******/ let [chunkIds, fn] = deferred[i]; 90/******/ let fulfilled = true; 91/******/ for (var j = 0; j < chunkIds.length; j++) { 92/******/ if (Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { 93/******/ chunkIds.splice(j--, 1); 94/******/ } else { 95/******/ fulfilled = false;
96/******/ } 97/******/ } 98/******/ if(fulfilled) { 99/******/ deferred.splice(i--, 1) 100/******/ const r = fn(); 101/******/ if (r !== undefined) result = r; 102/******/ } 103/******/ } 104/******/ return result; 105/******/ }; 106/******/ })(); 107/******/ 108/******/ /* webpack/runtime/compat get default export */ 109/******/ // getDefaultExport function for compatibility with non-harmony modules 110/******/ __webpack_require__.n = (module) => { 111/******/ const getter = module && module.__esModule ? 112/******/ () => (module['default']) : 113/******/ () => (module); 114/******/ __webpack_require__.d(getter, { a: getter }); 115/******/ return getter; 116/******/ }; 117/******/ 118/******/ /* webpack/runtime/concatenation wrap */ 119/******/ // wrap a concatenated module body as a lazy, memoized accessor; mod is 120/******/ // set before the body runs so re-entrant calls (require cycles) observe 121/******/ // the partial exports like Node.js 122/******/ __webpack_require__.cw = (body) => { 123/******/ var mod; 124/******/ return () => { 125/******/ if (body) { 126/******/ var fn = body; 127/******/ body = 0; 128/******/ mod = { exports: {} }; 129/******/ fn.call(mod.exports, mod, mod.exports); 130/******/ } 131/******/ return mod.exports; 132/******/ }; 133/******/ }; 134/******/ 135/******/ /* webpack/runtime/define property getters */ 136/******/ // define getter/value functions for harmony exports 137/******/ __webpack_require__.d = (exports, definition) => { 138/******/ for(var key in definition) { 139/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 140/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 141/******/ } 142/******/ } 143/******/ }; 144/******/ 145/******/ /* webpack/runtime/ensure chunk */ 146/******/ __webpack_require__.f = {}; 147/******/ // This file contains only the entry chunk. 148/******/ // The chunk loading function for additional chunks 149/******/ __webpack_require__.e = (chunkId) => { 150/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { 151/******/ __webpack_require__.f[key](chunkId, promises); 152/******/ return promises; 153/******/ }, [])); 154/******/ }; 155/******/ 156/******/ /* webpack/runtime/get javascript chunk filename */ 157/******/ // This function allow to reference async chunks 158/******/ __webpack_require__.u = (chunkId) => (chunkId + ".js"); 159/******/ 160/******/ /* webpack/runtime/get mini-css chunk filename */ 161/******/ // This function allow to reference async chunks 162/******/ __webpack_require__.miniCssF = (chunkId) => (undefined); 163/******/ 164/******/ /* webpack/runtime/global */ 165/******/ __webpack_require__.g = (function() { 166/******/ if (typeof globalThis === 'object') return globalThis; 167/******/ try { 168/******/ return this || new Function('return this')(); 169/******/ } catch (e) { 170/******/ if (typeof window === 'object') return window; 171/******/ } 172/******/ })(); 173/******/ 174/******/ /* webpack/runtime/hasOwnProperty shorthand */ 175/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)); 176/******/ 177/******/ /* webpack/runtime/load script */ 178/******/ (() => { 179/******/ const inProgress = {}; 180/******/ const dataWebpackPrefix = "Ngpa.ToolKat.FO.WebAgri:"; 181/******/ // loadScript function to load a script via script tag 182/******/ __webpack_require__.l = (url, done, key, chunkId) => { 183/******/ if(inProgress[url]) { inProgress[url].push(done); return; } 184/******/ let script, needAttach; 185/******/ if(key !== undefined) { 186/******/ const scripts = document.getElementsByTagName("script"); 187/******/ for(var i = 0; i < scripts.length; i++) { 188/******/ const s = scripts[i]; 189/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; } 190/******/ } 191/******/ } 192/******/ if(!script) { 193/******/ needAttach = true; 194/******/ script = document.createElement('script'); 195/******/ 196/******/ script.charset = 'utf-8'; 197/******/ if (__webpack_require__.nc) { 198/******/ script.setAttribute("nonce", __webpack_require__.nc); 199/******/ } 200/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key); 201/******/ 202/******/ script.src = url; 203/******/ } 204/******/ inProgress[url] = [done]; 205/******/ const onScriptComplete = (prev, event) => { 206/******/ // avoid mem leaks in IE. 207/******/ script.onerror = script.onload = null; 208/******/ clearTimeout(timeout);
209/******/ const doneFns = inProgress[url]; 210/******/ delete inProgress[url]; 211/******/ script.parentNode?.removeChild(script); 212/******/ doneFns?.forEach((fn) => (fn(event))); 213/******/ if(prev) return prev(event); 214/******/ } 215/******/ const timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); 216/******/ script.onerror = onScriptComplete.bind(null, script.onerror); 217/******/ script.onload = onScriptComplete.bind(null, script.onload); 218/******/ needAttach && document.head.appendChild(script); 219/******/ }; 220/******/ })(); 221/******/ 222/******/ /* webpack/runtime/make namespace object */ 223/******/ // define __esModule on exports 224/******/ __webpack_require__.r = (exports) => { 225/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 226/******/ Object.defineProperty(exports, '__esModule', { value: true }); 227/******/ }; 228/******/ 229/******/ /* webpack/runtime/publicPath */ 230/******/ __webpack_require__.p = "/dist/"; 231/******/ 232/******/ /* webpack/runtime/jsonp chunk loading */ 233/******/ (() => { 234/******/ // no baseURI 235/******/ 236/******/ // object to store loaded and loading chunks 237/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 238/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded 239/******/ const installedChunks = { 240/******/ 524: 0 241/******/ }; 242/******/ 243/******/ __webpack_require__.f.j = (chunkId, promises) => { 244/******/ // JSONP chunk loading for javascript 245/******/ let installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; 246/******/ if(installedChunkData !== 0) { // 0 means "already installed". 247/******/ 248/******/ // a Promise means "currently loading". 249/******/ if(installedChunkData) { 250/******/ promises.push(installedChunkData[2]); 251/******/ } else { 252/******/ if(true) { // all chunks have JS 253/******/ // setup Promise in chunk cache 254/******/ const promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject])); 255/******/ promises.push(installedChunkData[2] = promise); 256/******/ 257/******/ // create error before stack unwound to get useful stacktrace later 258/******/ const error = new Error(); 259/******/ const loadingEnded = (event) => { 260/******/ if(__webpack_require__.o(installedChunks, chunkId)) { 261/******/ installedChunkData = installedChunks[chunkId]; 262/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; 263/******/ if(installedChunkData) { 264/******/ const errorType = event && (event.type === 'load' ? 'missing' : event.type); 265/******/ const realSrc = event && event.target && event.target.src; 266/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; 267/******/ error.name = 'ChunkLoadError'; 268/******/ error.type = errorType; 269/******/ error.request = realSrc; 270/******/ error.event = event; 271/******/ installedChunkData[1](error); 272/******/ } 273/******/ } 274/******/ }; 275/******/ __webpack_require__.l(__webpack_require__.p + __webpack_require__.u(chunkId), loadingEnded, "chunk-" + chunkId, chunkId); 276/******/ } 277/******/ } 278/******/ } 279/******/ }; 280/******/ 281/******/ // no prefetching 282/******/ 283/******/ // no preloaded 284/******/ 285/******/ // no HMR 286/******/ 287/******/ // no HMR manifest 288/******/ 289/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); 290/******/ 291/******/ // install a JSONP callback for chunk loading 292/******/ const webpackJsonpCallback = (parentChunkLoadingFunction, data) => { 293/******/ let [chunkIds, moreModules, runtime] = data; 294/******/ // add "moreModules" to the modules object, 295/******/ // then flag all "chunkIds" as loaded and fire callback 296/******/ var moduleId, chunkId, i = 0; 297/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { 298/******/ for(moduleId in moreModules) { 299/******/ if(__webpack_require__.o(moreModules, moduleId)) { 300/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; 301/******/ } 302/******/ } 303/******/ if(runtime) var result = runtime(__webpack_require__); 304/******/ } 305/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); 306/******/ for(;i < chunkIds.length; i++) { 307/******/ chunkId = chunkIds[i]; 308/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { 309/******/ installedChunks[chunkId][0](); 310/******/ } 311/******/ installedChunks[chunkId] = 0; 312/******/ } 313/******/ return __webpack_require__.O(result); 314/******/ } 315/******/ 316/******/ const chunkLoadingGlobal = self["webpackChunkNgpa_ToolKat_FO_WebAgri"] = self["webpackChunkNgpa_ToolKat_FO_WebAgri"] || []; 317/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); 318/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); 319/******/ })(); 320/******/ 321/************************************************************************/ 322/******/ 323/******/ // startup 324/******/ // Load entry module and return exports 325/******/ // This entry module depends on other loaded chunks and execution need to be delayed 326/******/ let __webpack_exports__ = __webpack_require__.O(undefined, [121], () => (__webpack_require__(3585))) 327/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); 328/******/ 329/******/ })() 330;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.