Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lambdas sections? #35

Open
d4h0 opened this issue Sep 13, 2020 · 6 comments
Open

Lambdas sections? #35

d4h0 opened this issue Sep 13, 2020 · 6 comments

Comments

@d4h0
Copy link

d4h0 commented Sep 13, 2020

Hi,

Mustache supports lambdas sections – is my understanding correct that this isn't supported in ramhorns?

If so, are there any plans for this?

@grego
Copy link
Contributor

grego commented Sep 19, 2020

What is your use case? It's very well possible Ramhorns indirectly supports it now.

@d4h0
Copy link
Author

d4h0 commented Sep 19, 2020

I'd use lambda sections for example to create Markdown sections (which would need to be processed).

I'm also interested in something like this:

{{#hero}}
    <h1>test</h1>
    <p>Some other text</p>
{{/hero}}

hero then would add some other stuff (like wrapping the children content in a div that is styled in a certain way).

Ideally, lambda sections would support arguments, which would make it possible to generate more complex sections.

I'd also use this in Markdown to create sections with certain attributes (for example):

{{#my_section id="foo" class="my_class"}}
# Title
some text
{{/my_section}}

(I'd like to avoid to write HTML in my Markdown)

Normal functions (which don't exist in Ramhorns, if remember correctly) would be already useful for some things I'd like to do (but not all). For example, currently, I'm working on a template helper that optimizes images and generates HTML for responsive images.

Is anything of the above ergonomically possible with Ramhorns?

@ibutra
Copy link

ibutra commented Oct 16, 2020

This would also be helpful for formatting. For example rendering a number as hexadecimal

@maciejhirsz
Copy link
Owner

@d4h0:

I'm also interested in something like this:

{{#hero}}
    <h1>test</h1>
    <p>Some other text</p>
{{/hero}}

hero then would add some other stuff (like wrapping the children content in a div that is styled in a certain way).

You can already do that with partials, you just have to split your padding into two partials:

{{>hero_head.html}}
    <h1>test</h1>
    <p>Some other text</p>
{{>hero_tail.html}}
{{#my_section id="foo" class="my_class"}}
# Title
some text
{{/my_section}}

This you can also do with partials, except the id and class would have to be passed as content variables. Extending mustache syntax with custom attributes is definitely out of scope for Ramhorns.

(I'd like to avoid to write HTML in my Markdown)

Why? HTML is already valid Markdown, it's widely supported, and understandable. A mustache section with custom attributes syntax is none of those things.


@ibutra:

This would also be helpful for formatting. For example rendering a number as hexadecimal

For simple formatting or wrapping content in some preprocessor, the better way to do that in Rust would be to use attribute flags (which could be used as a generic replacement for markdown support per #27), so that's definitely on the line.

@stjepangolemac
Copy link

Is it even possible to have something like custom filters or functions with Mustache templates? I'm looking for something along these lines https://tera.netlify.app/docs/#functions.

The use case I want to support is to give this filter/function a path to an image asset, generate jpeg/png, webp, and avif versions, and then render a <picture> tag that abstracts away picking the best version for a specific browser.

@maciejhirsz
Copy link
Owner

Mustache is, by design, logic-less, so no, not really. It's possible to add a similar mechanism via attributes to the Content derived struct, though in that case it of course is no longer controlled by the template.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants