Шоудаун — это конвертер Markdown в HTML на JavaScript, основанный на оригинальных работах Джона Грубера.
Шоудаун можно использовать на стороне клиента (в браузере) или на стороне сервера (с NodeJs).
Онлайн-демонстрацию можно посмотреть здесь: http://demo.showdownjs.com/.
Как вы знаете, ShowdownJS — бесплатная библиотека, и она останется бесплатной навсегда. Однако поддержка и улучшение библиотеки требуют времени и денег. Если вам нравится наша работа и вы считаете нашу библиотеку полезной, пожалуйста, сделайте пожертвование через Patreon или напрямую через PayPal! Ваш вклад будет очень ценен и поможет мне продолжать развивать эту замечательную библиотеку.
ShowdownJS версии 2.0 выпущен под лицензией MIT. Предыдущие версии выпущены под BSD.
Вы можете скачать последний выпуск архива прямо из раздела релизов.
bower install showdown
npm install showdown
PM> Install-Package showdownjs
NuGet-пакеты можно найти здесь.
Также можно воспользоваться одним из нескольких доступных CDN:
jsDelivr:
https://cdn.jsdelivr.net/npm/showdown@<version tag>/dist/showdown.min.js
cdnjs:
https://cdnjs.cloudflare.com/ajax/libs/showdown/<version tag>/showdown.min.js
unpkg:
https://unpkg.com/showdown/dist/showdown.min.js
Примечание: замените <version tag>
на актуальную полную версию, которая вас интересует, например 1.9.0.
Шоудаун успешно протестирован с:
Теоретически Showdown будет работать в любом браузере, который поддерживает ECMA 262 3rd Edition (JavaScript 1.5). Сам конвертер может работать даже в тех приложениях, которые не являются веб-браузерами, таких как Acrobat. Никаких гарантий.
Шоудаун протестирован с node 0.8 и 0.10. Однако он должен работать и с предыдущими версиями, такими как node 0.6.
Если вы ищете шоудаун v<1.0.0, вы можете найти его в устаревшей ветке.
Полный журнал изменений.
Примеры и более подробную документацию можно найти на вики-страницах.
var showdown = require('showdown'),
converter = new showdown.Converter(),
text = '# hello, markdown!',
html =
``` ### Браузер
```js
var converter = new showdown.Converter(),
text = '# hello, markdown!',
html = converter.makeHtml(text);
Оба примера должны выводить...
<h1 id="hellomarkdown">hello, markdown!</h1>
## Опции
Вы можете изменить поведение showdown по умолчанию с помощью опций.
### Настройка опций
Опции можно установить:
#### Глобально
Установка «глобальной» опции влияет на все экземпляры showdown:
```js
showdown.setOption('optionKey', 'value');
Локальная опция влияет только на указанный объект Converter. Локальные опции можно задать:
var converter = new showdown.Converter({optionKey: 'value'});
var converter = new showdown.Converter();
converter.setOption('optionKey', 'value');
Showdown предоставляет два метода (локальный и глобальный) для получения ранее установленных опций.
// Глобально
var myOption = showdown.getOption('optionKey');
// Локально
var myOption = converter.getOption('optionKey');
// Глобально
var showdownGlobalOptions = showdown.getOptions();
// Локально
var thisConverterSpecificOptions = converter.getOptions();
Вы можете получить параметры showdown по умолчанию:
var defaultOptions = showdown.getDefaultOptions();
Это:
<code><pre>var foo = 'bar';
</pre></code>
Становится этим:
<code><pre>var foo = 'bar'</pre></code>
noHeaderId: (boolean) [по умолчанию false] Отключить автоматическое создание идентификаторов заголовков. При установке значения true переопределяет prefixHeaderId.
customizedHeaderId: (boolean) [по умолчанию false] Использовать текст в фигурных скобках в качестве идентификатора заголовка. (начиная с версии 1.7.0) Пример:
## Sample header {real-id} будет использовать real-id в качестве id
ghCompatibleHeaderId: (boolean) [по умолчанию false] Генерировать идентификаторы заголовков, совместимые со стилем github (пробелы заменяются дефисами, а ряд неалфавитно-цифровых символов удаляется) (начиная с версии 1.5.5)
prefixHeaderId: (string/boolean) [по умолчанию false] Добавить префикс к сгенерированным идентификаторам заголовков. Передача строки добавит эту строку в начало идентификатора. Установка значения true добавит общий префикс «section».
rawPrefixHeaderId: (boolean) [по умолчанию false] Установка этого параметра в значение true предотвратит изменение showdown префикса. Это может привести к некорректным идентификаторам (например, если в префиксе используется символ «»). Не действует, если prefixHeaderId установлен в значение false. (начиная с версии 1.7.3)
rawHeaderId: (boolean) [по умолчанию false] Удалить из сгенерированных идентификаторов заголовков только пробелы, ' и ", заменив их дефисами (-). ВНИМАНИЕ: это может привести к некорректным идентификаторам (начиная с версии 1.7.3)
headerLevelStart: (integer) [по умолчанию 1] Установить начальный уровень заголовка. Например, установка этого значения в 3 означает, что
# foo
будет проанализировано как
<h3>foo</h3>
parseImgDimensions: (boolean) [по умолчанию false] Включить поддержку установки размеров изображений из синтаксиса markdown. Примеры:
 простой, предполагает, что единицы измерения указаны в px
 устанавливает высоту в «auto»
 изображение с шириной 80 % и высотой 5em
simplifiedAutoLink: (boolean) [по умолчанию false] Включение этой опции активирует автоматическую привязку к URL-адресам. Это означает, что:
some text www.google.com
будет проанализировано как
<p>some text <a href="www.google.com">www.google.com</a>
``` **Использование тегов `<body>` вместо фрагмента HTML (начиная с версии 1.8.5)**
metadata: (boolean) [по умолчанию false] Включить поддержку метаданных документа (определённых в верхней части документа между «««
и »»»
или между ---
и ---
). (начиная с версии 1.8.5)
var conv = new showdown.Converter({metadata: true});
var html = conv.makeHtml(someMd);
var metadata = conv.getMetadata(); // возвращает объект с метаданными документа
Примечание: обратите внимание, что до версии 1.6.0 все эти параметры по умолчанию отключены в инструменте cli.
Вы также можете использовать варианты или пресеты, чтобы автоматически установить правильные параметры, чтобы showdown вёл себя как популярные варианты markdown.
В настоящее время доступны следующие варианты:
showdown.setFlavor('github');
converter.setFlavor('github');
Showdown также поставляется вместе с инструментом командной строки. Вы можете проверить вики-страницу CLI для получения дополнительной информации.
Проект ShowdownJS также обеспечивает беспроблемную интеграцию с AngularJS через «плагин». Пожалуйста, посетите https://github.com/showdownjs/ngShowdown для получения дополнительной информации.
Если вы используете TypeScript, возможно, вы захотите использовать типы из DefinitelyTyped.
Интеграцию с SystemJS можно получить через сторонний плагин «system-md» (https://github.com/guybedford/system-md).
Чтобы быстро использовать ShowdownJS в качестве компонента Vue, вы можете проверить vue-showdown (https://vue-showdown.js.org/).
Showdown не очищает входные данные. Это сделано специально, поскольку markdown полагается на это, чтобы определённые функции правильно анализировались в HTML. Это, однако, означает, что внедрение XSS вполне возможно.
Пожалуйста, обратитесь к вики-статье «Уязвимость XSS в markdown (и как её устранить)» для получения дополнительной информации.
Showdown позволяет загружать дополнительную функциональность через расширения. (вы можете найти список известных расширений showdown здесь). Также вы можете найти шаблон для создания собственных расширений в этом репозитории.
<script src="showdown.js" />
<script src="twitter-extension.js" />
var converter = new showdown.Converter({ extensions: ['twitter'] });
var showdown = require('showdown'),
myExtension = require('myExtension'),
converter = new showdown.Converter({ extensions: ['myExtension'] });
Доступен набор тестов, требующих node.js. После установки узла запустите следующую команду из корня проекта, чтобы установить зависимости:
npm install
После установки тесты можно запустить из корня проекта с помощью:
npm test
Новые тестовые случаи можно легко добавить. Создайте файл markdown (заканчивающийся на .md
), который содержит markdown для тестирования. Создайте файл .html
с тем же именем. Он будет автоматически протестирован при выполнении тестов с mocha.
Если хотите внести свой вклад, пожалуйста, прочтите следующее краткое руководство.
Вы можете запросить новую функцию, отправив проблему. Если вы хотите реализовать новую функцию, не стесняйтесь отправить запрос на вытягивание.
PR — это здорово. Однако перед отправкой запроса на вытягивание рассмотрите следующие рекомендации:
Выполните поиск на GitHub открытого или закрытого запроса на вытягивание, связанного с вашей отправкой. Вы не хотите дублировать усилия.
При отправке PR, которые изменяют код, внесите изменения в новую ветку git, основанную на master:
git checkout -b my-fix-branch master
``` Документацию (например, README.md) можно изменять напрямую в основной ветке.
Перед отправкой запустите полный набор тестов и убедитесь, что все тесты пройдены (очевидно =P).
Старайтесь следовать нашим правилам стиля кодирования. Их нарушение не позволит PR пройти тесты.
Воздержитесь от исправления нескольких проблем в одном запросе на вытягивание. Лучше открыть несколько небольших PR вместо одного большого, сложного для проверки.
Если PR вводит новую функцию или исправляет проблему, добавьте соответствующий тестовый случай.
Мы используем заметки о фиксации для создания журнала изменений. Будет очень полезно, если ваши сообщения о фиксации будут соответствовать руководству по фиксации AngularJS Git.
Если мы предложим изменения, то:
git rebase master -i
git push origin my-fix-branch -f
После того как ваш запрос на вытягивание будет объединён, вы можете безопасно удалить свою ветку.
Если у вас есть время внести свой вклад в этот проект, мы считаем своим долгом отдать вам должное. Эти правила позволяют нам быстрее просматривать ваш PR и дадут вам соответствующую оценку в вашем профиле GitHub. Заранее благодарим вас за ваш вклад!
Мы ищем членов команды, которые помогут поддерживать Showdown. Пожалуйста, обратитесь к этому вопросу, чтобы выразить интерес или прокомментировать эту заметку.
Полный список кредитов доступен по адресу https://github.com/showdownjs/showdown/blob/master/CREDITS.md
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )