PageSourceSearch

https://www.web-agri.fr/dist/app.js?v=P1Lrd1aJ-lomvWNXB22Er6t97xGMEYQoUGRuV7gi3ek

js web-agri.fr collected 2026-10-02 03:19:07 UTC 78,183 bytes, 330 lines download raw bytes

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 + '&nbsp;>&nbsp;</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 = \"&times;\";\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.