Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2251)

Side by Side Diff: sky/framework/sky-element/sky-element.sky

Issue 788943003: Make SkyElement more classy. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Don't change indent. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sky/examples/flights-app/index.sky ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <!-- 1 <!--
2 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Copyright 2014 The Chromium Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be 3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file. 4 // found in the LICENSE file.
5 --> 5 -->
6 <import src="TemplateBinding.sky" /> 6 <import src="TemplateBinding.sky" />
7 <script> 7 <script>
8 var templates = new Map(); 8 var templates = new Map();
9 9
10 function createPrototype(proto, definition) { 10 class SkyElement extends HTMLElement {
11 var result = Object.create(proto); 11
12 var names = Object.getOwnPropertyNames(definition); 12 static register() {
13 for (var i = 0; i < names.length; ++i) { 13 var wrapper = document.currentScript.parentNode;
14 var descriptor = Object.getOwnPropertyDescriptor(definition, names[i]); 14
15 Object.defineProperty(result, names[i], descriptor); 15 if (wrapper.localName !== 'sky-element')
16 throw new Error('No <sky-element>.');
17
18 var tagName = wrapper.getAttribute("name");
19 if (!tagName)
20 throw new Error('<sky-element> must have a name.');
21
22 var template = wrapper.querySelector('template');
23 if (template)
24 templates.set(tagName, template);
25
26 return document.registerElement(tagName, {
27 prototype: this.prototype,
28 });
16 } 29 }
17 return result;
18 }
19 30
20 var BasePrototype = createPrototype(HTMLElement.prototype, { 31 created() {
32 // override
33 }
21 34
22 createdCallback: function() { 35 attached() {
36 // override
37 }
38
39 dettached() {
40 // override
41 }
42
43 attributeChanged(attrName, oldValue, newValue) {
44 // override
45 }
46
47 createdCallback() {
23 this.created(); 48 this.created();
24 }, 49 }
25 50
26 created: function() { 51 attachedCallback() {
27 // override
28 },
29
30 attachedCallback: function() {
31 if (!this.shadowRoot) { 52 if (!this.shadowRoot) {
32 var template = templates.get(this.localName); 53 var template = templates.get(this.localName);
33 if (template) { 54 if (template) {
34 var shadow = this.ensureShadowRoot(); 55 var shadow = this.ensureShadowRoot();
35 shadow.appendChild(template.createInstance(this)); 56 shadow.appendChild(template.createInstance(this));
36 } 57 }
37 } 58 }
38 this.attached(); 59 this.attached();
39 }, 60 }
40 61
41 attached: function() { 62 dettachedCallback() {
42 // override 63 this.dettached();
43 }, 64 }
44 65
45 dettachedCallback: function() { 66 attributeChangedCallback(attrName, oldValue, newValue) {
46 this.dettached();
47 },
48
49 dettached: function() {
50 // override
51 },
52
53 attributeChangedCallback: function(attrName, oldValue, newValue) {
54 // reserved for canonical behavior 67 // reserved for canonical behavior
55 this.attributeChanged(attrName, oldValue, newValue); 68 this.attributeChanged(attrName, oldValue, newValue);
56 },
57
58 attributeChanged: function(attrName, oldValue, newValue) {
59 // override
60 } 69 }
61 });
62
63 function SkyElement(prototype) {
64 var template = document.currentScript.previousElementSibling;
65 if (template && template.localName === 'template')
66 templates.set(prototype.name, template);
67
68 document.registerElement(prototype.name, {
69 prototype: createPrototype(BasePrototype, prototype),
70 });
71 }; 70 };
72 71
73 module.exports = SkyElement; 72 module.exports = SkyElement;
74 </script> 73 </script>
OLDNEW
« no previous file with comments | « sky/examples/flights-app/index.sky ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698