Lingara Lingara Dokumentasyon Mga gabay API Mga library Mga app Gumawa Web app
Wika: Filipino

Mga card

Isinalin mula sa Ingles ang pahinang ito. Kung magkaiba ang dalawa, ang pahinang Ingles ang tama. Basahin ang pahinang Ingles

Ang card ay isang maikling listahan ng mga elemento na iginuguhit ng Lingara sa sarili nitong istilo. Walang input, larawan, script o markup. Hindi mailalagay ng isang app ang sarili nitong code o sariling itsura sa screen ng mag-aaral, kaya bawat card ay kahawig ng ibang bahagi ng Lingara. JSON ang sagot mo: isang card na naglalaman ng elements nito, at opsyonal na isang tutor_note (tingnan ang Ang tala sa tutor).

Ang mga elemento

May type ang bawat elemento, na isa sa walong ito:

ElementoMga fieldAng ipinapakita nito
headingtext, levelIsang heading. Ang level ay 1 o 2, at nagiging 2 ang anumang ibang value. Hanggang 80 character ang text nito.
texttext, langIsang talata na hanggang 600 character. Ito lang ang lugar kung saan pinapanatili ang line break.
termword, reading, gloss, langIsang salitang pag-aaralan. word lang ang kailangan. Hanggang 60 character ang salita, 120 ang reading at 160 ang gloss.
listitemsHanggang 20 item. Ang bawat item ay text o term, na may parehong mga field gaya ng elementong may ganoong pangalan.
progressvalue, labelIsang progress bar. Mula 0 hanggang 1 ang value, at hanggang 60 character ang label.
dividerIsang linya sa pagitan ng mga bahagi ng card.
buttonlabel, action, styleIsang button na nagpapadala ng action nito sa server mo. Ang style ay primary o secondary, at hanggang 32 character ang label.
linklabel, urlIsang link na binubuksan ng mag-aaral sa browser niya, matapos siyang tanungin ng Lingara. Hanggang 60 character ang label.

Ang lang ay isang language tag gaya ng ja, para maiguhit ng Lingara ang tamang script. Inaalis ang value na hindi language tag.

Ang mga limitasyon

  • Hanggang 24 na elemento ang laman ng isang card. Tinatanggal ang mga elemento pagkatapos ng ika-24.
  • Hanggang 20 item ang laman ng isang listahan. Tinatanggal ang mga item pagkatapos ng ika-20, at tinatanggal ang listahang walang laman.
  • Hanggang 4 na button ang laman ng isang card. Tinatanggal ang mga button pagkatapos ng ika-4.
  • Ang text na mas mahaba sa limitasyon nito ay pinuputol para magkasya at nagtatapos sa …. Binibilang ang mga character bilang mga Unicode scalar value.
  • Inaalis ang mga control character at direction override sa bawat string.
  • Tinatanggal ang link na ang address ay hindi HTTPS, may kasamang user name, o tumuturo sa isang IP address.
  • Tinatanggal ang button na ang action ay mas mahaba sa 64 character, o gumagamit ng anumang bukod sa mga titik, digit, _, ., : at -.
  • Tinatanggal ang elementong walang natirang text pagkatapos ng mga patakarang ito.

Maluwag ang mga patakarang ito: pinuputol o tinatanggal ng Lingara ang hindi kasya at iginuguhit ang natitira. Inilalapat ng mga kit ang parehong mga patakaran bago ka sumagot, kaya makikita mo kung ano ang magbabago.

Mahigpit na pag-parse

Sarado ang bokabularyo. Ang hindi kilalang uri ng elemento, field na wala sa isang elemento, value na mali ang JSON type, o sagot na hindi talaga JSON ay ginagawang fallback ang buong sagot. Hindi kailanman iginuguhit ng Lingara ang bahagi ng card na hindi nito nabasa.

Laki at oras

Hanggang 32 KiB ang sagot. Binibigyan ng Lingara ang server mo ng 3 segundo para sumagot sa isang render at 5 segundo para sumagot sa isang action, at hindi nito inuulit ang alinman. Dapat may status 200 at JSON content type ang sagot. Hindi sinusundan ang mga redirect.

Mga button at action

Kapag pinindot ng mag-aaral ang isang button, nagpapadala ang Lingara sa server mo ng action request na may dalang action ng button na iyon. Sumasagot ang server mo ng bagong card, na pumapalit sa luma. Puwedeng dumating nang dalawang beses ang iisang pindot, kaya gawing ligtas ulitin ang bawat action.

Kapag nabigo ang isang card

Kapag hindi makakuha ang Lingara ng card na kaya nitong iguhit, nakikita ng mag-aaral ang sariling card ng Lingara na “Hindi sumagot ang app na ito” sa wika niya, o ang huli mong maayos na card na may markang hindi napapanahon. Hindi kailanman sinasabi sa mag-aaral kung bakit. Ikaw lang, bilang may-ari ng app, ang nakakakita ng dahilan:

  • Ang sagot mo: invalid (hindi card na mababasa ng Lingara), empty (walang natirang ipapakita pagkatapos ng mga limitasyon) o too_large (higit sa 32 KiB).
  • Pag-abot sa server mo: timeout, http_error (anumang status maliban sa 200), transport (pagkabigo ng koneksyon o TLS, gaya ng expired na certificate) o blocked (isang render_url na humahantong sa pribado o IP-literal na address).
  • Panig ng Lingara: unavailable (hindi napirmahan ng Lingara ang kahilingan) o busy (masyado nang maraming kahilingan ang tumatakbo).
Wika ng halimbawang code

TypeScript

function todayCard(streak: number): Card {
  return card()
    .heading("Today's five", 1)
    .term({ word: "雨", reading: "yǔ", gloss: "rain", lang: "zh" })
    .list([item.text("Review 3 words"), item.term({ word: "二", reading: "èr" })])
    .button(`Done (${streak})`, "done")
    .build(); // Throws CardLimitError naming the rule the relay would clamp.
}

Rust

fn today_card(title: &str, lang: &str) -> Result<lingara_apps::Card, BoxError> {
    Ok(card()
        .heading(title, 1)
        .term(Term::new("雨").reading("yǔ").gloss("rain").lang(lang))
        .list([item::text("Say it aloud"), item::term(Term::new("下雨").gloss("to rain"))])
        .button("Next word", "next")
        .build()?)
}

Go

card, err := lingaraapps.NewCard().
	Heading("Today", 1).
	Term(lingaraapps.Term{Word: "雨", Reading: "yǔ", Gloss: "rain", Lang: "zh"}).
	List(
		lingaraapps.Item.Text("Say it aloud three times."),
		lingaraapps.Item.Term(lingaraapps.Term{Word: "雨天", Gloss: "rainy day", Lang: "zh"}),
	).
	Button("Next", "next").
	Build()
if err != nil {
	// A *lingaraapps.CardLimitError names the rule the card breaks,
	// such as text_length or list_items. Nothing is cut for you.
	return lingaraapps.Card{}, err
}

Java

import com.getlingara.apps.Card;
import com.getlingara.apps.Item;

Card card =
    Card.card()
        .heading("Today's five", 1)
        .term("雨", "yǔ", "rain", "zh")
        .list(Item.text("Say it aloud"), Item.term("二", "èr", "two", "zh"))
        .button("Next", "next")
        .build(); // a CardLimitException names the first rule the card breaks

Kotlin

import com.getlingara.apps.kotlin.Card
import com.getlingara.apps.kotlin.card

val c =
    card {
        heading("Today's five", 1)
        term("雨", reading = "yǔ", gloss = "rain", lang = "zh")
        list(item.text("Say it aloud"), item.term("二", reading = "èr", gloss = "two", lang = "zh"))
        button("Next", "next")
    } // a CardLimitException names the first rule the card breaks

Ruby

def self.today_card(streak)
  Lingara::Apps.card
    .heading("Today's five", 1)
    .term(word: "雨", reading: "yǔ", gloss: "rain", lang: "zh")
    .list([Lingara::Apps.item.text("Review 3 words"), Lingara::Apps.item.term(word: "二", reading: "èr")])
    .button("Done (#{streak})", "done")
    .build # Raises Lingara::Apps::CardLimitError naming the rule Lingara would clamp.
end

PHP

use Lingara\Apps\Card;
use Lingara\Apps\Generated\Card as CardModel;
use Lingara\Apps\Item;

function todayCard(int $streak): CardModel
{
    return Card::create()
        ->heading("Today's five", 1)
        ->term('雨', reading: 'yǔ', gloss: 'rain', lang: 'zh')
        ->list([Item::text('Review 3 words'), Item::term('二', reading: 'èr')])
        ->button("Done ({$streak})", 'done')
        ->build(); // Throws CardLimitException naming the rule the relay would clamp.
}