- From: Ryosuke Niwa <notifications@github.com>
- Date: Fri, 23 Jun 2017 20:51:56 -0700
- To: w3c/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/webcomponents/issues/645/310811695@github.com>
> > Furthermore, for various performance reasons, we really need to have a mechanism to define an in-file ES6 module; a mechanism which allows multiple modules to be defined within a single JS file. Once we have that, then it's very natural to define three modules: one with HTML, one with CSS, and one with JS in a single JS file.
>
> Is this idea presented or discussed anywhere? This is very interesting and I would like to learn more about it.
The idea is to allow a declaration of multiple modules per file.
e.g.
```js
import X from module { export const X = 1; }
import Y from module { export function add(x, y) { return x + y }; }
```
Now suppose we had the capability to import a pure HTML file and a pure CSS file as follows. I'm inventing a new syntax `import X from Y as Z` where `as Z` defines a custom module importation behavior. Also note that `HTMLStyleElement.prototype.sheet` is readonly at the moment but I'm making it writable here to make it possible to set the style created in a script.
```js
import template from 'my-template.html' as HTMLTemplateElement;
import styleSheet from 'my-style.css' as SheetStyle;
MyCustomElement extends HTMLElement {
constructor() {
const root = this.attachShadow({mode: 'closed'});
root.appendChild(document.importNode(template));
root.appendChild(document.createElement('style')).sheet = styleSheet;
}
}
```
Combining these two features we would be able to do something like this:
```js
import template from module `
<div>hello, world</div>
` as HTMLTemplateElement;
import styleSheet from module `
div { color: green; }
` as StyleSheet;
MyCustomElement extends HTMLElement {
constructor() {
const root = this.attachShadow({mode: 'closed'});
root.appendChild(document.importNode(template));
root.appendChild(document.createElement('style')).sheet = styleSheet; // sheet is readonly at the moment.
}
}
```
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/webcomponents/issues/645#issuecomment-310811695
Received on Saturday, 24 June 2017 03:52:30 UTC