API client window.Moelleux

L'embed expose une API JavaScript sur window.Moelleux pour piloter le consentement depuis le code de votre site. L'API est gelée et versionnée (semver via Moelleux.version).

Garde-fou : attendre que l'API soit prête

L'embed se charge en asynchrone. N'appelez jamais window.Moelleux directement au chargement de la page : utilisez la file MoelleuxOnReady, qui fonctionne que votre code s'exécute avant ou après l'embed.

<script>
  window.MoelleuxOnReady = window.MoelleuxOnReady || [];
  window.MoelleuxOnReady.push(function (M) {
    // M === window.Moelleux, garanti prêt
    console.log(M.getConsent());
  });
</script>

Une fois l'embed chargé, vous pouvez aussi utiliser Moelleux.ready(cb).

Surface de l'API

Méthodes et propriétés disponibles sur window.Moelleux :

Méthode Description
version Version de l'embed (string).
ready(cb) Appelle cb(Moelleux) dès que l'API est prête.
getConsent() Retourne {choices, policyVersion, consentId, timestamp} ou null si aucun consentement.
hasConsent(category) Retourne true/false pour une catégorie (analytics, marketing, functional, preferences, essential).
acceptAll() / rejectAll() Tout accepter / tout refuser (les catégories requises restent actives).
setConsent({...}) Définit plusieurs catégories d'un coup (les clés inconnues sont ignorées).
acceptCategory(cat) / denyCategory(cat) Accepte / refuse une seule catégorie.
openPreferences() Ouvre la modale de préférences.
reset() Efface le consentement enregistré.
on(event, cb) Abonnement au bus d'événements ; retourne une fonction de désabonnement. Événements : consent.given, consent.changed, consent.reset, language.changed.
getLanguage() / setLanguage('fr'|'en') Lit / change la langue de l'UI (re-rend la bannière ; les deux locales sont déjà embarquées).
getJurisdiction() Retourne la juridiction servie (ex. qc-loi25). Lecture seule (voir plus bas).
showBadge() / hideBadge() Affiche / masque la pastille flottante de préférences (#mx-float).

La pastille flottante s'affiche automatiquement après consentement. Pour la désactiver entièrement, mettez banner_config.floatButton = false (vous déclenchez alors les préférences via votre propre lien + openPreferences()). showBadge() force l'affichage même si le flag est false.

Événement DOM (recommandé pour l'intégration)

À chaque consentement donné ou modifié, l'embed émet un CustomEvent sur document — écoutable sans dépendre de l'ordre de chargement.

document.addEventListener('moelleux:consent', function (e) {
  // e.detail = {choices, consentId, policyVersion, timestamp}
});

e.detail contient : {choices, consentId, policyVersion, timestamp}.

Classes CSS d'état (option cssClasses)

Quand l'option cssClasses est activée dans la configuration de la bannière, l'embed pose sur l'élément <html> les classes mx-consent-{cat} (catégorie accordée) et mx-consent-no-{cat} (refusée), plus mx-consent-ready. Les classes sont posées dès l'init (depuis le cookie) pour éviter tout flash de contenu.

.mx-consent-no-marketing .promo-marketing { display: none; }
.mx-consent-analytics    .badge-analytics  { display: inline; }

Exemple : masquer un bloc promo si le marketing est refusé, afficher un badge si l'analytique est accordée.

Juridiction : lecture seule

getJurisdiction() lit la juridiction servie, mais on ne change pas de juridiction au runtime : le script servi est spécifique à une juridiction (catégories, modèle de consentement et politique diffèrent). Pour une autre juridiction, chargez l'URL dédiée cdn.moelleux.ca/c/{site_key}-{juridiction}.js.

Recettes copier-coller

1. Activer une catégorie en JavaScript

Par exemple, sur un bouton « activer la vidéo » qui requiert la catégorie preferences.

Moelleux.acceptCategory('preferences');

2. Enregistrer l'état vers votre back-end

Écoutez l'événement et envoyez le détail à votre serveur. Le consentId sert de clé idempotente.

document.addEventListener('moelleux:consent', function (e) {
  fetch('/mon-backend/consentement', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(e.detail) // {choices, consentId, policyVersion, timestamp}
  });
});

3. Conditionner du code personnalisé au consentement

Initialisez votre code au chargement si le consentement existe déjà, et réagissez aux changements futurs.

Moelleux.ready(function (M) {
  if (M.hasConsent('analytics')) initMonAnalytics();
});
document.addEventListener('moelleux:consent', function (e) {
  if (e.detail.choices.analytics) initMonAnalytics();
});

4. Afficher / masquer par CSS

Avec l'option cssClasses activée, vous contrôlez l'affichage sans une seule ligne de JavaScript.

/* config bannière : cssClasses = true */
.mx-consent-no-analytics .analytics-widget { display: none; }
.mx-consent-marketing    .promo-banner     { display: block; }

Stabilité

L'API est additive et versionnée. Aucune méthode existante n'est retirée sans un bump de version majeure documenté.