-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathpercentTemplate.mjs
More file actions
64 lines (62 loc) · 1.54 KB
/
percentTemplate.mjs
File metadata and controls
64 lines (62 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* @typedef DynamicElement
* @property {HTMLElement} element
* @property {String} originalText
*/
export class DynamicElement {
constructor(element = null, value = {}, useInnerHTML = false) {
this.value = value;
this._element = element;
this._useInnerHTML = useInnerHTML;
this.reloadTemplate();
}
reloadTemplate() {
let strTemplate;
if (this.element === null) {
strTemplate = "";
} else if (this.useInnerHTML) {
strTemplate = this.element.innerHTML;
} else {
strTemplate = this.element.innerText;
}
this.template = strTemplate.split("%");
this.update();
}
get element() { return this._element; }
set element(element) {
this._element = element;
this.reloadTemplate();
}
get useInnerHTML() { return this._useInnerHTML; }
set useInnerHTML(useInnerHTML) {
this._useInnerHTML = useInnerHTML;
this.reloadTemplate();
}
get parent() { return this.element.parentElement; }
update(v = {}) {
Object.assign(this.value, v);
if (this.element === null) {
return;
}
const newText = this.template.map(
(s, i) => {
if (i % 2 === 0) {
return s;
} else if (s === "") {
return "%";
} else {
return this.value[s];
}
}
).join("");
if (this._useInnerHTML) {
if (this.element.innerHTML !== newText) {
this.element.innerHTML = newText;
}
} else {
if (this.element.innerText !== newText) {
this.element.innerText = newText;
}
}
}
};