Kaarten
Deze pagina is vertaald uit het Engels. Als de twee verschillen, is de Engelse pagina juist. Lees de Engelse pagina
Een kaart is een korte lijst elementen die Lingara in zijn eigen stijl tekent. Er zijn geen invoervelden, afbeeldingen, scripts of opmaak. Een app kan geen eigen code en geen eigen uiterlijk op het scherm van een leerder zetten, dus elke kaart leest als de rest van Lingara. Je antwoord is JSON: een card met zijn elements, en optioneel een tutor_note (zie De tutornotitie).
De elementen
Elk element heeft een type, dat een van deze acht is:
| Element | Velden | Wat het toont |
|---|---|---|
heading | text, level | Een kop. level is 1 of 2, en elke andere waarde wordt 2. De tekst is maximaal 80 tekens. |
text | text, lang | Een alinea van maximaal 600 tekens. Het is de enige plek waar een regeleinde behouden blijft. |
term | word, reading, gloss, lang | Een woord om te leren. Alleen word is verplicht. Het woord is maximaal 60 tekens, de lezing 120 en de glosse 160. |
list | items | Tot 20 items. Elk item is een text of een term, met dezelfde velden als het element met die naam. |
progress | value, label | Een voortgangsbalk. value loopt van 0 tot 1, en het label is maximaal 60 tekens. |
divider | Een lijn tussen delen van de kaart. | |
button | label, action, style | Een knop die zijn action naar je server stuurt. style is primary of secondary, en het label is maximaal 32 tekens. |
link | label, url | Een link die de leerder in zijn browser opent, nadat Lingara het hem heeft gevraagd. Het label is maximaal 60 tekens. |
Een lang is een taaltag zoals ja, zodat Lingara het juiste schrift tekent. Een waarde die geen taaltag is, wordt verwijderd.
De limieten
- Een kaart bevat maximaal 24 elementen. Elementen na het 24e worden weggelaten.
- Een lijst bevat maximaal 20 items. Items na het 20e worden weggelaten, en een lege lijst wordt weggelaten.
- Een kaart bevat maximaal 4 knoppen. Knoppen na de 4e worden weggelaten.
- Tekst die langer is dan zijn limiet wordt ingekort en eindigt op
…. Tekens worden geteld als Unicode-scalaire waarden. - Besturingstekens en richtingsoverschrijvingen worden uit elke string verwijderd.
- Een link waarvan het adres geen HTTPS is, een gebruikersnaam bevat of naar een IP-adres wijst, wordt weggelaten.
- Een knop waarvan de
actionlanger is dan 64 tekens, of iets anders gebruikt dan letters, cijfers,_,.,:en-, wordt weggelaten. - Een element waarin na deze regels geen tekst meer over is, wordt weggelaten.
Deze regels zijn vergevingsgezind: Lingara kort in of laat weg wat niet past en tekent de rest. De kits passen dezelfde regels toe voordat je antwoordt, zodat je kunt zien wat er zou veranderen.
Strikt parsen
De woordenschat is gesloten. Een onbekend elementtype, een veld dat een element niet heeft, een waarde van het verkeerde JSON-type, of een antwoord dat helemaal geen JSON is, verandert het hele antwoord in een fallback. Lingara tekent nooit een deel van een kaart die het niet kon lezen.
Grootte en tijd
Een antwoord mag maximaal 32 KiB zijn. Lingara geeft je server 3 seconden om een render te beantwoorden en 5 seconden om een actie te beantwoorden, en probeert geen van beide opnieuw. Een antwoord moet status 200 en een JSON-contenttype hebben. Redirects worden niet gevolgd.
Knoppen en acties
Wanneer de leerder op een knop drukt, stuurt Lingara je server een actieverzoek met de action van die knop. Je server antwoordt met een nieuwe kaart, die de oude vervangt. Dezelfde druk kan twee keer aankomen, dus maak elke actie veilig om te herhalen.
Als een kaart mislukt
Als Lingara geen kaart krijgt die het kan tekenen, ziet de leerder Lingara’s eigen kaart “Deze app heeft niet geantwoord” in zijn taal, of je laatste goede kaart gemarkeerd als niet actueel. De leerder krijgt nooit te horen waarom. Alleen jij, als eigenaar van de app, ziet de reden:
- Je antwoord:
invalid(geen kaart die Lingara kan lezen),empty(niets meer te tonen na de limieten) oftoo_large(meer dan 32 KiB). - Je server bereiken:
timeout,http_error(elke status behalve 200),transport(een verbindings- of TLS-fout, zoals een verlopen certificaat) ofblocked(eenrender_urldie naar een privé- of IP-letterlijk adres leidt). - De kant van Lingara:
unavailable(Lingara kon het verzoek niet ondertekenen) ofbusy(al te veel verzoeken onderweg).