Skip to content
This repository was archived by the owner on May 19, 2023. It is now read-only.

Commit ebdddf3

Browse files
committed
refactor: compile on demand l-html
1 parent dd72554 commit ebdddf3

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

src/core/directives/html.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,27 @@ import compile from '../../core/compile';
22
import { directives } from '../../core/directive';
33
import render from '../../core/render';
44
import { COMPONENT_FLAG } from '../../models/generics';
5-
import { DirectiveProps } from '../../models/structs';
5+
import { ASTNode, DirectiveProps } from '../../models/structs';
66
import adjustDeps from '../utils/adjustDeps';
77
import { getElementCustomProp, setElementCustomProp } from '../utils/elementCustomProp';
8+
import { hasDirectiveRE } from '../utils/patterns';
89

910
export const htmlDirective = ({ el, data, state, node }: DirectiveProps): void => {
1011
node = node!;
11-
const marker = getElementCustomProp(el, COMPONENT_FLAG);
12+
const marker = getElementCustomProp(el, COMPONENT_FLAG) as ASTNode[];
1213
const ret = data.compute(state) ?? data.value;
1314

1415
if (ret !== el.innerHTML) {
1516
el.innerHTML = ret;
1617

17-
const ast = compile(el, state, true);
18+
if (hasDirectiveRE().test(ret)) {
19+
const ast = marker ?? compile(el, state, true);
1820

19-
if (!marker) adjustDeps(ast, data.deps, node, 'html');
21+
if (!marker) adjustDeps(ast, data.deps, node, 'html');
2022

21-
render(ast, directives, state, data.deps);
23+
render(ast, directives, state, data.deps);
2224

23-
setElementCustomProp(el, COMPONENT_FLAG, true);
25+
setElementCustomProp(el, COMPONENT_FLAG, ast);
26+
}
2427
}
2528
};

src/core/directives/text.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { DirectiveProps } from '../../models/structs';
22

3-
export const textDirective = ({ el, parts, data, state }: DirectiveProps): void => {
3+
export const textDirective = ({ el, data, state }: DirectiveProps): void => {
44
const ret = data.compute(state) ?? data.value;
5-
const prop = parts[1] === 'perf' ? 'textContent' : 'innerText';
6-
if (ret !== el[prop]) {
7-
el[prop] = ret;
5+
if (ret !== el.textContent) {
6+
el.textContent = ret;
87
}
98
};

0 commit comments

Comments
 (0)