Template strings as a template language.

Andrea Giammarchi andrea.giammarchi at gmail.com
Mon Sep 14 11:36:29 UTC 2015


Function is not even closely comparable to eval in this case cause it's
used mostly to opt out from possible surrounding strict directive and it
doesn't need to evaluate in the scope like both templates and eval do. But
yeah, I guess it can be considered a runtime string evaluation. It does
what it's supposed to do and it works even under CSP.

Regards
On 14 Sep 2015 12:12 pm, "Herby Vojčík" <herby at mailbox.sk> wrote:

>
>
> Andrea Giammarchi 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
>>
>
> I had the impression the "no-eval" was in fact "no eval or Function", in
> which case this does not count either.
>
>
>> 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 <mailto: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
>>     <mailto: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 <mailto: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 <mailto:isiahmeadows at gmail.com>
>>>         Sent: ‎9/‎13/‎2015 4:15 PM
>>>         To: Mark S. Miller <mailto:erights at google.com>
>>>         Cc: Bob Myers <mailto:rtm at gol.com>; es-discuss
>>>         <mailto:es-discuss at mozilla.org>
>>>         Subject: Re: Template strings as a template language.
>>>
>>>         On Sun, Sep 13, 2015 at 7:09 PM, Mark S. Miller
>>>         <erights at google.com <mailto:erights at google.com>> wrote:
>>>         >
>>>         >
>>>         > On Sun, Sep 13, 2015 at 8:58 AM, Bob Myers <rtm at gol.com
>>>         <mailto: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
>>>         <
>>> 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 <http://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 <mailto: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
>>>         <
>>> 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 <mailto: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
>>> <
>>> 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 <mailto: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
>>>         <
>>> 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 <mailto:es-discuss at mozilla.org>
>>>         https://mail.mozilla.org/listinfo/es-discuss
>>>
>>
>>         _______________________________________________
>>         es-discuss mailing list
>>         es-discuss at mozilla.org <mailto: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/20150914/2d033638/attachment-0001.html>


More information about the es-discuss mailing list