Widget para sites
Esta página é uma tradução do inglês. Se as duas diferirem, a página em inglês é a correta. Ler a página em inglês
Num site, o Lingara é executado como um elemento personalizado, <lingara-embed>. O elemento desenha a prática do Lingara numa moldura servida pelo Lingara, pelo que a sua página nunca vê os dados do aprendente e a página do Lingara nunca vê os seus.
Montar o elemento
Instale @lingara/embed a partir do npm, ou carregue a sua versão em módulo a partir de uma CDN se o seu site não tiver bundler. Depois, coloque <lingara-embed> na página e defina-o. O elemento aceita:
plan-id, o plano de lição a praticar, que tem de pertencer ao jogador;surface, o que mostrar:practice, a predefinição e a única superfície que existe;theme, um delight,darkouauto;locale, a língua dos textos da própria moldura, que de outro modo segue a do aprendente;title, o nome acessível da moldura.
A personalização do estilo termina no tema. A sua página não consegue aceder ao interior da moldura, e o tema é a única definição que esta oferece.
Fornecer-lhe tokens
Defina o tokenProvider do elemento como uma função que pede um token ao seu próprio servidor. O seu servidor emite-o com a origem da página, usando um kit de servidor, e responde com o token e a sua validade. O elemento entrega o token à moldura por mensagem, e o token nunca viaja num URL.
Registe cada origem em que o widget é executado antes de emitir tokens para ela, nas definições do seu cliente na consola. A página kits de servidor explica como. A API recusa um token emitido para qualquer outra origem, e a moldura mostra um erro em vez da prática.
Um kit de servidor também pode escrever por si o fragmento completo, elemento e fornecedor de tokens em conjunto, com o nonce de script da sua página se a sua política de segurança de conteúdo o exigir. O último exemplo abaixo mostra-o.
Ouvir o que a moldura diz
A moldura comunica com o elemento através de um protocolo de mensagens com versões, e o elemento transforma aquilo de que a sua página precisa em eventos DOM:
lingara:practice-completedquando o aprendente termina um conjunto, com o seuplanId,setNumber,correctetotal;lingara:errorquando a moldura para, com umcodeeretryable. Um erro que pode ser repetido significa que uma nova montagem pode ter êxito; quando tentar novamente é decisão sua.
O resultado da prática também chega ao seu servidor, como descrito em resultados da prática.
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)
})