From c178a0e69530ee17cbcf89634eaaf0ae38bebf9c Mon Sep 17 00:00:00 2001 From: "pawel.gaca" Date: Wed, 12 Nov 2025 15:01:10 +0100 Subject: [PATCH] Tooltip + dev=true --- devTrue/README.md | 7 ++++++ devTrue/dev.js | 9 +++++++ tooltip/index.html | 4 ++++ tooltip/readme.md | 8 +++++++ tooltip/style.css | 42 +++++++++++++++++++++++++++++++++ tooltip/tooltip.js | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 129 insertions(+) create mode 100644 devTrue/README.md create mode 100644 devTrue/dev.js create mode 100644 tooltip/index.html create mode 100644 tooltip/readme.md create mode 100644 tooltip/style.css create mode 100644 tooltip/tooltip.js diff --git a/devTrue/README.md b/devTrue/README.md new file mode 100644 index 0000000..bb8a5bd --- /dev/null +++ b/devTrue/README.md @@ -0,0 +1,7 @@ +# DEV=TRUE # +It's a short code to make your code safe to check on production, without people visiting the site seeing it + +## USE ## +Put code, or function call inside dev=true code, and then you can check it by adding ?dev=true to your url.(&dev=true if there already is ? in your url) + +Created by • **[IdoMods](https://idomods.pl/)** • 2025 \ No newline at end of file diff --git a/devTrue/dev.js b/devTrue/dev.js new file mode 100644 index 0000000..09b9c98 --- /dev/null +++ b/devTrue/dev.js @@ -0,0 +1,9 @@ +{ + const queryString = window.location.search; + const urlParams = new URLSearchParams(queryString); + const dev = urlParams.get('dev') + if(dev == 'true'){ + // INSERT YOUR CODE HERE + + } +} diff --git a/tooltip/index.html b/tooltip/index.html new file mode 100644 index 0000000..e5f3454 --- /dev/null +++ b/tooltip/index.html @@ -0,0 +1,4 @@ + + +

Najniższa cena z 30 dni przed obniżką

+
\ No newline at end of file diff --git a/tooltip/readme.md b/tooltip/readme.md new file mode 100644 index 0000000..6507e33 --- /dev/null +++ b/tooltip/readme.md @@ -0,0 +1,8 @@ +# Customowy tooltip # +Functions and styles for custom tooltip + +## Usage ## +Put JS code and CSS inside your tooltip component. Then you only need to put div with right structure like with index.html + + +Created by • **[IdoMods](https://idomods.pl/)** • 2025 \ No newline at end of file diff --git a/tooltip/style.css b/tooltip/style.css new file mode 100644 index 0000000..f447ee3 --- /dev/null +++ b/tooltip/style.css @@ -0,0 +1,42 @@ +.idm_tooltip{ + --tooltip-background: #111; + --tooltip-border: #999; + --tooltip-color: #fff; + + position: relative; + &__info_icon{ + color: var(--tooltip-border); + &:before{ + content: ""; + display: block; + width: 1.2rem; + height: 1.2rem; + margin-left: 0.5rem; + cursor: pointer; + vertical-align: bottom; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' class='idm_tooltip__info_icon' viewBox='0 0 16 16'%3E%3Cpath d='M8,0a8,8,0,1,0,8,8A8,8,0,0,0,8,0ZM8,14.667A6.667,6.667,0,1,1,14.667,8,6.667,6.667,0,0,1,8,14.667Z' fill='currentColor'%3E%3C/path%3E%3Cpath d='M11.333,10h-.667a.667.667,0,1,0,0,1.333h.667v4a.667.667,0,0,0,1.333,0v-4A1.333,1.333,0,0,0,11.333,10Z' transform='translate(-3.333 -3.333)' fill='currentColor'%3E%3C/path%3E%3Ccircle cx='1' cy='1' r='1' transform='translate(7 3.333)' fill='currentColor'%3E%3C/circle%3E%3C/svg%3E"); + background-size: cover; + } + } + &__content{ + position: absolute; + opacity: 0; + pointer-events: none; + transition: opacity 0.2s; + border-radius: 5px; + background: var(--tooltip-background); + color: var(--tooltip-color); + border: 1px solid var(--tooltip-border); + bottom: 150%; + padding: 0.5rem 1rem; + @media @tablet{ + &.--one-line{ + white-space: nowrap; + } + } + &.--visible{ + opacity: 1; + pointer-events: auto; + } + } +} diff --git a/tooltip/tooltip.js b/tooltip/tooltip.js new file mode 100644 index 0000000..e7de687 --- /dev/null +++ b/tooltip/tooltip.js @@ -0,0 +1,59 @@ +function idmShowTooltip(tooltipEl){ + const tooltipContentEl = tooltipEl.querySelector(".idm_tooltip__content"); + if(!tooltipContentEl) return; + + tooltipContentEl.classList.add("--visible"); + + // Logika pokazywania się i chowania tooltipa + let timeoutVar; + + function onMouseLeave() { + timeoutVar = idmHideTooltipTimer(tooltipEl); + } + + function onMouseEnter() { + clearTimeout(timeoutVar); + } + + function onScroll() { + idmHideTooltip(tooltipEl); + } + + // Store references for later removal + tooltipEl._onMouseLeave = onMouseLeave; + tooltipEl._onMouseEnter = onMouseEnter; + tooltipEl._onScroll = onScroll; + + tooltipEl.addEventListener("mouseleave", onMouseLeave); + tooltipEl.addEventListener("mouseenter", onMouseEnter); + document.addEventListener("scroll", onScroll); +} + +function idmHideTooltipTimer(tooltipEl){ + return setTimeout(() => idmHideTooltip(tooltipEl), 1500); +} +function idmHideTooltip(tooltipEl){ + const tooltipContentEl = tooltipEl.querySelector(".idm_tooltip__content"); + if (!tooltipContentEl) return; + + tooltipContentEl.classList.remove("--visible"); + + tooltipEl.removeEventListener("mouseleave", tooltipEl._onMouseLeave); + tooltipEl.removeEventListener("mouseenter", tooltipEl._onMouseEnter); + document.removeEventListener("scroll", tooltipEl._onScroll); + + delete tooltipEl._onMouseLeave; + delete tooltipEl._onMouseEnter; + delete tooltipEl._onScroll; +} + + +document.addEventListener("DOMContentLoaded", ()=>{ + document.body.addEventListener("click", e=>{ + const tooltipEl = e.target.closest(".idm_tooltip"); + if(!e.target.closest(".idm_tooltip__info_icon") || !tooltipEl) return; + + e.preventDefault(); + idmShowTooltip(tooltipEl); + }); +}); \ No newline at end of file