JavaScript для преобразования Скидки с цены/Ткани в HTML (и, идеально, назад в Скидку с цены/Ткань)

Построение на сообщении Varkhan, что определенный для Pentium собственный код добился бы большего успеха:

80
задан Tom Lehman 23 August 2009 в 22:00
поделиться

4 ответа

Для Markdown -> HTML , есть Showdown

Сам StackOverflow использует язык Markdown для вопросов и ответов; вы пытались посмотреть, как это работает?

Ну, похоже, что он использует PageDown , который доступен по лицензии MIT

Вопрос Есть ли хорошая библиотека или элемент управления Markdown Javascript? и ответы на него тоже могут помочь :-)


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

На самом деле, если вы внимательно посмотрите на Showdown, в его исходном коде (файл showdown.js) , вы найдете эту часть комментария:

//
// Showdown usage:
//
//   var text = "Markdown *rocks*.";
//
//   var converter = new Showdown.converter();
//   var html = converter.makeHtml(text);
//
//   alert(html);
//
// Note: move the sample code to the bottom of this
// file before uncommenting it.
//

Это не синтаксис jQuery, но его довольно легко интегрировать в ваше приложение; -)


О Textile, кажется, что что-то найти немного сложнее полезно: - (


С другой стороны, HTML -> Markdown,

96
ответ дан 24 November 2019 в 09:56
поделиться

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

function mdToHtml(str) {
    var tempStr = str;
    while(tempStr.indexOf("**") !== -1) {
        var firstPos = tempStr.indexOf("**");
        var nextPos = tempStr.indexOf("**",firstPos + 2);
        if(nextPos !== -1) {
            var innerTxt = tempStr.substring(firstPos + 2,nextPos);
            var strongified = '<strong>' + innerTxt + '</strong>';
            tempStr = tempStr.substring(0,firstPos) + strongified + tempStr.substring(nextPos + 2,tempStr.length);
        //get rid of unclosed '**'
        } else {
            tempStr = tempStr.replace('**','');
        }
    }
     while(tempStr.indexOf("*") !== -1) {
        var firstPos = tempStr.indexOf("*");
        var nextPos = tempStr.indexOf("*",firstPos + 1);
        if(nextPos !== -1) {
            var innerTxt = tempStr.substring(firstPos + 1,nextPos);
            var italicized = '<i>' + innerTxt + '</i>';
            tempStr = tempStr.substring(0,firstPos) + italicized + tempStr.substring(nextPos + 2,tempStr.length);
        //get rid of unclosed '*'
        } else {
            tempStr = tempStr.replace('*','');
        }
    }
    return tempStr;
}

Тестовый код:

    var s = "This would be *italicized* text and this would be **bold** text, This would be *italicized* text and this would be **bold** text, This would be *italicized* text and this would be **bold** text";
    alert(mdToHtml(s));

Вывод:

This would be <i>italicized</i>text and this would be <strong>bold</strong> text, This would be <i>italicized</i>text and this would be <strong>bold</strong> text, This would be <i>italicized</i>text and this would be <strong>bold</strong> text

РЕДАКТИРОВАТЬ: Новое в версии V 0.024 - Автоматическое удаление незакрытых тегов уценки

1
ответ дан 24 November 2019 в 09:56
поделиться

Textile

Здесь вы можете найти, казалось бы, очень хорошую реализацию Textile на языке Javascript, и ещё одну там (может быть, не очень хорошую, но у неё есть хорошая страница с примером преобразования в вашем стиле).

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

for(i=0;i<lines.length;i++) {
    // Add code :Start
    if (lines[i].match(/\s*-{4,}\s*/)){
      html+="<hr/>\n";
      continue;
    }
    // Add code :End
    if (lines[i].indexOf("[") == 0) {continue;}
    //...
13
ответ дан 24 November 2019 в 09:56
поделиться

Легко использовать Showdown с jQuery или без него . Вот пример jQuery:

// See http://mathiasbynens.be/notes/showdown-javascript-jquery for a plain JavaScript version as well
$(function() {
 // When using more than one `textarea` on your page, change the following line to match the one you’re after
 var $textarea = $('textarea'),
     $preview = $('<div id="preview" />').insertAfter($textarea),
     converter = new Showdown.converter();
 $textarea.keyup(function() {
  $preview.html(converter.makeHtml($textarea.val()));
 }).trigger('keyup');
});
4
ответ дан 24 November 2019 в 09:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: