GTM — Tooltip CTA Login
Script que inyecta un tooltip de bienvenida junto al botón de acceso a la cuenta en el header. Lee la cookie lastLoggedIn para obtener el nombre del último usuario registrado y lo usa para personalizar el mensaje, que invita a registrarse a cambio de un 10% de descuento.
Texto del tooltip
El contenido es estático — no proviene de variables GTM:
Hola [firstName]. Regístrate en Hawkers y consigue un 10% de descuento extra en tus compras
Además, podrás disfrutar de todas las ventajas de ser parte de la familia Hawkers
[firstName] se reemplaza con el nombre leído de la cookie. Si la cookie no existe o no tiene firstName, el campo queda vacío.
Cookie lastLoggedIn
La cookie almacena un objeto JSON con el email y nombre del último usuario logado, con dos capas de codificación:
Cookie raw value
└─ decodeURIComponent()
└─ JSON.parse() → { email: "...", firstName: "..." }
└─ atob() (Base64 decode) sobre cada campo
└─ hexToText() (hex → texto plano)
| Campo cookie | Tipo | Descripción |
|---|---|---|
email | string (hex→Base64) | Email del usuario — decodificado pero solo almacenado, no visible en el tooltip. |
firstName | string (hex→Base64) | Nombre del usuario — visible en el saludo del tooltip. |
El script carga crypto-js 4.2.0 desde cdnjs, y define la variable gtmTooltipSecretKeyToDecodeData = "fuckyouga360", pero ninguno de los dos se usa en el código activo. Son remanentes de una versión anterior que probablemente usaba CryptoJS.AES.decrypt. La decodificación actual usa atob() + una función hexToText() propia.
Comportamiento actual vs. código comentado
El script tiene funcionalidades implementadas pero comentadas que revelan una evolución de diseño:
- Comportamiento activo
- Código comentado
- El tooltip se inyecta en
.gtm-button-access-accountal cargar el tag. - Tras 1000ms, se añade la clase
is-visible→ slide-up + fade-in del tooltip. - El tooltip queda visible permanentemente (no hay mecanismo de cierre activo).
| Funcionalidad | Estado | Descripción |
|---|---|---|
| Hover open/close | Comentado | mouseenter → abrir, mouseleave → cerrar. fnGtmTooltipToListenEvents está definida pero no se llama. |
| Notification badge | Comentado | Badge circular amarillo-verde (#ceFF02) con el número "1" y animación gelatine (rebote). Se insertaría junto al tooltip en .gtm-button-access-account. |
Estados del tooltip
| Clase | Elemento | Cuándo se aplica | Efecto |
|---|---|---|---|
| (ninguna) | .gtm-html-tooltip | Estado inicial | Oculto: opacity: 0, visibility: hidden, translateY(32px). |
is-visible | .gtm-html-tooltip | 1000ms tras carga | Visible: opacity: 1, translateY(16px). Transición 250ms. |
is-visible | .gtm-html-notification | (comentado) | Activaría la animación gelatine del badge. |
Clases CSS
| Clase | Elemento | Descripción |
|---|---|---|
gtm-html-tooltip | div | Tooltip position: absolute, fondo azul #4c7fef, 300px, border-radius: 8px 0 8px 8px. Flecha ::before apuntando hacia arriba-derecha. |
gtm-js-tooltip | div interior | Contenedor del texto del tooltip — referenciado por JS. |
gtm-js-tooltip__title | p | Saludo en negrita. |
gtm-html-notification | span | (CSS implementado, JS comentado) Badge 16×16px, fondo #ceFF02, border-radius: 50%. |
Selectores DOM
| Selector | Descripción |
|---|---|
.gtm-button-access-account | Botón de acceso a la cuenta en el header — el tooltip y el badge (si activo) se añaden como hijos de este elemento. |
.gtm-html-tooltip | El propio tooltip una vez inyectado — referenciado para abrir/cerrar. |
Flujo de ejecución
fnGtmTooltipToInit() ← llamada directa al cargar el tag
│
├─ Busca .gtm-button-access-account
│
├─ fnGtmTooltipToGetLastLoggedInCustomerData()
│ ├─ fnGtmTooltipToGetCookie("lastLoggedIn")
│ │ └─ Parsea document.cookie buscando "lastLoggedIn"
│ ├─ decodeURIComponent(cookieData) → JSON.parse() → { email, firstName }
│ ├─ atob(email) → hexToText() → email en claro
│ └─ atob(firstName) → hexToText() → firstName en claro
│ → guarda en gtmTooltipLastLoggedInCustomerData
│
├─ fnGtmTooltipToInjectCode()
│ ├─ Crea div.gtm-html-tooltip con saludo personalizado
│ └─ Lo añade como hijo de .gtm-button-access-account
│
├─ fnGtmTooltipToInitElements()
│ └─ Referencia .gtm-html-tooltip como gtmTooltipElement.wrapper
│
└─ setTimeout(1000ms) → fnGtmTooltipToOpenTooltip()
└─ Añade is-visible al tooltip → slide-up + fade-in