Make card-maker auto-update to latest version
This commit is contained in:
parent
4bcbb48158
commit
96ff241199
File diff suppressed because one or more lines are too long
@ -2,22 +2,27 @@ import { LitElement, html } from "./lit-element.js";
|
|||||||
import { createCard, createEntityRow, createElement } from "./lovelace-element.js";
|
import { createCard, createEntityRow, createElement } from "./lovelace-element.js";
|
||||||
import { provideHass } from "./hass.js";
|
import { provideHass } from "./hass.js";
|
||||||
|
|
||||||
|
const VERSION = 2;
|
||||||
|
|
||||||
class ThingMaker extends LitElement {
|
class ThingMaker extends LitElement {
|
||||||
|
static get version() {
|
||||||
|
return VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
static get properties() {
|
static get properties() {
|
||||||
return {
|
return {
|
||||||
'hass': {},
|
|
||||||
'config': {},
|
|
||||||
'noHass': {type: Boolean },
|
'noHass': {type: Boolean },
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
setConfig(config) {
|
setConfig(config) {
|
||||||
this._config = config;
|
this._config = config;
|
||||||
if(!this.el)
|
if(!this.el) {
|
||||||
this.el = this.create(config);
|
this.el = this.create(config);
|
||||||
else
|
|
||||||
this.el.setConfig(config);
|
|
||||||
if(this._hass) this.el.hass = this._hass;
|
if(this._hass) this.el.hass = this._hass;
|
||||||
if(this.noHass) provideHass(this);
|
if(this.noHass) provideHass(this);
|
||||||
|
} else {
|
||||||
|
this.el.setConfig(config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
set config(config) {
|
set config(config) {
|
||||||
this.setConfig(config);
|
this.setConfig(config);
|
||||||
@ -35,7 +40,35 @@ class ThingMaker extends LitElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!customElements.get("card-maker")) {
|
|
||||||
|
const redefineElement = function(element, newClass) {
|
||||||
|
// Non-static properties of class
|
||||||
|
const properties = Object.getOwnPropertyDescriptors(newClass.prototype);
|
||||||
|
for(const [k,v] of Object.entries(properties)) {
|
||||||
|
Object.defineProperty(element, k, v);
|
||||||
|
}
|
||||||
|
// Static properties of class
|
||||||
|
const staticProperties = Object.getOwnPropertyDescriptors(newClass);
|
||||||
|
for(const [k,v] of Object.entries(staticProperties)) {
|
||||||
|
if(k === "prototype") continue;
|
||||||
|
Object.defineProperty(element, k, v);
|
||||||
|
}
|
||||||
|
const superclass = Object.getPrototypeOf(newClass);
|
||||||
|
// Non-static properties of superclass
|
||||||
|
const baseProperties = Object.getOwnPropertyDescriptors(superclass.prototype);
|
||||||
|
for(const [k,v] of Object.entries(baseProperties)) {
|
||||||
|
Object.defineProperty(Object.getPrototypeOf(element).prototype, k, v);
|
||||||
|
}
|
||||||
|
// Static properties of superclassk
|
||||||
|
const staticBaseProperties = Object.getOwnPropertyDescriptors(superclass);
|
||||||
|
for(const [k,v] of Object.entries(staticBaseProperties)) {
|
||||||
|
if(k === "prototype") continue;
|
||||||
|
Object.defineProperty(Object.getPrototypeOf(element), k, v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const cardMaker = customElements.get("card-maker");
|
||||||
|
if(!cardMaker || !cardMaker.version || cardMaker.version < VERSION) {
|
||||||
class CardMaker extends ThingMaker {
|
class CardMaker extends ThingMaker {
|
||||||
create(config) {
|
create(config) {
|
||||||
return createCard(config);
|
return createCard(config);
|
||||||
@ -46,23 +79,39 @@ if(!customElements.get("card-maker")) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(cardMaker) {
|
||||||
|
redefineElement(cardMaker, CardMaker);
|
||||||
|
} else {
|
||||||
customElements.define("card-maker", CardMaker);
|
customElements.define("card-maker", CardMaker);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!customElements.get("element-maker")) {
|
const elementMaker = customElements.get("element-maker");
|
||||||
|
if(!elementMaker || !elementMaker.version || elementMaker.version < VERSION) {
|
||||||
class ElementMaker extends ThingMaker {
|
class ElementMaker extends ThingMaker {
|
||||||
create(config) {
|
create(config) {
|
||||||
return createElement(config);
|
return createElement(config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(elementMaker) {
|
||||||
|
redefineElement(elementMaker, ElementMaker);
|
||||||
|
} else {
|
||||||
customElements.define("element-maker", ElementMaker);
|
customElements.define("element-maker", ElementMaker);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!customElements.get("entity-row-maker")) {
|
const entityRowMaker = customElements.get("entity-row-maker");
|
||||||
|
if(!entityRowMaker || !entityRowMaker.version || entityRowMaker.version < VERSION) {
|
||||||
class EntityRowMaker extends ThingMaker {
|
class EntityRowMaker extends ThingMaker {
|
||||||
create(config) {
|
create(config) {
|
||||||
return createEntityRow(config);
|
return createEntityRow(config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(entityRowMaker) {
|
||||||
|
redefineElement(entityRowMaker, EntityRowMaker);
|
||||||
|
} else {
|
||||||
customElements.define("entity-row-maker", EntityRowMaker);
|
customElements.define("entity-row-maker", EntityRowMaker);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user