Make SkyElement more classy.
The syntax for implementing a SkyElement is now: <sky-element name="element-name"> <template> <!-- template here --> </template> <script> module.exports = class extends SkyElement { attached() { // ... } // .. methods here .. }.register(); </script> </sky-element> The register() static method on SkyElement subclasses calls document.registerElement() and returns the generated constructor. It uses the parent <sky-element>'s name attribute to set the name of the element. R=rafaelw@chromium.org Review URL: https://codereview.chromium.org/788943003
This commit is contained in:
parent
6d53b01c8d
commit
0524fc39e4
@ -6,6 +6,7 @@
|
|||||||
<import src="../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
<import src="../framework/xmlhttprequest.sky" as="XMLHttpRequest" />
|
<import src="../framework/xmlhttprequest.sky" as="XMLHttpRequest" />
|
||||||
|
|
||||||
|
<sky-element name="file-browser">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
heading {
|
heading {
|
||||||
@ -21,12 +22,13 @@
|
|||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: 'file-browser',
|
created() {
|
||||||
url: '',
|
this.url = '';
|
||||||
files: [],
|
this.files = [];
|
||||||
directories: [],
|
this.directories = [];
|
||||||
attached: function() {
|
}
|
||||||
|
attached() {
|
||||||
this.url = this.ownerDocument.URL;
|
this.url = this.ownerDocument.URL;
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.open('GET', this.url + '?format=json');
|
xhr.open('GET', this.url + '?format=json');
|
||||||
@ -37,5 +39,6 @@ SkyElement({
|
|||||||
}).bind(this);
|
}).bind(this);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
}
|
}
|
||||||
});
|
}.register();
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-header">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -12,7 +14,7 @@
|
|||||||
<content></content>
|
<content></content>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-header"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-menu-button">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -13,7 +15,7 @@
|
|||||||
<content></content>
|
<content></content>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-menu-button"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-panel-content">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -8,7 +10,7 @@
|
|||||||
<content></content>
|
<content></content>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-panel-content"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-panel-header">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -11,7 +13,7 @@
|
|||||||
<content></content>
|
<content></content>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-panel-header"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-panel">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -10,7 +12,7 @@
|
|||||||
<content></content>
|
<content></content>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-panel"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-scrollable">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -10,7 +12,7 @@
|
|||||||
<content></content>
|
<content></content>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-scrollable"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-search-input">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -19,7 +21,7 @@
|
|||||||
<span class="input-text"><t>flights today to dc by price</t></span>
|
<span class="input-text"><t>flights today to dc by price</t></span>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-search-input"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-title">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -12,7 +14,7 @@
|
|||||||
<content></content>
|
<content></content>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-title"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-toast">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -30,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-toast"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
<import src="../../framework/sky-element/sky-element.sky" as="SkyElement" />
|
||||||
|
|
||||||
|
<sky-element name="app-toolbar">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
:host {
|
:host {
|
||||||
@ -9,7 +11,7 @@
|
|||||||
<content></content>
|
<content></content>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "app-toolbar"
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
<import src="app-scrollable.sky" />
|
<import src="app-scrollable.sky" />
|
||||||
<import src="app-toast.sky" />
|
<import src="app-toast.sky" />
|
||||||
|
|
||||||
|
<sky-element name="flights-app">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
* { box-sizing: border-box; }
|
* { box-sizing: border-box; }
|
||||||
@ -200,7 +201,7 @@
|
|||||||
</app-toast>
|
</app-toast>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
SkyElement({
|
module.exports = class extends SkyElement {
|
||||||
name: "flights-app",
|
}.register();
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
</sky-element>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<sky>
|
<sky>
|
||||||
<import src="flights-app.sky" />
|
<import src="flights-app.sky" as="FlightsAppElement"/>
|
||||||
<style>
|
<style>
|
||||||
sky {
|
sky {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -8,8 +8,8 @@
|
|||||||
<script>
|
<script>
|
||||||
// TODO(esprehn): Work around a bug where having <flights-app /> in the
|
// TODO(esprehn): Work around a bug where having <flights-app /> in the
|
||||||
// page doesn't render anything until the first input event.
|
// page doesn't render anything until the first input event.
|
||||||
addEventListener("load", function() {
|
window.addEventListener("load", function() {
|
||||||
document.querySelector("sky").appendChild(document.createElement("flights-app"));
|
document.querySelector("sky").appendChild(new FlightsAppElement());
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</sky>
|
</sky>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user