Lingara Lingara Dokumentasi Panduan API Pustaka Aplikasi Bina Apl web
Bahasa: Bahasa Melayu

Kad

Halaman ini diterjemahkan daripada bahasa Inggeris. Jika kedua-duanya berbeza, halaman bahasa Inggeris adalah yang betul. Baca halaman bahasa Inggeris

Kad ialah senarai pendek elemen yang dilukis oleh Lingara dalam gayanya sendiri. Tiada input, imej, skrip atau markup. Aplikasi tidak boleh meletakkan kodnya sendiri atau rupanya sendiri pada skrin pelajar, jadi setiap kad terasa seperti bahagian lain Lingara. Jawapan anda ialah JSON: card yang memegang elements, dan secara pilihan tutor_note (lihat Nota tutor).

Elemen

Setiap elemen mempunyai type, iaitu salah satu daripada lapan ini:

ElemenMedanApa yang dipaparkan
headingtext, levelTajuk. level ialah 1 atau 2, dan sebarang nilai lain menjadi 2. Teksnya paling banyak 80 aksara.
texttext, langPerenggan paling banyak 600 aksara. Ia satu-satunya tempat pemisah baris dikekalkan.
termword, reading, gloss, langPerkataan untuk dipelajari. Hanya word yang wajib. Perkataan paling banyak 60 aksara, bacaan 120 dan glos 160.
listitemsSehingga 20 item. Setiap item ialah text atau term, dengan medan yang sama seperti elemen yang bernama demikian.
progressvalue, labelBar kemajuan. value bermula dari 0 hingga 1, dan label paling banyak 60 aksara.
dividerGaris antara bahagian kad.
buttonlabel, action, styleButang yang menghantar action miliknya ke pelayan anda. style ialah primary atau secondary, dan label paling banyak 32 aksara.
linklabel, urlPautan yang dibuka oleh pelajar dalam pelayarnya, selepas Lingara bertanya kepadanya. Label paling banyak 60 aksara.

lang ialah tag bahasa seperti ja, supaya Lingara melukis tulisan yang betul. Nilai yang bukan tag bahasa dibuang.

Had

  • Kad memegang paling banyak 24 elemen. Elemen selepas yang ke-24 digugurkan.
  • Senarai memegang paling banyak 20 item. Item selepas yang ke-20 digugurkan, dan senarai kosong digugurkan.
  • Kad memegang paling banyak 4 butang. Butang selepas yang ke-4 digugurkan.
  • Teks yang lebih panjang daripada hadnya dipotong supaya muat dan berakhir dengan …. Aksara dikira sebagai nilai skalar Unicode.
  • Aksara kawalan dan penggantian arah dibuang daripada setiap rentetan.
  • Pautan yang alamatnya bukan HTTPS, membawa nama pengguna, atau menghala ke alamat IP digugurkan.
  • Butang dengan action yang lebih panjang daripada 64 aksara, atau yang menggunakan apa-apa selain huruf, digit, _, ., : dan -, digugurkan.
  • Elemen yang tiada teks tinggal selepas peraturan ini digugurkan.

Peraturan ini bertolak ansur: Lingara memotong atau menggugurkan apa yang tidak muat dan melukis selebihnya. Kit menggunakan peraturan yang sama sebelum anda menjawab, jadi anda boleh melihat apa yang akan berubah.

Penghuraian ketat

Perbendaharaan katanya tertutup. Jenis elemen yang tidak diketahui, medan yang tiada pada sesuatu elemen, nilai dengan jenis JSON yang salah, atau jawapan yang langsung bukan JSON menukar keseluruhan jawapan menjadi kad sandaran. Lingara tidak pernah melukis sebahagian kad yang tidak dapat dibacanya.

Saiz dan masa

Jawapan boleh bersaiz paling banyak 32 KiB. Lingara memberi pelayan anda 3 saat untuk menjawab render dan 5 saat untuk menjawab tindakan, dan tidak mencuba semula kedua-duanya. Jawapan mesti mempunyai status 200 dan jenis kandungan JSON. Ubah hala tidak diikuti.

Butang dan tindakan

Apabila pelajar menekan butang, Lingara menghantar permintaan tindakan kepada pelayan anda yang membawa action butang itu. Pelayan anda menjawab dengan kad baharu, yang menggantikan kad lama. Tekanan yang sama boleh tiba dua kali, jadi pastikan setiap tindakan selamat untuk diulang.

Apabila kad gagal

Apabila Lingara tidak dapat memperoleh kad yang boleh dilukisnya, pelajar melihat kad “Aplikasi ini tidak menjawab” milik Lingara sendiri dalam bahasanya, atau kad baik terakhir anda yang ditandakan sebagai tidak terkini. Pelajar tidak pernah diberitahu sebabnya. Hanya anda, sebagai pemilik aplikasi, melihat sebab itu:

  • Jawapan anda: invalid (bukan kad yang boleh dibaca oleh Lingara), empty (tiada apa-apa yang tinggal untuk dipaparkan selepas had) atau too_large (lebih daripada 32 KiB).
  • Mencapai pelayan anda: timeout, http_error (sebarang status selain 200), transport (kegagalan sambungan atau TLS, seperti sijil yang telah tamat tempoh) atau blocked (render_url yang menghala ke alamat peribadi atau alamat IP literal).
  • Pihak Lingara: unavailable (Lingara tidak dapat menandatangani permintaan) atau busy (terlalu banyak permintaan sudah dalam perjalanan).
Bahasa contoh kod

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.
}