![Showdown][sd-logo]
Showdown — это JavaScript-конвертер Markdown в HTML, основанный на работах Джона Грубера. Showdown можно использовать как на клиентской стороне (в браузере), так и на серверной стороне (с использованием Node.js).
Проверьте живую демонстрацию здесь: http://demo.showdownjs.com/
Как вы знаете, ShowdownJS — это бесплатная библиотека, которая всегда будет бесплатной. Однако поддержка и улучшение этой библиотеки требуют времени и денег.
Если вам нравится наша работа и вы находите нашу библиотеку полезной, пожалуйста, сделайте пожертвование через PayPal! Ваш вклад будет очень ценен и поможет мне продолжать развитие этого замечательного проекта.
ShowdownJS версии 2.0 выпущена под лицензией MIT. Прошлые версии выпущены под лицензией BSD.
Вы можете скачать последний релиз tarball напрямую с [релизов][releases].
bower install showdown
npm install showdown
PM> Install-Package showdownjs
NuGet Packages доступны здесь.
Вы также можете использовать одну из нескольких доступных 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 успешно протестирован в следующих браузерах:
По теории, Showdown должен работать во всех браузерах, поддерживающих ECMA 262 3rd Edition (JavaScript 1.5). Конвертер может даже работать в объектах, которые не являются веб-браузерами, таких как Acrobat. Без гарантий.
Showdown предназначен для работы на любой поддерживаемой версии Node.js (см. график выпусков Node.js). Код может работать с предыдущими версиями Node.js, но нет гарантий на его совместимость.
Если вы ищете версию Showdown v<1.0.0, вы можете найти её в [ветке legacy][legacy-branch].
Вы можете проверить полный [журнал изменений][changelog].
Просмотрите наши [страницы wiki][wiki] для примеров и более подробной документации.
var showdown = require('showdown'),
converter = new showdown.Converter(),
text = '# привет, markdown!',
html = converter.makeHtml(text);
var converter = new showdown.Converter(),
text = '# привет, markdown!',
html = converter.makeHtml(text);
Оба примера должны выводить...
<h1 id="приветmarkdown">привет, markdown!</h1>
Вы можете изменять некоторое поведение конвертера Showdown через опции.
Опции могут быть установлены:
Установка глобальной опции влияет на все экземпляры Showdown
showdown.setOption('optionKey', 'value');
Установка локальной опции влияет только на указанный объект Converter. Локальные опции могут быть установлены:
через конструктор
var converter = new showdown.Converter({optionKey: 'value'});
через метод setOption()
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();
omitExtraWLInCodeBlocks: (boolean) [по умолчанию false] Пропуск завершающего новой строки в блоках кода. Например:
Это:
<code><pre>var foo = 'bar';
</pre></code>
Превращается в это:
<code><pre>var foo = 'bar'</pre></code>
noHeaderId: (boolean) [по умолчанию false] Отключение автоматического генерирования ID заголовков. Установка на true переопределяет prefixHeaderId
customizedHeaderId: (boolean) [по умолчанию false] Использование текста в фигурных скобках как ID заголовка. (начиная с версии v1.7.0) Пример:
## Sample header {real-id} будет использовать real-id как id
ghCompatibleHeaderId: (boolean) [по умолчанию false] Генерация ID заголовков, совместимых со стилем GitHub (пробелы заменяются дефисами, а большинство недопустимых символов удаляется) (начиная с версии v1.5.5)
prefixHeaderId: (string/boolean) [по умолчанию false] Добавление префикса к сгенерированным ID заголовков.
Передача строки добавит эту строку к ID заголовка. Установка на true
добавит общую "section" префикс.
rawPrefixHeaderId: (boolean) [по умолчанию false] Установка этого параметра на true предотвратит изменение префикса Showdown. Это может привести к некорректному ID (например, если используется символ " в префиксе). Ничего не делает, если prefixHeaderId установлено на false. (начиная с версии v 1.7.3)
rawHeaderId: (boolean) [по умолчанию false] Удаление только пробелов, ' и " из сгенерированных ID заголовков (включая префиксы), заменяя их дефисами (-). ВНИМАНИЕ: Это может привести к некорректному ID (начиная с версии v1.7.3)
headerLevelStart: (integer) [по умолчанию 1] Установка начального уровня заголовков. Например, установка этого на 3 означает что
# foo
будет парситься как
<h3>foo</h3>
parseImgDimensions: (boolean) [по умолчанию false] Включение поддержки установки размеров изображений внутри markdown-синтаксиса. Примеры:
 простой, предполагает единицы измерения в пикселях
 устанавливает высоту на "auto"
 Изображение с шириной 80% и высотой 5em
simplifiedAutoLink: (boolean) [по умолчанию false] Включение автоматической ссылки на URL. Это значит что:
some text www.google.com
будет парситься как
<p>some text <a href="www.google.com">www.google.com</a>
literalMidWordUnderscores: (boolean) [по умолчанию false] Включение этого параметра прекратит Showdown от интерпретации
нижних подчеркиваний в середине слов как <em>
и <strong>
и вместо этого они будут восприниматься как буквальные нижние подчеркивания. Пример:
some text with__underscores__in middle
будет парситься как
<p>some text with<span class="underline">underscores</span>in middle</p>
strikethrough: (логический тип boolean) [по умолчанию false] Включение поддержки синтаксиса зачеркивания.
~~strikethrough~~
как <del>strikethrough</del>
tables: (логический тип boolean) [по умолчанию false] Включение поддержки таблиц. Пример:
| h1 | h2 | h3 |
|:------|:-------:|--------:|
| 100 | [a][1] | ![b][2] |
| *foo* | **bar** | ~~baz~~ |
Подробнее см. wiki
tablesHeaderId: (логический тип boolean) [по умолчанию false] Если активировано, добавляет свойство ID к тегам заголовков таблиц.
ghCodeBlocks: (логический тип boolean) [по умолчанию true] Включение поддержки стиля GFM для блоков кода.
tasklists: (логический тип boolean) [по умолчанию false] Включение поддержки GFM для списков задач. Пример:
- [x] This task is done
- [ ] This is still pending
smoothLivePreview: (логический тип boolean) [по умолчанию false] Предотвращает странные эффекты в реальном времени при просмотре из-за неполного входа
smartIndentationFix: (логический тип boolean) [по умолчанию false] Пытается умно исправить проблемы отступов, связанные с шаблонами ES6 в середине кода.
disableForced4SpacesIndentedSublists: (логический тип boolean) [по умолчанию false] Отключение требования отступа подсписков на 4 пробела для их вложения, фактически возвращаясь к старому поведению, где достаточно было 2 или 3 пробела. (начиная с версии v1.5.0)
simpleLineBreaks: (логический тип boolean) [по умолчанию false] Парсинг переносов строк как <br>
, без необходимости двух пробелов в конце строки (начиная с версии v1.5.1)
a line
wrapped in two
превращается в:
<p>a line<br>
wrapped in two</p>
requireSpaceBeforeHeadingText: (логический тип boolean) [по умолчанию false] Обязывает добавление пробела между #
и текстом заголовка (начиная с версии v1.5.3)
ghMentions: (логический тип boolean) [по умолчанию false] Включение поддержки упоминаний GitHub, которые создают ссылку на имя пользователя. (начиная с версии v1.6.0)
ghMentionsLink: (строка) [по умолчанию https://github.com/{u}
] Изменяет ссылку, созданную упоминаниями.
Showdown заменит {u}
на имя пользователя. Только применяется, если опция ghMentions включена.
Пример: @tivie
с опцией ghMentionsOption, установленной на //mysite.com/{u}/profile
приведёт к <a href="//mysite.com/tivie/profile">@tivie</a>
encodeEmails: (логический тип boolean) [по умолчанию true] Включение закодированных электронных адресов через использование символьных сущностей, преобразуя ASCII-электронные адреса в эквивалентные десятичные сущности. (начиная с версии v1.6.1)
ЗАМЕЧАНИЕ: До версии 1.6.1 электронные адреса всегда были закодированы через десятичное и шестнадцатеричное кодирование.
openLinksInNewWindow: (логический тип boolean) [по умолчанию false] Открытие всех ссылок в новых окнах
(добавлением атрибута target="_blank"
к тегам <a>
) (начиная с версии v1.7.0)
backslashEscapesHTMLTags: (логический тип boolean) [по умолчанию false] Поддержка экранирования HTML-тегов. Пример: \<div>foo\</div>
(начиная с версии v1.7.2)
эмоции: (логический тип boolean) [по умолчанию false] Включение поддержки эмодзи. Пример: this is a :smile: emoji
Для получения информации о доступных эмодзи, см. https://github.com/showdownjs/showdown/wiki/Emojis (начиная с версии v.1.8.0)*
подчеркивание: (логический тип boolean) [по умолчанию false] ЭКСПЕРИМЕНТАЛЬНАЯ ФУНКЦИОНАЛЬНОСТЬ Включает поддержку подчеркивания.
Синтаксис использует двойные или тройные нижние подчеркивания пример: __подчеркнутый текст__
. При включенном этом параметре нижнее подчеркивание больше не будет парситься как <em>
и <strong>
.
эллипсис: (логический тип boolean) [по умолчанию true] Заменяет три точки на эллипс Unicode.
полнаяHTMLДокументация: (логический тип boolean) [по умолчанию false] Выдает полный HTML-документ, включая теги <html>
, <head>
и <body>
вместо HTML-фрагмента. (начиная с версии 1.8.5)
метаданные: (логический тип boolean) [по умолчанию false] Включает поддержку метаданных документа (определенные в начале документа между «««
и »»»
или между ---
и ---
). (начиная с версии 1.8.5)
var conv = new showdown.Converter({metadata: true});
var html = conv.makeHtml(someMd);
var metadata = conv.getMetadata(); // возвращает объект с метаданными документа
разделениесоседнихцитат: (логический тип boolean) [по умолчанию false] Разделяет соседние цитаты. (начиная с версии 1.8.6)
болееукрашенныйстиль: (логический тип boolean) [по умолчанию false] Добавляет некоторые полезные классы для CSS-стилизации. (начиная с версии 2.0.1)
task-list-item-complete
завершенным задачам в GFM-задачах-листах.ЗАМЕЧАНИЕ: Пожалуйста, обратите внимание, что до версии 1.6.0, все эти опции находятся по умолчанию в режиме Отключено в командной строке.
Вы также можете использовать вкусовые особенности или предварительно настроенные наборы опций, чтобы автоматически установить правильные опции, так что showdown будет работать как популярные вкусы markdown.
В настоящее время доступны следующие вкусы:
showdown.setFlavor('github');
converter.setFlavor('github');
Showdown также приходит с встроенной клиентской утилитой командной строки. Вы можете проверить страницу wiki-cli для получения более подробной информации.
Проект ShowdownJS также предоставляет бесшовную интеграцию с AngularJS через плагин. Пожалуйста, посетите https://github.com/showdownjs/ngShowdown для получения более подробной информации.
Если вы используете TypeScript, возможно, вам захочется использовать типы из DefinitelyTyped.
Интеграция с SystemJS может быть получена через сторонний "system-md" плагин.
Чтобы использовать ShowdownJS как Vue компонент быстро, вы можете проверить vue-showdown.
Showdown не санкционирует входные данные. Это сделано намеренно, поскольку markdown полагается на это для корректного парсинга некоторых особенностий в HTML. Однако, это значит, что внедрение XSS вполне возможно.
Пожалуйста, обратитесь к статье wiki-xss-vulnerability для получения более подробной информации.
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 v12, npm и npx должны быть установлены.
npm install
.npx grunt build
(увидеть Gruntfile.js
). Этот командный запрос: 1. Очищает репозиторий.
2. Проверяет качество кода (JSHint и ESLint).
3. Запускает тесты.
4. Создает распределённый и минифицированный файлы в папке dist
.Набор тестов доступен, который требует Node.js. После того, как Node установлен, выполните следующую команду из корня проекта для установки зависимостей:
npm install
После установки тесты могут быть запущены из корня проекта с помощью:
npm test
Новые случаи тестирования легко можно добавить. Создайте файл markdown (завершающийся .md
), содержащий markdown для тестирования.
Создайте файл .html
с точно таким же названием. Он будет автоматически тестироваться при выполнении тестов с помощью mocha
.
Если вы хотите сделать вклад, пожалуйста, прочитайте следующий быстрый руководство.
Вы можете запросить новую функцию, отправив заявку. Если вы хотите реализовать новую функцию, смело откройте Pull Request.
PRs очень полезны. Однако, перед тем как вы отправите свой pull request, рассмотрите следующие рекомендации:
Поиск GitHub для открытого или закрытого Pull Request, связанный с вашим вкладом. Вы не хотите дублировать усилия.
Когда вы отправляете PRs, которые меняют код, сделайте ваши изменения в новом git-ветке, основанной на develop:
git checkout -b my-fix-branch develop
Выполните полный набор тестов перед отправкой и убедитесь, что все тесты проходят (естественно =P).
Попробуйте следовать нашим правилам стиля кода. Нарушение этих правил препятствует тому, чтобы PR прошёл тесты.
Избегайте исправления нескольких проблем в одном pull request. Лучше всего создать несколько маленьких PRs вместо одного большого трудноразборчивого.
Если PR представляет новую функцию или исправляет проблему, пожалуйста, добавьте соответствующий тестовый случай.
Мы используем конвенционные заметки коммитов для генерации changelogs, которые следуют конвенционному спецификации changelog. Очень полезно, если ваши заметки коммитов соответствуют этим Руководствам по коммитам.
Не забудьте добавить своё имя в файл CREDITS.md. Мы любим давать заслуженную благодарность.
Если мы предлагаем изменения, то:
git rebase develop -i
git push origin my-fix-branch -f
После того, как ваш pull request был объединён, вы можете безопасно удалить свою ветку.
Если у вас есть время для участия в этом проекте, мы чувствуем себя обязанными дать вам за это благодарность. Эти правила позволяют нам быстрее просмотреть ваш PR и дадут вам соответствующую благодарность в вашем профиле GitHub. Мы заранее благодарим вас за ваш вклад!
Мы ищем членов для помощи в поддержании Showdown. Пожалуйста, посмотрите этот вопрос, чтобы выразить интерес или прокомментировать эту запись.
Полный список благодарностей доступен по адресу https://github.com/showdownjs/showdown/blob/master/CREDITS.md
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )