kirbysayshi/vash

Feature Request: Add support for render method

Closed this issue · 5 comments

We've currently got the vash.helpers.include method which acts similar to the @{ Html.RenderPartial()} method. However, it'd be nice if there was an actual render method that would just allow you to render vash syntax that is not part of a partial.

Use Case:
I'm wanting to try and build a Vash playground, similar to the one made for EJS. To do this I need to be able to render any vash code that someone writes in the editor. Having a render method would allow me to do this.

Interesting idea! I'm not sure I understand how this would work though. Are you asking for a vash helper that accepts vash markup as a string?

Yes, so here's a more detailed example of how I imagined the it being used in my use case.

First I'd build a textarea and div like so:

<textarea rows="6" cols="40" id="textarea"></textarea>
<div id="output">@vash.helpers.render(markup);</div>

Then the user enters the following example into the text area:

@if(model.type){
	<h1>I'm a @model.type!</h1>
} else if(model.name){
	<h2>My name is @model.name.</h2>
} else {
	<h3>I DON'T KNOW WHO OR WHAT I AM...</h3>
}

I then want to be able to add code like this:

var textarea = document.querySelector('#textarea');
var markup = textarea.innerHTML;

Using the render helper method the output should show either a h1, h2, or h3 element depending on what's passed into it.

@kirbysayshi what are your thoughts on this?

@tylerbhughes If I'm understanding you correctly, I'm not sure why this needs to be a supported helper. I think you could support this yourself using the existing vash API!

For example, there is nothing stopping you from doing something like this in your template:

var vash = require('vash');
var textarea = document.querySelector('#textarea');
var markup = textarea.innerHTML;

var tpl;
try {
  tpl = vash.compile(markup);
} catch (e) {
  alert('Sorry, that's invalid vash markup!');
}

var previewArea = document.querySelector('#preview');
previewArea.innerHTML = tpl(sampleModel);

I'm going to close this, but feel free to reopen if this answer is not adequate!