/******/ (() => { // webpackBootstrap var __webpack_exports__ = {}; /*!*******************************************************!*\ !*** ./src/format-types/tooltip/tooltip-front_new.js ***! \*******************************************************/ async function tooltipsInit() { await buildTooltips(); await observeTooltips(); // const tooltipWordsContainer = document.querySelectorAll(".tooltip-container"); // await observeTooltip(tooltipWordsContainer); } async function getTooltipsDatas(vocabulairesPostsIds) { try { const response = await fetch(`/wp-json/wp/v2/vocabulaire?include=${vocabulairesPostsIds.toString()}`); if (!response.ok) { throw new Error(`Request failed with status: ${response.status}`); } const data = await response.json(); return data; } catch (err) { throw err; } } function createTooltip(tooltipWord) { const tooltipContainer = document.createElement("div"); tooltipContainer.className = "tooltip-container"; const tooltipPopup = document.createElement("span"); tooltipPopup.className = "tooltip-popup"; tooltipPopup.setAttribute("aria-hidden", "true"); const tooltipDefinition = document.createElement("p"); tooltipDefinition.textContent = tooltipWord.getAttribute("data-tooltip-definition"); tooltipDefinition.className = "tooltip-popup__definition"; const tooltipTitle = document.createElement("h5"); tooltipTitle.textContent = tooltipWord.getAttribute("data-tooltip-word"); tooltipTitle.className = "tooltip-popup__title"; tooltipPopup.appendChild(tooltipTitle); tooltipPopup.appendChild(tooltipDefinition); tooltipContainer.appendChild(tooltipPopup); tooltipWord.insertAdjacentElement("afterend", tooltipContainer); tooltipContainer.insertBefore(tooltipWord, tooltipPopup); // tooltipContainer.appendChild(tooltipWord); // tooltipWord.appendChild(tooltipContainer); } async function buildTooltips() { let tooltipWords = document.querySelectorAll(".tooltip-word"); const vocabulairesPostsIds = Array.from(tooltipWords).map(element => element.getAttribute("data-definition-id")); try { const tooltipData = await getTooltipsDatas(vocabulairesPostsIds); tooltipWords.forEach((word, index) => { const foundTooltipDatas = tooltipData.find(tooltip => tooltip.id === parseInt(word.getAttribute("data-definition-id"))); if (foundTooltipDatas) { word.setAttribute("data-tooltip-word", foundTooltipDatas.title.rendered); word.setAttribute("data-tooltip-definition", foundTooltipDatas.acf.definition); } word.setAttribute("aria-expanded", "false"); createTooltip(word, tooltipData[index]); }); } catch (error) { console.log("Something went wrong!", error); } } async function observeTooltips() { let tooltipWords = document.querySelectorAll(".tooltip-word"); // CHAPTER IntersectionObserver const tooltipsObserver = new IntersectionObserver(entries => { entries.forEach(entry => { const margin = 10; // DEPASSE À GAUCHE if (entry.boundingClientRect.x < 0) { const currentPos = getCurrentPos(entry); const missingSpace = Math.abs(entry.boundingClientRect.x); entry.target.style.left = `${currentPos + missingSpace + margin}px`; entry.target.style.setProperty("--tooltip-x-position", "12%"); } // DEPASSE À DROITE if (entry.boundingClientRect.x + entry.boundingClientRect.width > window.innerWidth) { const currentPos = getCurrentPos(entry); const difference = entry.boundingClientRect.width - entry.intersectionRect.width; entry.target.style.left = `${currentPos - difference - margin}px`; entry.target.style.setProperty("--tooltip-x-position", `calc(60% + ${difference}px)`); } // Check aspect ratio to be sure the element is visible // const aspect = entry.intersectionRatio; // if (entry.isIntersecting) { // } }); }); tooltipWords.forEach(tooltipWord => { const tooltipPopup = tooltipWord.parentElement.querySelector(".tooltip-popup"); tooltipsObserver.observe(tooltipPopup); tooltipWord.addEventListener("click", event => { toggleTooltip(tooltipWord); }); tooltipWord.addEventListener("keydown", event => { switch (event.key) { case "Escape": hideTooltip(tooltipWord); break; } }); tooltipWord.addEventListener("mouseover", event => { showTooltip(tooltipWord); }); tooltipWord.addEventListener("focus", event => { showTooltip(tooltipWord); }); tooltipWord.addEventListener("mouseout", event => { var isFocused = document.activeElement === tooltipWord; if (!isFocused) { hideTooltip(tooltipWord); } }); tooltipWord.addEventListener("focusout", event => { hideTooltip(tooltipWord); }); }); } function showTooltip(tooltipWord) { tooltipWord.setAttribute("aria-expanded", "true"); // const tooltipPopup = tooltipWord.querySelector(".tooltip-popup"); const tooltipPopup = tooltipWord.parentElement.querySelector(".tooltip-popup"); if (!tooltipPopup) return; tooltipPopup.setAttribute("aria-hidden", "false"); // positionTooltip(tooltipWord, tooltipPopup); } function hideTooltip(tooltipWord) { tooltipWord.setAttribute("aria-expanded", "false"); // const tooltipPopup = tooltipWord.querySelector(".tooltip-popup"); const tooltipPopup = tooltipWord.nextElementSibling; if (!tooltipPopup || !tooltipPopup.classList.contains("tooltip-popup")) return; tooltipPopup.setAttribute("aria-hidden", "true"); } function toggleTooltip(tooltipWord) { const isExpanded = tooltipWord.getAttribute("aria-expanded") === "true"; if (isExpanded) { hideTooltip(tooltipWord); } else { showTooltip(tooltipWord); } } function getCurrentPos(entry) { return parseInt(getComputedStyle(entry.target, null).getPropertyValue("left")); } window.addEventListener("DOMContentLoaded", event => { tooltipsInit(); }); /******/ })() ; //# sourceMappingURL=tooltipFront.js.map