Какой редактор JavaScript Markdown (WMD) в стиле Stack-Overflow мы должны использовать?

Задний план

Я работаю над приложением, для которого требуется вводимый пользователем контент, и я решил использовать редактор Markdown в стиле Stack Overflow. Изучив эту тему в течение последних нескольких дней, я понял, что существует множество форков базового редактора WMD, некоторые с несколькими базовыми улучшениями, а некоторые с серьезными отличиями от редактора Stack Overflow.

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

Ниже приведены требования, плюс то, что мне уже удалось найти. Я надеюсь, что этот вопрос поможет мне решить, какую версию использовать, и, возможно, поможет мне найти порт, который даже лучше подходит для моих нужд.


Требования к моему проекту

  • Предварительный просмотр в реальном времени
  • Несколько редакторов на одной странице (я не знаю, сколько заранее, поскольку пользователь может динамически добавлять еще одно поле редактирования).
  • Возможность расширения с помощью дополнительных кнопок (я бы хотел, чтобы кнопка загружала изображение, а не просто добавляла img URL).
  • Возможность динамически отображать / скрывать поле редактирования (и видеть только окно предварительного просмотра).
  • Не обязательно, но я бы предпочел придерживаться внешнего вида Stack Overflow как можно ближе, поскольку он хорошо известен.
  • Не знаю, имеет ли это значение, но бэкэнд написан на Django.

Редакторы, на которых я смотрел

Вот несколько кодовых баз, на которые я смотрел с мыслями. Очевидно, мне может не хватать другого решения.

  • Версия derobins. Насколько я могу судить, это официальная версия Stack Overflow. Похоже, он не поддерживает несколько редакторов на одной странице.
  • jQuery.MarkEdit. Выглядит очень хорошо, но сильно отличается от версии Stack Overflow.
  • MooWMD. Похоже, сейчас победитель, но меня это немного беспокоит, поскольку он выглядит менее активным / взломанным, чем MarkEdit.
  • Версия wmd-new. Не уверен, похоже, старая кодовая база без особого использования.
  • Ветвь SocialSite. Похоже, это не для публичного использования.

person Edan Maor    schedule 20.05.2010    source источник
comment
Хороший вопрос. Я сам изучаю эту проблему, и до сих пор я выяснил, что автоматический отступ списков не работает в Chrome в версии derobins и других. В версии SO, похоже, этот автоматический отступ в любом случае отключен, хотя я не уверен, что было изменено для этого (doList все еще существует).   -  person David Johnstone    schedule 15.10.2010
comment
Мне кажется, я наткнулся на релиз подлинного артефакта из открытых источников. Не могу снова найти эту чертову штуку.   -  person Wolfpack'08    schedule 12.08.2012


Ответы (5)


В конце концов, немного посмотрев вокруг в поисках готового редактора, я остановился на порте OpenLibrary WMD, расположенном по адресу http://github.com/openlibrary/wmd.

Причины, по которым я выбрал этого редактора

  1. Отвечает большинству моих требований.
  2. Похоже на редактор Stack Overflow. Есть несколько различий в поведении (см. Ниже).
  3. Построен на основе jQuery (и не требует MooTools, что является преимуществом перед другими серьезный соперник, mooWMD).

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

Отличия от версии Stack Overflow

Есть несколько отличий от редактора Stack Overflow:

  1. Одиночные вводы в конце строк вызывают <br/> вместо того, чтобы считаться одним абзацем. Я предпочитаю этот способ, поэтому меня устраивает это изменение.
  2. Нумерованные списки нумеруются автоматически, как в Microsoft Word. То есть нажатие Enter после записи «1. первый элемент» автоматически приведет к появлению строки, начинающейся с «2». Это тоже изменение, которое мне очень нравится.

Что ж, надеюсь, это поможет любому, кто ищет похожий редактор. Если я закончу настройку редактора, я создам свою собственную ветку (она под лицензией MIT), но прямо сейчас я ухожу, не возясь с исходным кодом.

person Edan Maor    schedule 28.05.2010
comment
Привет, я только что скачал openlibrary / wmd, но вроде не работает, есть проблемы с jquery.wmd.min.js - person Ray; 27.02.2012

Что ж, этот вопрос (и решения) уже устарели, поэтому я подумал, может быть, я поставлю здесь что-нибудь обновленное. :)

Это начало 2014 года, и когда я столкнулся с той же проблемой, я в конце концов использовал PageDown-Bootstrap. Это редактор WMD на основе Twitter Bootstrap с полностью настраиваемой панелью стилей (панелью кнопок).

Также существует альтернатива под названием Bootstrap-Markdown, которая также выглядит очень многообещающей.

person Ory Band    schedule 20.02.2014

Что касается части предварительного просмотра в реальном времени, с библиотекой Showdown довольно легко работать (как и Эдан указывает, входит в кодовую базу)

Вы используете это примерно так (не нужно использовать jQuery, если вы не хотите)

$(document).ready(function(){
    var converter = new Attacklab.showdown.converter();
    function update_description_preview(){
        $('#description-preview').html(converter.makeHtml($("#id_description").val()));
    }
    update_description_preview();

    $("#id_description").keyup(function(){
        update_description_preview();
    });
});

Функция update_description_preview использует объект конвертера для чтения разметки в элементе #id_description и выгружает его в элемент # description-preview.

Здесь я вызываю функцию сразу после ее определения для инициализации окон предварительного просмотра (в редакторе был предварительно загружен некоторый текст)

Последний бит просто регистрирует функцию с событием keyup.

person Chris Lawlor    schedule 21.05.2010
comment
Разве WMD (по крайней мере, версия StackOverflow) не использует Showdown.js для преобразования? По крайней мере, это то, что я понял в какой-то момент. - person Edan Maor; 22.05.2010
comment
Дох. Забыл, что вскрытие карт было включено в кодовую базу. Мой последний проект был только предварительным просмотром в реальном времени (синтаксис Markdown вводился вручную, без редактора JS), поэтому мне нужно было использовать showdown отдельно. - person Chris Lawlor; 22.05.2010

Не уверен, что он полностью соответствует старым требованиям, но еще одно решение, доступное в 2014 году, - это редактор Markdown с открытым исходным кодом с предварительным просмотром, лицензированный под Apache 2.0 и созданный программным обеспечением topten.

Онлайн-демонстрация доступна здесь: http://www.toptensoftware.com/markdowndeep/dingus

person xmojmr    schedule 18.04.2014

Standard Common Markdown включает автономный файл javascript для преобразования markdown в html. Его легко реализовать, как показано в официальной демонстрации или в этой plunker.

Примерно

<script src="//jgm.github.io/stmd/js/stmd.js"></script>
...
var reader = new stmd.DocParser();
var writer = new stmd.HtmlRenderer();
...
var parsed = reader.parse("Some **markdown** text");
var result = writer.renderBlock(parsed);
person Ben Haley    schedule 04.09.2014