diff --git a/src/format-types/tooltip/tooltip-front.js b/src/format-types/tooltip/tooltip-front.js index f84b367..8b93cf0 100644 --- a/src/format-types/tooltip/tooltip-front.js +++ b/src/format-types/tooltip/tooltip-front.js @@ -1,4 +1,47 @@ -async function initTooltips() { +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") @@ -17,27 +60,16 @@ async function initTooltips() { 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); } +} - await observeTooltip(tooltipWords); -} -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; - } -} -async function observeTooltip(tooltipWords) { +async function observeTooltips() { + let tooltipWords = document.querySelectorAll(".tooltip-word"); // CHAPTER IntersectionObserver const tooltipsObserver = new IntersectionObserver((entries) => { entries.forEach((entry) => { @@ -66,7 +98,9 @@ async function observeTooltip(tooltipWords) { }); }); tooltipWords.forEach((tooltipWord) => { - tooltipsObserver.observe(tooltipWord.querySelector(".tooltip-popup")); + const tooltipPopup = tooltipWord.parentElement.querySelector(".tooltip-popup"); + + tooltipsObserver.observe(tooltipPopup); tooltipWord.addEventListener("click", (event) => { toggleTooltip(tooltipWord); @@ -81,6 +115,9 @@ async function observeTooltip(tooltipWords) { tooltipWord.addEventListener("mouseover", (event) => { showTooltip(tooltipWord); }); + tooltipWord.addEventListener("focus", (event) => { + showTooltip(tooltipWord); + }); tooltipWord.addEventListener("mouseout", (event) => { var isFocused = document.activeElement === tooltipWord; @@ -94,33 +131,19 @@ async function observeTooltip(tooltipWords) { }); }); } -function createTooltip(tooltipWord) { - const tooltipPopup = document.createElement("div"); - 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); - tooltipWord.appendChild(tooltipPopup); - - // tooltipWord.insertAdjacentElement("afterend", tooltipPopup); -} function showTooltip(tooltipWord) { tooltipWord.setAttribute("aria-expanded", "true"); - const tooltipPopup = tooltipWord.querySelector(".tooltip-popup"); + // 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.querySelector(".tooltip-popup"); + const tooltipPopup = tooltipWord.nextElementSibling; + if (!tooltipPopup || !tooltipPopup.classList.contains("tooltip-popup")) return; tooltipPopup.setAttribute("aria-hidden", "true"); } function toggleTooltip(tooltipWord) { @@ -137,5 +160,5 @@ function getCurrentPos(entry) { } window.addEventListener("DOMContentLoaded", (event) => { - initTooltips(); + tooltipsInit(); }); diff --git a/src/format-types/tooltip/tooltip-front_new.js b/src/format-types/tooltip/tooltip-front_old.js similarity index 72% rename from src/format-types/tooltip/tooltip-front_new.js rename to src/format-types/tooltip/tooltip-front_old.js index 45fd006..f84b367 100644 --- a/src/format-types/tooltip/tooltip-front_new.js +++ b/src/format-types/tooltip/tooltip-front_old.js @@ -1,47 +1,4 @@ -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() { +async function initTooltips() { let tooltipWords = document.querySelectorAll(".tooltip-word"); const vocabulairesPostsIds = Array.from(tooltipWords).map((element) => element.getAttribute("data-definition-id") @@ -65,10 +22,22 @@ async function buildTooltips() { } catch (error) { console.log("Something went wrong!", error); } -} -async function observeTooltips() { - let tooltipWords = document.querySelectorAll(".tooltip-word"); + await observeTooltip(tooltipWords); +} +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; + } +} +async function observeTooltip(tooltipWords) { // CHAPTER IntersectionObserver const tooltipsObserver = new IntersectionObserver((entries) => { entries.forEach((entry) => { @@ -97,9 +66,7 @@ async function observeTooltips() { }); }); tooltipWords.forEach((tooltipWord) => { - const tooltipPopup = tooltipWord.parentElement.querySelector(".tooltip-popup"); - - tooltipsObserver.observe(tooltipPopup); + tooltipsObserver.observe(tooltipWord.querySelector(".tooltip-popup")); tooltipWord.addEventListener("click", (event) => { toggleTooltip(tooltipWord); @@ -114,9 +81,6 @@ async function observeTooltips() { tooltipWord.addEventListener("mouseover", (event) => { showTooltip(tooltipWord); }); - tooltipWord.addEventListener("focus", (event) => { - showTooltip(tooltipWord); - }); tooltipWord.addEventListener("mouseout", (event) => { var isFocused = document.activeElement === tooltipWord; @@ -130,19 +94,33 @@ async function observeTooltips() { }); }); } +function createTooltip(tooltipWord) { + const tooltipPopup = document.createElement("div"); + 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); + tooltipWord.appendChild(tooltipPopup); + + // tooltipWord.insertAdjacentElement("afterend", tooltipPopup); +} function showTooltip(tooltipWord) { tooltipWord.setAttribute("aria-expanded", "true"); - // const tooltipPopup = tooltipWord.querySelector(".tooltip-popup"); - const tooltipPopup = tooltipWord.parentElement.querySelector(".tooltip-popup"); - if (!tooltipPopup) return; + const tooltipPopup = tooltipWord.querySelector(".tooltip-popup"); 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; + const tooltipPopup = tooltipWord.querySelector(".tooltip-popup"); tooltipPopup.setAttribute("aria-hidden", "true"); } function toggleTooltip(tooltipWord) { @@ -159,5 +137,5 @@ function getCurrentPos(entry) { } window.addEventListener("DOMContentLoaded", (event) => { - tooltipsInit(); + initTooltips(); });