<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /></head><body dir="auto">OTOH, it is a question if it is wprth it at all, as we have IIFEs and maybe will have do expressions, so you can stick anything to template string anyway. OTYOH, new Regexp had its merits....<br><br><div class="gmail_quote">Dňa 15. septembra 2015 7:24:26 CEST používateľ Thomas <thomasjamesfoster@bigpond.com> napísal:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div>With all due respect to your solution (it works, and it works well), it's far from ideal to be relying upon `with` and Function. I guess what I'm trying to get at is - wouldn't it be better to think about having a built in version that didn't use with or eval (should be easy enough)? I sense that you're not confident about it being successful in that sense, but a built in function for this trumps with and Function any day of the week.</div><div id="AppleMailSignature"><br /></div><div id="AppleMailSignature">Thomas </div><div><br />On 15 Sep 2015, at 3:42 AM, Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@gmail.com</a>> wrote:<br /><br /></div><blockquote type="cite"><div><div dir="ltr">nobody here raised the minimal interest in what I've achieved with those few lines of code, I rather had people saying "with statement? ewww" or similar reactions about Function like yours ... I don't think as proposal would ever make it, it's too
easy to polyfill so I'd expect many - 1<div><br /></div><div>¯\_(ツ)_/¯<br /></div></div><div class="gmail_extra"><br /><div class="gmail_quote">On Mon, Sep 14, 2015 at 5:23 PM, Thomas <span dir="ltr"><<a href="mailto:thomasjamesfoster@bigpond.com" target="_blank">thomasjamesfoster@bigpond.com</a>></span> wrote:<br /><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div>Sorry, I sent that before I saw your other explanation. </div><div><br /></div><div>On a second look that function does work pretty well. The use of Function still means strings are being evaluated at runtime, but I agree that it's safer/better than eval (though I'm not sure why CSP would still like it over eval).</div><div><br /></div><div>Have you any plans to make the String.prototype.template function a proposal?</div><span class="HOEnZb"><font color="#888888"></font><div><font color="#888888"><br
/></font></div><div>Thomas</div></span><div><div class="h5"><div><br />On 15 Sep 2015, at 1:52 AM, Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> wrote:<br /><br /></div><blockquote type="cite"><div><div dir="ltr">again, Function **is** better and different than eval, but I see this conversation is bringing nothing so I'll just stop explaining.<div><br /></div><div>Regards</div></div><div class="gmail_extra"><br /><div class="gmail_quote">On Mon, Sep 14, 2015 at 3:47 PM, Thomas <span dir="ltr"><<a href="mailto:thomasjamesfoster@bigpond.com" target="_blank">thomasjamesfoster@bigpond.com</a>></span> wrote:<br /><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div>Doesn't the code in that gist create functions at runtime from strings? If so that's not any better than eval. </div><div><div><div><br /></div><div>On 14 Sep 2015, at 8:50
PM, Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> wrote:<br /><br /></div><blockquote type="cite"><div><div dir="ltr">sorry, early send (I think it was a ctrl+return ? ) ... I was saying ..<div><br /></div><div>without using eval and already discussed months ago:</div><div><a href="https://gist.github.com/WebReflection/8f227532143e63649804" target="_blank">https://gist.github.com/WebReflection/8f227532143e63649804</a><br /></div><div><br /></div><div>it's based on the glorious `with` statement and it works like a charm</div><div><br /></div><div>Regards</div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div></div><div class="gmail_extra"><br /><div class="gmail_quote">On Mon, Sep 14, 2015 at 11:49 AM, Andrea Giammarchi <span dir="ltr"><<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>></span> wrote:<br /><blockquote
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">without using eval, discussed already months ago<div><br /></div></div><div><div><div class="gmail_extra"><br /><div class="gmail_quote">On Mon, Sep 14, 2015 at 6:03 AM, Thomas <span dir="ltr"><<a href="mailto:thomasjamesfoster@bigpond.com" target="_blank">thomasjamesfoster@bigpond.com</a>></span> wrote:<br /><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div>For those interested, this gist better shows what's being discussed: <a href="https://gist.github.com/thomasfoster96/193e7c08aae499f810a1" target="_blank">https://gist.github.com/thomasfoster96/193e7c08aae499f810a1</a></div><div><br /></div><div>Ron: Yes, that's already possible - but tagged template strings don't really offer much of an advantage over a function as far as templating goes (IMHO).</div><div><br
/><div>Thomas</div><div><div><div><br /></div>On 14 Sep 2015, at 11:04 AM, Ron Buckton <<a href="mailto:Ron.Buckton@microsoft.com" target="_blank">Ron.Buckton@microsoft.com</a>> wrote:<br /><br /></div></div></div><div><div><blockquote type="cite"><div>






<div>
<div>
<div style="font-family:Calibri,sans-serif;font-size:11pt">This is theoretically possible:<br />
<br />
```<br />
let t = $template`<br />
  ${$item.permalink}<br />
  ${$each($item.comments)`<br />
    ${$parent.permalink}<br />
    ${$if($item.title)`<br />
      ${$parent.permalink}<br />
    `}<br />
  `}<br />
`;<br />
let s = t(data);<br />
```<br />
<br />
...given an adequate implementation using proxies (to create bindings for e.g. `$item.permalink` for later evaluation) and tagged template functions. Whether or not this would make for a reasonable implementation is left to the reader.<br />
<br />
Ron</div>
</div>
<div dir="ltr">
<hr />
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">From:
</span><span style="font-family:Calibri,sans-serif;font-size:11pt"><a href="mailto:isiahmeadows@gmail.com" target="_blank">Isiah Meadows</a></span><br />
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">Sent:
</span><span style="font-family:Calibri,sans-serif;font-size:11pt">‎9/‎13/‎2015 4:15 PM</span><br />
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">To:
</span><span style="font-family:Calibri,sans-serif;font-size:11pt"><a href="mailto:erights@google.com" target="_blank">Mark S. Miller</a></span><br />
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">Cc:
</span><span style="font-family:Calibri,sans-serif;font-size:11pt"><a href="mailto:rtm@gol.com" target="_blank">Bob Myers</a>;
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss</a></span><br />
<span style="font-family:Calibri,sans-serif;font-size:11pt;font-weight:bold">Subject:
</span><span style="font-family:Calibri,sans-serif;font-size:11pt">Re: Template strings as a template language.</span><br />
<br />
</div>
</div>
<font size="2"><span style="font-size:10pt">
<div>On Sun, Sep 13, 2015 at 7:09 PM, Mark S. Miller <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>> wrote:<br />
><br />
><br />
> On Sun, Sep 13, 2015 at 8:58 AM, Bob Myers <<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>> wrote:<br />
>><br />
>> Templating languages typically "compile" templates into functions through<br />
>> various lexical transformations.<br />
>><br />
>> Consider a template file foo.tem:<br />
>><br />
>> ```<br />
>> My name is ${<a href="https://na01.safelinks.protection.outlook.com/?url=this.name&data=01%7c01%7cron.buckton%40microsoft.com%7ce705066eae3849ee21f008d2bc913033%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=CY6YpX1n5jLScYGX2W1tIi2ndGlA7WI8ZTJUZjDL2Gw%3d" target="_blank">https://na01.safelinks.protection.outlook.com/?url=this.name&data=01%7c01%7cron.buckton%40microsoft.com%7ce705066eae3849ee21f008d2bc913033%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=CY6YpX1n5jLScYGX2W1tIi2ndGlA7WI8ZTJUZjDL2Gw%3d</a>}.<br />
>> ```<br />
>><br />
>> Lexically transform this into<br />
>><br />
>> ```<br />
>> function foo() {<br />
>>   return `My name is ${<a href="http://this.name" target="_blank">this.name</a>|}.`;<br />
>> }<br />
>><br />
>> Then invoke the template as eg<br />
>><br />
>> ```<br />
>> foo.call({name: 'Bob'})<br />
>> ```<br />
>><br />
>> Having said that, I doubt if ES6 template strings serve as a useful basis<br />
>> for a full-fledged templating system. To take just one basic example, how<br />
>> would one implement the equivalent of `{{#if}}`?<br />
><br />
><br />
> What does `{{#if}}` mean?<br />
><br />
<br />
An example from Handlebars' website (which is likely where he drew the<br />
syntax from):<br />
<br />
```<br />
{{permalink}}<br />
{{#each comments}}<br />
  {{../permalink}}<br />
<br />
  {{#if title}}<br />
    {{../permalink}}<br />
  {{/if}}<br />
{{/each}}<br />
```<br />
<br />
<br />
<br />
>><br />
>><br />
>> Bob<br />
>><br />
>><br />
>> _______________________________________________<br />
>> es-discuss mailing list<br />
>> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br />
>> <a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fmail.mozilla.org%2flistinfo%2fes-discuss&data=01%7c01%7cron.buckton%40microsoft.com%7ce705066eae3849ee21f008d2bc913033%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=Vk9C%2fonHktgLCsW%2f395PrpBWefRcs6XFqJk7HTVbunE%3d" target="_blank">
https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fmail.mozilla.org%2flistinfo%2fes-discuss&data=01%7c01%7cron.buckton%40microsoft.com%7ce705066eae3849ee21f008d2bc913033%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=Vk9C%2fonHktgLCsW%2f395PrpBWefRcs6XFqJk7HTVbunE%3d</a><br />
>><br />
><br />
><br />
><br />
> --<br />
>     Cheers,<br />
>     --MarkM<br />
><br />
> _______________________________________________<br />
> es-discuss mailing list<br />
> <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br />
> <a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fmail.mozilla.org%2flistinfo%2fes-discuss&data=01%7c01%7cron.buckton%40microsoft.com%7ce705066eae3849ee21f008d2bc913033%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=Vk9C%2fonHktgLCsW%2f395PrpBWefRcs6XFqJk7HTVbunE%3d" target="_blank">
https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fmail.mozilla.org%2flistinfo%2fes-discuss&data=01%7c01%7cron.buckton%40microsoft.com%7ce705066eae3849ee21f008d2bc913033%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=Vk9C%2fonHktgLCsW%2f395PrpBWefRcs6XFqJk7HTVbunE%3d</a><br />
><br />
<br />
<br />
<br />
-- <br />
Isiah Meadows<br />
_______________________________________________<br />
es-discuss mailing list<br />
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br />
<a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fmail.mozilla.org%2flistinfo%2fes-discuss&data=01%7c01%7cron.buckton%40microsoft.com%7ce705066eae3849ee21f008d2bc913033%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=Vk9C%2fonHktgLCsW%2f395PrpBWefRcs6XFqJk7HTVbunE%3d" target="_blank">https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fmail.mozilla.org%2flistinfo%2fes-discuss&data=01%7c01%7cron.buckton%40microsoft.com%7ce705066eae3849ee21f008d2bc913033%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=Vk9C%2fonHktgLCsW%2f395PrpBWefRcs6XFqJk7HTVbunE%3d</a><br />
</div>
</span></font>


</div></blockquote></div></div><blockquote type="cite"><div><div><div><span>_______________________________________________</span><br /><span>es-discuss mailing list</span><br /><span><a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a></span><br /></div></div><span><a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a></span><br /></div></blockquote></div><br />_______________________________________________<br />
es-discuss mailing list<br />
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br />
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br />
<br /></blockquote></div><br /></div>
</div></div></blockquote></div><br /></div>
</div></blockquote></div></div></div></blockquote></div><br /></div>
</div></blockquote></div></div></div></blockquote></div><br /></div>
</div></blockquote><p style="margin-top: 2.5em; margin-bottom: 1em; border-bottom: 1px solid #000"></p><pre class="k9mail"><hr /><br />es-discuss mailing list<br />es-discuss@mozilla.org<br /><a href="https://mail.mozilla.org/listinfo/es-discuss">https://mail.mozilla.org/listinfo/es-discuss</a><br /></pre></blockquote></div></body></html>