<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><br><br>Sent from my iPhone</div><div><br>On 14 Sep 2015, at 2:59 PM, Mohsen Azimi <<a href="mailto:me@azimi.me">me@azimi.me</a>> wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">I actually used template strings as templateing in two of my projects. You can take aa look here:<div><br></div><div><a href="https://github.com/mohsen1/json-schema-view-js/blob/master/src/index.js#L59-L175">https://github.com/mohsen1/json-schema-view-js/blob/master/src/index.js#L59-L175</a></div></div></div></blockquote><div><br></div><div>Will take a look.</div><br><blockquote type="cite"><div><div dir="ltr"><div><br></div><div>Two main problems I had with this was:</div><div><br></div><div>* There is no `if` condition in template strings. I had to **hack** my way by yet another template string function that returns empty string if the condition is falsy: <a href="https://github.com/mohsen1/json-schema-view-js/blob/master/src/helpers.js#L9-L21">https://github.com/mohsen1/json-schema-view-js/blob/master/src/helpers.js#L9-L21</a></div></div></div></blockquote><div><br></div><div>Wouldn't you use the ternary operator? E.g.</div><div><br></div><div>condition ? iftrue : iffalse</div><br><blockquote type="cite"><div><div dir="ltr"><div>* The falsy stuff are not rendered as you expect (empty string):</div><div><br></div><div>```js</div><div><div>let o = undefined;</div><div>console.log(`${o}`); // => 'undefined'</div></div><div>```</div></div></div></blockquote><div><br></div><div>I think that behaviour is what I'd expect (and different toString behaviour in template strings would be confusing).</div><br><blockquote type="cite"><div><div dir="ltr"><div><br></div><div><div class="gmail_quote"><div dir="ltr">On Sun, Sep 13, 2015 at 6:04 PM <<a href="mailto:es-discuss-request@mozilla.org" target="_blank">es-discuss-request@mozilla.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Send es-discuss mailing list submissions to<br>
        <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
or, via email, send a message with subject or body 'help' to<br>
        <a href="mailto:es-discuss-request@mozilla.org" target="_blank">es-discuss-request@mozilla.org</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:es-discuss-owner@mozilla.org" target="_blank">es-discuss-owner@mozilla.org</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of es-discuss digest..."<br>
Today's Topics:<br>
<br>
   1. Re: Template strings as a template language. (Thomas)<br>
   2. Re: Template strings as a template language. (Bob Myers)<br>
   3. Re: Template strings as a template language. (Mark S. Miller)<br>
   4. Re: Template strings as a template language. (Isiah Meadows)<br>
   5. RE: Template strings as a template language. (Ron Buckton)<br>
<br><br><br>---------- Forwarded message ----------<br>From: Thomas <<a href="mailto:thomasjamesfoster@bigpond.com" target="_blank">thomasjamesfoster@bigpond.com</a>><br>To: Alexander Jones <<a href="mailto:alex@weej.com" target="_blank">alex@weej.com</a>><br>Cc: "Mark S. Miller" <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>>, es-discuss <<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a>><br>Date: Mon, 14 Sep 2015 01:47:37 +1000<br>Subject: Re: Template strings as a template language.<br><br>
<br>
> On 14 Sep 2015, at 1:38 AM, Alexander Jones <<a href="mailto:alex@weej.com" target="_blank">alex@weej.com</a>> wrote:<br>
><br>
> Not exactly sure what you mean. But if you are you asking how<br>
><br>
> ```js<br>
> let template = 'this ${foo} and that ${bar}';<br>
> // later...<br>
> let output = String.evalTemplate(template, {foo: "thing", bar: "other thing"});<br>
> ```<br>
> is different to<br>
><br>
> ```js<br>
> let template = ({foo, bar}) => `this ${foo} and that ${bar}`;<br>
> // later...<br>
> let output = template({foo: "thing", bar: "other thing"});<br>
> ```<br>
><br>
> then I have a couple of answers off the top of my head:<br>
>  * The value of `template` is a simple string and thus can be trivially loaded from JSON or a file in the former case, but not the latter. Getting the latter involves some kind of eval anyway.<br>
<br>
Exactly - being able to not touch modules for something like this is important.<br>
<br>
>  * The number of occurrences of each template parameter (e.g. `"foo"`) is limited to once at the definition site, and once at the invocation site, instead of twice at definition. `with` seems like a non-starter.<br>
<br>
Minimising definitions is worth doing. Although, the good thing about arguments is that it's possible to specify default values...<br>
<br><br><br>---------- Forwarded message ----------<br>From: Bob Myers <<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>><br>To: <a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>Cc: <br>Date: Sun, 13 Sep 2015 21:28:04 +0530<br>Subject: Re: Template strings as a template language.<br><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Templating languages typically "compile" templates into functions through various lexical transformations.</div><div><br></div><div>Consider a template file foo.tem:</div><div><br></div><div>```</div><div>My name is ${<a href="http://this.name" target="_blank">this.name</a>}.</div><div>```</div><div><br></div><div>Lexically transform this into</div><div><br></div><div>```</div><div>function foo() {</div><div>  return `My name is ${<a href="http://this.name" target="_blank">this.name</a>|}.`;</div><div>}</div><div><br></div><div>Then invoke the template as eg</div><div><br></div><div>```</div><div>foo.call({name: 'Bob'})</div><div>```</div><div><br></div><div>Having said that, I doubt if ES6 template strings serve as a useful basis for a full-fledged templating system. To take just one basic example, how would one implement the equivalent of `{{#if}}`?</div><div><br></div><div>Bob</div><div><br></div></div></div></div>
<br><br><br>---------- Forwarded message ----------<br>From: "Mark S. Miller" <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>><br>To: Bob Myers <<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>><br>Cc: es-discuss <<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a>><br>Date: Sun, 13 Sep 2015 16:09:31 -0700<br>Subject: Re: Template strings as a template language.<br><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Sep 13, 2015 at 8:58 AM, Bob Myers <span dir="ltr"><<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Templating languages typically "compile" templates into functions through various lexical transformations.</div><div><br></div><div>Consider a template file foo.tem:</div><div><br></div><div>```</div><div>My name is ${<a href="http://this.name" target="_blank">this.name</a>}.</div><div>```</div><div><br></div><div>Lexically transform this into</div><div><br></div><div>```</div><div>function foo() {</div><div>  return `My name is ${<a href="http://this.name" target="_blank">this.name</a>|}.`;</div><div>}</div><div><br></div><div>Then invoke the template as eg</div><div><br></div><div>```</div><div>foo.call({name: 'Bob'})</div><div>```</div><div><br></div><div>Having said that, I doubt if ES6 template strings serve as a useful basis for a full-fledged templating system. To take just one basic example, how would one implement the equivalent of `{{#if}}`?</div></div></div></div></blockquote><div><br></div><div>What does `{{#if}}` mean?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span><font color="#888888"><div><br></div><div>Bob</div><div><br></div></font></span></div></div></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><br clear="all"><div><br></div>-- <br><div>    Cheers,<br>    --MarkM</div>
</div></div>
<br><br><br>---------- Forwarded message ----------<br>From: Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>><br>To: "Mark S. Miller" <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>><br>Cc: Bob Myers <<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>>, es-discuss <<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a>><br>Date: Sun, 13 Sep 2015 19:14:53 -0400<br>Subject: Re: Template strings as a template language.<br>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="http://this.name" rel="noreferrer" target="_blank">this.name</a>}.<br>
>> ```<br>
>><br>
>> Lexically transform this into<br>
>><br>
>> ```<br>
>> function foo() {<br>
>>   return `My name is ${<a href="http://this.name" rel="noreferrer" 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://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</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://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
><br>
<br>
<br>
<br>
--<br>
Isiah Meadows<br>
<br>
<br><br><br>---------- Forwarded message ----------<br>From: Ron Buckton <<a href="mailto:Ron.Buckton@microsoft.com" target="_blank">Ron.Buckton@microsoft.com</a>><br>To: Isiah Meadows <<a href="mailto:isiahmeadows@gmail.com" target="_blank">isiahmeadows@gmail.com</a>>, "Mark S. Miller" <<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>><br>Cc: Bob Myers <<a href="mailto:rtm@gol.com" target="_blank">rtm@gol.com</a>>, es-discuss <<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a>><br>Date: Mon, 14 Sep 2015 01:04:03 +0000<br>Subject: RE: Template strings as a template language.<br>





<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>

_______________________________________________<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>
</blockquote></div></div></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>es-discuss mailing list</span><br><span><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a></span><br><span><a href="https://mail.mozilla.org/listinfo/es-discuss">https://mail.mozilla.org/listinfo/es-discuss</a></span><br></div></blockquote></body></html>