Bagikan melalui


Spesifikasi Perender Kartu Adaptif

Spesifikasi berikut menjelaskan cara menerapkan perender Kartu Adaptif pada platform antarmuka pengguna asli apa pun.

Penting

Konten ini adalah pekerjaan yang sedang berlangsung dan mungkin kehilangan beberapa detail. Harap beri tahu kami jika Anda memiliki pertanyaan atau umpan balik.

Mengurai JSON

Kondisi kesalahan

  1. Pengurai HARUS memeriksa bahwa konten JSON valid
  2. Pengurai HARUS memvalidasi terhadap skema (properti yang diperlukan, dll)
  3. Kesalahan di atas HARUS dilaporkan ke aplikasi host (pengecualian atau setara)

Jenis tidak diketahui

  1. Jika "jenis" yang tidak diketahui ditemukan, jenis TERSEBUT HARUS DIHILANGKAN dari hasil
  2. Setiap perubahan payload (seperti di atas) HARUS dilaporkan sebagai peringatan ke aplikasi host

Properti tidak diketahui

  1. Parser HARUS menyertakan properti tambahan pada elemen

Pertimbangan tambahan

  1. Properti speakMAY berisi markup SSML dan HARUS dikembalikan ke aplikasi host sebagaimana ditentukan

Mengurai Konfigurasi Host

  1. TODO

Versi

  1. Perender HARUS menerapkan versi skema tertentu.
  2. AdaptiveCard Konstruktor HARUS memberi version properti nilai default berdasarkan versi skema saat ini
  3. Jika perender menemukan version properti di AdaptiveCard yang lebih tinggi dari versi yang didukung, perender HARUS mengembalikan fallbackText sebagai gantinya.

Penyajian

AdaptiveCard Terdiri dari body dan actions. body adalah kumpulan CardElementyang akan dijumlahkan dan dirender oleh perender secara berurutan.

  1. Setiap Elemen HARUS membentang ke lebar induknya (pikirkan display: block dalam HTML).
  2. Perender HARUS mengabaikan jenis elemen yang tidak diketahui yang ditemuinya dan terus merender payload lainnya.

Teks, TextBlock, dan RichTextBlock

  1. TextBlock HARUS mengambil satu baris kecuali wrap properti adalah true.
  2. Blok teks HARUS memangkas teks berlebih dengan elipsis (...)
Markdown
  1. Kartu Adaptif memungkinkan subset Markdown dan HARUS didukung di TextBlock.
  2. RichTextBlock TIDAK mendukung Markdown, dan harus ditata menggunakan properti yang diekspos.
  3. Lihat persyaratan markdown lengkap
Fungsi pemformatan
  1. TextBlock memungkinkan fungsi pemformatan DATE/TIME yang HARUS didukung pada setiap perender.
  2. SEMUA KEGAGALAN HARUS menampilkan string mentah dalam kartu. Tidak ada pesan ramah yang dicoba. (Tujuannya adalah untuk membuat pengembang segera menyadari ada masalah)

Gambar

  1. Perender HARUS memungkinkan aplikasi host mengetahui kapan semua gambar HTTP telah diunduh dan kartu "sepenuhnya dirender"
  2. Perender HARUS memeriksa param Konfigurasi maxImageSize Host saat mengunduh gambar HTTP
  3. Perender HARUS mendukung .png dan .jpeg
  4. Perender HARUS mendukung .gif gambar

Perilaku Tata Letak Tingkat Lanjut

Perender HARUS menangani perilaku berikut saat merender elemen kartu sehubungan dengan atribut yang disebutkan dalam dokumen ini.

Perender harus mengelola Batasan dengan mempertimbangkan berbagai faktor seperti margin, padding, tinggi dan lebar dll konfigurasi elemen kartu dan anak-anaknya.

Lebar

  1. Nilai yang diizinkan - auto, stretch dan nilai tetap dalam hal pixels dan weight
  2. auto menyediakan ruang yang cukup untuk perluasan lebar (mendukung ekspansi min)
  3. stretch mengambil lebar yang tersisa (mendukung ekspansi maks)

Skenario di bawah ini menjelaskan bagaimana batasan dipengaruhi dengan kombinasi lebar yang berbeda untuk kolom

auto Vs stretch

  1. Kolom dengan auto lebar dan stretch .

Column with auto and stretch width

  • Kolom pertama dengan auto lebar membutuhkan ruang yang cukup untuk menampilkan konten dan kolom kedua dengan stretch lebar membutuhkan seluruh ruang.
  1. Kolom dengan lebar saja stretch

Column with only stretch width

  • Kolom dengan hanya lebar peregangan mengambil spasi yang tersisa setelah membalahnya secara merata.
  1. auto,stretch dan auto

Column with auto and stretch combination width

Lebar kolom pertama dan ketiga disesuaikan terlebih dahulu untuk mengakomodasi elemen dengan cukup dan kolom kedua dengan lebar yang direntangkan membutuhkan ruang yang tersisa.

  1. Urutan menampilkan elemen dengan auto kolom lebar

Columns with auto width

  • Kolom dengan auto akan memposisikan diri mereka sendiri untuk memberikan ruang yang cukup bagi konten untuk dirender.
  • Dalam kasus tampilan Gambar, gambar akan downscale agar sesuai dengan lebar yang tersisa.
  • Catatan: Gambar hanya akan menurunkan skala untuk stretch ukuran gambar dan auto , tetapi tidak untuk lebar dan tinggi tetap dalam piksel.

weights Vs pixels

  1. Kombinasi kolom dengan weight lebar dan pixel

Columns with weightage and pixel width combination

  • Kartu di atas memiliki tiga kolom dengan konfigurasi lebar berikut -
  • Column1: Weight 50, Column2: 100px, Column3: Weight 50
  • Lebar Kolom 2 ditentukan oleh pixel value
  • Lebar Kolom 1 dan 3 disesuaikan berdasarkan weights dan yang dihitung weight ratio.
  1. Kolom dengan weightatribut , pixel width dan auto

Columns with wight, pixel width and auto combination

  • Kartu di atas memiliki empat kolom dengan konfigurasi lebar berikut -
  • Column1: Weight 50, Column2: 100px, Column3: Weight 50, dan Column4: auto
  • Catatan: Tampilan gambar dengan auto downscales kolom lebar untuk menyesuaikan ke ruang yang tersisa.

Urutan prioritas menampilkan elemen dengan atribut lebar

px > weight > auto > stretch

Tinggi

Nilai yang diizinkan - auto dan stretch

Skenario di bawah ini menjelaskan bagaimana batasan dipengaruhi dengan kombinasi tinggi yang berbeda untuk elemen kartu

  1. Elemen diperluas secara bebas secara vertikal ketika kartu tidak memiliki tinggi tetap

Columns with auto and stretch height

  • Kedua kolom dapat diperluas dengan cukup vertikal terlepas dari auto nilai dan stretch
  • Ini dengan properti dinonaktifkan wrap untuk blok teks.
  1. Kartu di bawah ini mengaktifkan wrap properti untuk blok teks.

Column with wrap property for text block

Penspasian dan Pemisah

  1. Properti spacing pada setiap elemen memengaruhi jumlah ruang antara elemen CURRENT dan yang SEBELUM .
  2. Spasi HANYA BOLEH berlaku ketika sebenarnya ada elemen yang mendahuluinya. (Misalnya, tidak akan berlaku untuk item pertama dalam array)
  3. Perender HARUS mencari jumlah ruang yang akan digunakan dari hostConfig penspasian untuk nilai enum yang diterapkan ke elemen saat ini.
  4. Jika elemen memiliki separator nilai true, maka garis yang terlihat HARUS digambar antara elemen saat ini dan yang sebelumnya.
  5. Garis pemisah HARUS digambar menggunakan container.style.default.foregroundColor.
  6. Pemisah HANYA BOLEH digambar jika item BUKAN yang pertama dalam array.
  7. Penspasian - Nilai noneyang diizinkan , , smalldefault, medium, large, extra large danpadding
  • Atribut spasi menambahkan penspasian antara elemen ini dan elemen sebelumnya.

Elements with different spacing combination

  • Atribut spasi tidak memiliki efek apa pun ketika itu adalah elemen pertama dalam kontainer tampilan.

Element where spacing has no effect

  • Elemen yang ditandai dengan panah adalah elemen pertama di antara saudara-saudaranya, sehingga spasi tidak berpengaruh.
  1. Pemisah - Nilai yang mungkin (aktif/nonaktif)
  • Menggambar garis pemisah di bagian atas elemen.

Elements with seperator attribute

  1. Kombinasi Spasi dan Pemisah
  • Batasan penspasian dan kombinasi pemisah diilustrasikan di bawah ini.

Spacing and seperator combination

  • Jarak penspasian keseluruhan dipertahankan sehubungan dengan nilai yang disediakan.
  • Seperator ditambahkan setengah di tengah jarak berjarak.

[Catatan. Perlu mengonfirmasi jarak di mana seperator dimasukkan di area penspasian. Sepertinya tengah]

Gaya Kontainer

  • Menyediakan petunjuk gaya untuk kontainer seperti kolom dan kumpulan kolom
  • Nilai noneyang diizinkan , default, emphasis, good, attention, warning dan accent
  • Opsi gaya yang telah ditentukan sebelumnya ini menyediakan padding untuk elemen dalam kontainer dan warna latar belakang

Columns and ColumnSet Style Combination

  1. Kartu A mengilustrasikan kolom dan kumpulan kolom tanpa opsi gaya
  2. Kartu B mengilustrasikan kumpulan kolom dengan gaya Perhatian . Perhatikan padding dalam kontainer kumpulan kolom dan perubahan warna latar belakang.
  3. Kartu C mengilustrasikan kolom dengan gaya saja. Mirip dengan yang sebelumnya, kolom menyertakan padding dan perubahan latar belakang.
  4. Kartu D mengilustrasikan kolom dan kumpulan kolom keduanya dengan opsi gaya.

[Catatan. Perlu memeriksa bagaimana jumlah padding ditentukan. Apakah ditentukan oleh host? ]

Berdarah

  • Properti ini memungkinkan kontainer seperti kolom dan kumpulan kolom berdarah melalui induknya.
  • on Nilai yang mungkin dan off.

Column with bleed property

  1. Kartu A mengilustrasikan kolom dan kumpulan kolom dengan gaya reguler.
  2. Kartu B mengilustrasikan kolom pertama dengan opsi berdarah. Konten hanya berdarah melalui batas-batasnya ke induknya.

Ukuran Gambar

atribut Size

  • Nilai yang diizinkan - auto, stretch, small, medium, large
  • auto : Gambar akan menurunkan skala agar pas jika diperlukan, tetapi tidak akan meningkatkan skala untuk mengisi area.
  • stretch : Gambar dengan skala turun dan naik agar pas sesuai kebutuhan.
  • small, medium dan large: Gambar ditampilkan dengan lebar tetap, di mana lebar ditentukan oleh host.
  1. auto Vs stretch

Image with auto and stretch behavior

  1. Lebar kolom dan kombinasi Ukuran Gambar

Column width and image size combination

  • Umumnya, Kolom dengan stretch lebar memungkinkan gambar untuk meningkatkan skala secara bebas dengan stretch ukuran.
  • Kolom dengan auto lebar memungkinkan gambar untuk menempati ruang yang tepat terlepas dari auto dan stretch ukuran gambar.
  • Lebar kolom lebih diutamakan dalam menentukan ukuran gambar dalam pengaturan ini.

Atribut gambar Width (in pixels)

  • Ini memberikan lebar gambar pada layar yang diinginkan.
  • size properti ditimpa ketika nilai ditentukan

Column width and image width in pixels combination

  • Kolom dengan auto lebar akan lebih diutamakan daripada stretch menyediakan ruang untuk konten gambar dalam pengaturan ini.

Lebar Kolom (bobot dan piksel) dan Ukuran gambar (otomatis dan regang) Kombinasi

Column width weighted and image size combination

  • Gambar dengan auto ukuran membutuhkan ruang yang cukup untuk ekspansi (atau downscales) dalam batasan kolom dan weightpixel lebar.
  • Gambar dengan stretch ukuran dapat diperluas untuk mengisi ruang yang tersisa dalam batasan kolom weight dan pixel lebar.

Ringkasan Tata Letak Tingkat Lanjut

  • Lebar kolom lebih diutamakan dalam menentukan ukuran gambar daripada ukuran gambarnya (otomatis, regangkan, lebar min, dll).
  • Prioritas lebar kolom yang diambil untuk menampilkan kontennya dengan cukup - px>weight>auto>stretch
  • Gambar size (otomatis, regangkan) diabaikan saat Gambar width dan height dalam px disediakan.
  • Atribut ukuran gambar stretch akan meningkatkan skala gambar hanya ketika ada ruang yang tersisa dan kolom otomatis tidakauto.
  • Gambar membentang sendiri ke batas di mana ia mempertahankan rasio aspeknya dalam ruang yang tersedia di kolom. Pada gilirannya, tinggi meluas dengan bebas.
  • Spacing atribut tidak akan berpengaruh ketika itu adalah elemen pertama atau satu-satunya di antara saudara kandungnya.

Tindakan

  1. Jika HostConfig supportsInteractivity adalah false, perender TIDAK BOLEH merender tindakan apa pun.
  2. Properti actionsHARUS dirender sebagai tombol di beberapa jenis bilah tindakan, biasanya di bagian bawah kartu.
  3. Saat tombol diketuk, itu HARUS memungkinkan aplikasi host untuk menangani peristiwa.
  4. Peristiwa HARUS melewati semua properti terkait dengan tindakan
  5. Peristiwa HARUS melewati AdaptiveCard yang dijalankan
Tindakan Perilaku
Action.OpenUrl Buka URL eksternal untuk ditampilkan
Action.ShowCard Meminta sub-kartu untuk ditampilkan kepada pengguna.
Action.Submit Mintalah semua elemen input untuk dikumpulkan ke dalam objek yang kemudian dikirimkan kepada Anda melalui beberapa metode yang ditentukan oleh aplikasi host.
Action.Execute (Diperkenalkan dalam v1.4) Mintalah semua elemen input untuk dikumpulkan ke dalam objek yang kemudian dikirimkan kepada Anda melalui "alur tindakan universal"

Action.OpenUrl

  1. Action.OpenUrlHARUS membuka URL menggunakan mekanisme platform asli
  2. Jika ini tidak memungkinkan , HARUS menaikkan peristiwa ke aplikasi host untuk menangani pembukaan URL. Kejadian ini HARUS memungkinkan aplikasi host untuk mengambil alih perilaku default. Misalnya, biarkan mereka membuka URL dalam aplikasi mereka sendiri.

Action.ShowCard

  1. Action.ShowCardHARUS didukung dalam beberapa cara, berdasarkan pengaturan hostConfig. Ada dua mode: sebaris, dan popup. Kartu sebaris HARUS mengalihkan visibilitas kartu secara otomatis. Dalam mode popup, peristiwa HARUS ditembakkan ke aplikasi host untuk menampilkan kartu dalam beberapa cara.

Action.Submit

  • Action.Submit elemen mengumpulkan bidang input, menggabungkan dengan bidang data opsional, dan mengirim peristiwa ke klien.
  • Perbedaan signifikan dalam perilaku elemen ada antara versi 1.x dan 2.x dari penyaji ACL.

Tindakan Kirim bertingkah seperti pengiriman formulir HTML, kecuali bahwa di mana HTML biasanya memicu posting HTTP, Kartu Adaptif meninggalkannya ke setiap aplikasi host untuk menentukan apa arti "kirim" bagi mereka.

  1. Ketika ini HARUS memunculkan peristiwa, pengguna mengetuk tindakan yang dipanggil.
  2. Properti dataHARUS disertakan dalam payload panggilan balik.
  3. Untuk Action.Submit, perender HARUS mengumpulkan semua input pada kartu dan mengambil nilainya.

Action submit behavior differences

  • 1.x Renderer - Input dikumpulkan dari semua bidang terlepas dari di mana dalam hierarki bidang input ada.
  • 2.x Renderer - Input dikumpulkan dari bidang yang ada dalam kontainer induk atau sebagai saudara kandung Action.Submit dari elemen .

Action.Execute (Detail akan datang nanti)

Action.Execute diperkenalkan dalam versi 1.4. Kami akan memberikan panduan implementasi untuk SDK di kemudian hari. Silakan hubungi jika Anda memiliki pertanyaan tentang topik ini.

selectAction

  1. Jika Konfigurasi supportedInteractivity Host, false maka selectActionTIDAK BOLEH dirender sebagai target sentuhan.
  2. Image, ColumnSet, dan Column menawarkan selectAction properti , yang HARUS dijalankan ketika pengguna memanggilnya, misalnya, dengan mengetuk elemen .

Input

  1. Jika HostConfig supportsInteractivity adalah false perender TIDAK BOLEH merender input apa pun.
  2. Input HARUS dirender dengan keakuratan setingkat mungkin. Misalnya, Input.Date idealnya akan menawarkan pemilih tanggal kepada pengguna, tetapi jika ini tidak dimungkinkan pada tumpukan UI Anda, maka perender HARUS kembali untuk merender kotak teks standar.
  3. Perender HARUS menampilkan placeholderText jika memungkinkan
  4. Pengikatan nilai input HARUS diloloskan dengan benar
  5. Sebelum v1.3, Perender TIDAK harus menerapkan validasi input. Pengguna Kartu Adaptif harus berencana untuk memvalidasi data yang diterima di akhir mereka.
  6. Label Input dan Validasi diperkenalkan di v1.3 dari Skema Kartu Adaptif. Perawatan ekstra harus dilakukan untuk merender label terkait, petunjuk validasi, dan pesan kesalahan.

API Gaya, Kustomisasi, dan Ekstensibilitas

Setiap SDK harus memberikan tingkat fleksibilitas tertentu untuk Menghosting Aplikasi untuk mengontrol gaya keseluruhan, dan memperluas skema sesuai keinginan.

Konfigurasi Host

  • TODO: Apa defaultnya? Haruskah mereka berbagi? Haruskah kita menyematkan file hostConfig.json umum di biner?

HostConfig adalah objek konfigurasi bersama yang menentukan bagaimana Perender Kartu Adaptif menghasilkan UI.

Ini memungkinkan properti yang agnostik platform untuk dibagikan di antara perender pada platform dan perangkat yang berbeda. Ini juga memungkinkan alat untuk dibuat yang memberi Anda gambaran tentang tampilan dan nuansa yang akan dimiliki kartu untuk lingkungan tertentu.

  1. Perender HARUS mengekspos parameter Konfigurasi Host ke aplikasi host
  2. Semua elemen HARUS ditata sesuai dengan pengaturan Konfigurasi Host masing-masing

Gaya platform asli

  1. Setiap jenis elemen HARUS melampirkan gaya platform asli dengan elemen UI yang dihasilkan. Misalnya, dalam HTML kami menambahkan kelas CSS ke jenis elemen, dan di XAML kami menetapkan Gaya tertentu.

Ekstensibilitas

  1. Perender HARUS memungkinkan aplikasi host untuk mengambil alih perender elemen default. Misalnya, ganti TextBlock penyajian dengan logika mereka sendiri.
  2. Perender HARUS memungkinkan aplikasi host untuk mendaftarkan jenis elemen kustom. Misalnya, tambahkan dukungan untuk elemen kustom Rating
  3. Perender HARUS memungkinkan aplikasi host menghapus dukungan untuk elemen default. Misalnya, hapus Action.Submit jika mereka tidak ingin didukung.

Acara

  1. Perender HARUS mengaktifkan peristiwa ketika visibilitas elemen telah berubah, memungkinkan aplikasi host untuk menggulir kartu ke posisi.