2017-05-29 2 views
0

J'utilise Markdown écrit dans un fichier de données pour rendre HTML dans un modèle HAML avec le générateur de page statique Middleman.Middleman: méthode non définie `link_to 'lors du rendu de démarques à partir d'un fichier de données

Mon fichier de données, data/faq.yaml ressemble à ceci:

dog: 
    question: I want to know more about a dog. 
    answerA: (HTML in data) Just <a href="https://google.com">Google</a> it! 
    answerB: (Markdown link in data) Just [Google](https://google.com) it! 

Pour convertir ce démarquage en HTML, je me sers aide personnalisée définie dans config.rb:

helpers do 
    def markdown(text) 
     Tilt['markdown'].new { text }.render 
    end 
end 

qui puis-je utiliser dans mon HAML modèle comme ceci:

= markdown(data.faq.dog.answerA) 

Tout fonctionne p parfaitement jusqu'à ce que j'essaie de rendre le lien markdown écrit dans le fichier de données.

ci-dessous est mon modèle faq.haml avec:

  • lien Markdown écrit directement dans HAML, ce qui rend par le filtre démarquage de HAML
  • de référence à answerA à partir des données avec lien HTML écrit directement
  • Référence à answerB de données avec un même lien écrit avec la syntaxe Markdown

faq.haml:

.answer 
    :markdown 
     (HAML) Just [Google](https://google.com) it! 
    = markdown(data.faq.dog.answerA) 
    = markdown(data.faq.dog.answerB) 

2 premiers liens rendent propely, mais lien démarquage dans answerB plaids erreur suivante:

undefined method `link_to' for #<Object:0x000000044f9e18> 

Traceback:

/home/myself/.rvm/gems/ruby-2.4.0/gems/middleman-core-4.2.1/lib/middleman-core/renderers/kramdown.rb: in convert_a 
    48.  scope.link_to(content, link, attr) 

Pourquoi est-Kramdown incapable de convertir un lien de démarquage quand « demandé "pour le faire via helper personnalisé qui référence le fichier de données, mais le fait correctement lorsque la même syntaxe est utilisée directement dans HAML? Qu'est-ce qui peut être fait, de sorte que le lien de démarquage dans = markdown(data.faq.dog.answerB) rend correctement?

Ps. Mon but final sera de faire référence à des liens qui sont déjà définis dans un fichier séparé data, mais je pense que résoudre ce problème en premier est nécessaire pour atteindre cet objectif.

Répondre

0

Le contexte de l'application doit être transmis à Tilt.

def markdown(text) 
    Tilt['markdown'].new(context: @app) { text }.render 
end 

Source