blob: aaf130faab83431b0f057c303a10ce166511b705 [file] [log] [blame]
<!--
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-->
<import src="TemplateBinding.sky" />
<script>
var templates = new Map();
class SkyElement extends HTMLElement {
static register() {
var wrapper = document.currentScript.parentNode;
if (wrapper.localName !== 'sky-element')
throw new Error('No <sky-element>.');
var tagName = wrapper.getAttribute("name");
if (!tagName)
throw new Error('<sky-element> must have a name.');
var template = wrapper.querySelector('template');
if (template)
templates.set(tagName, template);
return document.registerElement(tagName, {
prototype: this.prototype,
});
}
created() {
// override
}
attached() {
// override
}
dettached() {
// override
}
attributeChanged(attrName, oldValue, newValue) {
// override
}
createdCallback() {
this.created();
}
attachedCallback() {
if (!this.shadowRoot) {
var template = templates.get(this.localName);
if (template) {
var shadow = this.ensureShadowRoot();
shadow.appendChild(template.createInstance(this));
}
}
this.attached();
}
dettachedCallback() {
this.dettached();
}
attributeChangedCallback(attrName, oldValue, newValue) {
// reserved for canonical behavior
this.attributeChanged(attrName, oldValue, newValue);
}
};
module.exports = SkyElement;
</script>