Added IgniteObject to support full end to end properties.

This commit is contained in:
2021-05-25 22:27:23 -07:00
parent 67b4bd60a0
commit d6142ea250
3 changed files with 104 additions and 60 deletions

View File

@ -1,4 +1,4 @@
import { IgniteProperty, IgniteCallback } from './ignite-html.js';
import { IgniteProperty, IgniteCallback, IgniteRenderingContext } from './ignite-html.js';
import { IgniteTemplate } from './ignite-template.js';
/**
@ -139,12 +139,8 @@ class IgniteElement extends HTMLElement {
*/
createVariables() {
var vars = this.variables;
if (vars != null) {
var keys = Object.keys(vars);
for (var i = 0; i < keys.length; i++) {
this[keys[i]] = vars[keys[i]];
}
Object.keys(vars).forEach(name => this[name] = vars[name]);
}
}
@ -154,15 +150,23 @@ class IgniteElement extends HTMLElement {
*/
resetVariables() {
var vars = this.variables;
if (vars != null) {
var keys = Object.keys(vars);
for (var i = 0; i < keys.length; i++) {
this[keys[i]] = vars[keys[i]];
}
Object.keys(vars).forEach(name => this[name] = vars[name]);
}
}
/**
* Gets all the property values from this element and returns it.
*/
getProperties() {
var ret = {};
var props = this.properties;
IgniteRenderingContext.push();
Object.keys(props).forEach(name => ret[name] = this[name]);
IgniteRenderingContext.pop();
return ret;
}
/**
* Creates the getters/setters for properties in this
* ignite element and initializes everything.
@ -170,37 +174,14 @@ class IgniteElement extends HTMLElement {
*/
createProperties() {
var props = this.properties;
if (props != null) {
var keys = Object.keys(props);
for (var i = 0; i < keys.length; i++) {
let propValue = props[keys[i]];
let propName = keys[i];
//Create a new property, if the propValue is a property, use that instead.
var prop = null;
if (propValue instanceof IgniteProperty) {
prop = propValue;
} else {
prop = new IgniteProperty(propValue);
}
this[`_${propName}`] = prop;
Object.defineProperty(this, propName, {
get: () => {
if (IgniteRenderingContext.rendering == false) {
return this[`_${propName}`].value;
} else {
return this[`_${propName}`];
}
},
set: (value) => {
this[`_${propName}`].value = value;
}
Object.keys(props).forEach(name => {
var prop = (props[name] instanceof IgniteProperty ? props[name] : new IgniteProperty(props[name]));
Object.defineProperty(this, name, {
get: () => { return (IgniteRenderingContext.rendering ? prop : prop.value); },
set: (value) => { prop.value = value; }
});
}
});
}
}
@ -210,12 +191,8 @@ class IgniteElement extends HTMLElement {
*/
resetProperties() {
var props = this.properties;
if (props != null) {
var keys = Object.keys(props);
for (var i = 0; i < keys.length; i++) {
this[keys[i]] = props[keys[i]];
}
Object.keys(props).forEach(name => this[name] = props[name]);
}
}