aurelia / templating

An extensible HTML templating engine supporting databinding, custom elements, attached behaviors and more.
MIT License
116 stars 104 forks source link

Custom elements as table rows break layout when importing resources as first business #668

Open koenbeuk opened 5 years ago

koenbeuk commented 5 years ago

I'm submitting a bug report

Please tell us about your environment:

Current behavior: When using <tr as-element="custom-element"> inside a table, where the custom element starts by requiring other resources, the actual rendering is broken.

Given

...app.html
<template>
  <table>
    <tr as-element="custom-row"></tr>
  </table> 
</template>

...custom-row.html
<template>
  <require from="./custom-element.html></require>
  <td>1</td>
</template>

Gets rendered as:

<table>
  <tr>1</tr>
</table>

Note how the td element is missing. When I remove the from custom-row.html- or when I place the inside the td element, things work as expected.

See: https://gist.run/?id=a5c449b7a1900f729cc36a97003c70bd

Expected/desired behavior: In above example, I would have expected

<table>
  <tr><td>1</td></tr>
</table>
bigopon commented 5 years ago

@koenbeuk thanks for filing this issue. And sorry that somehow I missed it until now. The issue you encountered is because how Aurelia turns a template (or a html file content) into a view factory: it is first passed through native HTML5 parser via simple innerHTML. This means invalid HTML5 structure (like <td/> as a direct child of template, but not the only child type) will be processed differently. In this case, it just gets dropped.

What can be done to avoid this is to make sure only TDs are children of <template/>:

<template>
  <td>
    <require from="..."></require>
  </td>
</template>

Can you try the aboe?

bigopon commented 5 years ago

Here is an example of it working: https://gist.run/?id=45a7d62b74673e35ed667412085baa7d

koenbeuk commented 5 years ago

@bigopon Thanks for the example, I already got it working that way :)

bigopon commented 5 years ago

@koenbeuk nice. I guess we can close this issue?

koenbeuk commented 5 years ago

It's not blocking me anymore, feel free to close if you deem best

bigopon commented 5 years ago

It seems we could really use some doc describing this scenario to help future folks. Would be great if you could help with this @koenbeuk ❤️