On Tue, Oct 30, 2012 at 6:58 AM, Maciej Stachowiak <[email protected]> wrote:
>
> In the WebApps meeting, we discussed possible approaches to <template> that 
> may ease the transition between polyfilled implementations and native 
> support, avoid HTML/XHTML parsing inconsistency, and in general adding less 
> weirdness to the Web platform.
>
> Here are some possibilities, not necessarily mutually exclusive:
>
> (1) <template src>
>
> Specify templates via external files rather than inline content. External CSS 
> and external scripts are very common, and in most cases inline scripts and 
> style are the exception. It seems likely this will also be true for 
> templates. It's likely desirable to provide this even if there is also some 
> inline form of templates.
>
> (2) <template srcdoc>
>
> Use the same approach as <iframe srcdoc> to specifying content inline while 
> remaining compatible with legacy parsing. The main downside is that the 
> required escaping is ugly and hard to follow, especially in the face of 
> nesting.
>
> (3) <script type=template> (or <script language=template>?)
>
> Define a new script type to use for templates. This provides almost all the 
> syntactic convenience of the original <template> element - the main downside 
> is that, if your template contains a script or another nested template, you 
> have to escape the close script tag in some way.
>
> The contents of the script would be made available as an inert DOM outside 
> the document, via a new IDL attribute on <script> (say, 
> HTMLScriptElement.template).
>
> Here's a comparison of syntaxes:
>
> Template element:
> <template>
>     <div id=foo class=bar></div>
>     <script> something();</script>
>     <template>
>          <div class=nested-template></div>
>     </template>
> </template>
>
> Script template:
> <script type=template>
>     <div id=foo class=bar></div>
>     <script> something();<\/script>
>     <script type=template>
>          <div class=nested-template></div>
>     <\/script>
> </script>
>
> Pros:
> - Similar to the way many JS-implemented templating sches work today
> - Can be polyfilled with full fidelity and no risk of content that's meant to 
> be inert accidentally running
> - Can be translated consistently and compatibly to the XHTML syntax of HTML
> - Less new weirdness. You don't have to create a new construct that appears 
> to have normal markup content, but puts it outside the document.
> - Can be specified (and perhaps even implemented, at least at first) without 
> having to modify the HTML parsing algorithm. In principle, you could specify 
> this as a postprocessing step after parsing, where accessing .template for 
> the first time would be responsible for reparsing the contents and creating 
> the template DOM. In practice, browsers would eventually want to parse in a 
> single pass for performance.
>
>
> Cons:
> - <script type=template> is slightly more verbose than <template>
> - Closing of nested scripts/templates requires some escaping
>
> In my opinion, the advantages of the script template approach outweigh the 
> disadvantages. I wanted to raise it for discussion on the list.

I'm not sure I understand the escaping rules.  Will all \ characters
need to be escaped as well?

How would multiply nested templates work?

<script type=template>
    <h1>Inbox</h1>
    <script type=template>
        <h2>Folder i</h2>
        <script type=template>
            <h3>Email i</h3>
            <script type=template>
                <h4>Recipient i</h4>
            <\\\\/script>
        <\\/script>
    <\/script>
</script>

It seems like the number of backslashes might grow exponentially...

Adam

Reply via email to