1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Vditor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 23 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 04:55 e934c00

Vditor: простой в использовании редактор Markdown, созданный для адаптации к различным сценариям применения

Vditor — это браузерный редактор Markdown с открытым исходным кодом. Он поддерживает WYSIWYG (что видишь, то и получаешь), мгновенный рендеринг (похожий на Typora) и режим разделения экрана для предварительного просмотра. Vditor написан на TypeScript и поддерживает JavaScript, а также фреймворки Vue, React, Angular и Svelte.

Введение

Vditor — это редактор Markdown для браузера, который предлагает WYSIWYG-редактор, мгновенный рендеринг и разделение экрана для предварительного просмотра документа. Редактор написан на TypeScript, поддерживает JavaScript и такие фреймворки, как Vue, React, Angular и Svelte.

Приглашаем вас посетить официальный форум Vditor по адресу https://ld246.com/tag/vditor. Также рекомендуем подписаться на B3log Open Source Community в WeChat — общедоступный аккаунт B3log开源.

История создания

С ростом популярности Markdown всё больше приложений интегрируют редакторы Markdown. В настоящее время существует три основных типа редакторов Markdown:

  • Некоторые поддерживают только разделение экрана, при котором редактор и предварительный просмотр разделены.
  • Другие поддерживают WYSIWYG и разделение экрана, но не могут полностью поддерживать синтаксис Markdown в режиме WYSIWYG.
  • Почти нет редакторов, похожих на Typora, которые обеспечивают мгновенный рендеринг.

Эти три типа соответствуют трём сценариям использования:

  • Разделение экрана подходит для традиционного использования Markdown и хорошо работает на больших экранах.
  • WYSIWYG удобен для пользователей, незнакомых с Markdown, и позволяет опытным пользователям использовать его без проблем.
  • Мгновенный рендеринг является наиболее элегантным способом редактирования Markdown и позволяет опытным пользователям сосредоточиться на создании контента.

Поэтому редактор, способный адаптироваться к различным сценариям использования, крайне важен. Такой редактор должен учитывать следующие аспекты:

  • Традиционное использование Markdown и предоставлять разделение экрана.
  • Использование редактора для форматированного текста и предлагать WYSIWYG.
  • Высокоуровневое использование Markdown и обеспечивать мгновенный рендеринг.

Vditor стремится удовлетворить эти потребности и внести свой вклад в современную область универсальных редакторов Markdown.

Особенности

  • Поддержка трёх режимов редактирования: WYSIWYG, мгновенный рендеринг, разделение экрана.
  • Поддержка оглавления, математических формул, диаграмм, графиков, блок-схем, диаграмм Ганта, временных шкал, спектрограмм, мультимедиа, голосового чтения, заголовков, якорей, подсветки кода, копирования, рендеринга graphviz, UML-диаграмм PlantUML.
  • Экспорт изображений с ленивой загрузкой, списков задач, многоплатформенного предварительного просмотра, переключения тем, копирования в общедоступные аккаунты WeChat/Zhihu.
  • Реализация стандартов CommonMark и GFM, возможность форматирования Markdown и просмотра дерева синтаксиса, поддержка более 10 конфигураций.
  • Панель инструментов содержит более 36 операций, помимо расширения, можно настроить сочетания клавиш, подсказки, положение подсказок, значки, события кликов, имена классов и подпанели инструментов.
  • Автоматическое завершение эмодзи/at/тем и т. д.
  • Возможность перетаскивания, буфера обмена, вставки и отображения прогресса загрузки в реальном времени, поддержка CORS для междоменной загрузки.
  • Сохранение содержимого в реальном времени для предотвращения случайного удаления.
  • Запись звука для прямой публикации аудио.
  • Преобразование HTML в Markdown при вставке, включая загрузку внешних изображений через указанный интерфейс.
  • Поддержка изменения размера главного окна путём перетаскивания и подсчёта символов.
  • Несколько тем, встроенные тёмная, светлая и зелёная темы.
  • Многоязычная поддержка, встроенные китайский, английский и корейский языки.
  • Совместимость с основными браузерами и дружественный интерфейс для мобильных устройств.

Режимы редактирования

WYSIWYG

Режим WYSIWYG подходит для пользователей, не знакомых с Markdown, или для опытных пользователей, которым удобно работать в этом режиме.

Мгновенный рендеринг

Режим мгновенного рендеринга похож на Typora и обеспечивает наиболее элегантный способ редактирования Markdown. | enable | 是否启用评论模式 | false | | --- | --- | --- | | add(id: string, text: string, commentsData: ICommentsData[]) | 添加评论回调 | - | | remove(ids: string[]) | 删除评论回调 | - | | scroll(top: number) | 滚动回调 | - | | adjustTop(commentsData: ICommentsData[])| 文档修改时,适配评论高度 | - |

options.preview

说明 默认值
delay 预览 debounce 毫秒间隔 1000
maxWidth 预览区域最大宽度 800
mode 显示模式:both, editor 'both'
url md 解析请求 -
parse(element: HTMLElement) 预览回调 -
transform(html: string): string 渲染之前回调 -

options.preview.hljs

说明 默认值
defaultLang 未指定语言时默认使用该语言 ''
enable 是否启用代码高亮 true
style 可选值参见Chroma github
lineNumber 是否启用行号 false
langs 自定义指定语言 CODE_LANGUAGES
renderMenu(code: HTMLElement, copy: HTMLElement) 渲染菜单按钮 -

options.preview.markdown

说明 默认值
autoSpace 自动空格 false
gfmAutoLink 自动链接 true
fixTermTypo 自动矫正术语 false
toc 插入目录 false
footnotes 脚注 true
codeBlockPreview wysiwyg 和 ir 模式下是否对代码块进行渲染 true
mathBlockPreview wysiwyg 和 ir 模式下是否对数学公式进行渲染 true
paragraphBeginningSpace 段落开头空两个 false
sanitize 是否启用过滤 XSS true
listStyle 为列表添加 data-style 属性 false
linkBase 链接相对路径前缀 ''
linkPrefix 链接强制前缀 ''
mark 启用 mark 标记 false

options.preview.theme

说明 默认值
current 当前主题 "light"
list 可选主题列表 { "ant-design": "Ant Design", dark: "Dark", light: "Light", wechat: "WeChat" }
path 主题样式地址 https://unpkg.com/vditor@${VDITOR_VERSION}/dist/css/content-theme

options.preview.math

说明 默认值
inlineDigit 内联数学公式起始 $ 后是否允许数字 false
macros 使用 MathJax 渲染时传入的宏定义 {}
engine 数学公式渲染引擎:KaTeX, MathJax 'KaTeX'
mathJaxOptions 数学公式渲染引擎为 MathJax 时的参数 -

options.preview.actions?: Array<IPreviewAction | IPreviewActionCustom>

默认值为 ["desktop", "tablet", "mobile", "mp-wechat", "zhihu"]。 可从默认值中挑选进行配置,也可使用以下字段进行自定制开发。

说明 默认值
key 按钮唯一标识,不能为空 -
text 按钮文字 -
tooltip 提示 -
className 按钮类名 -
click(key: string) 按钮点击回调事件 -

options.preview.render.media

说明 默认值
enable 是否启用多媒体渲染 true

options.image

说明 默认值
isPreview 是否预览图片 true
preview(bom: Element) => void 图片预览处理 -

options.link

说明 默认值
isOpen 是否打开链接地址 true
click(bom: Element) => void 点击链接事件 -

options.hint

说明 默认值
parse 是否进行 md 解析 true
delay 提示 debounce 毫秒间隔 200
emoji 默认表情,可从lute/emoji_map 中选取,也可自定义 { '+1': '👍', '-1': '👎', 'heart': '❤️', 'cold_sweat': '😰' }
emojiTail 常用表情提示 -
emojiPath 表情图片地址 https://unpkg.com/vditor@${VDITOR_VERSION}/dist/images/emoji
extend: IHintExtend[] 对 @/话题等关键字自动补全的扩展 []
interface IHintData {
  html: string;
  value: string;
}

interface IHintExtend {
    key: string;

    hint?(value: string): IHintData[] | Promise<IHintData[]>;
}

options.upload

  • 文件上传的数据结构如下。后端返回的数据结构不一致时,可使用 format 进行转换。
// POST data
xhr.send(formData);  // formData = FormData.append("file[]", File)
// return data
{
 "msg": "",
 "code": 0,
 "data": {
 "errFiles": ['filename', 'filename2'],
 "succMap": {
   "filename3": "filepath3",
   "filename3": "filepath3"
   }
 }
}
  • 为了防止站外图片失效, linkToImgUrl 可将剪贴板中的站外图片地址传到服务器端进行保存处理,其数据结构如下:
// POST data
xhr.send(JSON.stringify({url: src})); // src 为站外图片地址
// return data
{
 msg: '',
 code: 0,
 data : {
   originalURL: '',
   url: ''
 }
}
  • successformaterror 不会同时触发,具体调用情况如下:
if (xhr.status === 200) {
    if (vditor.options.upload.success) {
        vditor.options.upload.success(editorElement, **Объект options**

* string  путь к изображению эмодзи;
* hljs?: IHljs  см. options.preview.hljs;
* speech?: {enable?: boolean}  параметры чтения выбранного содержимого;
* math?: IMath  конфигурация рендеринга математических формул;
* cdn?: string  адрес собственного CDN;
* transform?(html: string): string  метод обратного вызова перед рендерингом;
* after?()  метод обратного вызова после рендеринга;
* lazyLoadImage?: string  если установлено значение адреса изображения Loading, то включается отложенная загрузка изображений;
* markdown?: options.preview.markdown  параметры Markdown;
* theme?: options.preview.theme  тема;
* render?: options.preview.render  рендеринг;
* renderers?: ILuteRender  пользовательский рендеринг (https://ld246.com/article/1588412297062).

⚠️ Нельзя одновременно импортировать method.min.js и index.min.js.

| | Описание |
| --- | --- |
| previewImage(oldImgElement: HTMLImageElement, lang: keyof II18n = «zh_CN», theme = «classic») | Просмотр изображения по клику |
| mermaidRender(element: HTMLElement, cdn = options.cdn, theme = options.theme) | Рендеринг диаграмм последовательности, блок-схем и диаграмм Ганта |
| flowchartRender(element: HTMLElement, cdn = options.cdn) | Рендеринг flowchart |
| codeRender(element: HTMLElement, option?: IHljs) | Добавление кнопки копирования к блоку кода в element |
| chartRender(element: (HTMLElement \| Document) = document, cdn = options.cdn, theme = options.theme) | Рендеринг графиков |
| mindmapRender(element: (HTMLElement \| Document) = document, cdn = options.cdn, theme = options.theme) | Рендеринг ментальных карт |
| plantumlRender(element: (HTMLElement \| Document) = document, cdn = options.cdn) | Рендеринг plantuml |
| abcRender(element: (HTMLElement \| Document) = document, cdn = options.cdn) | Рендеринг нотных партитур |
| md2html(mdText: string, options?: IPreviewOptions): Promise<string> | Преобразование текста Markdown в HTML. Требуется использовать асинхронное программирование (https://ld246.com/article/1546828434083?r=Vanessa#toc_h3_1) |
| preview(previewElement: HTMLDivElement, markdown: string, options?: IPreviewOptions) | Рендеринг страницы с Markdown-статьёй |
| highlightRender(hljsOption?: IHljs, element?: HTMLElement \| Document, cdn = options.cdn) | Выделение блоков кода в element с помощью подсветки |
| mediaRender(element: HTMLElement) | Рендеринг определённых ссылок как видео, аудио или встроенного iframe |
| mathRender(element: HTMLElement, options?: {cdn?: string, math?: IMath}) | Рендеринг математических формул |
| speechRender(element: HTMLElement, lang?: (keyof II18nLang)) | Чтение выделенного текста |
| graphvizRender(element: HTMLElement, cdn?: string) | Рендеринг graphviz |
| outlineRender(contentElement: HTMLElement, targetElement: Element) | Рендеринг оглавления |
| lazyLoadImageRender(element: (HTMLElement \| Document) = document) | Рендеринг изображений с отложенной загрузкой |
| setCodeTheme(codeTheme: string, cdn = options.cdn) | Установка темы кода. codeTheme см. в options.preview.hljs.style |
| setContentTheme(contentTheme: string, path: string) | Установка темы контента. contentTheme см. в options.preview.theme.list |

## 🏗 Разработка документации
### Принцип работы
* Обсуждение [Markdown-редактора «что видишь, то и получаешь»](https://ld246.com/article/1579414663700)
* Реализация Vditor для Markdown «что видишь, то и получаешь» (https://ld246.com/article/1577370404903)
* Lute  оптимизированный для китайского языка движок Markdown, поддерживающий Go и JavaScript (https://ld246.com/article/1567047822949)

### Среда
1. Установите LTS-версию [node](https://nodejs.org/).
2. Скачайте (https://github.com/Vanessa219/vditor/archive/master.zip) последнюю версию кода и распакуйте её.
3. В корневом каталоге выполните команду npm install.
4. Выполните команду npm run start для запуска локального сервера и откройте http://localhost:9000.
5. Внесите изменения в код.
6. Выполните команду npm run build для упаковки кода в каталог dist.

### Переключение на CDN
Поскольку используется механизм отложенной загрузки, по умолчанию CDN  это [https://unpkg.com/vditor](https://unpkg.com/vditor)@версия.
Если необходимо внести изменения в код или использовать собственный CDN, выполните следующие действия:
* При инициализации настройте параметры `options` и `IPreviewOptions`, включая `cdn`, `emojiPath` и `themes`.
* В методах `highlightRender`, `mathRender`, `abcRender`, `chartRender`, `mermaidRender`, `flowchartRender`, `mindmapRender`, `graphvizRender`, `setCodeTheme` и `setContentTheme` добавьте параметр cdn.
* Скопируйте каталог dist после успешной сборки в нужное место или в каталог dist на [jsDelivr](https://www.jsdelivr.com/package/npm/vditor?path=dist).

### Обновление
При обновлении версии внимательно прочитайте раздел «Обновление» в [CHANGELOG](https://github.com/Vanessa219/vditor/blob/master/CHANGELOG.md).

## Ⓜ️ Руководство по использованию Markdown
* Основы синтаксиса (https://ld246.com/article/1583129520165)
* Расширенный синтаксис (https://ld246.com/article/1583305480675)
* Справочник по быстрому доступу (https://ld246.com/article/1583308420519)

## 🏘️ Сообщество
* Официальный сайт (https://b3log.org/vditor).
* Дискуссионная площадка (https://ld246.com/tag/vditor).
* Сообщить о проблеме (https://github.com/Vanessa219/vditor/issues/new).

## 📄 Лицензия
Vditor использует открытый исходный код MIT.

## 🙏 Благодарность
* Lute (https://github.com/88250/lute) — музыкальный движок для структурированного Markdown, поддерживает Go и JavaScript. **📽️ История**

На ранних этапах разработки Sym мы использовали WYSIWYG-редакторы с форматированным текстом. В то время HTML-редакторы были очень популярны, и их было удобно использовать в проекте, а также они соответствовали привычкам пользователей того времени.

Позже появление Markdown постепенно изменило способ вёрстки у всех. Кроме того, поскольку другие наши проекты ориентированы на программистов, переход на использование md был логичным шагом. Мы выбрали CodeMirror  отличный редактор, который предоставляет разработчикам богатый программный интерфейс и хорошо совместим с различными браузерами.

Однако позже, по мере развития наших бизнес-требований, использование CodeMirror иногда казалось довольно «громоздким». Например, для реализации автоматического завершения списка имён пользователей, вставки эмодзи, загрузки файлов и т. д. требовалась глубокая вторичная разработка, хотя эти бизнес-потребности часто являются общими и необходимыми для многих сценариев проекта.

Наконец, мы решили начать создавать собственный редактор в Sym. После нескольких версий итераций редактор Sym становился всё более зрелым. На нашем сообществе «Цех» (https://ld246.com) люди начали спрашивать, можем ли мы выделить редактор и предоставить его всем для использования. В это же время наш фронтенд-разработчик V чувствовала, что ей тяжело поддерживать редакторы, разбросанные по разным проектам, и она была увлечена TypeScript, поэтому решила использовать ts для создания совершенно нового редактора md для браузера.

Так появился Vditor.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-Vditor.git
git@api.gitlife.ru:oschina-mirror/mirrors-Vditor.git
oschina-mirror
mirrors-Vditor
mirrors-Vditor
master