د وېبپاڼې ویجټ
دا پاڼه له انګلیسي ژبې ژباړل شوې ده. که دواړه سره توپیر ولري، انګلیسي پاڼه سمه ده. انګلیسي پاڼه ولولئ
په یوه وېبپاڼه کې، Lingara د یوه ځانګړي عنصر، <lingara-embed>، په توګه چلېږي. عنصر د Lingara تمرین په یوه چوکاټ کې انځوروي چې Lingara یې وړاندې کوي، نو ستاسو پاڼه هېڅکله د زده کوونکي معلومات نه ویني او د Lingara پاڼه هېڅکله ستاسو معلومات نه ویني.
عنصر کېږدئ
@lingara/embed له npm څخه نصب کړئ، یا که ستاسو سایټ bundler نه لري د هغه ماډیول جوړښت له یوه CDN څخه بار کړئ. بیا <lingara-embed> په پاڼه کې کېږدئ او تعریف یې کړئ. عنصر دا اخلي:
plan-id، هغه د لوست پلان چې تمرین کېږي، یو چې د لوبغاړي خپل وي؛surface، څه وښيي:practice، ډیفالټ او یوازینی سطح چې شته؛theme، له دې څخه یو:light،darkیاauto؛locale، د چوکاټ د خپلو کلمو ژبه، چې که نه وي د زده کوونکي ژبه تعقیبوي؛title، د چوکاټ د لاسرسي وړ نوم.
سینګار په تیم پای ته رسي. ستاسو پاڼه د چوکاټ دننه نه شي رسېدای، او تیم یوازینی تنظیم دی چې دا یې وړاندې کوي.
هغه ته ټوکنونه ورکړئ
د عنصر tokenProvider داسې فنکشن ته وټاکئ چې له خپل سرور څخه ټوکن وغواړي. ستاسو سرور هغه د پاڼې د origin سره جوړوي، د یوه سرور کیټ په کارولو، او د ټوکن او د هغه د پای ته رسېدو د وخت په لېږلو ځواب ورکوي. عنصر ټوکن د پیغام له لارې چوکاټ ته سپاري، او هېڅکله په URL کې نه سفر کوي.
هر هغه origin چې ویجټ پرې چلېږي د هغه لپاره د ټوکن جوړولو مخکې ثبت کړئ، په کنسول کې د خپل کلاینټ په تنظیماتو کې. د سرور کیټونو پاڼه وايي چې څنګه. API هغه ټوکن ردوي چې د بل هر origin لپاره جوړ شوی وي، او چوکاټ د تمرین پر ځای یوه تېروتنه ښيي.
د سرور کیټ کولی شي ستاسو لپاره ټوله ټوټه هم ولیکي، عنصر او د ټوکن ورکوونکی یو ځای، د ستاسو د پاڼې د script nonce سره که ستاسو د منځپانګې د امنیت پالیسي یوه ته اړتیا ولري. لاندې وروستۍ نمونه دا ښيي.
هغه څه واورئ چې چوکاټ یې وايي
چوکاټ له عنصر سره د یوه نسخه لرونکي پیغام پروتوکول له لارې خبرې کوي، او عنصر هغه څه چې ستاسو پاڼه یې اړتیا لري په DOM پېښو بدلوي:
lingara:practice-completedکله چې زده کوونکی یو سېټ بشپړ کړي، د هغه دplanId،setNumber،correctاوtotalسره؛lingara:errorکله چې چوکاټ ودرېږي، د یوهcodeاوretryableسره. د بیا هڅې وړ تېروتنه دا معنا لري چې یو تازه کېښودل کېدای شي بریالی شي؛ دا چې کله بیا هڅه وکړئ ستاسو پرېکړه ده.
د تمرین پایله ستاسو سرور ته هم رسي، لکه څنګه چې په د تمرین پایلې کې تشریح شوې.
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)
})