dom-render 1.0.44 → 1.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Config.d.ts +2 -0
- package/DomRenderProxy.d.ts +1 -1
- package/DomRenderProxy.js +38 -23
- package/README.MD +264 -101
- package/RawSet.js +3 -1
- package/assets/banner.png +0 -0
- package/dist/Config.d.ts +2 -0
- package/dist/DomRenderProxy.d.ts +1 -1
- package/dist/bundle.js +185 -51
- package/dist/bundle.js.map +1 -1
- package/dist/events/EventManager.d.ts +4 -2
- package/dist/lifecycle/OnBeforeReturnGet.d.ts +3 -0
- package/dist/lifecycle/OnBeforeReturnSet.d.ts +3 -0
- package/dist/types/Types.d.ts +3 -0
- package/dist/utils/dom/DomUtils.d.ts +4 -4
- package/events/EventManager.d.ts +4 -2
- package/events/EventManager.js +102 -28
- package/lifecycle/OnBeforeReturnGet.d.ts +3 -0
- package/lifecycle/OnBeforeReturnGet.js +1 -0
- package/lifecycle/OnBeforeReturnSet.d.ts +3 -0
- package/lifecycle/OnBeforeReturnSet.js +1 -0
- package/package.json +1 -1
- package/types/Types.d.ts +3 -0
- package/types/Types.js +6 -1
- package/utils/dom/DomUtils.d.ts +4 -4
- package/utils/dom/DomUtils.js +3 -1
- package/Shield.d.ts +0 -3
- package/Shield.js +0 -6
- package/dist/Shield.d.ts +0 -3
package/Config.d.ts
CHANGED
@@ -18,6 +18,8 @@ export interface Config {
|
|
18
18
|
onElementInit?: (name: string, obj: any, rawSet: RawSet) => void;
|
19
19
|
onAttrInit?: (name: string, attrValue: string, obj: any, rawSet: RawSet) => void;
|
20
20
|
proxyExcludeTyps?: ConstructorType<any>[];
|
21
|
+
proxyExcludeOnBeforeReturnSets?: string[];
|
22
|
+
proxyExcludeOnBeforeReturnGets?: string[];
|
21
23
|
scripts?: {
|
22
24
|
[n: string]: any;
|
23
25
|
};
|
package/DomRenderProxy.d.ts
CHANGED
@@ -14,7 +14,7 @@ export declare class DomRenderProxy<T extends object> implements ProxyHandler<T>
|
|
14
14
|
initRender(target: Node): void;
|
15
15
|
getRawSets(): RawSet[];
|
16
16
|
render(raws?: RawSet[]): void;
|
17
|
-
root(paths: string[], value
|
17
|
+
root(paths: string[], value?: any, lastDoneExecute?: boolean): string[];
|
18
18
|
set(target: T, p: string | symbol, value: any, receiver: T): boolean;
|
19
19
|
get(target: T, p: string | symbol, receiver: any): any;
|
20
20
|
has(target: T, p: string | symbol): boolean;
|
package/DomRenderProxy.js
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
import { RawSet } from './RawSet';
|
2
2
|
import { eventManager } from './events/EventManager';
|
3
3
|
import { ScriptUtils } from './utils/script/ScriptUtils';
|
4
|
-
import { Shield } from './
|
4
|
+
import { Shield } from './types/Types';
|
5
|
+
var excludeGetSetPropertys = ['onBeforeReturnGet', 'onBeforeReturnSet', '__domrender_components', '__render', '_DomRender_isFinal', '_domRender_ref', '_rawSets', '_domRender_proxy', '_targets', '_DomRender_origin', '_DomRender_ref', '_DomRender_proxy'];
|
5
6
|
var DomRenderProxy = (function () {
|
6
7
|
function DomRenderProxy(_domRender_origin, target, config) {
|
7
8
|
this._domRender_origin = _domRender_origin;
|
@@ -84,14 +85,17 @@ var DomRenderProxy = (function () {
|
|
84
85
|
}
|
85
86
|
});
|
86
87
|
};
|
87
|
-
DomRenderProxy.prototype.root = function (paths, value) {
|
88
|
+
DomRenderProxy.prototype.root = function (paths, value, lastDoneExecute) {
|
88
89
|
var _this = this;
|
90
|
+
if (lastDoneExecute === void 0) { lastDoneExecute = true; }
|
91
|
+
var fullPaths = [];
|
89
92
|
if (this._domRender_ref.size > 0) {
|
90
93
|
this._domRender_ref.forEach(function (it, key) {
|
91
94
|
if ('_DomRender_isProxy' in key) {
|
92
95
|
it.forEach(function (sit) {
|
93
96
|
var _a;
|
94
|
-
(_a = key._DomRender_proxy) === null || _a === void 0 ? void 0 : _a.root(paths.concat(sit), value);
|
97
|
+
var items = (_a = key._DomRender_proxy) === null || _a === void 0 ? void 0 : _a.root(paths.concat(sit), value, lastDoneExecute);
|
98
|
+
fullPaths.push(items.join(','));
|
95
99
|
});
|
96
100
|
}
|
97
101
|
});
|
@@ -99,37 +103,47 @@ var DomRenderProxy = (function () {
|
|
99
103
|
else {
|
100
104
|
var strings = paths.reverse();
|
101
105
|
var fullPathStr_1 = strings.join('.');
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
106
|
+
if (lastDoneExecute) {
|
107
|
+
var iterable = this._rawSets.get(fullPathStr_1);
|
108
|
+
var front = strings.slice(0, strings.length - 1).join('.');
|
109
|
+
var last = strings[strings.length - 1];
|
110
|
+
if (!isNaN(Number(last)) && Array.isArray(ScriptUtils.evalReturn('this.' + front, this._domRender_proxy))) {
|
111
|
+
var aIterable = this._rawSets.get(front);
|
112
|
+
if (aIterable) {
|
113
|
+
this.render(Array.from(aIterable));
|
114
|
+
}
|
109
115
|
}
|
110
|
-
|
111
|
-
|
112
|
-
this.render(Array.from(iterable));
|
113
|
-
}
|
114
|
-
this._targets.forEach(function (it) {
|
115
|
-
if (it.nodeType === Node.DOCUMENT_FRAGMENT_NODE || it.nodeType === Node.ELEMENT_NODE) {
|
116
|
-
var targets = eventManager.findAttrElements(it, _this.config);
|
117
|
-
eventManager.changeVar(_this._domRender_proxy, targets, "this." + fullPathStr_1);
|
116
|
+
else if (iterable) {
|
117
|
+
this.render(Array.from(iterable));
|
118
118
|
}
|
119
|
-
|
119
|
+
this._targets.forEach(function (it) {
|
120
|
+
if (it.nodeType === Node.DOCUMENT_FRAGMENT_NODE || it.nodeType === Node.ELEMENT_NODE) {
|
121
|
+
var targets = eventManager.findAttrElements(it, _this.config);
|
122
|
+
eventManager.changeVar(_this._domRender_proxy, targets, "this." + fullPathStr_1);
|
123
|
+
}
|
124
|
+
});
|
125
|
+
}
|
126
|
+
fullPaths.push(fullPathStr_1);
|
120
127
|
}
|
128
|
+
return fullPaths;
|
121
129
|
};
|
122
130
|
DomRenderProxy.prototype.set = function (target, p, value, receiver) {
|
131
|
+
var _a, _b, _c, _d;
|
123
132
|
if (typeof p === 'string') {
|
124
133
|
value = this.proxy(receiver, value, p);
|
125
134
|
}
|
126
135
|
target[p] = value;
|
136
|
+
var fullPath;
|
127
137
|
if (typeof p === 'string') {
|
128
|
-
this.root([p], value);
|
138
|
+
fullPath = this.root([p], value);
|
139
|
+
}
|
140
|
+
if (('onBeforeReturnSet' in receiver) && typeof p === 'string' && !((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.proxyExcludeOnBeforeReturnSets) !== null && _b !== void 0 ? _b : []).concat(excludeGetSetPropertys).includes(p)) {
|
141
|
+
(_d = (_c = receiver) === null || _c === void 0 ? void 0 : _c.onBeforeReturnSet) === null || _d === void 0 ? void 0 : _d.call(_c, p, value, fullPath);
|
129
142
|
}
|
130
143
|
return true;
|
131
144
|
};
|
132
145
|
DomRenderProxy.prototype.get = function (target, p, receiver) {
|
146
|
+
var _a, _b, _c, _d;
|
133
147
|
if (p === '_DomRender_origin') {
|
134
148
|
return this._domRender_origin;
|
135
149
|
}
|
@@ -142,11 +156,12 @@ var DomRenderProxy = (function () {
|
|
142
156
|
else {
|
143
157
|
var it_1 = target[p];
|
144
158
|
if (it_1 && typeof it_1 === 'object' && ('_DomRender_isProxy' in it_1) && Object.prototype.toString.call(it_1._DomRender_origin) === '[object Date]') {
|
145
|
-
|
159
|
+
it_1 = it_1._DomRender_origin;
|
146
160
|
}
|
147
|
-
|
148
|
-
|
161
|
+
if (('onBeforeReturnGet' in receiver) && typeof p === 'string' && !((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.proxyExcludeOnBeforeReturnGets) !== null && _b !== void 0 ? _b : []).concat(excludeGetSetPropertys).includes(p)) {
|
162
|
+
(_d = (_c = receiver) === null || _c === void 0 ? void 0 : _c.onBeforeReturnGet) === null || _d === void 0 ? void 0 : _d.call(_c, p, it_1, this.root([p], it_1, false));
|
149
163
|
}
|
164
|
+
return it_1;
|
150
165
|
}
|
151
166
|
};
|
152
167
|
DomRenderProxy.prototype.has = function (target, p) {
|
package/README.MD
CHANGED
@@ -1,117 +1,280 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+

|
2
|
+
[](https://www.npmjs.com/package/dom-render) [](LICENSE.md) [](https://discord.gg/PW56dpns) [](https://github.com/visualkhh/dom-render)
|
3
|
+
# Our primary goals are
|
4
|
+
- view template engine
|
5
|
+
- Dom control and reorder
|
6
|
+
- all internal variables are managed by proxy. (DomRenderProxy)
|
7
|
+
---
|
8
|
+
|
9
|
+
# 🚀 Quick start
|
5
10
|
```shell
|
6
11
|
npm install dom-render
|
7
12
|
````
|
13
|
+
---
|
14
|
+
# 😃 examples
|
15
|
+
- [examples project](./example)
|
16
|
+
---
|
17
|
+
|
18
|
+
# 📄 Code description
|
19
|
+
## initialized
|
8
20
|
```html
|
9
|
-
<!doctype html>
|
10
|
-
<html lang="en">
|
11
|
-
<head>
|
12
|
-
<meta charset="utf-8">
|
13
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
14
|
-
<meta name="description" content="">
|
15
|
-
<title>dom-render</title>
|
16
|
-
</head>
|
17
|
-
<body id="app">
|
18
|
-
<h1>template</h1>
|
19
|
-
<h2>print</h2>
|
20
|
-
<div>${this.name}</div>
|
21
|
-
<div>${this.office.addr.first}, ${this.office.addr.last}, ${this.office.addr.street} (${this.office.name})</div>
|
22
|
-
<div dr="this.office.addr.street">${this.getOfficeFullAddr()}</div>
|
23
|
-
|
24
|
-
<h2>df-if</h2>
|
25
|
-
<div dr-if="true"> true</div>
|
26
|
-
<div dr-if="this.gender==='M'"> gender: M</div>
|
27
|
-
|
28
|
-
<h2>df-for, of</h2>
|
29
|
-
<div dr-for="var i = 0; i < this.friends.length; i++"> friend</div>
|
30
|
-
<div dr-for-of="this.friends"> ${#it#.name}</div>
|
31
|
-
<div dr-for="var i = 1 ; i <= 9 ; i++" dr-it="i">
|
32
|
-
${#it#} *
|
33
|
-
<scope dr-for="var y = 1 ; y <= 9 ; y++" dr-it="y" dr-var="superIt=#it#" dr-strip="true">
|
34
|
-
#it# = ${var.superIt * #it#}
|
35
|
-
</scope>
|
36
|
-
</div>
|
37
|
-
|
38
|
-
<h2>df-inner-text</h2>
|
39
|
-
<div dr-strip="true" dr-inner-text="'<b>aa</b> <button dr-event-click=\'alert(1)\'>aa</button>'" > friend</div>
|
40
|
-
|
41
|
-
<h2>df-inner-html</h2>
|
42
|
-
<div dr-strip="true" dr-inner-html="'<b>aa</b> <button dr-event-click=\'alert(1)\'>aa</button>'" > friend</div>
|
43
|
-
|
44
|
-
<h1>event</h1>
|
45
|
-
<h2>dr-event, click, change, input, keyup, keydown</h2>
|
46
|
-
<div>
|
47
|
-
click: <button dr-event-click="this.name = 'name' + new Date()">click</button> <br>
|
48
|
-
change: <input type="text" dr-event-change="this.name = $target.value"> <br>
|
49
|
-
input: <input type="text" dr-event-input="this.name = $target.value"> <br>
|
50
|
-
keyup: <input type="text" dr-event-keyup="this.name = $target.value"> <br>
|
51
|
-
keydown: <input type="text" dr-event-keydown="this.name = $target.value"><br>
|
52
|
-
submit: <form dr-event-submit="console.log($event); $event.preventDefault();"><input type="text"> <button type="submit">submit</button></form><br>
|
53
|
-
window-event-popstate: <input type="text" dr-window-event-popstate="alert(this.name)"><br>
|
54
|
-
</div>
|
55
|
-
|
56
|
-
<h2>dr-value, value-link</h2>
|
57
|
-
<div>
|
58
|
-
dr-value: <input type="text" dr-value="this.office.name"> <br>
|
59
|
-
dr-value-link: <input type="text" dr-value-link="this.office.addr.street"> <br>
|
60
|
-
</div>
|
61
|
-
|
62
|
-
<h1>attribute</h1>
|
63
|
-
<h2>dr-attr</h2>
|
64
|
-
<textarea dr-attr="{rows: this.age/2, cols: this.age}"></textarea>
|
65
|
-
<h2>dr-style</h2>
|
66
|
-
<div dr-style="{fontSize: this.age+'px'}"> style </div>
|
67
|
-
<button dr-event-click="this.age = Math.floor(Math.random() * 20)"> change age</button>
|
68
|
-
|
69
|
-
<h1>lifeCycle</h1>
|
70
|
-
<h2>dr-on-init</h2>
|
71
|
-
<div>
|
72
|
-
<input dr-on-init="this.onInitElement" value="init-test-value">
|
73
|
-
</div>
|
74
|
-
<script src="./src/index.ts"></script>
|
75
|
-
</body>
|
76
|
-
</html>
|
21
|
+
<!doctype html><html lang="en"><body id="app"></body></html>
|
77
22
|
```
|
78
23
|
```typescript
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
24
|
+
const target = document.querySelector('#app');
|
25
|
+
const data = DomRender.run({name: 'my name is dom-render'}, target);
|
26
|
+
data.name = 'modify name';
|
27
|
+
```
|
28
|
+
## print and call
|
29
|
+
```html
|
30
|
+
<div>${this.name}</div>
|
31
|
+
<div>${this.office.addr.first}, ${this.office.addr.last}, ${this.office.addr.street} (${this.office.name})</div>
|
32
|
+
<div dr="this.office.addr.street">${this.getOfficeFullAddr()}</div>
|
33
|
+
```
|
34
|
+
## dr-if
|
35
|
+
```html
|
36
|
+
<div dr-if="true">true</div>
|
37
|
+
<div dr-if="this.gender==='M'"> gender: M</div>
|
38
|
+
```
|
39
|
+
## dr-for, dr-for-of
|
40
|
+
```html
|
41
|
+
<div dr-for="var i = 0; i < this.friends.length; i++"> friend</div>
|
42
|
+
<div dr-for-of="this.friends"> ${#it#.name}</div>
|
43
|
+
<div dr-for="var i = 1 ; i <= 9 ; i++" dr-it="i">
|
44
|
+
${#it#} *
|
45
|
+
<scope dr-for="var y = 1 ; y <= 9 ; y++" dr-it="y" dr-var="superIt=#it#" dr-strip="true">
|
46
|
+
#it# = ${var.superIt * #it#}
|
47
|
+
</scope>
|
48
|
+
</div>
|
49
|
+
```
|
92
50
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
51
|
+
## dr-inner-text, dr-inner-html
|
52
|
+
```html
|
53
|
+
<div dr-inner-text="'<b>aa</b> <button dr-event-click=\'alert(1)\'>aa</button>'"> friend</div>
|
54
|
+
<div dr-inner-html="'<b>aa</b> <button dr-event-click=\'alert(1)\'>aa</button>'"> friend</div>
|
55
|
+
```
|
56
|
+
|
57
|
+
## event
|
58
|
+
dr-event-(name)
|
59
|
+
- click, mousedown, mouseup, dblclick, mouseover, mouseout, mousemove, mouseenter, mouseleave, contextmenu, keyup, keydown, keypress, change, input, submit, resize, focus, blur
|
60
|
+
- ref: element
|
61
|
+
- variable: $event, $target
|
62
|
+
```html
|
63
|
+
click: <button dr-event-click="this.name = 'name' + new Date()">click</button> <br>
|
64
|
+
change: <input type="text" dr-event-change="this.name = $target.value"> <br>
|
65
|
+
input: <input type="text" dr-event-input="this.name = $target.value"> <br>
|
66
|
+
keyup: <input type="text" dr-event-keyup="this.name = $target.value"> <br>
|
67
|
+
...
|
68
|
+
keydown: <input type="text" dr-event-keydown="this.name = $target.value"><br>
|
69
|
+
submit: <form dr-event-submit="console.log($event); $event.preventDefault();"><input type="text"> <button type="submit">submit</button></form><br>
|
70
|
+
```
|
71
|
+
|
72
|
+
dr-window-event-popstate
|
73
|
+
- ref: window
|
74
|
+
- variable: $target
|
75
|
+
```html
|
76
|
+
window-event-popstate: <input type="text" dr-window-event-popstate="alert(this.name)"><br>
|
77
|
+
```
|
78
|
+
|
79
|
+
dr-event
|
80
|
+
- other event
|
81
|
+
- ref: element
|
82
|
+
- variable: $params, $event
|
83
|
+
```html
|
84
|
+
<input dr-event:bind='eventName1, eventName2' dr-event="console.log('event', $params, $event)" type="text">
|
85
|
+
```
|
86
|
+
|
87
|
+
## dr-value, value-link
|
88
|
+
```html
|
89
|
+
dr-value: <input type="text" dr-value="this.office.name"> <br>
|
90
|
+
dr-value-link: <input type="text" dr-value-link="this.office.addr.street"> <br>
|
91
|
+
```
|
92
|
+
|
93
|
+
## dr-attr
|
94
|
+
```html
|
95
|
+
<textarea dr-attr="{rows: this.age/2, cols: this.age}"></textarea>
|
96
|
+
```
|
97
|
+
|
98
|
+
## dr-class
|
99
|
+
```html
|
100
|
+
<div dr-class="{big: this.age > 50, red: this.age > 50}">
|
101
|
+
<div dr-class="'big yellow ' + (this.age > 50 ? 'old' : 'young')">
|
102
|
+
<div dr-class="['small', 'yellow']">
|
103
|
+
```
|
104
|
+
|
105
|
+
## dr-style
|
106
|
+
```html
|
107
|
+
<div dr-style="{fontSize: this.age + 'px'}"> style </div>
|
108
|
+
<div dr-style="{'font-size': '20px'}"> style</div>
|
109
|
+
<div dr-style="'font-size: ' + this.age +'px; margin: ' + this.age + 'px'"> style </div>
|
110
|
+
<div dr-style="['font-size: ' + this.age +'px', 'margin: ' + this.age + 'px']"> style </div>
|
111
|
+
```
|
112
|
+
|
113
|
+
|
114
|
+
## dr-strip
|
115
|
+
as-is
|
116
|
+
```html
|
117
|
+
<div dr-strip="true"><span>hello</span></div>
|
118
|
+
```
|
119
|
+
to-be
|
120
|
+
```html
|
121
|
+
<span>hello</span>
|
122
|
+
```
|
123
|
+
|
124
|
+
## dr-on-init
|
125
|
+
```html
|
126
|
+
<input dr-on-init="this.onInitElement">
|
127
|
+
```
|
99
128
|
|
100
|
-
|
101
|
-
|
129
|
+
## dr-before, dr-after
|
130
|
+
```html
|
131
|
+
<div dr-before="console.log('process before')" dr-after="console.log('process after')"></div>
|
132
|
+
```
|
133
|
+
## dr-complete
|
134
|
+
```html
|
135
|
+
<select dr-value-link="this.currentContry" dr-event-change="this.contryChange($event)">
|
136
|
+
<option dr-for-of="this.languages" dr-value="#it#.key" dr-complete="this.currentContry='defaultValue'">${#it#.title}</option>
|
137
|
+
</select>
|
138
|
+
```
|
139
|
+
|
140
|
+
---
|
141
|
+
# LifeCycle
|
142
|
+
```
|
143
|
+
* OnInitRender
|
144
|
+
- onInitRender(): init render call
|
145
|
+
```
|
146
|
+
---
|
147
|
+
|
148
|
+
# Script
|
149
|
+
```typescript
|
150
|
+
new DomRender.run(obj, target, {
|
151
|
+
scripts: {
|
152
|
+
concat: function (head: string, tail: string) {
|
153
|
+
return head + tail;
|
102
154
|
}
|
155
|
+
}
|
156
|
+
});
|
157
|
+
```
|
158
|
+
using script
|
159
|
+
```typescript
|
160
|
+
const data = config.scripts.concat('head', 'tail')
|
161
|
+
```
|
162
|
+
```html
|
163
|
+
<div>${$scripts.concat('head', 'tail')}</div>
|
164
|
+
<div dr-if="$scripts.concat('wow', 'good') === 'wowgood'"> is wowgood</div>
|
165
|
+
```
|
103
166
|
|
104
|
-
|
105
|
-
|
167
|
+
---
|
168
|
+
# Component
|
169
|
+
```typescript
|
170
|
+
export namespace Profile {
|
171
|
+
export const templat = '<div>aaaaa${this.name}aaaaa </div>';
|
172
|
+
export const styles = ['p {color: red}', 'div {margin: ${this.margin} + \'px\' }'];
|
173
|
+
export class Component {
|
174
|
+
public name = 'default name';
|
175
|
+
public margin = 5;
|
176
|
+
public say() {
|
177
|
+
console.log('say!~')
|
106
178
|
}
|
179
|
+
}
|
180
|
+
}
|
181
|
+
|
182
|
+
new DomRender.run(obj, target, {
|
183
|
+
targetElements: [
|
184
|
+
RawSet.createComponentTargetElement('my-element', (e, o, r) => new Profile.Component(), Profile.templat, Profile.styles, scripts)
|
185
|
+
],
|
186
|
+
});
|
187
|
+
```
|
188
|
+
using component
|
189
|
+
```html
|
190
|
+
<my-element dr-on-init="$component.say();"></my-element>
|
191
|
+
```
|
192
|
+
- attribute
|
193
|
+
- dr-on-init: component created init call script
|
194
|
+
- $component: component instance
|
195
|
+
- $element: element instance
|
196
|
+
- $attribute: element attribute object
|
197
|
+
- $innerHTML: element innerHTML string
|
198
|
+
---
|
107
199
|
|
108
|
-
|
109
|
-
|
200
|
+
# Detect Get, Set
|
201
|
+
OnBeforeReturnSet
|
202
|
+
```typescript
|
203
|
+
export interface OnBeforeReturnSet {
|
204
|
+
onBeforeReturnSet(name: string, value: any, fullPath?: string[]): void;
|
205
|
+
}
|
206
|
+
```
|
207
|
+
OnBeforeReturnGet
|
208
|
+
```typescript
|
209
|
+
export interface OnBeforeReturnGet {
|
210
|
+
onBeforeReturnGet(name: string, value: any, fullPath?: string[]): void;
|
211
|
+
}
|
212
|
+
```
|
213
|
+
|
214
|
+
using detect
|
215
|
+
```typescript
|
216
|
+
{
|
217
|
+
name: 'dom-render'
|
218
|
+
onBeforeReturnSet: (name: string, value: any, fullpath: string[]) => {
|
219
|
+
console.log('set name-->', name, value, fullpath);
|
220
|
+
}
|
221
|
+
onBeforeReturnGet: (name: string, value: any, fullpath: string[]) => {
|
222
|
+
console.log('get name-->', name, value, fullpath);
|
110
223
|
}
|
111
224
|
}
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
225
|
+
```
|
226
|
+
exclude detect property: Config
|
227
|
+
- proxyExcludeOnBeforeReturnGets: ['propertyName']
|
228
|
+
- proxyExcludeOnBeforeReturnSets: ['propertyName']
|
229
|
+
---
|
230
|
+
|
231
|
+
# Proxy
|
232
|
+
all internal variables are managed by proxy. (DomRenderProxy)
|
233
|
+
### exclude proxy (situation: Maximum call stack error)
|
234
|
+
exclude detect property: Config
|
235
|
+
- proxyExcludeTyps: [Class...]
|
236
|
+
|
237
|
+
Code base
|
238
|
+
```typescript
|
239
|
+
// frezz
|
240
|
+
{name : Object.freeze({...})}
|
241
|
+
|
242
|
+
// Shield Object type: {[k: string]: any}
|
243
|
+
{name : new Shield()}
|
244
|
+
|
245
|
+
// DomRenderProxy Final
|
246
|
+
{name : DomRenderProxy.final({...})}
|
247
|
+
```
|
248
|
+
---
|
249
|
+
# Config
|
250
|
+
```typescript
|
251
|
+
export type TargetElement = {
|
252
|
+
_name: string,
|
253
|
+
template?: string,
|
254
|
+
styles?: string[],
|
255
|
+
callBack: (target: Element, obj: any, rawSet: RawSet) => DocumentFragment,
|
256
|
+
complete?: (target: Element, obj: any, rawSet: RawSet) => void
|
257
|
+
};
|
258
|
+
|
259
|
+
export type TargetAttr = {
|
260
|
+
name: string,
|
261
|
+
callBack: (target: Element, attrValue: string, obj: any, rawSet: RawSet) => DocumentFragment,
|
262
|
+
complete?: (target: Element, attrValue: string, obj: any, rawSet: RawSet) => void
|
263
|
+
};
|
264
|
+
|
265
|
+
export interface Config {
|
266
|
+
targetElements?: TargetElement[];
|
267
|
+
targetAttrs?: TargetAttr[];
|
268
|
+
onElementInit?: (name: string, obj: any, rawSet: RawSet) => void;
|
269
|
+
onAttrInit?: (name: string, attrValue: string, obj: any, rawSet: RawSet) => void;
|
270
|
+
proxyExcludeTyps?: ConstructorType<any>[];
|
271
|
+
proxyExcludeOnBeforeReturnSets?: string[];
|
272
|
+
proxyExcludeOnBeforeReturnGets?: string[];
|
273
|
+
scripts?: { [n: string]: any };
|
274
|
+
applyEvents?: { attrName: string, callBack: (elements: Element, attrValue: string, obj: any) => void }[];
|
116
275
|
}
|
117
276
|
```
|
277
|
+
----
|
278
|
+
# License
|
279
|
+
* MIT
|
280
|
+
* visualkhh@gmail.com
|
package/RawSet.js
CHANGED
@@ -462,6 +462,7 @@ var RawSet = (function () {
|
|
462
462
|
styles: styles,
|
463
463
|
template: template,
|
464
464
|
callBack: function (element, obj, rawSet) {
|
465
|
+
var _a;
|
465
466
|
if (!obj.__domrender_components) {
|
466
467
|
obj.__domrender_components = {};
|
467
468
|
}
|
@@ -489,7 +490,8 @@ var RawSet = (function () {
|
|
489
490
|
}));
|
490
491
|
}
|
491
492
|
var fag = document.createDocumentFragment();
|
492
|
-
|
493
|
+
var innerHTML = ((_a = styles === null || styles === void 0 ? void 0 : styles.map(function (it) { return "<style>" + it + "</style>"; })) !== null && _a !== void 0 ? _a : []).join(' ') + (template !== null && template !== void 0 ? template : '');
|
494
|
+
element.innerHTML = innerHTML;
|
493
495
|
fag.append(RawSet.drThisCreate(element, "this.__domrender_components." + componentKey, '', true, obj));
|
494
496
|
return fag;
|
495
497
|
}
|
Binary file
|
package/dist/Config.d.ts
CHANGED
@@ -18,6 +18,8 @@ export interface Config {
|
|
18
18
|
onElementInit?: (name: string, obj: any, rawSet: RawSet) => void;
|
19
19
|
onAttrInit?: (name: string, attrValue: string, obj: any, rawSet: RawSet) => void;
|
20
20
|
proxyExcludeTyps?: ConstructorType<any>[];
|
21
|
+
proxyExcludeOnBeforeReturnSets?: string[];
|
22
|
+
proxyExcludeOnBeforeReturnGets?: string[];
|
21
23
|
scripts?: {
|
22
24
|
[n: string]: any;
|
23
25
|
};
|
package/dist/DomRenderProxy.d.ts
CHANGED
@@ -14,7 +14,7 @@ export declare class DomRenderProxy<T extends object> implements ProxyHandler<T>
|
|
14
14
|
initRender(target: Node): void;
|
15
15
|
getRawSets(): RawSet[];
|
16
16
|
render(raws?: RawSet[]): void;
|
17
|
-
root(paths: string[], value
|
17
|
+
root(paths: string[], value?: any, lastDoneExecute?: boolean): string[];
|
18
18
|
set(target: T, p: string | symbol, value: any, receiver: T): boolean;
|
19
19
|
get(target: T, p: string | symbol, receiver: any): any;
|
20
20
|
has(target: T, p: string | symbol): boolean;
|