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

OSCHINA-MIRROR/vanessali-vditor

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Разделение экрана для предварительного просмотра (SV)

Традиционный режим разделения экрана подходит для редактирования Markdown на большом экране.

🍱 Поддержка синтаксиса

  • Все синтаксические правила CommonMark: разделительные линии, заголовки ATX и Setext, отступы для блоков кода, блоки кода с отступами, блоки HTML, ссылки, определения ссылок, абзацы, блочные цитаты, списки, экранирование обратной косой черты, HTML-сущности, код уровня строки, выделение, полужирный шрифт, ссылки, изображения, уровень строки HTML, жёсткий перенос строк и мягкий перенос строк, а также чистый текст.
  • Вся грамматика форматирования текста (GFM): таблицы, элементы списка задач, зачёркивание, автоматическая ссылка, XSS-фильтрация.
  • Часто используемые расширения синтаксиса Markdown: сноски, оглавление, настраиваемые идентификаторы заголовков, графика.
    • Диаграммы процессов, временные диаграммы, диаграммы Ганта с поддержкой Mermaid.
    • Graphviz.
    • Столбчатые диаграммы, круговые диаграммы, блок-схемы и т. д. с поддержкой ECharts.
  • Ноты: поддержка abc.js.
  • Математические формулы: математические блоки формул, формулы уровня строк с поддержкой MathJax и KaTeX.
  • YAML Front Matter.
  • Оптимизация китайского контекста:
    • Вставить пробелы между китайскими и западными символами.
    • Исправить написание терминов.
    • Заменить китайские знаки препинания на соответствующие английские знаки препинания после китайских символов.

Большинство этих функций можно включить или отключить с помощью переключателей, разработчики могут выбирать функции в соответствии со своими потребностями.

🗃 Примеры использования

  • Sym — платформа сообщества (форум/BBS/социальная сеть/блог), реализованная на Java.
  • Solo и Pipe — узлы блога распределённой платформы сообщества B3log.
  • Arya — онлайн-редактор Markdown, созданный на основе Vue и Vditor.
  • Больше примеров.

🛠️ Использование документации

CommonJS

  • Установить зависимости.
npm install vditor --save
  • Импортировать объект в коде и инициализировать его, см. index.js.
import Vditor from 'vditor'
import "~vditor/src/assets/less/index"

const vditor = new Vditor(id, {options...})

HTML script

  • Вставьте CSS и JavaScript в HTML, см. демо.
<!-- ⚠️В производственной среде укажите номер версии, например https://cdn.jsdelivr.net/npm/vditor@x.x.x/dist... -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vditor/dist/index.css" />
<script src="https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js"></script>

Пример кода

Темы

Редактор тем

Внешний вид редактора. Встроенные темы classic и dark.

  • Редактор можно настроить на использование встроенных тем при инициализации с помощью options.theme.
  • После завершения инициализации внешний вид редактора можно обновить, используя setTheme.
  • Можно настроить цвета тем, изменив переменные в index.less.
  • Можно использовать существующую структуру и имена классов для настройки.

Темы контента

Внешний вид вывода Markdown. Встроенные темы ant-design, light, dark и wechat. Поддерживает интерфейс расширения тем контента.

  • Необходимо добавить class="vditor-reset" к отображаемым элементам.
  • При инициализации редактора можно установить встроенные или пользовательские темы с помощью options.preview.theme.
  • Во время рендеринга контента можно установить встроенные или пользовательские темы, используя IPreviewOptions.theme.
  • Внешний вид контента можно обновить после завершения инициализации, используя setContentTheme или setTheme.

Темы кода

Внешний вид блоков кода. Встроенные 36 тем кода, таких как github.

  • При инициализации редактора с помощью options.preview.hljs можно настроить стиль блоков кода, номера строк и их включение.
  • Во время рендеринга контента с помощью IPreviewOptions.hljs можно настроить стиль блоков кода, номера строк и их включение.
  • После инициализации можно обновить внешний вид кода, используя setCodeTheme или setTheme. false
headers Запрос-заголовок -
filename(name: string): string Безопасная обработка имени файла name => name.replace(/\W/g, '')
accept Тип файла для загрузки, аналогично input accept -
validate(files: File[]) => string | boolean Проверка, при успешном выполнении возвращает true, в противном случае — сообщение об ошибке -
handler(files: File[]) => string | null | Promise | Promise Пользовательская загрузка, возвращает сообщение об ошибке при возникновении ошибки -
format(files: File[], responseText: string): string Преобразование данных ответа сервера для соответствия встроенной структуре данных -
file(files: File[]): File[] | Promise<File[]> Обработка загруженных файлов и их последующий возврат -
setHeaders(): { [key: string]: string } Установка заголовков перед загрузкой с использованием возвращаемого значения -
extraData: { [key: string]: string | Blob } Добавление дополнительных параметров к FormData -
multiple Множественность файлов для загрузки true
fieldName Имя поля для загрузки 'file[]'

options.resize

Описание Значение по умолчанию
enable Поддержка изменения размера перетаскиванием false
position Позиция панели перетаскивания: «top», «bottom» «bottom»
after(height: number) Обратный вызов после завершения перетаскивания -

options.classes

Описание Значение по умолчанию
preview className для элемента предварительного просмотра ''

options.fullscreen

Описание Значение по умолчанию
index Уровень полноэкранного слоя 90

options.outline

Описание Значение по умолчанию
enable Отображение структуры по умолчанию при инициализации false
position Расположение структуры: «left», «right» «left»

methods

Описание
exportJSON(markdown: string) Получение JSON на основе Markdown
getValue() Получение содержимого Markdown
getHTML() Получение HTML-содержимого
insertValue(value: string, render = true) Вставка содержимого в фокус и рендеринг Markdown по умолчанию
focus() Фокусировка на редакторе
blur() Потеря фокуса редактора
disabled() Отключение редактора
enable() Включение редактора после отключения
getSelection(): string Возвращает выделенный текст
setValue(markdown: string, clearStack = false) Установка содержимого редактора и очистка истории отмены при необходимости
clearStack() Очистка стека отмены и повтора
renderPreview(value?: string) Установка содержимого области предварительного просмотра
getCursorPosition():{top: number, left: number} Получение позиции курсора
deleteValue() Удаление выделенного текста
updateValue(value: string) Обновление выделенного текста
isUploading() Определение, продолжается ли загрузка
clearCache() Очистка кеша
disabledCache() Отключение кеширования
enableCache() Включение кеширования
html2md(value: string) Преобразование HTML в Markdown
tip(text: string, time: number) Сообщение с подсказкой. Если time равно 0, то сообщение будет отображаться постоянно
setPreviewMode(mode: "both" | "editor") Установка режима предварительного просмотра
setTheme(theme: "dark" | "classic", contentTheme?: string, codeTheme?: string, contentThemePath?: string) Настройка темы, темы контента и стиля кода
getCurrentMode(): string Получение текущего режима редактора
destroy() Уничтожение редактора
getCommentIds(): {id: string, top: number}[] Получение всех комментариев
hlCommentIds(ids: string[]) Подсветка комментариев
unHlCommentIds(ids: string[]) Отмена подсветки комментариев
removeCommentIds(removeIds: string[]) Удаление комментариев

static methods

  • Если редактирование не требуется, достаточно импортировать method.min.js и вызвать следующие методы напрямую:
Vditor.mermaidRender(document)
import VditorPreview from 'vditor/dist/method.min'
VditorPreview.mermaidRender(document)
  • Для рендеринга Markdown на странице можно вызвать метод preview, указав следующие параметры:
previewElement: HTMLDivElement,   // Элемент для рендеринга
markdown: string,  // Исходный текст Markdown
options?: IPreviewOptions {
  mode: "dark" | "light";
  anchor?: number;  // Добавить якорь к заголовку 0: не рендерить; 1: рендерить перед заголовком; 2: рендерить после заголовка, по умолчанию 0
  customEmoji?: { [key: string]: string };    // Настроить эмодзи, по умолчанию {}
  lang?: (keyof II18nLang);    // Язык, по умолчанию 'zh_CN'
  emojiPath?: string;    // Путь к изображениям эмодзи
  hljs?: IHljs; // См. options.preview.hljs
  speech?: {  // Чтение выбранного содержимого
    enable?: boolean,
  };
  math?: IMath; // Конфигурация рендеринга математических формул
  cdn?: string; // Адрес пользовательского CDN
  transform?(html: string): string; // Обратный вызов перед рендерингом
  after?(); // Обратный вызов после рендеринга
  lazyLoadImage?: string; // Установить как адрес изображения для загрузки, чтобы включить ленивую загрузку изображений
  markdown?: options.preview.markdown;
  theme?: options.preview.theme;
  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) Добавление кнопок копирования к кодовым блокам в element
chartRender(element: (HTMLElement | Document) = document, cdn = options.cdn, theme = options.theme) Разработка документации

Принцип работы

  • Обсуждение редактора Markdown «что видишь, то и получаешь».
  • Реализация Vditor для работы с Markdown.
  • Lute — это Markdown-движок, оптимизированный для китайского языка, который поддерживает Go и JavaScript.

Среда

  1. Установите последнюю версию LTS-версии Node.js.
  2. Скачайте последний код Vditor и распакуйте его.
  3. В корневом каталоге запустите команду npm install.
  4. Запустите локальный сервер командой npm run start. Откройте страницу http://localhost:9000.
  5. Внесите изменения в код.
  6. Соберите код в каталог dist командой npm run build.

Переход на CDN
По умолчанию используется CDN https://cdn.jsdelivr.net/npm/vditor@версия_номера. Если вы хотите использовать собственный CDN или изменить существующий, выполните следующие действия:

  • Настройте параметры options и IPreviewOptions для cdn, emojiPath и themes при инициализации.
  • Добавьте параметр cdn в методы highlightRender, mathRender, abcRender, chartRender, mermaidRender, flowchartRender, mindmapRender, graphvizRender, setCodeTheme и setContentTheme.
  • Скопируйте каталог dist после успешной сборки или из каталога dist на jsDelivr в нужное место.

Обновление
Перед обновлением версии внимательно прочитайте раздел «Обновление» в CHANGELOG.md.

Использование Markdown

  • Основные правила синтаксиса.
  • Расширенные возможности синтаксиса.
  • Быстрый справочник.

Сообщество

  • Официальный сайт.
  • Дискуссионный форум.
  • Сообщить о проблеме.

Лицензия
Vditor использует лицензию MIT.

Благодарности
Lute — это структурированный Markdown-движок для Go и JavaScript;
highlight.js — подсветка синтаксиса JavaScript;
mermaid — создание диаграмм и блок-схем по тексту аналогично Markdown;
incubator-echarts — мощная интерактивная библиотека диаграмм и визуализации для браузера;
abcjs — библиотека JavaScript для отображения стандартной нотной записи в браузере.

История
В начале разработки Sym мы использовали WYSIWYG-редакторы форматированного текста. В то время HTML-редакторы были очень популярны, и их было легко интегрировать в проекты. Они также соответствовали привычкам пользователей того времени.
Позже популярность Markdown постепенно изменила способ форматирования. Кроме того, поскольку другие наши проекты ориентированы на программистов, переход на md был естественным выбором. Мы выбрали CodeMirror, отличный редактор, который предоставляет разработчикам богатые программистские интерфейсы и хорошую совместимость с различными браузерами.
Со временем использование CodeMirror стало казаться немного «громоздким». Например, для реализации таких функций, как автоматическое завершение списка имён пользователей, вставка эмодзи и загрузка файлов, требуется более глубокая вторичная разработка. Однако эти функции являются общими и необходимыми для многих проектов.
Наконец, мы решили создать собственный редактор в Sym. После нескольких версий итераций редактор Sym стал более зрелым. Некоторые люди в нашем сообществе начали спрашивать, можем ли мы выделить редактор и предоставить его для общего использования. В то же время наш фронтенд-разработчик V предложил идею создания отдельного редактора. Однокурсник, которому было не очень интересно заниматься поддержкой редактора, распределённого по разным проектам, и который симпатизировал TypeScript, решил использовать ts для создания нового браузера на базе редактора Markdown.

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

Введение

Это редактор Markdown для браузера с поддержкой WYSIWYG (Rich Text), мгновенной отрисовки (как в Typora) и режима разделенного экрана. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/vanessali-vditor.git
git@api.gitlife.ru:oschina-mirror/vanessali-vditor.git
oschina-mirror
vanessali-vditor
vanessali-vditor
master