RayCraft Write се настройва на две места: сървърът (AddRte) и редакторът, който показвате (RteOptions).
AddRte
builder.Services.AddRte(o =>
{
o.MediaStore = new RteMediaStoreOptions { RootPath = "media", BaseUrl = "/rte-media" };
o.Filter = new ContentFilterOptions { /* списъци за разрешено и забранено */ };
o.FilterIncomingHtml = true;
}); | Настройка | Значение |
|---|---|
MediaStore | включва библиотеката от файлове: папка на диска (RootPath) и публичен адрес (BaseUrl). Без нея галерията и качването на документи са изключени, а малките картини (до 300 KB) се вграждат в HTML. |
Filter | ContentFilterOptions, използвани за всеки HTML, който идва от браузъра: разрешени и забранени елементи и атрибути, разрешени хостове за рамки |
FilterIncomingHtml | включено по подразбиране. Вързаната Value винаги се филтрира. Изключете го само ако сами филтрирате съдържанието. |
AddRte регистрира услугите по подразбиране с TryAdd, така че всичко, което сте регистрирали преди или след него, остава. Сменяте част чрез инжектиране на зависимости:
builder.Services.AddSingleton<IRteMediaStore, MyBlobMediaStore>(); | Интерфейс | По подразбиране | Сменете го, за да |
|---|---|---|
IRteMediaStore | FileSystemMediaStore (когато MediaStore е зададен) | пазите файловете в blob хранилище или база |
IRteTemplateProvider | девет вградени оформления | зареждате свои шаблони |
IRteRevisionStore | в паметта (губи се при рестарт) | пазите именувани ревизии |
IRteCommentStore | в паметта (губи се при рестарт) | пазите коментари и отговори |
IRteSpellChecker | списък с думи | ползвате истински речник или услуга |
IRteLinkPreviewProvider | само домейнът, нищо не се изтегля | вземате заглавия за картите на отметките |
IRtePeopleProvider | няма | давате хора за споменавания с @ |
IRteCollaboration | няма | свържете CRDT като Yjs |
IRteDocxExporter / IRteDocxImporter | BasicDocxExporter / BasicDocxImporter | получите по-богати Word файлове |
Хранилищата за ревизии и коментари по подразбиране са в паметта. За производство ги пазете в своята база.
Компонентът
<RichTextEditor @bind-Value="html" Options="options" DocumentId="article-42"
OnReady="Ready" OnEvent="Handle" Class="my-editor" /> | Параметър | Значение |
|---|---|
Value | HTML (двупосочна, филтрирана) |
Options | обект RteOptions |
DocumentId | име на документа: ревизиите и коментарите се пазят под него |
Class, Style, Id | за елемента, който съдържа редактора |
OnReady | редакторът е построен в браузъра |
OnEvent | събитие на редактора (command, modechange, paste, focus, blur ...) като име и JSON |
Настройките се четат, когато редакторът стартира. За да ги смените по-късно, дайте на компонента нов @key.
Методи на компонента: GetHtmlAsync, SetHtmlAsync, InsertHtmlAsync, FocusAsync, ExecuteAsync(command, argument), SetModeAsync, SetThemeAsync, SetFullscreenAsync, SetReadOnlyAsync, GetTextAsync, GetCleanHtmlAsync(xhtml, indent), GetMarkdownAsync, GetJsonAsync, GetEmailHtmlAsync, GetStaticHtmlAsync, CheckAccessibilityAsync, ExportDocxAsync, CheckLimitsAsync.
RteOptions
null оставя стойността по подразбиране.
| Настройка | Значение | |
|---|---|---|
Toolbar | бутоните по ред; `" | " е разделител. По подразбиране RteOptions.DefaultToolbar; всички имена са в RteOptions.AllButtons`. |
Plugins | вградените приставки за зареждане (null зарежда всичките 14) | |
EnterMode | P, Br или Div; Shift+Enter винаги е нов ред | |
Mode | начален режим: Design, Html или Preview | |
Theme | Light, Dark или Classic | |
Direction | Ltr или Rtl | |
ReadOnly | показване без редактиране | |
Height, MinHeight, Placeholder, StatusBar | размер и текст | |
ContentCss | стилове на вашия сайт за съдържанието и прегледа, за да показва редакторът това, което ще видят читателите | |
LocalDraft | Enabled, Key, IntervalSeconds: чернова, записана в браузъра, с въпрос дали да се възстанови | |
Paste | DefaultMode (Keep, Characters, Plain), WordCleanup | |
Upload | MaxFileSize, AllowedTypes, AllowedImageTypes | |
Limits | MaxHtmlLength, MaxTextLength (показват се в лентата за състояние; нищо не се блокира) | |
UrlMode, BaseUrl | запазване, относителни или абсолютни адреси в чистия изход | |
Markdown | Inline (кратки команди докато пишете), Emoji (:кодове:) | |
Embed | AutoEmbed, AllowedHosts (по подразбиране www.youtube-nocookie.com и player.vimeo.com) | |
Spellcheck | Native (браузърът), Server, Language | |
MergeFields | [{ Name, Label }] за сливане на писма | |
Blocks | Callouts, Columns, Toggles, Equations, Diagrams, Bookmarks, Chips, DragHandles | |
FocusMode, TypewriterMode | режими на писане | |
A11y.Live | проверка на достъпността на живо | |
User | име на автора за коментарите и ревизиите | |
UiLanguage | език на интерфейса (Езици) | |
Texts, Labels | замяна на текстове на интерфейса |
Пример
<RichTextEditor @bind-Value="html" DocumentId="@id" Options="options" />
@code {
readonly RteOptions options = new()
{
Placeholder = "Напишете статията тук...",
MinHeight = "320px",
UiLanguage = "bg-BG",
ContentCss = ["/css/site.css"],
LocalDraft = { Enabled = true, Key = "article-42" },
Upload = { MaxFileSize = 5 * 1024 * 1024 },
Limits = { MaxTextLength = 20000 },
User = { Name = "Ада Лавлейс" },
Toolbar = ["undo", "redo", "|", "bold", "italic", "link", "image", "table", "|", "mode", "fullscreen"]
};
} Видовете на свойствата тук следват имената в RteOptions.cs; за точния вид ползвайте подсказките на вашия редактор на код.
Защита на качването
Библиотеката от файлове сервира файлове от MediaStore.RootPath. В производство защитете крайната точка за качване и папката със собствено оторизиране и сложете граници на размера и видовете файлове (Upload). Вграденият FileSystemMediaStore проверява разширенията на файловете и, за картини, първите байтове; пътища от браузъра никога не се приемат на доверие.
Готови ли сте да пробвате RayCraft Write?
Започнете 14-дневния пробен период, без карта.
Започнете 14-дневен пробен период