Wie ändere ich Redcarpet Markdown, damit es mit Klassen umgehen kann?

9

Ich verwende Redcarpet Markdown auf meiner Rails-Website. Oft möchte ich einem Absatz, einer Tabelle oder einem anderen Element Klassen (oder andere Attribute) hinzufügen, aber es lässt dies nicht zu. Wenn ich das Markdown-Element durch HTML ersetze, muss ich auch den inneren Markdown durch HTML ersetzen, was ein Ärgernis ist.

Ich möchte zum Beispiel die Klasse "table" zum Markdown-Tabellenelement hinzufügen (damit es den Tabstyling von Bootstrap bekommt), aber dann muss ich die Markdown-Tabelle durch HTML ersetzen.

Was ist die einfachste Lösung dafür? Gibt es eine einfache Möglichkeit, den Markdown so zu modifizieren, dass er mit Klassen umgehen kann? Oder gibt es eine Möglichkeit, Markdown in einem HTML-Element zuzulassen?

Beispielaktualisierung

Ich möchte eine Klasse zu einem div, einer Tabelle oder einem Absatz hinzufügen, aber die Markierung innerhalb des Elements beibehalten. Ich möchte zum Beispiel folgenden HTML erzeugen:

%Vor%

Es gibt zwei mögliche Lösungen, aber ich weiß nicht, wie man sie mit Redcarpet Markdown macht:

  1. Erhalte spezielle Markdown-Syntax für Klassen, zB:

    {class: cool}
    **Hello world** [Google](http://google.com)

  2. Erlaube Markdown, in HTML-Elementen zu arbeiten:

    <p class="cool">
    **Hello world** [Google](http://google.com)
    </p>

Momentan mache ich solche Elemente nur in reinem HTML ohne Abschriften. Aber wie kann ich # 1 oder # 2 zum Arbeiten bekommen?

    
am-rails 30.01.2014, 00:49
quelle

1 Antwort

2

Sie können einen eigenen Renderer erstellen (basierend auf Redcarpet::Render::HTML ), der die Methoden außer Kraft setzt, die Sie anpassen möchten:

  

Benutzerdefinierte Renderer werden durch Erben von einem vorhandenen Renderer erstellt.   Die integrierten Renderer, HTML und XHTML , können wie folgt erweitert werden:

%Vor%      

Aber neue Renderer können auch von Grund auf neu erstellt werden (siehe    lib/redcarpet/render_man.rb für eine Beispielimplementierung von a   Manpage Renderer)

<<snip>>

  

Die folgenden Instanzmethoden können vom Renderer implementiert werden:

<<snip>>

  
  • Tabelle (Header, Körper)
  •   

<<snip>>

  
  • raw_html (raw_html)
  •   

Um zum Beispiel Markdown innerhalb von Roh-HTML zu aktivieren, würde ich vorschlagen, ein <markdown> -Element anzugeben, das Sie extrahieren und rendern können ( Warnung - nicht getesteter Code vorher ):

%Vor%

Überschreiben Sie diese Methoden, um entweder die benötigte Klasse zu Ihrer Tabelle hinzuzufügen oder rekursiv render von Elementen in Ihrem HTML-Code aufzurufen.

    
Uri Agassi 18.02.2014, 20:38
quelle