- Modular all elements - modules
- Extensible easy create new elements, may use only needed, builtin elements may use extensions
- Fast just compare with the one you are using, maybe there is something faster with similar features
- And compact minified version about 10Kb, dev version ~ 30Kb.
In the projects where I took part, there was a need to generate HTML based on markdown, but different system modules required a different set of elements: for publishing articles, a full set and add-ons for inserting widgets, for chats, a minimum set of text formatting.
In each case, the most suitable markdown translator was selected, which led to the complexity of system development and support.
This implementation allows you to use exactly the set of elements that are needed in a particular case and unify work with markdown.
Additionally, the implementation allows you to immediately build a DOM based on data, for example from a database, and then generate HTML with the same structure as based on markdown text.
In the first stage, the parser extracts block type elements, then extracts inline type elements in those elements where it is needed.
The second step is rendering the DOM into HTML.
Between the first and second step you can transform the DOM or save/restore if necessary.
- Include the script
https://etcdema.github.io/DmMD/dist/dm.md@1.min.js
in html in one of the following ways:- Using the
<script>
tag - creates a globalDmMD
object - With AMD bootloader
- As a module
- Using the
- Create parser with necessary elements handlers:
const parse = new DmMD.parser(DmMD.elements.$ALL);
DmMD.elements.$ALL
contains base elements fromDmMD.elements
read only collection, you can create own array, contains what you needed fromDmMD.elements
and/or add custom handlers. - Build DOM:
The function
const doc = parse(markdownText);
parse
can be executed as many times as required, repeated creation is required only when the collection of necessary elements changes. - Render to HTML:
If you need use extensions for base or custom elements renders just create collection and pass it into the render function:
const html = DmMD.HTML.render(doc);
const html = DmMD.HTML.render(doc, { // Local links will open in this tab linkTarget: (url) => (url.url[0]!=='/' && '_blank') });
- Модульный все элементы - модули
- Расширяемый легко создавать новые элементы, можно использовать только необходимые, встроенные элементы могут использовать расширения
- Быстрый просто сравните с тем, которым пользуетесь, может есть что-то быстрее с похожими возможностями
- И компактный минифицированная версия около 10Кб, версия для разработчиков ~ 30Кб.
В проектах, где я принимал участие, была необходимость генерации HTML на основе markdown но в разных модулях систем требовался разный набор элементов: для публикации статей полный набор и дополнения для вставки виджетов, для чатов минимальный набор форматирования текста.
В каждом случае выбирался наиболее подходящий markdown транслятор, что приводило к усложению разработки и поддержки систем.
Эта реализация позволяет использовать ровно тот набор элементов, который необходим в конкретном случае и унифицировать работу с markdown.
Дополнительно реализация позволяет сразу строить DOM по данным, например из базы, и потом генерить HTML тое же структуры, что и на основе markdown текста.
На первом этапе парсер извлекает элементы блочного типа, затем извлекает элементы строчного типа в тех элементах, где это необходимо.
Второй шаг — рендеринг DOM в HTML.
Между первым и вторым шагом вы можете преобразовать DOM или сохранить/восстановить, если это необходимо.
- Включите скрипт
https://etcdema.github.io/DmMD/dist/dm.md@1.min.js
в html одним из следующих способов:- Использование тега
<script>
— создает глобальный объектDmMD
- В качестве модуля
- Используя AMD загрузчик
- Использование тега
- Создать парсер с необходимыми обработчиками элементов:
const parse = new DmMD.parser(DmMD.elements.$ALL);
DmMD.elements.$ALL
содержит базовые элементы из коллекцииDmMD.elements
, доступной только для чтения. Вы можете создать собственный массив, содержать все необходимое изDmMD.elements
и/или добавить собственные обработчики. - Построить DOM:
Функцию
const doc = parse(markdownText);
parse
можно выполнять сколько угодно раз, повторное создание требуется только при изменении коллекции необходимых элементов. - Генерация HTML:
Если вам нужно использовать расширения для рендеринга базовых или пользовательских элементов, просто создайте коллекцию и передайте ее в функцию рендеринга:
const html = DmMD.HTML.render(doc);
const html = DmMD.HTML.render(doc, { // Local links will open in this tab linkTarget: (url) => (url.url[0]!=='/' && '_blank') });