dom-render 1.0.97 → 1.0.99

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.
Files changed (202) hide show
  1. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  2. package/.idea/dom-render.iml +9 -0
  3. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  4. package/.idea/jpa-buddy.xml +6 -0
  5. package/.idea/misc.xml +8 -0
  6. package/.idea/modules.xml +8 -0
  7. package/.idea/vcs.xml +6 -0
  8. package/README.MD +6 -793
  9. package/package.json +1 -1
  10. package/DomRender.d.ts +0 -13
  11. package/DomRender.js +0 -72
  12. package/DomRenderProxy.d.ts +0 -30
  13. package/DomRenderProxy.js +0 -510
  14. package/components/ComponentSet.d.ts +0 -10
  15. package/components/ComponentSet.js +0 -13
  16. package/configs/Config.d.ts +0 -34
  17. package/configs/Config.js +0 -2
  18. package/configs/TargetAttr.d.ts +0 -6
  19. package/configs/TargetAttr.js +0 -2
  20. package/configs/TargetElement.d.ts +0 -14
  21. package/configs/TargetElement.js +0 -2
  22. package/css/parse/index.d.ts +0 -1
  23. package/css/parse/index.js +0 -512
  24. package/css/stringify/compiler.d.ts +0 -32
  25. package/css/stringify/compiler.js +0 -40
  26. package/css/stringify/compress.d.ts +0 -75
  27. package/css/stringify/compress.js +0 -156
  28. package/css/stringify/identity.d.ts +0 -85
  29. package/css/stringify/identity.js +0 -194
  30. package/css/stringify/index.d.ts +0 -14
  31. package/css/stringify/index.js +0 -44
  32. package/dist/bundle.js +0 -5493
  33. package/events/EventManager.d.ts +0 -49
  34. package/events/EventManager.js +0 -529
  35. package/iterators/Range.d.ts +0 -23
  36. package/iterators/Range.js +0 -80
  37. package/lifecycle/OnBeforeReturnGet.d.ts +0 -3
  38. package/lifecycle/OnBeforeReturnGet.js +0 -2
  39. package/lifecycle/OnBeforeReturnSet.d.ts +0 -3
  40. package/lifecycle/OnBeforeReturnSet.js +0 -2
  41. package/lifecycle/OnChangeAttrRender.d.ts +0 -3
  42. package/lifecycle/OnChangeAttrRender.js +0 -2
  43. package/lifecycle/OnCreateRender.d.ts +0 -3
  44. package/lifecycle/OnCreateRender.js +0 -2
  45. package/lifecycle/OnDestroyRender.d.ts +0 -4
  46. package/lifecycle/OnDestroyRender.js +0 -2
  47. package/lifecycle/OnInitRender.d.ts +0 -3
  48. package/lifecycle/OnInitRender.js +0 -2
  49. package/lifecycle/OnProxyDomRender.d.ts +0 -4
  50. package/lifecycle/OnProxyDomRender.js +0 -2
  51. package/managers/RenderManager.d.ts +0 -3
  52. package/managers/RenderManager.js +0 -18
  53. package/messenger/DefaultMessenger.d.ts +0 -3
  54. package/messenger/DefaultMessenger.js +0 -27
  55. package/messenger/Messenger.d.ts +0 -78
  56. package/messenger/Messenger.js +0 -201
  57. package/operators/Appender.d.ts +0 -10
  58. package/operators/Appender.js +0 -64
  59. package/operators/AttrExpresion.d.ts +0 -0
  60. package/operators/AttrExpresion.js +0 -44
  61. package/operators/Dr.d.ts +0 -8
  62. package/operators/Dr.js +0 -101
  63. package/operators/DrAppender.d.ts +0 -8
  64. package/operators/DrAppender.js +0 -107
  65. package/operators/DrFor.d.ts +0 -8
  66. package/operators/DrFor.js +0 -104
  67. package/operators/DrForOf.d.ts +0 -8
  68. package/operators/DrForOf.js +0 -107
  69. package/operators/DrForm.d.ts +0 -8
  70. package/operators/DrForm.js +0 -138
  71. package/operators/DrIf.d.ts +0 -8
  72. package/operators/DrIf.js +0 -108
  73. package/operators/DrInnerHTML.d.ts +0 -8
  74. package/operators/DrInnerHTML.js +0 -99
  75. package/operators/DrInnerText.d.ts +0 -8
  76. package/operators/DrInnerText.js +0 -97
  77. package/operators/DrPre.d.ts +0 -7
  78. package/operators/DrPre.js +0 -73
  79. package/operators/DrRepeat.d.ts +0 -8
  80. package/operators/DrRepeat.js +0 -105
  81. package/operators/DrTargetAttr.d.ts +0 -7
  82. package/operators/DrTargetAttr.js +0 -98
  83. package/operators/DrTargetElement.d.ts +0 -7
  84. package/operators/DrTargetElement.js +0 -114
  85. package/operators/DrThis.d.ts +0 -5
  86. package/operators/DrThis.js +0 -108
  87. package/operators/DrThisProperty.d.ts +0 -10
  88. package/operators/DrThisProperty.js +0 -143
  89. package/operators/OperatorExecuter.d.ts +0 -49
  90. package/operators/OperatorExecuter.js +0 -89
  91. package/operators/OperatorExecuterAttrRequire.d.ts +0 -8
  92. package/operators/OperatorExecuterAttrRequire.js +0 -79
  93. package/rawsets/AttrInitCallBack.d.ts +0 -5
  94. package/rawsets/AttrInitCallBack.js +0 -2
  95. package/rawsets/Attrs.d.ts +0 -24
  96. package/rawsets/Attrs.js +0 -2
  97. package/rawsets/CreatorMetaData.d.ts +0 -18
  98. package/rawsets/CreatorMetaData.js +0 -2
  99. package/rawsets/DestroyOptionType.d.ts +0 -4
  100. package/rawsets/DestroyOptionType.js +0 -8
  101. package/rawsets/ElementInitCallBack.d.ts +0 -8
  102. package/rawsets/ElementInitCallBack.js +0 -2
  103. package/rawsets/RawSet.d.ts +0 -118
  104. package/rawsets/RawSet.js +0 -1141
  105. package/rawsets/RawSetOperatorType.d.ts +0 -3
  106. package/rawsets/RawSetOperatorType.js +0 -7
  107. package/rawsets/RawSetType.d.ts +0 -7
  108. package/rawsets/RawSetType.js +0 -11
  109. package/rawsets/Render.d.ts +0 -17
  110. package/rawsets/Render.js +0 -2
  111. package/routers/HashRouter.d.ts +0 -9
  112. package/routers/HashRouter.js +0 -53
  113. package/routers/PathRouter.d.ts +0 -9
  114. package/routers/PathRouter.js +0 -52
  115. package/routers/Router.d.ts +0 -28
  116. package/routers/Router.js +0 -126
  117. package/types/Types.d.ts +0 -14
  118. package/types/Types.js +0 -36
  119. package/utils/clipboard/ClipBoardUtils.d.ts +0 -6
  120. package/utils/clipboard/ClipBoardUtils.js +0 -25
  121. package/utils/dom/DomUtils.d.ts +0 -13
  122. package/utils/dom/DomUtils.js +0 -47
  123. package/utils/location/LocationUtils.d.ts +0 -16
  124. package/utils/location/LocationUtils.js +0 -63
  125. package/utils/node/NodeUtils.d.ts +0 -10
  126. package/utils/node/NodeUtils.js +0 -27
  127. package/utils/random/RandomUtils.d.ts +0 -7
  128. package/utils/random/RandomUtils.js +0 -47
  129. package/utils/script/ScriptUtils.d.ts +0 -14
  130. package/utils/script/ScriptUtils.js +0 -89
  131. package/utils/storage/StorageUtils.d.ts +0 -16
  132. package/utils/storage/StorageUtils.js +0 -87
  133. package/utils/string/StringUtils.d.ts +0 -6
  134. package/utils/string/StringUtils.js +0 -58
  135. package/utils/valid/ValidUtils.d.ts +0 -10
  136. package/utils/valid/ValidUtils.js +0 -78
  137. package/validators/AllCheckedValidatorArray.d.ts +0 -6
  138. package/validators/AllCheckedValidatorArray.js +0 -32
  139. package/validators/AllUnCheckedValidatorArray.d.ts +0 -6
  140. package/validators/AllUnCheckedValidatorArray.js +0 -32
  141. package/validators/CheckedValidator.d.ts +0 -5
  142. package/validators/CheckedValidator.js +0 -32
  143. package/validators/CountEqualsCheckedValidatorArray.d.ts +0 -7
  144. package/validators/CountEqualsCheckedValidatorArray.js +0 -34
  145. package/validators/CountEqualsUnCheckedValidatorArray.d.ts +0 -7
  146. package/validators/CountEqualsUnCheckedValidatorArray.js +0 -34
  147. package/validators/CountGreaterThanCheckedValidatorArray.d.ts +0 -7
  148. package/validators/CountGreaterThanCheckedValidatorArray.js +0 -34
  149. package/validators/CountGreaterThanEqualsCheckedValidatorArray.d.ts +0 -7
  150. package/validators/CountGreaterThanEqualsCheckedValidatorArray.js +0 -34
  151. package/validators/CountGreaterThanEqualsUnCheckedValidatorArray.d.ts +0 -7
  152. package/validators/CountGreaterThanEqualsUnCheckedValidatorArray.js +0 -34
  153. package/validators/CountGreaterThanUnCheckedValidatorArray.d.ts +0 -7
  154. package/validators/CountGreaterThanUnCheckedValidatorArray.js +0 -34
  155. package/validators/CountLessThanCheckedValidatorArray.d.ts +0 -7
  156. package/validators/CountLessThanCheckedValidatorArray.js +0 -34
  157. package/validators/CountLessThanEqualsCheckedValidatorArray.d.ts +0 -7
  158. package/validators/CountLessThanEqualsCheckedValidatorArray.js +0 -34
  159. package/validators/CountLessThanEqualsUnCheckedValidatorArray.d.ts +0 -7
  160. package/validators/CountLessThanEqualsUnCheckedValidatorArray.js +0 -34
  161. package/validators/CountLessThanUnCheckedValidatorArray.d.ts +0 -7
  162. package/validators/CountLessThanUnCheckedValidatorArray.js +0 -34
  163. package/validators/CountUnCheckedValidatorArray.d.ts +0 -7
  164. package/validators/CountUnCheckedValidatorArray.js +0 -34
  165. package/validators/EmptyValidator.d.ts +0 -5
  166. package/validators/EmptyValidator.js +0 -33
  167. package/validators/ExcludeCheckedValidatorArray.d.ts +0 -8
  168. package/validators/ExcludeCheckedValidatorArray.js +0 -41
  169. package/validators/FormValidator.d.ts +0 -7
  170. package/validators/FormValidator.js +0 -37
  171. package/validators/IncludeCheckedValidatorArray.d.ts +0 -8
  172. package/validators/IncludeCheckedValidatorArray.js +0 -41
  173. package/validators/MultipleValidator.d.ts +0 -8
  174. package/validators/MultipleValidator.js +0 -48
  175. package/validators/NonPassValidator.d.ts +0 -5
  176. package/validators/NonPassValidator.js +0 -31
  177. package/validators/NotEmptyValidator.d.ts +0 -5
  178. package/validators/NotEmptyValidator.js +0 -34
  179. package/validators/NotRegExpTestValidator.d.ts +0 -6
  180. package/validators/NotRegExpTestValidator.js +0 -42
  181. package/validators/PassValidator.d.ts +0 -5
  182. package/validators/PassValidator.js +0 -31
  183. package/validators/RegExpTestValidator.d.ts +0 -6
  184. package/validators/RegExpTestValidator.js +0 -43
  185. package/validators/RequiredValidator.d.ts +0 -5
  186. package/validators/RequiredValidator.js +0 -33
  187. package/validators/UnCheckedValidator.d.ts +0 -5
  188. package/validators/UnCheckedValidator.js +0 -32
  189. package/validators/ValidMultipleValidator.d.ts +0 -9
  190. package/validators/ValidMultipleValidator.js +0 -34
  191. package/validators/ValidValidator.d.ts +0 -6
  192. package/validators/ValidValidator.js +0 -33
  193. package/validators/ValidValidatorArray.d.ts +0 -7
  194. package/validators/ValidValidatorArray.js +0 -33
  195. package/validators/Validator.d.ts +0 -57
  196. package/validators/Validator.js +0 -242
  197. package/validators/ValidatorArray.d.ts +0 -17
  198. package/validators/ValidatorArray.js +0 -99
  199. package/validators/ValueEqualsValidator.d.ts +0 -6
  200. package/validators/ValueEqualsValidator.js +0 -33
  201. package/validators/ValueNotEqualsValidator.d.ts +0 -6
  202. package/validators/ValueNotEqualsValidator.js +0 -33
package/README.MD CHANGED
@@ -1,798 +1,11 @@
1
- DOM-RENDER
2
- ===
3
- [![typescript](https://img.shields.io/badge/-npm-black?logo=npm)](https://www.npmjs.com/package/dom-render) [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE.md)
4
- * view template engine
5
- * Dom control and reorder and render
6
- * all internal variables are managed by proxy. (DomRenderProxy)
1
+ # ⚠️ This repository is no longer maintained ⚠️
7
2
 
8
- # 🚀 Quick start
9
- ```html
10
- <script src="https://cdn.jsdelivr.net/npm/dom-render@1.0.91/dist/bundle.js"></script>
11
- ```
12
- ```html
13
- <!DOCTYPE html>
14
- <html lang="en">
15
- <head>
16
- <meta charset="UTF-8">
17
- <title>Title</title>
18
- </head>
19
- <body id="app">
20
- ${this.name}$
21
- <script src="https://cdn.jsdelivr.net/npm/dom-render@1.0.86/dist/bundle.js"></script>
22
- <script>
23
- let data = {
24
- name: 'my name is dom-render'
25
- };
26
- data = DomRender.run(data , document.querySelector('#app'));
27
- </script>
28
- </body>
29
- </html>
30
- ```
3
+ This project has been moved to a new repository. Please visit the new repository for the latest updates, to report issues, or to contribute.
31
4
 
32
- # 😃 examples
33
- - [examples](./examples)
5
+ **New Repository:** https://github.com/dooboostore-develop/packages
34
6
 
7
+ **New NPM Package:** https://www.npmjs.com/package/@dooboostore/dom-render
35
8
 
36
- ## Expression
37
- <details>
38
- <summary>${...}$, #{...}# <strong>🔻(click)</strong></summary>
9
+ While this package may still be available on npm, it will no longer receive updates. Please update your dependencies to point to the new package if available.
39
10
 
40
- ### ${}$ innerTEXT, #{}# innerHTML
41
- ```html
42
- <body id="app">
43
- ${this.name}$ <!-- outout: <i>my name is dom-render</i> -->
44
- #{this.name}# <!-- outout text is italic: my name is dom-render -->
45
- <script>
46
- let data = {
47
- name: '<i>my name is dom-render</i>'
48
- };
49
- data = DomRender.run(data , document.querySelector('#app'));
50
- </script>
51
- </body>
52
- ```
53
- </details>
54
-
55
- # dom-render attributes
56
-
57
-
58
- ## attribute change, bind
59
- <details>
60
- <summary>attribute<strong>🔻(click)</strong></summary>
61
-
62
- ### attribute
63
- ```html
64
- <body id="app">
65
- <input type="text" value="${this.name}$" style="${'color: '+this.color}$">
66
- <button dr-event-click="this.changeData();">change</button>
67
- </body>
68
- ```
69
- ```typescript
70
- class Data {
71
- name = 'my name is dom-render';
72
- color = '#ff0000';
73
-
74
- changeData() {
75
- this.name = RandomUtils.getRandomString(10);
76
- this.color = RandomUtils.getRandomColor();
77
- }
78
- }
79
- const data = DomRender.run(new Data(), document.querySelector('#app')!);
80
- ```
81
- </details>
82
-
83
- ## control, print Statement
84
- <details>
85
- <summary>dr-if<strong>🔻(click)</strong></summary>
86
-
87
- ### if element render
88
- ```html
89
- <body id="app">
90
- <div dr-if="true">true</div> <!-- render -->
91
- <div dr-if="this.gender === 'M'">gender: M</div> <!-- No Render -->
92
- <script>
93
- let data = {
94
- gender: 'F'
95
- };
96
- data = DomRender.run(data , document.querySelector('#app'));
97
- </script>
98
- </body>
99
- ```
100
- </details>
101
-
102
-
103
-
104
-
105
-
106
- <details>
107
- <summary>dr-for, dr-for-of<strong>🔻(click)</strong></summary>
108
-
109
- ```html
110
- <div dr-for="var i = 0; i < this.friends.length; i++"> friend</div>
111
- <div dr-for-of="this.friends"> ${#it#.name}$</div>
112
- <div dr-for-of="$range(10, 20)"><div>${#it#}$</div><div>
113
- <div dr-for="var i = 1 ; i <= 9 ; i++" dr-it="i">
114
- ${#it#}$ *
115
- <scope dr-for="var y = 1 ; y <= 9 ; y++" dr-it="y" dr-var="superIt=#it#" dr-strip="true">
116
- #it# = ${var.superIt * #it#}$
117
- </scope>
118
- </div>
119
- ```
120
- </details>
121
-
122
- <details>
123
- <summary>dr-appender<strong>🔻(click)</strong></summary>
124
-
125
- ```html
126
- <h3>appender</h3>
127
- <ul>
128
- <li dr-appender="this.appender">
129
- ${#it#}$
130
- </li>
131
- </ul>
132
- <button dr-event-click="this.append()">appending</button>
133
- <button dr-event-click="this.modifyAppender(0)">idx 0 modify</button>
134
- <button dr-event-click="this.clearAppend()">appender clear</button>
135
- ```
136
-
137
- ```typescript
138
- class Data {
139
- appender = new Appender();
140
-
141
- constructor() {
142
- this.appender.push('init' + RandomUtils.uuid(), 'init' + RandomUtils.uuid());
143
- }
144
-
145
- append() {
146
- this.appender.push(RandomUtils.uuid(), RandomUtils.uuid());
147
- }
148
-
149
- clearAppend() {
150
- this.appender.clear()
151
- }
152
-
153
- modifyAppender(idx: number) {
154
- this.appender[idx][0] = RandomUtils.uuid();
155
- }
156
- }
157
-
158
- ```
159
- </details>
160
-
161
- <details>
162
- <summary>dr-repeat<strong>🔻(click)</strong></summary>
163
-
164
- ```html
165
- <div dr-repeat="10"><div>#it#</div></div>
166
- <div dr-repeat="$range(10, 20)"><div>#it#</div></div>
167
- <div dr-repeat="$range(10, 20, 5)"><div>#it#</div></div>
168
- <div dr-repeat="$range('10..5, 2')"><div>#it#</div></div>
169
- ```
170
- </details>
171
-
172
- <details>
173
- <summary>dr-inner-text, dr-inner-html<strong>🔻(click)</strong></summary>
174
-
175
- ```html
176
- <div dr-inner-text="'<b>aa</b> <button dr-event-click=\'alert(1)\'>aa</button>'"> friend</div>
177
- <div dr-inner-html="'<b>aa</b> <button dr-event-click=\'alert(1)\'>aa</button>'"> friend</div>
178
- ```
179
- </details>
180
-
181
-
182
- ## event
183
- <details>
184
- <summary>dr-event-(name)<strong>🔻(click)</strong></summary>
185
-
186
- * click, mousedown, mouseup, dblclick, mouseover, mouseout, mousemove, mouseenter, mouseleave, contextmenu, keyup, keydown, keypress, change, input, submit, resize, focus, blur
187
- * ref: element
188
- * variable: $event, $target
189
- ```html
190
- click: <button dr-event-click="this.name = 'name' + new Date()">click</button> <br>
191
- change: <input type="text" dr-event-change="this.name = $target.value"> <br>
192
- input: <input type="text" dr-event-input="this.name = $target.value"> <br>
193
- keyup: <input type="text" dr-event-keyup="this.name = $target.value"> <br>
194
- ...
195
- keydown: <input type="text" dr-event-keydown="this.name = $target.value"><br>
196
- submit: <form dr-event-submit="console.log($event); $event.preventDefault();"><input type="text"> <button type="submit">submit</button></form><br>
197
- ```
198
- </details>
199
-
200
- <details>
201
- <summary>dr-window-event-popstate<strong>🔻(click)</strong></summary>
202
-
203
- * ref: window
204
- * variable: $target
205
-
206
- ```html
207
- window-event-popstate: <input type="text" dr-window-event-popstate="alert(this.name)"><br>
208
- ```
209
- </details>
210
-
211
- <details>
212
- <summary>dr-event<strong>🔻(click)</strong></summary>
213
-
214
- * other event
215
- * ref: element
216
- * variable: $params, $event
217
-
218
-
219
- ```html
220
- <input dr-event:bind='eventName1, eventName2' dr-event="console.log('event', $params, $event)" type="text">
221
- ```
222
- </details>
223
-
224
-
225
- ## this
226
- <details>
227
- <summary>dr-this<strong>🔻(click)</strong></summary>
228
- * dr-this
229
- * object mapping
230
-
231
- ```typescript
232
- class data {
233
- dictionary = {
234
- name: 'visualkhh'
235
- }
236
- }
237
- ```
238
- ```html
239
- <div dr-this="this.dictionary">
240
- ${this.name}$
241
- </div>
242
- ```
243
- </details>
244
-
245
- <details>
246
- <summary>dr-this-property<strong>🔻(click)</strong></summary>
247
- * dr-property
248
- * property forEach in object
249
- * dynamic add, delete
250
-
251
- ```typescript
252
- class data {
253
- dictionary = {
254
- name1: 'visualkhh1',
255
- name2: 'visualkhh2',
256
- name3: 'visualkhh3'
257
- }
258
- }
259
- ```
260
- ```html
261
- <home dr-this-property="this.dictionary" dr-on-init:arguments="[2,#this#]">
262
- ${this}$
263
- </home>
264
- ```
265
- </details>
266
-
267
- ## value
268
- <details>
269
- <summary>dr-value, value-link<strong>🔻(click)</strong></summary>
270
-
271
- * dr-value
272
- * The value is assigned the first time.
273
- * dr-value-link
274
- * Value and variable values are referencing each other. It affects each other when changing. (Immediate reflection event: input)
275
-
276
- ```html
277
- dr-value: <input type="text" dr-value="this.office.name"> <br>
278
- dr-value-link: <input type="text" dr-value-link="this.office.addr.street"> <br>
279
- ```
280
- </details>
281
-
282
- ## other
283
- <details>
284
- <summary>dr-attr<strong>🔻(click)</strong></summary>
285
-
286
- ```html
287
- <textarea dr-attr="{rows: this.age/2, cols: this.age}"></textarea>
288
- <div dr-attr="{wow: '123', good: 123444}"></div>
289
- <div dr-attr="['wow=123', 'good=123444']"></div>
290
- <div dr-attr="'wow=123, good=123444'"></div>
291
- ```
292
- </details>
293
-
294
- <details>
295
- <summary>dr-class<strong>🔻(click)</strong></summary>
296
-
297
- ```html
298
- <div dr-class="{big: this.age > 50, red: this.age > 50}"></div>
299
- <div dr-class="'big yellow ' + (this.age > 50 ? 'old' : 'young')"></div>
300
- <div dr-class="['small', 'yellow']"></div>
301
- ```
302
- </details>
303
-
304
- <details>
305
- <summary>dr-style<strong>🔻(click)</strong></summary>
306
-
307
- ```html
308
- <div dr-style="{fontSize: this.age + 'px'}"> style </div>
309
- <div dr-style="{'font-size': '20px'}"> style</div>
310
- <div dr-style="'font-size: ' + this.age +'px; margin: ' + this.age + 'px'"> style </div>
311
- <div dr-style="['font-size: ' + this.age +'px', 'margin: ' + this.age + 'px']"> style </div>
312
- ```
313
- </details>
314
-
315
- <details>
316
- <summary>dr-strip<strong>🔻(click)</strong></summary>
317
-
318
- ```html
319
- <div dr-strip="true"><span>hello</span></div> <!-- output html : <span>hello</span> -->
320
- ```
321
- </details>
322
-
323
- <details>
324
- <summary>dr-before, dr-after<strong>🔻(click)</strong></summary>
325
-
326
- ```html
327
- <div dr-before="console.log('process before')" dr-after="console.log('process after')"></div>
328
- ```
329
- </details>
330
-
331
- <details>
332
- <summary>dr-complete<strong>🔻(click)</strong></summary>
333
-
334
- ```html
335
- <select dr-value-link="this.currentContry" dr-event-change="this.contryChange($event)">
336
- <option dr-for-of="this.languages" dr-value="#it#.key" dr-complete="this.currentContry='defaultValue'">${#it#.title}$</option>
337
- </select>
338
- ```
339
- </details>
340
-
341
- ## dr-form
342
- <details>
343
- <summary>form<strong>🔻(click)</strong></summary>
344
- * event: change
345
- * modify change: dr-form:event="input"
346
-
347
- - [examples](./examples/forms)
348
-
349
- ```html
350
- <body id="app">
351
- <form dr-form="this.form" dr-event-submit="this.submit(); $event.preventDefault();">
352
- name: <input name="name">
353
- age: <input name="age">
354
- <button type="submit">submit</button>
355
- </form>
356
- <script>
357
- let data = {
358
- form: {},
359
- submit() {
360
- console.log(this.form);
361
- }
362
- };
363
- data = DomRender.run(data , document.querySelector('#app'));
364
- </script>
365
- </body>
366
- <!-- 💥 submit call -->
367
- <!-- console: {name: 'name data', age: 'age data'} -->
368
- ```
369
- </details>
370
-
371
- <details>
372
- <summary>validator<strong>🔻(click)</strong></summary>
373
-
374
- ```html
375
- <body id="app">
376
- <form dr-form="this.form" dr-event-submit="this.submit(); $event.preventDefault();">
377
- name: <input name="name">
378
- age: <input name="age">
379
- <button type="submit">submit</button>
380
- </form>
381
- <script>
382
- const form = new FormValidator();
383
- form.name = new NotEmptyValidator();
384
- form.age = new NotEmptyValidator();
385
- let data = {
386
- form,
387
- submit() {
388
- if (this.form.valid()){
389
- console.log('valid');
390
- } else {
391
- console.log('inValid');
392
- }
393
- }
394
- };
395
- data = DomRender.run(data , document.querySelector('#app'));
396
- </script>
397
- </body>
398
- ```
399
- validator
400
- - Validator (abstract)
401
- - ValidatorArray (abstract)
402
- - AllCheckedValidatorArray
403
- - AllUnCheckedValidatorArray
404
- - CheckedValidator
405
- - CountEqualsCheckedValidatorArray
406
- - CountEqualsUnCheckedValidatorArray
407
- - CountGreaterThanCheckedValidatorArray
408
- - CountGreaterThanEqualsCheckedValidatorArray
409
- - CountGreaterThanEqualsUnCheckedValidatorArray
410
- - CountGreaterThanUnCheckedValidatorArray
411
- - CountLessThanCheckedValidatorArray
412
- - CountLessThanEqualsCheckedValidatorArray
413
- - CountLessThanEqualsUnCheckedValidatorArray
414
- - CountLessThanUnCheckedValidatorArray
415
- - CountUnCheckedValidatorArray
416
- - EmptyValidator
417
- - ExcludeCheckedValidatorArray
418
- - FormValidator
419
- - IncludeCheckedValidatorArray
420
- - MultipleValidator
421
- - NonPassValidator
422
- - NotEmptyValidator
423
- - NotRegExpTestValidator
424
- - PassValidator
425
- - RegExpTestValidator
426
- - RequiredValidator
427
- - UnCheckedValidator
428
- - ValidMultipleValidator
429
- - ValidValidator
430
- - ValidValidatorArray
431
- - ValueEqualsValidator
432
- - ValueNotEqualsValidator
433
- </details>
434
-
435
-
436
-
437
- ## Route
438
- <details>
439
- <summary>Route<strong>🔻(click)</strong></summary>
440
-
441
- - [examples](./examples/router)
442
-
443
- * config routerType: 'hash' | 'path' | 'none' (default: 'none')
444
- ```typescript
445
- // Config
446
- const config: Config = {
447
- window
448
- };
449
- config.targetElements = [
450
- DomRender.createComponent({type: Main, tagName: 'page-main', template: MainTemplate}),
451
- DomRender.createComponent({type: Second, tagName: 'page-second', template: SecondTemplate}),
452
- DomRender.createComponent({type: Detail, tagName: 'page-detail', template: DetailTemplate})
453
- ]
454
- config.routerType = 'hash'; // 'hash' | 'path' | 'none';
455
- const data = DomRender.run(new Data(), document.querySelector('#app')!, config);
456
- ```
457
- ```html
458
- <header>
459
- <h1>examples header</h1>
460
- <h2>${this.name}$</h2>
461
- <div>
462
- <div><button dr-event-click="$router.go('/')">main</button></div>
463
- <div>
464
- <button dr-event-click="$router.go('/second', {secondata: 555})">second</button>
465
- <button dr-event-click="$router.go('/second/5')">second/1</button>
466
- <button dr-event-click="$router.go('/second/wow')">second/2</button>
467
- </div>
468
- <div><button dr-event-click="$router.go('/detail/25?name=zzz')">detail</button></div>
469
- </div>
470
- </header>
471
- <hr>
472
- <main>
473
- <page-main dr-if="$router.test('/')"></page-main>
474
- <page-second dr-if="$router.test('/second')">1</page-second>
475
- <page-second dr-if="$router.testRegexp('/second/[0-9]?$')">2</page-second>
476
- <page-second dr-if="$router.testRegexp('/second/wow$')">wow</page-second>
477
- <page-detail url='/detail/{id:[0-9]+}' dr-if="$router.test($attribute.url)" dr-on-create:callback="$component.routerData($router.getRouteData($attribute.url))" ></page-detail>
478
- <div>
479
- <button dr-event-click="this.plusCount()">${this.count}$ count pluse++</button>
480
- </div>
481
- </main>
482
- <hr>
483
- <footer>footer</footer>
484
- ```
485
- ```typescript
486
- export class Second implements OnCreateRender {
487
- name = 'Second'
488
-
489
- onCreateRender(data: CreatorMetaData): void {
490
- console.log('----->', data.router)
491
- }
492
- }
493
- ```
494
- ```typescript
495
- import {RouteData} from 'dom-render/routers/Router';
496
- import {OnCreateRender} from 'dom-render/lifecycle/OnCreateRender';
497
-
498
- export class Detail implements OnCreateRender {
499
- name = 'Detail';
500
-
501
- onCreateRender(data: CreatorMetaData) {
502
- console.log('routeData->', data);
503
- }
504
-
505
- routerData(routeData: RouteData) {
506
- console.log('--------', routeData);
507
- }
508
- }
509
- ```
510
-
511
- ```typescript
512
- // RouteData type
513
- type RouteData = {
514
- path: string;
515
- url: string;
516
- data?: any;
517
- searchParams: URLSearchParams;
518
- pathData?: any;
519
- }
520
- ```
521
- </details>
522
-
523
- ## Messenger (Data transmission)
524
- * publish, subscribe
525
- <details>
526
- <summary>publish<strong>🔻(click)</strong></summary>
527
-
528
- ```typescript
529
- export class Home implements OnProxyDomRender {
530
- private channel?: Channel;
531
-
532
- sendIndexMessage() {
533
- const rtn = this.channel?.publish(Index, {
534
- name: this.name,
535
- age: this.age,
536
- title: this.title
537
- });
538
- console.log('sendIndexMessage return value: ', rtn);
539
- }
540
-
541
- onProxyDomRender({messenger}: Config): void {
542
- this.channel = messenger?.createChannel(Home);
543
- }
544
- }
545
- ```
546
- </details>
547
- <details>
548
- <summary>subscribe<strong>🔻(click)</strong></summary>
549
-
550
- ```typescript
551
- class Index implements OnProxyDomRender {
552
- onProxyDomRender({messenger}: Config): void {
553
- messenger?.createChannel(this).filter((data) => (data.age ?? 0) > 5).subscribe((data) => {
554
- this.rcvData = data;
555
- return {data: 'good', action: 'actionGood'}
556
- });
557
- // messenger?.createChannel(this).subscribe((data) => {
558
- // this.rcvData = data;
559
- // return {data: 'good', action: 'actionGood'}
560
- // });
561
- }
562
- }
563
- ````
564
- </details>
565
-
566
- ## Class
567
- <details>
568
- <summary>Range<strong>🔻(click)</strong></summary>
569
-
570
- ```javascript
571
- const range = new Range(100,55, 10);
572
- for (let data of new Range(100,55, 10)) {
573
- console.log(data);
574
- }
575
- const rangeArray = new Range(100,55, 10).toArray();
576
- ```
577
- </details>
578
- <details>
579
- <summary>Appender<strong>🔻(click)</strong></summary>
580
-
581
- ```javascript
582
- const appender = new Appender<number>([1, 2]);
583
- appender.push(3, 4)
584
- for (const data of appender) {
585
- console.log('----appender item--->', data);
586
- }
587
- ```
588
- </details>
589
-
590
- ## Detect Get, Set
591
- <details>
592
- <summary>Method Proxy<strong>🔻(click)</strong></summary>
593
-
594
- ### using detect
595
- ```typescript
596
- {
597
- name: 'dom-render'
598
- onBeforeReturnSet: (name: string, value: any, fullpath: string[]) => {
599
- console.log('set name-->', name, value, fullpath);
600
- }
601
- onBeforeReturnGet: (name: string, value: any, fullpath: string[]) => {
602
- console.log('get name-->', name, value, fullpath);
603
- }
604
- }
605
- ```
606
- exclude detect property: Config
607
- - proxyExcludeOnBeforeReturnGets: ['propertyName']
608
- - proxyExcludeOnBeforeReturnSets: ['propertyName']
609
- ---
610
-
611
- ### OnBeforeReturnSet
612
- ```typescript
613
- export interface OnBeforeReturnSet {
614
- onBeforeReturnSet(name: string, value: any, fullPath?: string[]): void;
615
- }
616
- ```
617
- ### OnBeforeReturnGet
618
- ```typescript
619
- export interface OnBeforeReturnGet {
620
- onBeforeReturnGet(name: string, value: any, fullPath?: string[]): void;
621
- }
622
- ```
623
- </details>
624
-
625
-
626
-
627
- ## Proxy
628
- all internal variables are managed by proxy. (DomRenderProxy)
629
- ### exclude proxy (situation: Maximum call stack error)
630
- exclude detect property: Config
631
- - proxyExcludeTyps: [Class...]
632
-
633
- Code base
634
- ```typescript
635
- // frezz
636
- {name : Object.freeze({...})}
637
-
638
- // Shield Object type: {[k: string]: any}
639
- {name : new Shield()}
640
-
641
- // DomRenderProxy Final
642
- {name : DomRenderProxy.final({...})}
643
- ```
644
- ---
645
-
646
-
647
- ## LifeCycle
648
- * OnCreateRender
649
- * onCreateRender(): created call
650
- * OnInitRender
651
- * onInitRender(): init render call
652
- * OnDestroyRender
653
- * onDestroyRender(): component Destroy call
654
-
655
- ## Script
656
- ```typescript
657
- new DomRender.run(obj, target, {
658
- scripts: {
659
- concat: function (head: string, tail: string) {
660
- return head + tail;
661
- }
662
- }
663
- });
664
- ```
665
- using script
666
- ```typescript
667
- const data = config.scripts.concat('head', 'tail')
668
- ```
669
- ```html
670
- <div>${$scripts.concat('head', 'tail')}</div>
671
- <div dr-if="$scripts.concat('wow', 'good') === 'wowgood'"> is wowgood</div>
672
- ```
673
-
674
- ---
675
- # Component, Attribute, AttributeCallBack
676
- # 😃 examples
677
- - [examples](./examples/component_script_attr) lazy load (html, css)
678
- ```html
679
- <body id="app">
680
- ${this.name}$
681
- <h1>component</h1>
682
- <profile dr-on-create:callback="$component.name='jhone'; $component.age=55;"><b>${#component#.details}$</b></profile>
683
- <profile dr-on-create:callback="$component.name='cal'; $component.age=56;"><b>detail-2</b></profile>
684
- <profile dr-on-create:callback="$component.name='rose'; $component.age=57;">
685
- <profile dr-on-create:callback="$component.name='rose-sub'; $component.age=156;">
686
- <b>${this.name}$</b>
687
- </profile>
688
- </profile>
689
- <h3>component data link and detect</h3>
690
- <Profile dr-if="this.toggle" dr-detect="$component.age = this.age" dr-on-create:callback="$component.name='papa'; $component.age=58;">
691
- <b>${this.name}$</b>
692
- </Profile>
693
- <Profile dr-if="this.toggle" dr-detect="$component.age = this.age" dr-on-constructor:arguments="[1,2]">
694
- <b>${this.name}$</b>
695
- </Profile>
696
-
697
- <button dr-event-click="this.name = new Date().toString();">change name</button>
698
- <button dr-event-click="this.age = Date.now();">change age</button>
699
- <button dr-event-click="this.toggle = !this.toggle;">change toggle</button>
700
-
701
- <j1>component constructor, on-create, dr-on-create:callback</j1>
702
- <home dr-constructor="[this.name, this.age, 'home welcom']" dr-on-create-arguments="{type: 'onCreate', data: 'datadata'}" dr-on-create:callback="$component.onInit('data')"></home>
703
-
704
-
705
-
706
- <h1>scripts</h1>
707
- <div>
708
- ${$scripts.concat('hello', 'tail')}$
709
- </div>
710
-
711
- <h1>attr</h1>
712
- <button link="this.link">
713
- link attribute
714
- </button>
715
- <h1>attrCallBack</h1>
716
- <input id="callback" type="text" wow>
717
- </body>
718
- ```
719
- ```typescript
720
- config.targetElements = [
721
- DomRender.createComponent({type: Profile, template: ProfileTemplate}), // lazy loading format 'lazy://component/home.html'
722
- DomRender.createComponent({type: Home, template: HomeTemplate, styles: HomeStyle})
723
- ]
724
-
725
- config.targetAttrs = [
726
- DomRender.createAttribute('link',
727
- (element: Element, attrValue: string, obj: any, rawSet: RawSet) => {
728
- return obj;
729
- },
730
- (element: Element, attrValue: string, obj: any, rawSet: RawSet) => {
731
- const fag = window.document.createDocumentFragment();
732
- if (attrValue) {
733
- const n = element.cloneNode(true) as Element;
734
- attrValue = ScriptUtils.eval(`return ${attrValue}`, obj)
735
- n.addEventListener('click', () => {
736
- location.href = attrValue;
737
- });
738
- fag.append(n);
739
- }
740
- return fag;
741
- }
742
- )
743
- ]
744
-
745
- config.applyEvents = [
746
- {
747
- attrName: 'wow',
748
- callBack: (e, a, o) => {
749
- e.addEventListener('click', (event) => {
750
- alert((event.target as any).value);
751
- })
752
- }
753
- }
754
- ]
755
- const data = DomRender.run(new Data(), document.querySelector('#app')!, config);
756
- ```
757
- using component
758
- ```html
759
- <my-element dr-on-create:callback="$component.say();"></my-element>
760
-
761
- <home value="${this.name}$" wow="${this.color}$">
762
- ${#component#.homeName}$
763
- <home value="${#component#.homeName}$" wow="${#component#.homeColor}$" dr-component-name="sub_component" dr-component-inner-html-name="innerHTML">
764
- ${#sub_component#.homeName}$
765
- </home>
766
- </home>
767
- ```
768
- lazy loading rollup config
769
- ```javascript
770
- copy({
771
- targets: [
772
- {
773
- src: ['**/*.html', '**/*.css', '!node_modules/**/*.html', '!node_modules/**/*.css'], dest: 'dist',
774
- rename: (name, extension, fullPath) => `${fullPath}`
775
- },
776
- { src: 'assets', dest: 'dist' }
777
- ]
778
- })
779
- ```
780
- - attribute
781
- - dr-on-create:callback: component created init callback script
782
- - dr-on-create:arguments: component onCreatedRender arguments
783
- - dr-on-init:arguments: component onInitRender arguments
784
- - dr-on-constructor:arguments: component counstructor arguments
785
- - $component: component instance
786
- - $element: element instance
787
- - $attribute: element attribute object
788
- - $innerHTML: element innerHTML string
789
- - $creatorMetaData: metaData
790
- - #component#: component instance
791
- - #innerHTML#: element innerHTML
792
- - dr-component-name: renaming component variable name (default: component)
793
- - dr-inner-html-name: renaming innerHTML variable name (default: innerHTML)
794
- ---
795
-
796
- # License
797
- * MIT
798
- * visualkhh@gmail.com
11
+ ---