پیکربندی SSR ​

در سرور فقط nabi-note/ssr را import کنید، نه surfaceها یا UI مرورگر را. این ماژول JSON ذخیره‌شدهٔ NABI TREE را اعتبارسنجی می‌کند و آن را به HTML منتشرشده یا HTML ویرایشگرِ قابل hydrate تبدیل می‌کند.

تبدیل HTML منتشرشده ​

ts
import { makeRegistry, renderStoredHtml, wings } from 'nabi-note/ssr'

const registry = makeRegistry(wings().allBasic().build())
const html = renderStoredHtml(storedJson, registry)

if (html === null) throw new Error('The stored document could not be read.')

renderStoredHtml() ورودی JSON خود را اعتبارسنجی و یکدست می‌کند، سپس HTML منتشرشده را برمی‌گرداند. null یعنی registry کنونی نمی‌تواند آن ورودی را بخواند. CSS بسته و .nabi-content را در صفحهٔ منتشرشده بگنجانید.

html
<link rel="stylesheet" href="/assets/nabi.css">
<article class="nabi-content">...</article>

attachViewer() را از nabi-note/viewer در مرورگر فقط برای مرتب‌سازی تعاملی جدول یا برجسته‌سازی کد بیفزایید. محتوای منتشرشدهٔ ساده فقط به CSS نیاز دارد.

hydrate کردن نشانه‌گذاری ازپیش‌رندرشدهٔ ویرایشگر ​

برای نمایش ویرایشگر از نخستین paint، آن را در سرور با renderStoredEditorHtml() رندر کنید و hydrate: true را به surface مرورگر بدهید.

ts
// server
const initialEditorHtml = renderStoredEditorHtml(storedJson, registry)

// browser
const { nabi, registry } = createNabiWith(wings().allBasic(), { doc: storedJson })
const surface = mountSurface({ nabi, registry, root: content, hydrate: true })

سرور و مرورگر باید از همان سند، declarationهای wing با همان ترتیب و گزینه‌های مؤثر بر HTML استفاده کنند. خروجی سرور را بی‌تغییر به‌عنوان فرزند مستقیم ریشهٔ محتوا وارد کنید و contenteditable را از پیش روی آن ریشه نگذارید. اگر ساختار متفاوت باشد، surface HTML ویرایشگر تازه را رندر می‌کند.

نوارابزار را نیز از پیش رندر کنید ​

renderToolbarHtml() و renderViewToolsHtml() می‌توانند کنترل‌های نوارابزار را در سرور از پیش رندر کنند. mount کردن در مرورگر، هنگامی که registry، locale و ترتیب گروه‌ها یکسان باشند، این کنترل‌ها را متصل می‌کند. DOM دلخواه میزبان درون ریشهٔ نوارابزار پشتیبانی نمی‌شود.

در SSR از APIهای مرورگر مانند injectSheets() استفاده نکنید. به فایل ساخته‌شدهٔ nabi-note/nabi.css پیوند دهید یا آن را در بستهٔ CSS خود بگنجانید.