Widget de site web
Cette page est traduite de l'anglais. En cas de différence, la page anglaise fait foi. Lire la page en anglais
Sur un site web, Lingara s’exécute sous forme d’élément personnalisé, <lingara-embed>. L’élément dessine la pratique de Lingara dans un cadre servi par Lingara : votre page ne voit donc jamais les données de l’apprenant, et la page de Lingara ne voit jamais les vôtres.
Monter l’élément
Installez @lingara/embed depuis npm, ou chargez sa version module depuis un CDN si votre site n’a pas de bundler. Placez ensuite <lingara-embed> sur la page et définissez-le. L’élément accepte :
plan-id, le plan de cours à pratiquer, que le joueur doit posséder ;surface, ce qu’il faut afficher :practice, la valeur par défaut et la seule surface existante ;theme, parmilight,darkouauto;locale, la langue des textes propres au cadre, qui sinon suit celle de l’apprenant ;title, le nom accessible du cadre.
La personnalisation du style s’arrête au thème. Votre page ne peut pas atteindre l’intérieur du cadre, et le thème est le seul réglage qu’il propose.
Lui donner des jetons
Définissez le tokenProvider de l’élément sur une fonction qui demande un jeton à votre propre serveur. Votre serveur l’émet avec l’origine de la page, en utilisant un kit serveur, et répond avec le jeton et son expiration. L’élément transmet le jeton au cadre par message, et il ne transite jamais dans une URL.
Enregistrez chaque origine sur laquelle le widget s’exécute avant d’émettre un jeton pour elle, dans les paramètres de votre client dans la console. La page kits serveur explique comment. L’API refuse un jeton émis pour toute autre origine, et le cadre affiche une erreur au lieu de la pratique.
Un kit serveur peut aussi écrire pour vous l’extrait complet, élément et fournisseur de jetons ensemble, avec le nonce de script de votre page si votre politique de sécurité du contenu en exige un. Le dernier exemple ci-dessous le montre.
Écouter ce que dit le cadre
Le cadre communique avec l’élément via un protocole de messages versionné, et l’élément transforme ce dont votre page a besoin en événements DOM :
lingara:practice-completedlorsque l’apprenant termine une série, avec sesplanId,setNumber,correctettotal;lingara:errorlorsque le cadre s’arrête, avec uncodeetretryable. Une erreur réessayable signifie qu’un nouveau montage peut réussir ; c’est à vous de décider quand réessayer.
Le résultat de la pratique parvient aussi à votre serveur, comme le décrit résultats de pratique.
npm install @lingara/embed@0.1.0-alpha.6
# No bundler? One module script instead:
# <script type="module" src="https://cdn.jsdelivr.net/npm/@lingara/embed@0.1.0-alpha.6/dist/lingara-embed.min.js"></script><!-- plan-id is a lesson plan your server made for this player. -->
<lingara-embed surface="practice" plan-id="0b9d4f2e-3c1a-4e8b-9f6d-2a7c5e1b8d40" theme="auto" title="Practice"></lingara-embed>
<script type="module">
import { defineLingaraEmbed } from '@lingara/embed'
defineLingaraEmbed()
</script>// Your own endpoint, on your own server. It mints with this page's origin and
// returns exactly { token, expires_at }: the token (lgr_et_…) never touches a URL.
widget.tokenProvider = async () => {
const response = await fetch('/lingara/token', { method: 'POST', credentials: 'same-origin' })
if (!response.ok) throw new Error(`token endpoint answered ${response.status}`)
return response.json()
}widget.addEventListener('lingara:practice-completed', (event) => {
const { planId, setNumber, correct, total } = (event as CustomEvent).detail
console.log(`set ${setNumber} of ${planId}: ${correct}/${total}`)
})
widget.addEventListener('lingara:error', (event) => {
const { code, retryable } = (event as CustomEvent).detail
// `retryable` means a remount may succeed; when to try is yours to decide.
if (retryable) setTimeout(() => widget.reload(), 30_000)
else console.warn('Lingara practice stopped:', code)
})