Template strings as a template language.

Thomas thomasjamesfoster at bigpond.com
Tue Sep 15 05:24:26 UTC 2015


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.

Thomas 

> On 15 Sep 2015, at 3:42 AM, Andrea Giammarchi <andrea.giammarchi at gmail.com> wrote:
> 
> 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
> 
> ¯\_(ツ)_/¯
> 
>> On Mon, Sep 14, 2015 at 5:23 PM, Thomas <thomasjamesfoster at bigpond.com> wrote:
>> Sorry, I sent that before I saw your other explanation. 
>> 
>> 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).
>> 
>> Have you any plans to make the String.prototype.template function a proposal?
>> 
>> Thomas
>> 
>>> On 15 Sep 2015, at 1:52 AM, Andrea Giammarchi <andrea.giammarchi at gmail.com> wrote:
>>> 
>>> again, Function **is** better and different than eval, but I see this conversation is bringing nothing so I'll just stop explaining.
>>> 
>>> Regards
>>> 
>>>> On Mon, Sep 14, 2015 at 3:47 PM, Thomas <thomasjamesfoster at bigpond.com> wrote:
>>>> Doesn't the code in that gist create functions at runtime from strings? If so that's not any better than eval. 
>>>> 
>>>>> On 14 Sep 2015, at 8:50 PM, Andrea Giammarchi <andrea.giammarchi at gmail.com> wrote:
>>>>> 
>>>>> sorry, early send (I think it was a ctrl+return ? ) ... I was saying ..
>>>>> 
>>>>> without using eval and already discussed months ago:
>>>>> https://gist.github.com/WebReflection/8f227532143e63649804
>>>>> 
>>>>> it's based on the glorious `with` statement and it works like a charm
>>>>> 
>>>>> Regards
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>>> On Mon, Sep 14, 2015 at 11:49 AM, Andrea Giammarchi <andrea.giammarchi at gmail.com> wrote:
>>>>>> without using eval, discussed already months ago
>>>>>> 
>>>>>> 
>>>>>>> On Mon, Sep 14, 2015 at 6:03 AM, Thomas <thomasjamesfoster at bigpond.com> wrote:
>>>>>>> For those interested, this gist better shows what's being discussed: https://gist.github.com/thomasfoster96/193e7c08aae499f810a1
>>>>>>> 
>>>>>>> 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).
>>>>>>> 
>>>>>>> Thomas
>>>>>>> 
>>>>>>> On 14 Sep 2015, at 11:04 AM, Ron Buckton <Ron.Buckton at microsoft.com> wrote:
>>>>>>> 
>>>>>>>> This is theoretically possible:
>>>>>>>> 
>>>>>>>> ```
>>>>>>>> let t = $template`
>>>>>>>>   ${$item.permalink}
>>>>>>>>   ${$each($item.comments)`
>>>>>>>>     ${$parent.permalink}
>>>>>>>>     ${$if($item.title)`
>>>>>>>>       ${$parent.permalink}
>>>>>>>>     `}
>>>>>>>>   `}
>>>>>>>> `;
>>>>>>>> let s = t(data);
>>>>>>>> ```
>>>>>>>> 
>>>>>>>> ...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.
>>>>>>>> 
>>>>>>>> Ron
>>>>>>>> From: Isiah Meadows
>>>>>>>> Sent: ‎9/‎13/‎2015 4:15 PM
>>>>>>>> To: Mark S. Miller
>>>>>>>> Cc: Bob Myers; es-discuss
>>>>>>>> Subject: Re: Template strings as a template language.
>>>>>>>> 
>>>>>>>> On Sun, Sep 13, 2015 at 7:09 PM, Mark S. Miller <erights at google.com> wrote:
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > On Sun, Sep 13, 2015 at 8:58 AM, Bob Myers <rtm at gol.com> wrote:
>>>>>>>> >>
>>>>>>>> >> Templating languages typically "compile" templates into functions through
>>>>>>>> >> various lexical transformations.
>>>>>>>> >>
>>>>>>>> >> Consider a template file foo.tem:
>>>>>>>> >>
>>>>>>>> >> ```
>>>>>>>> >> My name is ${https://na01.safelinks.protection.outlook.com/?url=this.name&data=01%7c01%7cron.buckton%40microsoft.com%7ce705066eae3849ee21f008d2bc913033%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=CY6YpX1n5jLScYGX2W1tIi2ndGlA7WI8ZTJUZjDL2Gw%3d}.
>>>>>>>> >> ```
>>>>>>>> >>
>>>>>>>> >> Lexically transform this into
>>>>>>>> >>
>>>>>>>> >> ```
>>>>>>>> >> function foo() {
>>>>>>>> >>   return `My name is ${this.name|}.`;
>>>>>>>> >> }
>>>>>>>> >>
>>>>>>>> >> Then invoke the template as eg
>>>>>>>> >>
>>>>>>>> >> ```
>>>>>>>> >> foo.call({name: 'Bob'})
>>>>>>>> >> ```
>>>>>>>> >>
>>>>>>>> >> 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}}`?
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > What does `{{#if}}` mean?
>>>>>>>> >
>>>>>>>> 
>>>>>>>> An example from Handlebars' website (which is likely where he drew the
>>>>>>>> syntax from):
>>>>>>>> 
>>>>>>>> ```
>>>>>>>> {{permalink}}
>>>>>>>> {{#each comments}}
>>>>>>>>   {{../permalink}}
>>>>>>>> 
>>>>>>>>   {{#if title}}
>>>>>>>>     {{../permalink}}
>>>>>>>>   {{/if}}
>>>>>>>> {{/each}}
>>>>>>>> ```
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> >> Bob
>>>>>>>> >>
>>>>>>>> >>
>>>>>>>> >> _______________________________________________
>>>>>>>> >> es-discuss mailing list
>>>>>>>> >> es-discuss at mozilla.org
>>>>>>>> >> 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
>>>>>>>> >>
>>>>>>>> >
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > --
>>>>>>>> >     Cheers,
>>>>>>>> >     --MarkM
>>>>>>>> >
>>>>>>>> > _______________________________________________
>>>>>>>> > es-discuss mailing list
>>>>>>>> > es-discuss at mozilla.org
>>>>>>>> > 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
>>>>>>>> >
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> -- 
>>>>>>>> Isiah Meadows
>>>>>>>> _______________________________________________
>>>>>>>> es-discuss mailing list
>>>>>>>> es-discuss at mozilla.org
>>>>>>>> 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
>>>>>>>> _______________________________________________
>>>>>>>> es-discuss mailing list
>>>>>>>> es-discuss at mozilla.org
>>>>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> es-discuss mailing list
>>>>>>> es-discuss at mozilla.org
>>>>>>> https://mail.mozilla.org/listinfo/es-discuss
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150915/ff183e20/attachment.html>


More information about the es-discuss mailing list