Événements
La plateforme émet des CustomEvents du navigateur sur window. Tous les événements sont préfixés par mindtraining: et leur payload est toujours disponible dans event.detail.
mindtraining:ready
Déclenché quand : le script a fini de se charger et l'API globale MindtrainingPlatform est disponible sur window.
Quand l'utiliser : c'est le hook recommandé pour appeler init. En écoutant cet événement, vous évitez les conditions de course entre le chargement du script et l'exécution de votre code d'initialisation.
event.detail
| Champ | Type | Description |
|---|---|---|
api | object | Référence vers window.MindtrainingPlatform |
window.addEventListener('mindtraining:ready', function (event) {
// event.detail.api === window.MindtrainingPlatform
MindtrainingPlatform.init('mindtraining', {
viewer: { loggedIn: false },
})
})Le script est déjà chargé ? Si votre listener est enregistré après l'exécution du script, l'événement ne sera plus émis. Utilisez ce pattern de garde :
function initializeMindtraining() {
MindtrainingPlatform.init('mindtraining', {
viewer: { loggedIn: false },
})
}
if (window.MindtrainingPlatform) {
initializeMindtraining()
} else {
window.addEventListener('mindtraining:ready', initializeMindtraining, { once: true })
}mindtraining:config
Déclenché quand : la configuration de la plateforme est mise à jour, à la fois après l'appel initial à init() et après tout updateConfig() ultérieur.
Quand l'utiliser : utilisez cet événement pour réagir aux changements de configuration provenant de l'extérieur de la plateforme, par exemple pour synchroniser votre propre état d'interface.
event.detail
L'objet PlatformInitConfig normalisé complet au moment du changement.
| Champ | Type | Description |
|---|---|---|
viewer | object | Paramètres courants du visiteur/utilisateur |
viewer.userId | string | null | ID de l'utilisateur actif |
viewer.loggedIn | boolean | Indique si l'utilisateur est authentifié |
viewer.subscribed | boolean | Indique si l'utilisateur a un abonnement actif |
ui | object | Paramètres d'interface courants |
ui.mode | 'web' | 'app' | Mode de rendu |
ui.actions | object | Callbacks d'actions enregistrés |
access | object | Règles d'accès courantes par type de jeu |
window.addEventListener('mindtraining:config', function (event) {
const config = event.detail
console.log('Utilisateur connecté :', config.viewer?.loggedIn)
console.log('Utilisateur abonné :', config.viewer?.subscribed)
console.log("Règles d'accès actives :", config.access?.games)
})Événements de jeu et de navigation
Les événements suivants sont émis pendant le gameplay et la navigation. Utilisez-les pour l'analytics, le tracking, les intégrations host et l'observabilité.
mindtraining:game:loaded
Déclenché quand : une session ou un écran de jeu est prêt pour l'interaction.
Quand l'utiliser : utilisez cet événement pour suivre les pageviews internes, mesurer quels jeux se chargent réellement ou déclencher de la logique côté host selon le type de jeu.
event.detail
| Champ | Type | Description |
|---|---|---|
gameType | string | Type de jeu (par ex. crossword, sudoku) |
gameId | string | Identifiant unique du jeu |
variant | string | Variante du jeu (par ex. default, mini) |
route | string | Route interne |
source | string | Source du jeu (par ex. today, archive) |
window.addEventListener('mindtraining:game:loaded', function (event) {
Analytics.track('mindtraining_game_loaded', event.detail)
})mindtraining:game:playing
Déclenché quand : l'utilisateur commence à interagir réellement avec le jeu (premier mouvement ou première saisie).
Quand l'utiliser : utilisez cet événement pour distinguer un jeu chargé d'un jeu réellement joué, mesurer l'activation ou suivre l'engagement.
event.detail
| Champ | Type | Description |
|---|---|---|
gameType | string | Type de jeu |
gameId | string | Identifiant unique du jeu |
variant | string | Variante du jeu |
startedAt | string | Horodatage ISO 8601 du début |
window.addEventListener('mindtraining:game:playing', function (event) {
Analytics.track('mindtraining_game_playing', event.detail)
})mindtraining:game:completed
Déclenché quand : l'utilisateur termine un jeu avec succès.
Quand l'utiliser : utilisez cet événement pour les funnels complets, l'analyse de difficulté ou les classements côté host.
event.detail
| Champ | Type | Description |
|---|---|---|
gameType | string | Type de jeu |
gameId | string | Identifiant unique du jeu |
variant | string | Variante du jeu |
completedAt | string | Horodatage ISO 8601 de fin |
durationMs | number | Durée de la session en millisecondes |
score | number | Score final (le cas échéant) |
window.addEventListener('mindtraining:game:completed', function (event) {
Analytics.track('mindtraining_game_completed', event.detail)
})mindtraining:game:abandoned
Déclenché quand : l'utilisateur quitte une session de jeu après avoir commencé à jouer et avant de la terminer.
Quand l'utiliser : utilisez cet événement pour détecter des frictions, mesurer l'abandon par jeu ou variante, ou améliorer les parcours de rétention.
event.detail
| Champ | Type | Description |
|---|---|---|
gameType | string | Type de jeu |
gameId | string | Identifiant unique du jeu |
variant | string | Variante du jeu |
durationMs | number | Temps passé avant abandon |
progress | number | Progression (0–1) au moment de l'abandon |
window.addEventListener('mindtraining:game:abandoned', function (event) {
Analytics.track('mindtraining_game_abandoned', event.detail)
})mindtraining:game:state:saved
Déclenché quand : l'état du jeu est persisté (par exemple pour la fonctionnalité « reprendre la partie »).
Quand l'utiliser : utilisez cet événement pour suivre la rétention, les parcours de reprise ou vérifier que la sauvegarde fonctionne.
event.detail
window.addEventListener('mindtraining:game:state:saved', function (event) {
Analytics.track('mindtraining_game_state_saved', event.detail)
})mindtraining:access:blocked
Déclenché quand : la plateforme détecte qu'une surface (jeu du jour, archive, etc.) est bloquée pour l'utilisateur.
Quand l'utiliser : utilisez cet événement pour déclencher un paywall contextuel, mesurer une demande non satisfaite ou adapter les messages du host.
event.detail
window.addEventListener('mindtraining:access:blocked', function (event) {
Analytics.track('mindtraining_access_blocked', event.detail)
if (event.detail.blockedReason === 'subscription_required') {
Paywall.show({ context: 'game_archive' })
}
})mindtraining:route:changed
Déclenché quand : la route interne de la plateforme change (par ex. navigation dans la SPA).
Quand l'utiliser : utilisez cet événement pour des pageviews virtuelles ou pour synchroniser l'analytics avec la navigation interne.
event.detail
window.addEventListener('mindtraining:route:changed', function (event) {
Analytics.track('mindtraining_route_changed', event.detail)
})mindtraining:pageview
Déclenché quand : la plateforme enregistre une vue navigable pertinente pour l'analytics.
Quand l'utiliser : utilisez cet événement pour le suivi des pageviews, le reporting par section et type de jeu, ou l'attribution de la navigation interne.
event.detail
| Champ | Type | Description |
|---|---|---|
pathname | string | Chemin de route actuel |
title | string | Titre de la page |
gameType | string | Type de jeu, le cas échéant |
gameId | string | Identifiant du jeu, le cas échéant |
variant | string | Variante du jeu, le cas échéant |
source | string | Source de la vue (par exemple today, archive) |
window.addEventListener('mindtraining:pageview', function (event) {
Analytics.track('mindtraining_pageview', event.detail)
})mindtraining:user:action
Déclenché quand : l'utilisateur effectue une interaction clé (par exemple cliquer sur l'archive ou sélectionner un jeu).
Quand l'utiliser : utilisez cet événement pour suivre les clics pertinents, lancer des expérimentations ou instrumenter l'UI sans raccorder chaque bouton depuis le host.
event.detail
| Champ | Type | Description |
|---|---|---|
action | string | Identifiant de l'action (par exemple click_archive) |
location | string | Emplacement dans l'UI (par exemple home_header) |
gameType | string | Type de jeu, le cas échéant |
variant | string | Variante du jeu, le cas échéant |
index | number | Position zero-based du bloc/élément de jeu cliqué dans la liste rendue, le cas échéant |
url | string | URL externe sélectionnée depuis la navigation, le cas échéant |
Valeurs actuelles de action :
| Valeur | Signification |
|---|---|
click_play | L'utilisateur clique sur un CTA pour jouer ou ouvrir un jeu |
click_archive | L'utilisateur clique sur un CTA d'archive ou d'historique |
click_start | L'utilisateur démarre un jeu depuis l'écran intermédiaire |
click_back | L'utilisateur clique sur un CTA de retour ou de navigation |
click_nav | L'utilisateur clique sur un lien de navigation externe |
Valeurs actuelles de location :
| Valeur | Surface |
|---|---|
home_block_game | Carte ou bloc de jeu sur l'accueil |
home_block_dynamic_games | Bloc dynamique de jeux sur l'accueil |
historical_game_block | Bloc de jeux historiques ou récents |
intermediate_game_screen | Écran intermédiaire affiché avant l'entrée dans un jeu |
game_navigation | En-tête de navigation dans le jeu |
site_nav | Menu de navigation du site |
game_navigation_menu | Menu de navigation dans le jeu |
window.addEventListener('mindtraining:user:action', function (event) {
Analytics.track('mindtraining_user_action', event.detail)
})mindtraining:share:requested
Déclenché quand : l'utilisateur tente de partager du contenu depuis la plateforme.
Quand l'utiliser : utilisez cet événement pour l'analytics d'intention de partage ou pour le relier au flux de partage natif du host.
event.detail
| Champ | Type | Description |
|---|---|---|
gameType | string | Type de jeu |
gameId | string | Identifiant du jeu |
url | string | URL à partager |
title | string | Titre à partager |
window.addEventListener('mindtraining:share:requested', function (event) {
Analytics.track('mindtraining_share_requested', event.detail)
})mindtraining:error
Déclenché quand : une erreur de flux, de chargement ou d'interaction pertinente pour le host se produit.
Quand l'utiliser : utilisez cet événement pour l'observabilité, les alertes ou une UI de repli côté host.
event.detail
| Champ | Type | Description |
|---|---|---|
scope | string | Portée de l'erreur (par exemple game-load) |
code | string | Code d'erreur (par exemple GAME_DATA_FETCH_FAILED) |
message | string | Message lisible |
recoverable | boolean | Indique si l'utilisateur peut récupérer de l'erreur |
window.addEventListener('mindtraining:error', function (event) {
Analytics.track('mindtraining_error', event.detail)
if (!event.detail.recoverable) {
ErrorUI.show(event.detail)
}
})Événements recommandés pour l'analytics
Une approche pratique pour l'analytics du host consiste à écouter :
mindtraining:ready- pour savoir quand l'initialisation est sûremindtraining:config- pour suivre les changements de configurationmindtraining:game:loaded- pour mesurer les chargements de jeuxmindtraining:pageview- pour suivre les pageviewsmindtraining:game:playing- pour mesurer l'activationmindtraining:game:completed- pour mesurer les complétionsmindtraining:access:blocked- pour mesurer la demande bloquéemindtraining:error- pour surveiller les erreurs
window.addEventListener('mindtraining:game:loaded', function (event) {
Analytics.track('mindtraining_game_loaded', event.detail)
})
window.addEventListener('mindtraining:game:playing', function (event) {
Analytics.track('mindtraining_game_playing', event.detail)
})
window.addEventListener('mindtraining:pageview', function (event) {
Analytics.track('mindtraining_pageview', event.detail)
})
window.addEventListener('mindtraining:access:blocked', function (event) {
Analytics.track('mindtraining_access_blocked', event.detail)
})