Prosa

Perender Markdown mengembalikan tag telanjang: <h2>, <p>, <ul>, <blockquote> — tanpa kelas untuk dikaitkan. prose() membungkus HTML itu dan menatanya.

Inilah satu-satunya pengecualian yang disengaja di pustaka ini. Di tempat lain, penataan dibatasi pada kelas su- justru agar ia tidak pernah menyentuh markup yang tidak Anda pilih; di sini tidak ada kelas untuk disasar, jadi aturannya mencocokkan tag telanjang — tetapi hanya di dalam pembungkusnya.

Prosa dasar

Memulai

Tulis fungsi yang mengembalikan HTML. Jalankan sitelo build. Terbitkan dist/.

  • Perutean berbasis berkas
  • Data saat build
  • Tanpa runtime klien
prose(
  '<h2>Memulai</h2>' +
  '<p>Tulis fungsi yang mengembalikan HTML. Jalankan <code>sitelo build</code>. Terbitkan <code>dist/</code>.</p>' +
  '<ul><li>Perutean berbasis berkas</li><li>Data saat build</li><li>Tanpa runtime klien</li></ul>'
)

Semua yang ditatanya

Sebuah judul

Teks badan dengan sebuah tautan, tebal, dan kode sebaris.

Kutipan menonjol, dipisahkan dari teks di sekitarnya.

  1. Pertama
  2. Kedua
    • Bersarang
export default () => "<h1>Hai</h1>"
OpsiBawaan
cleanUrlstrue
outDirdist

Tekan ⌘ K untuk mencari.

prose(
  '<h3>Sebuah judul</h3>' +
  '<p>Teks badan dengan <a href="/docs">sebuah tautan</a>, <strong>tebal</strong>, dan <code>kode sebaris</code>.</p>' +
  '<blockquote><p>Kutipan menonjol, dipisahkan dari teks di sekitarnya.</p></blockquote>' +
  '<ol><li>Pertama</li><li>Kedua<ul><li>Bersarang</li></ul></li></ol>' +
  '<pre><code>export default () => "&lt;h1&gt;Hai&lt;/h1&gt;"</code></pre>' +
  '<table><thead><tr><th>Opsi</th><th>Bawaan</th></tr></thead>' +
  '<tbody><tr><td>cleanUrls</td><td>true</td></tr><tr><td>outDir</td><td>dist</td></tr></tbody></table>' +
  '<hr>' +
  '<p>Tekan <kbd>⌘</kbd> <kbd>K</kbd> untuk mencari.</p>'
)

Ukuran

Kecil — untuk ringkasan kartu atau bilah samping.

Sedang — bawaannya, untuk teks badan artikel.

Besar — untuk pembuka pendek yang menonjol.

stack({ gap: 'lg' },
  prose({ size: 'sm' }, '<p><strong>Kecil</strong> — untuk ringkasan kartu atau bilah samping.</p>'),
  prose('<p><strong>Sedang</strong> — bawaannya, untuk teks badan artikel.</p>'),
  prose({ size: 'lg' }, '<p><strong>Besar</strong> — untuk pembuka pendek yang menonjol.</p>'),
)

Dengan blog Markdown

Bentuk yang diinginkan contoh blognya: render Markdown-nya saat build, bungkus hasilnya, lalu terbitkan.

import { marked } from 'marked'
import { article, body, h1, html, head, title } from 'javascript-to-html'
import { container, prose, styles, text } from 'sitelo/ui'

export async function data({ params }) {
  return { post: await loadPost(params.slug) }
}

export default ({ data }) => html({ lang: 'id' },
  head(title(data.post.title), styles()),
  body(
    container({ size: 'sm' },
      h1(data.post.title),
      text({ variant: 'caption' }, data.post.date),
      // marked mengembalikan string HTML tanpa kelas apa pun padanya
      prose(marked.parse(data.post.markdown)),
    ),
  ),
)

Komponen di dalam prosa

Setiap aturan prosa mengecualikan elemen yang membawa kelas su-, jadi komponen yang dijatuhkan ke dalam sebongkah prosa mempertahankan penataannya sendiri alih-alih ikut memungut margin artikel.

Sedikit Markdown yang sudah dirender, lalu sebuah komponen:

Dan kembali ke prosa.

prose(
  '<p>Sedikit Markdown yang sudah dirender, lalu sebuah komponen:</p>',
  alert({ color: 'warning', title: 'Tetap peringatan biasa' },
    'Ia tidak ditata ulang oleh blok prosa di sekelilingnya.'),
  '<p>Dan kembali ke prosa.</p>',
)

Sepatah kata tentang kepercayaan

prose() merender anaknya sebagai HTML — itulah seluruh intinya, dan begitulah javascript-to-html bekerja dari ujung ke ujung. Jika HTML-nya datang dari tempat yang tidak Anda kendalikan, bersihkan sebelum ia sampai ke sini. Perender Markdown dengan HTML mentah dimatikan biasanya sudah cukup.

Props

PropTipeBawaanDeskripsi
size'sm' | 'md' | 'lg''md'Ukuran fon dasar; selebihnya berskala dalam em darinya.
asstring'div'Elemen yang dirender, misalnya article.