vendredi 8 mai 2015

Pass class object from ruby to liquid (via Jekyll)

UPDATE FOR CLARIFICATION.

I deleted the original question because it was confusing. Maybe this one is better?

I currently have something like this (simplified for brevity):

module Jekyll
    module TOCGenerator
        def toc(html)
            ...via nokogiri, get all <h3> tags, make table of contents entry
            for each. 
        end
        def contentWithTocAnchorLinks(html)
            ...make "back to top" anchor links under each <h3> tag that will
            take the user back up to the table of contents 
        end
    end
end

Then in the template:

<section>{{ content | toc }}</section>
<section>{{ content | contentWithTocAnchorLinks }} </section>

This works fine, but it seems sloppy. I've also tried stuffing both toc and contentWithAnchorLinks into an array and then doing something like {{ content | tocArray | first }} which also worked, but not very well (in some cases there is no table of contents and it was confusing). Anyway, what I would like to be able to do is something like this:

{% capture toc_content %}{{ content | toc_generate }}{% endcapture %}
<section> {{ toc_content.toc }} </section>
<section> {{ toc_content.content }}</section>

Jekyll does this all the time, as in {{ page.title }} but I'm not clear on how to replicate it. I only assume that a Ruby class is involved somewhere.

Does that make more sense?

Aucun commentaire:

Enregistrer un commentaire