dom-render 1.0.45 → 1.0.49

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 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
  };
@@ -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: any): void;
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
@@ -2,6 +2,7 @@ import { RawSet } from './RawSet';
2
2
  import { eventManager } from './events/EventManager';
3
3
  import { ScriptUtils } from './utils/script/ScriptUtils';
4
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
- var iterable = this._rawSets.get(fullPathStr_1);
103
- var front = strings.slice(0, strings.length - 1).join('.');
104
- var last = strings[strings.length - 1];
105
- if (!isNaN(Number(last)) && Array.isArray(ScriptUtils.evalReturn('this.' + front, this._domRender_proxy))) {
106
- var aIterable = this._rawSets.get(front);
107
- if (aIterable) {
108
- this.render(Array.from(aIterable));
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
- else if (iterable) {
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
- return it_1._DomRender_origin;
159
+ it_1 = it_1._DomRender_origin;
146
160
  }
147
- else {
148
- return it_1;
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
@@ -2,7 +2,8 @@
2
2
  [![npm version](https://img.shields.io/badge/npm-v1.0.44-blue)](https://www.npmjs.com/package/dom-render) [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE.md) [![Chat](https://img.shields.io/badge/discord-20%20online-brightgreen?logo=discord)](https://discord.gg/PW56dpns) [![Github](https://img.shields.io/badge/-github-black?logo=github)](https://github.com/visualkhh/dom-render)
3
3
  # Our primary goals are
4
4
  - view template engine
5
- - Dom control and reorder using web component
5
+ - Dom control and reorder
6
+ - all internal variables are managed by proxy. (DomRenderProxy)
6
7
  ---
7
8
 
8
9
  # 🚀 Quick start
@@ -33,7 +34,7 @@ data.name = 'modify name';
33
34
  ## dr-if
34
35
  ```html
35
36
  <div dr-if="true">true</div>
36
- <div dr-if="this.gender==='M'"> gender: M</div>
37
+ <div dr-if="this.gender==='M'">gender: M</div>
37
38
  ```
38
39
  ## dr-for, dr-for-of
39
40
  ```html
@@ -54,30 +55,41 @@ data.name = 'modify name';
54
55
  ```
55
56
 
56
57
  ## event
57
- - element
58
- - dr-event ($event)
59
- - click, mousedown, mouseup, dblclick, mouseover, mouseout, mousemove, mouseenter, mouseleave, contextmenu, keyup, keydown, keypress, change, input, submit, resize, focus, blur
60
- - other event ($params, $event)
61
- ```html
62
- <input dr-event:bind='eventName1, eventName2' dr-event="console.log('event', $params, $event)" type="text">
63
- ```
64
- - window
65
- - dr-window
66
- - event-popstate
67
- ```html
68
- <div>
69
- click: <button dr-event-click="this.name = 'name' + new Date()">click</button> <br>
70
- change: <input type="text" dr-event-change="this.name = $target.value"> <br>
71
- input: <input type="text" dr-event-input="this.name = $target.value"> <br>
72
- keyup: <input type="text" dr-event-keyup="this.name = $target.value"> <br>
73
- ...
74
- keydown: <input type="text" dr-event-keydown="this.name = $target.value"><br>
75
- submit: <form dr-event-submit="console.log($event); $event.preventDefault();"><input type="text"> <button type="submit">submit</button></form><br>
76
- window-event-popstate: <input type="text" dr-window-event-popstate="alert(this.name)"><br>
77
- </div>
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">
78
85
  ```
79
86
 
80
87
  ## dr-value, value-link
88
+ dr-value
89
+ - The value is assigned the first time.
90
+
91
+ dr-value-link
92
+ - Value and variable values are referencing each other. It affects each other when changing. (Immediate reflection event: input)
81
93
  ```html
82
94
  dr-value: <input type="text" dr-value="this.office.name"> <br>
83
95
  dr-value-link: <input type="text" dr-value-link="this.office.addr.street"> <br>
@@ -86,11 +98,24 @@ dr-value-link: <input type="text" dr-value-link="this.office.addr.street"> <br>
86
98
  ## dr-attr
87
99
  ```html
88
100
  <textarea dr-attr="{rows: this.age/2, cols: this.age}"></textarea>
101
+ <div dr-attr="{wow: '123', good: 123444}"></div>
102
+ <div dr-attr="['wow=123', 'good=123444']"></div>
103
+ <div dr-attr="'wow=123, good=123444'"></div>
104
+ ```
105
+
106
+ ## dr-class
107
+ ```html
108
+ <div dr-class="{big: this.age > 50, red: this.age > 50}">
109
+ <div dr-class="'big yellow ' + (this.age > 50 ? 'old' : 'young')">
110
+ <div dr-class="['small', 'yellow']">
89
111
  ```
90
112
 
91
113
  ## dr-style
92
114
  ```html
93
- <div dr-style="{fontSize: this.age+'px'}"> style </div>
115
+ <div dr-style="{fontSize: this.age + 'px'}"> style </div>
116
+ <div dr-style="{'font-size': '20px'}"> style</div>
117
+ <div dr-style="'font-size: ' + this.age +'px; margin: ' + this.age + 'px'"> style </div>
118
+ <div dr-style="['font-size: ' + this.age +'px', 'margin: ' + this.age + 'px']"> style </div>
94
119
  ```
95
120
 
96
121
 
@@ -120,9 +145,15 @@ to-be
120
145
  </select>
121
146
  ```
122
147
 
148
+ ---
149
+ # LifeCycle
150
+ ```
151
+ * OnInitRender
152
+ - onInitRender(): init render call
153
+ ```
123
154
  ---
124
155
 
125
- # script
156
+ # Script
126
157
  ```typescript
127
158
  new DomRender.run(obj, target, {
128
159
  scripts: {
@@ -142,7 +173,7 @@ const data = config.scripts.concat('head', 'tail')
142
173
  ```
143
174
 
144
175
  ---
145
- # component
176
+ # Component
146
177
  ```typescript
147
178
  export namespace Profile {
148
179
  export const templat = '<div>aaaaa${this.name}aaaaa </div>';
@@ -174,10 +205,82 @@ using component
174
205
  - $innerHTML: element innerHTML string
175
206
  ---
176
207
 
177
- # LifeCycle
208
+ # Detect Get, Set
209
+ OnBeforeReturnSet
210
+ ```typescript
211
+ export interface OnBeforeReturnSet {
212
+ onBeforeReturnSet(name: string, value: any, fullPath?: string[]): void;
213
+ }
178
214
  ```
179
- * OnInitRender
180
- - onInitRender(): init render call
215
+ OnBeforeReturnGet
216
+ ```typescript
217
+ export interface OnBeforeReturnGet {
218
+ onBeforeReturnGet(name: string, value: any, fullPath?: string[]): void;
219
+ }
220
+ ```
221
+
222
+ using detect
223
+ ```typescript
224
+ {
225
+ name: 'dom-render'
226
+ onBeforeReturnSet: (name: string, value: any, fullpath: string[]) => {
227
+ console.log('set name-->', name, value, fullpath);
228
+ }
229
+ onBeforeReturnGet: (name: string, value: any, fullpath: string[]) => {
230
+ console.log('get name-->', name, value, fullpath);
231
+ }
232
+ }
233
+ ```
234
+ exclude detect property: Config
235
+ - proxyExcludeOnBeforeReturnGets: ['propertyName']
236
+ - proxyExcludeOnBeforeReturnSets: ['propertyName']
237
+ ---
238
+
239
+ # Proxy
240
+ all internal variables are managed by proxy. (DomRenderProxy)
241
+ ### exclude proxy (situation: Maximum call stack error)
242
+ exclude detect property: Config
243
+ - proxyExcludeTyps: [Class...]
244
+
245
+ Code base
246
+ ```typescript
247
+ // frezz
248
+ {name : Object.freeze({...})}
249
+
250
+ // Shield Object type: {[k: string]: any}
251
+ {name : new Shield()}
252
+
253
+ // DomRenderProxy Final
254
+ {name : DomRenderProxy.final({...})}
255
+ ```
256
+ ---
257
+ # Config
258
+ ```typescript
259
+ export type TargetElement = {
260
+ _name: string,
261
+ template?: string,
262
+ styles?: string[],
263
+ callBack: (target: Element, obj: any, rawSet: RawSet) => DocumentFragment,
264
+ complete?: (target: Element, obj: any, rawSet: RawSet) => void
265
+ };
266
+
267
+ export type TargetAttr = {
268
+ name: string,
269
+ callBack: (target: Element, attrValue: string, obj: any, rawSet: RawSet) => DocumentFragment,
270
+ complete?: (target: Element, attrValue: string, obj: any, rawSet: RawSet) => void
271
+ };
272
+
273
+ export interface Config {
274
+ targetElements?: TargetElement[];
275
+ targetAttrs?: TargetAttr[];
276
+ onElementInit?: (name: string, obj: any, rawSet: RawSet) => void;
277
+ onAttrInit?: (name: string, attrValue: string, obj: any, rawSet: RawSet) => void;
278
+ proxyExcludeTyps?: ConstructorType<any>[];
279
+ proxyExcludeOnBeforeReturnSets?: string[];
280
+ proxyExcludeOnBeforeReturnGets?: string[];
281
+ scripts?: { [n: string]: any };
282
+ applyEvents?: { attrName: string, callBack: (elements: Element, attrValue: string, obj: any) => void }[];
283
+ }
181
284
  ```
182
285
  ----
183
286
  # License
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
  };
@@ -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: any): void;
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/dist/bundle.js CHANGED
@@ -270,7 +270,7 @@ var eventManager = new (function () {
270
270
  document.querySelectorAll('[dr-window-event-popstate]').forEach(function (it) {
271
271
  var script = it.getAttribute('dr-window-event-popstate');
272
272
  if (script) {
273
- ScriptUtils.eval("\"use strict\"; const $target = this.__render.target; " + script + " ", Object.assign(it.obj, {
273
+ ScriptUtils.eval("const $target = this.__render.target; " + script + " ", Object.assign(it.obj, {
274
274
  __render: Object.freeze({
275
275
  target: it
276
276
  })
@@ -365,14 +365,28 @@ var eventManager = new (function () {
365
365
  script = 'return ' + script;
366
366
  }
367
367
  if (_this.isUsingThisVar(script, varName) || varName === undefined) {
368
- var data = ScriptUtils.eval("\"use strict\"; const $target=this.__render.target; " + script + " ", Object.assign(obj, {
368
+ var data = ScriptUtils.eval("const $target=this.__render.target; " + script + " ", Object.assign(obj, {
369
369
  __render: Object.freeze({
370
370
  target: it
371
371
  })
372
372
  }));
373
- for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
374
- var _b = _a[_i], key = _b[0], value = _b[1];
375
- it.setAttribute(key, String(value));
373
+ if (typeof data === 'string') {
374
+ data.split(',').forEach(function (sit) {
375
+ var _a = sit.split('='), key = _a[0], value = _a[1];
376
+ it.setAttribute(key.trim(), value.trim());
377
+ });
378
+ }
379
+ else if (Array.isArray(data)) {
380
+ data.forEach(function (sit) {
381
+ var _a = sit.split('='), key = _a[0], value = _a[1];
382
+ it.setAttribute(key.trim(), value.trim());
383
+ });
384
+ }
385
+ else {
386
+ for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
387
+ var _b = _a[_i], key = _b[0], value = _b[1];
388
+ it.setAttribute(key, String(value));
389
+ }
376
390
  }
377
391
  }
378
392
  });
@@ -382,15 +396,23 @@ var eventManager = new (function () {
382
396
  script = 'return ' + script;
383
397
  }
384
398
  if (_this.isUsingThisVar(script, varName) || varName === undefined) {
385
- var data = ScriptUtils.eval("\"use strict\"; const $target = this.__render.target; " + script + " ", Object.assign(obj, {
399
+ var data = ScriptUtils.eval("const $target = this.__render.target; " + script + " ", Object.assign(obj, {
386
400
  __render: Object.freeze({
387
401
  target: it
388
402
  })
389
403
  }));
390
- for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
391
- var _b = _a[_i], key = _b[0], value = _b[1];
392
- if (it instanceof HTMLElement) {
393
- it.style[key] = String(value);
404
+ if (typeof data === 'string') {
405
+ it.setAttribute('style', data);
406
+ }
407
+ else if (Array.isArray(data)) {
408
+ it.setAttribute('style', data.join(';'));
409
+ }
410
+ else {
411
+ for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
412
+ var _b = _a[_i], key = _b[0], value = _b[1];
413
+ if (it instanceof HTMLElement) {
414
+ it.style[key] = String(value);
415
+ }
394
416
  }
395
417
  }
396
418
  }
@@ -401,19 +423,27 @@ var eventManager = new (function () {
401
423
  script = 'return ' + script;
402
424
  }
403
425
  if (_this.isUsingThisVar(script, varName) || varName === undefined) {
404
- var data = ScriptUtils.eval("\"use strict\"; const $target = this.$target; " + script + " ", Object.assign(obj, {
426
+ var data = ScriptUtils.eval("const $target = this.$target; " + script + " ", Object.assign(obj, {
405
427
  __render: Object.freeze({
406
428
  target: it
407
429
  })
408
430
  }));
409
- for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
410
- var _b = _a[_i], key = _b[0], value = _b[1];
411
- if (it instanceof HTMLElement) {
412
- if (value) {
413
- it.classList.add(key);
414
- }
415
- else {
416
- it.classList.remove(key);
431
+ if (typeof data === 'string') {
432
+ it.setAttribute('class', data);
433
+ }
434
+ else if (Array.isArray(data)) {
435
+ it.setAttribute('class', data.join(' '));
436
+ }
437
+ else {
438
+ for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
439
+ var _b = _a[_i], key = _b[0], value = _b[1];
440
+ if (it instanceof HTMLElement) {
441
+ if (value) {
442
+ it.classList.add(key);
443
+ }
444
+ else {
445
+ it.classList.remove(key);
446
+ }
417
447
  }
418
448
  }
419
449
  }
@@ -425,7 +455,7 @@ var eventManager = new (function () {
425
455
  this.procAttr(elements, attr, function (it, attribute) {
426
456
  var script = attribute;
427
457
  it.addEventListener(eventName, function (event) {
428
- ScriptUtils.eval("\"use strict\"; const $event=this.__render.event; const $target=$event.target; " + script + " ", Object.assign(obj, {
458
+ ScriptUtils.eval("const $event=this.__render.event; const $target=$event.target; " + script + " ", Object.assign(obj, {
429
459
  __render: Object.freeze({
430
460
  event: event
431
461
  })
@@ -439,16 +469,17 @@ var eventManager = new (function () {
439
469
  if (bind) {
440
470
  var script_1 = attribute;
441
471
  var params_1 = {};
472
+ var prefix_1 = attr + ':';
442
473
  Object.entries(attributes).filter(function (_a) {
443
474
  var k = _a[0]; _a[1];
444
- return k.startsWith(attr + ':');
475
+ return k.startsWith(prefix_1);
445
476
  }).forEach(function (_a) {
446
477
  var k = _a[0], v = _a[1];
447
- params_1[k] = v;
478
+ params_1[k.slice(prefix_1.length)] = v;
448
479
  });
449
480
  bind.split(',').forEach(function (eventName) {
450
481
  it.addEventListener(eventName.trim(), function (event) {
451
- ScriptUtils.eval("\"use strict\"; const $params = this.__render.params; const $event=this.__render.event; const $target=$event.target; " + script_1 + " ", Object.assign(obj, {
482
+ ScriptUtils.eval("const $params = this.__render.params; const $event=this.__render.event; const $target=$event.target; " + script_1 + " ", Object.assign(obj, {
452
483
  __render: Object.freeze({
453
484
  event: event,
454
485
  params: params_1
@@ -1030,6 +1061,7 @@ var Shield = (function () {
1030
1061
  return Shield;
1031
1062
  }());
1032
1063
 
1064
+ var excludeGetSetPropertys = ['onBeforeReturnGet', 'onBeforeReturnSet', '__domrender_components', '__render', '_DomRender_isFinal', '_domRender_ref', '_rawSets', '_domRender_proxy', '_targets', '_DomRender_origin', '_DomRender_ref', '_DomRender_proxy'];
1033
1065
  var DomRenderProxy = (function () {
1034
1066
  function DomRenderProxy(_domRender_origin, target, config) {
1035
1067
  this._domRender_origin = _domRender_origin;
@@ -1112,14 +1144,17 @@ var DomRenderProxy = (function () {
1112
1144
  }
1113
1145
  });
1114
1146
  };
1115
- DomRenderProxy.prototype.root = function (paths, value) {
1147
+ DomRenderProxy.prototype.root = function (paths, value, lastDoneExecute) {
1116
1148
  var _this = this;
1149
+ if (lastDoneExecute === void 0) { lastDoneExecute = true; }
1150
+ var fullPaths = [];
1117
1151
  if (this._domRender_ref.size > 0) {
1118
1152
  this._domRender_ref.forEach(function (it, key) {
1119
1153
  if ('_DomRender_isProxy' in key) {
1120
1154
  it.forEach(function (sit) {
1121
1155
  var _a;
1122
- (_a = key._DomRender_proxy) === null || _a === void 0 ? void 0 : _a.root(paths.concat(sit), value);
1156
+ var items = (_a = key._DomRender_proxy) === null || _a === void 0 ? void 0 : _a.root(paths.concat(sit), value, lastDoneExecute);
1157
+ fullPaths.push(items.join(','));
1123
1158
  });
1124
1159
  }
1125
1160
  });
@@ -1127,37 +1162,47 @@ var DomRenderProxy = (function () {
1127
1162
  else {
1128
1163
  var strings = paths.reverse();
1129
1164
  var fullPathStr_1 = strings.join('.');
1130
- var iterable = this._rawSets.get(fullPathStr_1);
1131
- var front = strings.slice(0, strings.length - 1).join('.');
1132
- var last = strings[strings.length - 1];
1133
- if (!isNaN(Number(last)) && Array.isArray(ScriptUtils.evalReturn('this.' + front, this._domRender_proxy))) {
1134
- var aIterable = this._rawSets.get(front);
1135
- if (aIterable) {
1136
- this.render(Array.from(aIterable));
1165
+ if (lastDoneExecute) {
1166
+ var iterable = this._rawSets.get(fullPathStr_1);
1167
+ var front = strings.slice(0, strings.length - 1).join('.');
1168
+ var last = strings[strings.length - 1];
1169
+ if (!isNaN(Number(last)) && Array.isArray(ScriptUtils.evalReturn('this.' + front, this._domRender_proxy))) {
1170
+ var aIterable = this._rawSets.get(front);
1171
+ if (aIterable) {
1172
+ this.render(Array.from(aIterable));
1173
+ }
1137
1174
  }
1138
- }
1139
- else if (iterable) {
1140
- this.render(Array.from(iterable));
1141
- }
1142
- this._targets.forEach(function (it) {
1143
- if (it.nodeType === Node.DOCUMENT_FRAGMENT_NODE || it.nodeType === Node.ELEMENT_NODE) {
1144
- var targets = eventManager.findAttrElements(it, _this.config);
1145
- eventManager.changeVar(_this._domRender_proxy, targets, "this." + fullPathStr_1);
1175
+ else if (iterable) {
1176
+ this.render(Array.from(iterable));
1146
1177
  }
1147
- });
1178
+ this._targets.forEach(function (it) {
1179
+ if (it.nodeType === Node.DOCUMENT_FRAGMENT_NODE || it.nodeType === Node.ELEMENT_NODE) {
1180
+ var targets = eventManager.findAttrElements(it, _this.config);
1181
+ eventManager.changeVar(_this._domRender_proxy, targets, "this." + fullPathStr_1);
1182
+ }
1183
+ });
1184
+ }
1185
+ fullPaths.push(fullPathStr_1);
1148
1186
  }
1187
+ return fullPaths;
1149
1188
  };
1150
1189
  DomRenderProxy.prototype.set = function (target, p, value, receiver) {
1190
+ var _a, _b, _c, _d;
1151
1191
  if (typeof p === 'string') {
1152
1192
  value = this.proxy(receiver, value, p);
1153
1193
  }
1154
1194
  target[p] = value;
1195
+ var fullPath;
1155
1196
  if (typeof p === 'string') {
1156
- this.root([p], value);
1197
+ fullPath = this.root([p], value);
1198
+ }
1199
+ 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)) {
1200
+ (_d = (_c = receiver) === null || _c === void 0 ? void 0 : _c.onBeforeReturnSet) === null || _d === void 0 ? void 0 : _d.call(_c, p, value, fullPath);
1157
1201
  }
1158
1202
  return true;
1159
1203
  };
1160
1204
  DomRenderProxy.prototype.get = function (target, p, receiver) {
1205
+ var _a, _b, _c, _d;
1161
1206
  if (p === '_DomRender_origin') {
1162
1207
  return this._domRender_origin;
1163
1208
  }
@@ -1170,11 +1215,12 @@ var DomRenderProxy = (function () {
1170
1215
  else {
1171
1216
  var it_1 = target[p];
1172
1217
  if (it_1 && typeof it_1 === 'object' && ('_DomRender_isProxy' in it_1) && Object.prototype.toString.call(it_1._DomRender_origin) === '[object Date]') {
1173
- return it_1._DomRender_origin;
1218
+ it_1 = it_1._DomRender_origin;
1174
1219
  }
1175
- else {
1176
- return it_1;
1220
+ 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)) {
1221
+ (_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));
1177
1222
  }
1223
+ return it_1;
1178
1224
  }
1179
1225
  };
1180
1226
  DomRenderProxy.prototype.has = function (target, p) {
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"bundle.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,3 @@
1
+ export interface OnBeforeReturnGet {
2
+ onBeforeReturnGet(name: string, value: any, fullPath?: string[]): void;
3
+ }
@@ -0,0 +1,3 @@
1
+ export interface OnBeforeReturnSet {
2
+ onBeforeReturnSet(name: string, value: any, fullPath?: string[]): void;
3
+ }
@@ -27,7 +27,7 @@ export var eventManager = new (function () {
27
27
  document.querySelectorAll('[dr-window-event-popstate]').forEach(function (it) {
28
28
  var script = it.getAttribute('dr-window-event-popstate');
29
29
  if (script) {
30
- ScriptUtils.eval("\"use strict\"; const $target = this.__render.target; " + script + " ", Object.assign(it.obj, {
30
+ ScriptUtils.eval("const $target = this.__render.target; " + script + " ", Object.assign(it.obj, {
31
31
  __render: Object.freeze({
32
32
  target: it
33
33
  })
@@ -122,14 +122,28 @@ export var eventManager = new (function () {
122
122
  script = 'return ' + script;
123
123
  }
124
124
  if (_this.isUsingThisVar(script, varName) || varName === undefined) {
125
- var data = ScriptUtils.eval("\"use strict\"; const $target=this.__render.target; " + script + " ", Object.assign(obj, {
125
+ var data = ScriptUtils.eval("const $target=this.__render.target; " + script + " ", Object.assign(obj, {
126
126
  __render: Object.freeze({
127
127
  target: it
128
128
  })
129
129
  }));
130
- for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
131
- var _b = _a[_i], key = _b[0], value = _b[1];
132
- it.setAttribute(key, String(value));
130
+ if (typeof data === 'string') {
131
+ data.split(',').forEach(function (sit) {
132
+ var _a = sit.split('='), key = _a[0], value = _a[1];
133
+ it.setAttribute(key.trim(), value.trim());
134
+ });
135
+ }
136
+ else if (Array.isArray(data)) {
137
+ data.forEach(function (sit) {
138
+ var _a = sit.split('='), key = _a[0], value = _a[1];
139
+ it.setAttribute(key.trim(), value.trim());
140
+ });
141
+ }
142
+ else {
143
+ for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
144
+ var _b = _a[_i], key = _b[0], value = _b[1];
145
+ it.setAttribute(key, String(value));
146
+ }
133
147
  }
134
148
  }
135
149
  });
@@ -139,15 +153,23 @@ export var eventManager = new (function () {
139
153
  script = 'return ' + script;
140
154
  }
141
155
  if (_this.isUsingThisVar(script, varName) || varName === undefined) {
142
- var data = ScriptUtils.eval("\"use strict\"; const $target = this.__render.target; " + script + " ", Object.assign(obj, {
156
+ var data = ScriptUtils.eval("const $target = this.__render.target; " + script + " ", Object.assign(obj, {
143
157
  __render: Object.freeze({
144
158
  target: it
145
159
  })
146
160
  }));
147
- for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
148
- var _b = _a[_i], key = _b[0], value = _b[1];
149
- if (it instanceof HTMLElement) {
150
- it.style[key] = String(value);
161
+ if (typeof data === 'string') {
162
+ it.setAttribute('style', data);
163
+ }
164
+ else if (Array.isArray(data)) {
165
+ it.setAttribute('style', data.join(';'));
166
+ }
167
+ else {
168
+ for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
169
+ var _b = _a[_i], key = _b[0], value = _b[1];
170
+ if (it instanceof HTMLElement) {
171
+ it.style[key] = String(value);
172
+ }
151
173
  }
152
174
  }
153
175
  }
@@ -158,19 +180,27 @@ export var eventManager = new (function () {
158
180
  script = 'return ' + script;
159
181
  }
160
182
  if (_this.isUsingThisVar(script, varName) || varName === undefined) {
161
- var data = ScriptUtils.eval("\"use strict\"; const $target = this.$target; " + script + " ", Object.assign(obj, {
183
+ var data = ScriptUtils.eval("const $target = this.$target; " + script + " ", Object.assign(obj, {
162
184
  __render: Object.freeze({
163
185
  target: it
164
186
  })
165
187
  }));
166
- for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
167
- var _b = _a[_i], key = _b[0], value = _b[1];
168
- if (it instanceof HTMLElement) {
169
- if (value) {
170
- it.classList.add(key);
171
- }
172
- else {
173
- it.classList.remove(key);
188
+ if (typeof data === 'string') {
189
+ it.setAttribute('class', data);
190
+ }
191
+ else if (Array.isArray(data)) {
192
+ it.setAttribute('class', data.join(' '));
193
+ }
194
+ else {
195
+ for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) {
196
+ var _b = _a[_i], key = _b[0], value = _b[1];
197
+ if (it instanceof HTMLElement) {
198
+ if (value) {
199
+ it.classList.add(key);
200
+ }
201
+ else {
202
+ it.classList.remove(key);
203
+ }
174
204
  }
175
205
  }
176
206
  }
@@ -182,7 +212,7 @@ export var eventManager = new (function () {
182
212
  this.procAttr(elements, attr, function (it, attribute) {
183
213
  var script = attribute;
184
214
  it.addEventListener(eventName, function (event) {
185
- ScriptUtils.eval("\"use strict\"; const $event=this.__render.event; const $target=$event.target; " + script + " ", Object.assign(obj, {
215
+ ScriptUtils.eval("const $event=this.__render.event; const $target=$event.target; " + script + " ", Object.assign(obj, {
186
216
  __render: Object.freeze({
187
217
  event: event
188
218
  })
@@ -196,16 +226,17 @@ export var eventManager = new (function () {
196
226
  if (bind) {
197
227
  var script_1 = attribute;
198
228
  var params_1 = {};
229
+ var prefix_1 = attr + ':';
199
230
  Object.entries(attributes).filter(function (_a) {
200
231
  var k = _a[0], v = _a[1];
201
- return k.startsWith(attr + ':');
232
+ return k.startsWith(prefix_1);
202
233
  }).forEach(function (_a) {
203
234
  var k = _a[0], v = _a[1];
204
- params_1[k] = v;
235
+ params_1[k.slice(prefix_1.length)] = v;
205
236
  });
206
237
  bind.split(',').forEach(function (eventName) {
207
238
  it.addEventListener(eventName.trim(), function (event) {
208
- ScriptUtils.eval("\"use strict\"; const $params = this.__render.params; const $event=this.__render.event; const $target=$event.target; " + script_1 + " ", Object.assign(obj, {
239
+ ScriptUtils.eval("const $params = this.__render.params; const $event=this.__render.event; const $target=$event.target; " + script_1 + " ", Object.assign(obj, {
209
240
  __render: Object.freeze({
210
241
  event: event,
211
242
  params: params_1
@@ -0,0 +1,3 @@
1
+ export interface OnBeforeReturnGet {
2
+ onBeforeReturnGet(name: string, value: any, fullPath?: string[]): void;
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export interface OnBeforeReturnSet {
2
+ onBeforeReturnSet(name: string, value: any, fullPath?: string[]): void;
3
+ }
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dom-render",
3
- "version": "1.0.45",
3
+ "version": "1.0.49",
4
4
  "main": "DomRender.js",
5
5
  "license": "MIT",
6
6
  "description": "dom-render",
@@ -55,7 +55,7 @@
55
55
  "bundle:watch": "rollup -c -w",
56
56
  "dev:start": "npm run start --workspace=dev",
57
57
  "dev:serve": "npm run serve --workspace=dev",
58
- "npm-build": "npm run build && cp package.json dist && cp README.MD dist",
58
+ "npm-build": "npm run build && cp package.json dist && cp .npmignore dist && cp README.MD dist",
59
59
  "npm-publish": "npm run npm-build && npm publish ./dist",
60
60
  "tsc": "tsc",
61
61
  "tsc:watch": "rm -rf ./dist && mkdir dist && cp package.json dist && tsc --watch --sourceMap true",
package/assets/banner.png DELETED
Binary file