@dooboostore/dom-render 1.0.98

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 (230) hide show
  1. package/DomRender.d.ts +24 -0
  2. package/DomRender.js +115 -0
  3. package/DomRenderProxy.d.ts +38 -0
  4. package/DomRenderProxy.js +586 -0
  5. package/README.MD +938 -0
  6. package/components/ComponentBase.d.ts +41 -0
  7. package/components/ComponentBase.js +210 -0
  8. package/components/ComponentSet.d.ts +22 -0
  9. package/components/ComponentSet.js +23 -0
  10. package/components/appender/Appender.d.ts +23 -0
  11. package/components/appender/Appender.js +59 -0
  12. package/components/checkbox/CheckBox.d.ts +47 -0
  13. package/components/checkbox/CheckBox.js +118 -0
  14. package/components/choose/Choose.d.ts +39 -0
  15. package/components/choose/Choose.js +110 -0
  16. package/components/details/Details.d.ts +57 -0
  17. package/components/details/Details.js +199 -0
  18. package/components/dialog/Dialog.d.ts +1 -0
  19. package/components/dialog/Dialog.js +85 -0
  20. package/components/dialog/example/ImageEditorDialog.d.ts +1 -0
  21. package/components/dialog/example/ImageEditorDialog.js +116 -0
  22. package/components/forOf/ForOf.d.ts +18 -0
  23. package/components/forOf/ForOf.js +32 -0
  24. package/components/if/If.d.ts +21 -0
  25. package/components/if/If.js +40 -0
  26. package/components/index.d.ts +27 -0
  27. package/components/index.js +13 -0
  28. package/components/input/Input.d.ts +34 -0
  29. package/components/input/Input.js +86 -0
  30. package/components/promise/PromiseSwitch.d.ts +55 -0
  31. package/components/promise/PromiseSwitch.js +181 -0
  32. package/components/radio/Radio.d.ts +45 -0
  33. package/components/radio/Radio.js +123 -0
  34. package/components/select/Select.d.ts +23 -0
  35. package/components/select/Select.js +52 -0
  36. package/components/this/This.d.ts +24 -0
  37. package/components/this/This.js +62 -0
  38. package/components/timer/Timer.d.ts +26 -0
  39. package/components/timer/Timer.js +102 -0
  40. package/configs/Config.d.ts +34 -0
  41. package/configs/Config.js +2 -0
  42. package/configs/TargetAttr.d.ts +7 -0
  43. package/configs/TargetAttr.js +2 -0
  44. package/configs/TargetElement.d.ts +16 -0
  45. package/configs/TargetElement.js +2 -0
  46. package/css/parse/index.d.ts +49 -0
  47. package/css/parse/index.js +498 -0
  48. package/css/stringify/compiler.d.ts +34 -0
  49. package/css/stringify/compiler.js +36 -0
  50. package/css/stringify/compress.d.ts +104 -0
  51. package/css/stringify/compress.js +147 -0
  52. package/css/stringify/identity.d.ts +109 -0
  53. package/css/stringify/identity.js +183 -0
  54. package/css/stringify/index.d.ts +24 -0
  55. package/css/stringify/index.js +27 -0
  56. package/css/stringify/types.d.ts +15 -0
  57. package/css/stringify/types.js +2 -0
  58. package/css/types.d.ts +10 -0
  59. package/css/types.js +2 -0
  60. package/decorators/DomRenderNoProxy.d.ts +4 -0
  61. package/decorators/DomRenderNoProxy.js +15 -0
  62. package/events/EventManager.d.ts +68 -0
  63. package/events/EventManager.js +477 -0
  64. package/index.d.ts +2 -0
  65. package/index.js +2 -0
  66. package/iterators/Range.d.ts +24 -0
  67. package/iterators/Range.js +70 -0
  68. package/lifecycle/OnBeforeReturnGet.d.ts +4 -0
  69. package/lifecycle/OnBeforeReturnGet.js +2 -0
  70. package/lifecycle/OnBeforeReturnSet.d.ts +5 -0
  71. package/lifecycle/OnBeforeReturnSet.js +4 -0
  72. package/lifecycle/OnChangeAttrRender.d.ts +9 -0
  73. package/lifecycle/OnChangeAttrRender.js +4 -0
  74. package/lifecycle/OnChildRenderedByProperty.d.ts +5 -0
  75. package/lifecycle/OnChildRenderedByProperty.js +4 -0
  76. package/lifecycle/OnCreateRender.d.ts +5 -0
  77. package/lifecycle/OnCreateRender.js +4 -0
  78. package/lifecycle/OnCreateRenderData.d.ts +10 -0
  79. package/lifecycle/OnCreateRenderData.js +4 -0
  80. package/lifecycle/OnCreateRendered.d.ts +8 -0
  81. package/lifecycle/OnCreateRendered.js +4 -0
  82. package/lifecycle/OnCreatedThisChild.d.ts +6 -0
  83. package/lifecycle/OnCreatedThisChild.js +4 -0
  84. package/lifecycle/OnDestroyRender.d.ts +9 -0
  85. package/lifecycle/OnDestroyRender.js +4 -0
  86. package/lifecycle/OnInitRender.d.ts +6 -0
  87. package/lifecycle/OnInitRender.js +4 -0
  88. package/lifecycle/OnProxyDomRender.d.ts +5 -0
  89. package/lifecycle/OnProxyDomRender.js +2 -0
  90. package/lifecycle/dr-this/OnDrThisBind.d.ts +5 -0
  91. package/lifecycle/dr-this/OnDrThisBind.js +4 -0
  92. package/lifecycle/dr-this/OnDrThisUnBind.d.ts +5 -0
  93. package/lifecycle/dr-this/OnDrThisUnBind.js +4 -0
  94. package/managers/RenderManager.d.ts +2 -0
  95. package/managers/RenderManager.js +12 -0
  96. package/messenger/DefaultMessenger.d.ts +4 -0
  97. package/messenger/DefaultMessenger.js +4 -0
  98. package/messenger/Messenger.d.ts +79 -0
  99. package/messenger/Messenger.js +185 -0
  100. package/operators/Appender.d.ts +15 -0
  101. package/operators/Appender.js +90 -0
  102. package/operators/Dr.d.ts +9 -0
  103. package/operators/Dr.js +53 -0
  104. package/operators/DrAppender.d.ts +9 -0
  105. package/operators/DrAppender.js +69 -0
  106. package/operators/DrFor.d.ts +9 -0
  107. package/operators/DrFor.js +58 -0
  108. package/operators/DrForOf.d.ts +9 -0
  109. package/operators/DrForOf.js +120 -0
  110. package/operators/DrForm.d.ts +9 -0
  111. package/operators/DrForm.js +79 -0
  112. package/operators/DrIf.d.ts +9 -0
  113. package/operators/DrIf.js +70 -0
  114. package/operators/DrInnerHTML.d.ts +9 -0
  115. package/operators/DrInnerHTML.js +48 -0
  116. package/operators/DrInnerText.d.ts +9 -0
  117. package/operators/DrInnerText.js +46 -0
  118. package/operators/DrPre.d.ts +8 -0
  119. package/operators/DrPre.js +22 -0
  120. package/operators/DrRepeat.d.ts +9 -0
  121. package/operators/DrRepeat.js +70 -0
  122. package/operators/DrStripElement.d.ts +9 -0
  123. package/operators/DrStripElement.js +50 -0
  124. package/operators/DrTargetAttr.d.ts +8 -0
  125. package/operators/DrTargetAttr.js +45 -0
  126. package/operators/DrTargetElement.d.ts +13 -0
  127. package/operators/DrTargetElement.js +91 -0
  128. package/operators/DrTargetElementIsElement.d.ts +13 -0
  129. package/operators/DrTargetElementIsElement.js +79 -0
  130. package/operators/DrThis.d.ts +7 -0
  131. package/operators/DrThis.js +72 -0
  132. package/operators/DrThisProperty.d.ts +11 -0
  133. package/operators/DrThisProperty.js +93 -0
  134. package/operators/OperatorExecuter.d.ts +50 -0
  135. package/operators/OperatorExecuter.js +50 -0
  136. package/operators/OperatorExecuterAttrRequire.d.ts +9 -0
  137. package/operators/OperatorExecuterAttrRequire.js +25 -0
  138. package/package.json +70 -0
  139. package/rawsets/AttrInitCallBack.d.ts +6 -0
  140. package/rawsets/AttrInitCallBack.js +2 -0
  141. package/rawsets/Attrs.d.ts +27 -0
  142. package/rawsets/Attrs.js +2 -0
  143. package/rawsets/CreatorMetaData.d.ts +20 -0
  144. package/rawsets/CreatorMetaData.js +2 -0
  145. package/rawsets/DestroyOptionType.d.ts +5 -0
  146. package/rawsets/DestroyOptionType.js +6 -0
  147. package/rawsets/ElementInitCallBack.d.ts +9 -0
  148. package/rawsets/ElementInitCallBack.js +2 -0
  149. package/rawsets/RawSet.d.ts +180 -0
  150. package/rawsets/RawSet.js +1450 -0
  151. package/rawsets/RawSetOperatorType.d.ts +4 -0
  152. package/rawsets/RawSetOperatorType.js +5 -0
  153. package/rawsets/RawSetType.d.ts +8 -0
  154. package/rawsets/RawSetType.js +9 -0
  155. package/rawsets/Render.d.ts +27 -0
  156. package/rawsets/Render.js +2 -0
  157. package/routers/HashRouter.d.ts +24 -0
  158. package/routers/HashRouter.js +86 -0
  159. package/routers/PathRouter.d.ts +23 -0
  160. package/routers/PathRouter.js +73 -0
  161. package/routers/Router.d.ts +68 -0
  162. package/routers/Router.js +132 -0
  163. package/types/Types.d.ts +12 -0
  164. package/types/Types.js +26 -0
  165. package/validators/AllCheckedValidatorArray.d.ts +7 -0
  166. package/validators/AllCheckedValidatorArray.js +11 -0
  167. package/validators/AllUnCheckedValidatorArray.d.ts +7 -0
  168. package/validators/AllUnCheckedValidatorArray.js +11 -0
  169. package/validators/CheckedValidator.d.ts +6 -0
  170. package/validators/CheckedValidator.js +11 -0
  171. package/validators/CountEqualsCheckedValidatorArray.d.ts +8 -0
  172. package/validators/CountEqualsCheckedValidatorArray.js +12 -0
  173. package/validators/CountEqualsUnCheckedValidatorArray.d.ts +8 -0
  174. package/validators/CountEqualsUnCheckedValidatorArray.js +12 -0
  175. package/validators/CountGreaterThanCheckedValidatorArray.d.ts +8 -0
  176. package/validators/CountGreaterThanCheckedValidatorArray.js +12 -0
  177. package/validators/CountGreaterThanEqualsCheckedValidatorArray.d.ts +8 -0
  178. package/validators/CountGreaterThanEqualsCheckedValidatorArray.js +12 -0
  179. package/validators/CountGreaterThanEqualsUnCheckedValidatorArray.d.ts +8 -0
  180. package/validators/CountGreaterThanEqualsUnCheckedValidatorArray.js +12 -0
  181. package/validators/CountGreaterThanUnCheckedValidatorArray.d.ts +8 -0
  182. package/validators/CountGreaterThanUnCheckedValidatorArray.js +12 -0
  183. package/validators/CountLessThanCheckedValidatorArray.d.ts +8 -0
  184. package/validators/CountLessThanCheckedValidatorArray.js +12 -0
  185. package/validators/CountLessThanEqualsCheckedValidatorArray.d.ts +8 -0
  186. package/validators/CountLessThanEqualsCheckedValidatorArray.js +12 -0
  187. package/validators/CountLessThanEqualsUnCheckedValidatorArray.d.ts +8 -0
  188. package/validators/CountLessThanEqualsUnCheckedValidatorArray.js +12 -0
  189. package/validators/CountLessThanUnCheckedValidatorArray.d.ts +8 -0
  190. package/validators/CountLessThanUnCheckedValidatorArray.js +12 -0
  191. package/validators/CountUnCheckedValidatorArray.d.ts +8 -0
  192. package/validators/CountUnCheckedValidatorArray.js +12 -0
  193. package/validators/EmptyValidator.d.ts +6 -0
  194. package/validators/EmptyValidator.js +12 -0
  195. package/validators/ExcludeCheckedValidatorArray.d.ts +9 -0
  196. package/validators/ExcludeCheckedValidatorArray.js +17 -0
  197. package/validators/FormValidator.d.ts +8 -0
  198. package/validators/FormValidator.js +16 -0
  199. package/validators/IncludeCheckedValidatorArray.d.ts +9 -0
  200. package/validators/IncludeCheckedValidatorArray.js +17 -0
  201. package/validators/MultipleValidator.d.ts +9 -0
  202. package/validators/MultipleValidator.js +25 -0
  203. package/validators/NonPassValidator.d.ts +6 -0
  204. package/validators/NonPassValidator.js +10 -0
  205. package/validators/NotEmptyValidator.d.ts +6 -0
  206. package/validators/NotEmptyValidator.js +13 -0
  207. package/validators/NotRegExpTestValidator.d.ts +7 -0
  208. package/validators/NotRegExpTestValidator.js +20 -0
  209. package/validators/PassValidator.d.ts +6 -0
  210. package/validators/PassValidator.js +10 -0
  211. package/validators/RegExpTestValidator.d.ts +7 -0
  212. package/validators/RegExpTestValidator.js +21 -0
  213. package/validators/RequiredValidator.d.ts +6 -0
  214. package/validators/RequiredValidator.js +12 -0
  215. package/validators/UnCheckedValidator.d.ts +6 -0
  216. package/validators/UnCheckedValidator.js +11 -0
  217. package/validators/ValidMultipleValidator.d.ts +10 -0
  218. package/validators/ValidMultipleValidator.js +12 -0
  219. package/validators/ValidValidator.d.ts +7 -0
  220. package/validators/ValidValidator.js +11 -0
  221. package/validators/ValidValidatorArray.d.ts +8 -0
  222. package/validators/ValidValidatorArray.js +11 -0
  223. package/validators/Validator.d.ts +58 -0
  224. package/validators/Validator.js +203 -0
  225. package/validators/ValidatorArray.d.ts +18 -0
  226. package/validators/ValidatorArray.js +77 -0
  227. package/validators/ValueEqualsValidator.d.ts +7 -0
  228. package/validators/ValueEqualsValidator.js +11 -0
  229. package/validators/ValueNotEqualsValidator.d.ts +7 -0
  230. package/validators/ValueNotEqualsValidator.js +11 -0
@@ -0,0 +1,477 @@
1
+ var _a;
2
+ import { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';
3
+ import { DomUtils } from '@dooboostore/core-web/dom/DomUtils';
4
+ import { Range } from '../iterators/Range';
5
+ import { DomRenderFinalProxy } from '../types/Types';
6
+ export class EventManager {
7
+ constructor() {
8
+ this.eventNames = [
9
+ 'click', 'mousedown', 'mouseup', 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mouseenter', 'mouseleave', 'contextmenu',
10
+ 'keyup', 'keydown', 'keypress', 'toggle',
11
+ 'change', 'input', 'submit', 'resize', 'focus', 'blur',
12
+ 'close', 'cancel' // dialog cancel 이벤트는 close 이벤트의 하위 이벤트로, ESC 키나 취소 버튼으로 닫힐 때만 발생. (close// 추가 로직 (예: 닫힘 후 처리))
13
+ /*
14
+ close 이벤트: <dialog>가 닫힐 때 발생. 사용자가 취소 버튼, 확인 버튼, 또는 dialog.close() 메서드로 닫을 때 모두 트리거됩니다.
15
+ cancel 이벤트: <dialog>가 ESC 키나 취소 버튼으로 닫힐 때 발생. close 이벤트의 하위 이벤트로 볼 수 있습니다.
16
+ */
17
+ ];
18
+ this.bindScript = `
19
+ const ${_a.VALUE_VARNAME} = this.__render.value;
20
+ const ${_a.SCRIPTS_VARNAME} = this.__render.scripts;
21
+ const ${_a.RANGE_VARNAME} = this.__render.range;
22
+ const ${_a.ROUTER_VARNAME} = this.__render.router;
23
+ const ${_a.ATTRIBUTE_VARNAME} = this.__render.attribute;
24
+ const ${_a.ELEMENT_VARNAME} = this.__render.element;
25
+ const ${_a.COMPONENT_VARNAME} = this.__render.element.component;
26
+ const ${_a.TARGET_VARNAME} = this.__render.target;
27
+ const ${_a.EVENT_VARNAME} = this.__render.event;
28
+ `;
29
+ this.eventNames.forEach(it => {
30
+ _a.attrNames.push(_a.attrPrefix + 'event-' + it);
31
+ });
32
+ _a.attrNames.push(_a.onRenderedInitAttrName);
33
+ if (typeof window !== 'undefined') {
34
+ _a.WINDOW_EVENTS.forEach(eventName => {
35
+ window === null || window === void 0 ? void 0 : window.addEventListener(eventName, (event) => {
36
+ const targetAttr = `dr-window-event-${eventName}`;
37
+ document.querySelectorAll(`[${targetAttr}]`).forEach(it => {
38
+ var _b;
39
+ const script = it.getAttribute(targetAttr);
40
+ if (script) {
41
+ const obj = it.obj;
42
+ const config = (_b = obj === null || obj === void 0 ? void 0 : obj._DomRender_proxy) === null || _b === void 0 ? void 0 : _b.config;
43
+ ScriptUtils.eval(`${this.bindScript} ${script} `, Object.assign(obj, {
44
+ __render: Object.freeze({
45
+ target: DomRenderFinalProxy.final(event.target),
46
+ element: it,
47
+ event: event,
48
+ range: Range.range,
49
+ scripts: _a.setBindProperty(config === null || config === void 0 ? void 0 : config.scripts, obj)
50
+ // ...EventManager.eventVariables
51
+ })
52
+ }));
53
+ }
54
+ });
55
+ });
56
+ });
57
+ }
58
+ }
59
+ // // 순환참조때문에 우선 여기에 뺴놓는다.
60
+ // public DomrenderProxyFinal(obj: any) {
61
+ // (obj as any)._DomRender_isFinal = true;
62
+ // return obj;
63
+ // }
64
+ // 중요 이벤트에 대상이될 Elements를 찾는다.
65
+ findAttrElements(fragment, config) {
66
+ var _b, _c;
67
+ // const datas: {name: string, value: string | null, element: Element}[] = [];
68
+ const elements = new Set();
69
+ const addAttributes = (_c = (_b = config === null || config === void 0 ? void 0 : config.applyEvents) === null || _b === void 0 ? void 0 : _b.map(it => it.attrName)) !== null && _c !== void 0 ? _c : [];
70
+ addAttributes.concat([..._a.attrNames]).forEach(attrName => {
71
+ fragment === null || fragment === void 0 ? void 0 : fragment.querySelectorAll(`[${attrName}]`).forEach(it => {
72
+ elements.add(it);
73
+ });
74
+ });
75
+ return elements;
76
+ }
77
+ // 중요 처음 이벤트 처리
78
+ // eslint-disable-next-line no-undef
79
+ applyEvent(obj, childNodes, config) {
80
+ // console.log('eventManager applyEvent==>', obj, childNodes, config)
81
+ // Node.ELEMENT_NODE = 1
82
+ // event
83
+ // childNodes.forEach(it => {
84
+ // if (it instanceof Element) {
85
+ // it.setAttribute('dr-thieVariableName', 'this')
86
+ // }
87
+ // })
88
+ // 중요 이벤트 걸어줌
89
+ this.eventNames.forEach(it => {
90
+ this.addDrEvents(obj, it, childNodes, config);
91
+ });
92
+ this.addDrEventPram(obj, _a.eventParam, childNodes, config);
93
+ // value
94
+ this.procAttr(childNodes, _a.valueAttrName, (it, attribute) => {
95
+ const script = attribute;
96
+ if (script) {
97
+ const data = ScriptUtils.evalReturn(script, obj);
98
+ if (it.value !== data) {
99
+ it.value = data;
100
+ }
101
+ }
102
+ });
103
+ // normal-attr-map
104
+ this.procAttr(childNodes, _a.normalAttrMapAttrName, (it, attribute) => {
105
+ const map = new Map(JSON.parse(attribute));
106
+ map.forEach((v, k) => {
107
+ const data = ScriptUtils.eval(`const $element = this.element; return ${v} `, Object.assign(obj, {
108
+ __render: Object.freeze({
109
+ element: it,
110
+ attribute: DomUtils.getAttributeToObject(it)
111
+ })
112
+ }));
113
+ // console.log('-------normalAttribute---datadatadata',data)
114
+ if (data === null) {
115
+ it.removeAttribute(k);
116
+ }
117
+ else {
118
+ it.setAttribute(k, data);
119
+ }
120
+ });
121
+ });
122
+ // window event
123
+ _a.WINDOW_EVENTS.forEach(it => {
124
+ this.procAttr(childNodes, _a.attrPrefix + 'window-event-' + it, (it, attribute) => {
125
+ it.obj = obj;
126
+ });
127
+ });
128
+ // value-link event
129
+ _a.linkAttrs.forEach(linkInfo => {
130
+ this.procAttr(childNodes, linkInfo.name, (it, varName) => {
131
+ if (varName) {
132
+ const ownerVariablePathName = it.getAttribute(_a.ownerVariablePathAttrName);
133
+ const mapScript = it.getAttribute(`${linkInfo.name}:map`);
134
+ // const inMapScript = it.getAttribute(`${valueLinkAttrName}:in-map`);
135
+ let bindObj = obj;
136
+ if (ownerVariablePathName) {
137
+ bindObj = ScriptUtils.evalReturn(ownerVariablePathName, obj);
138
+ }
139
+ const getValue = this.getValue(obj, varName, bindObj);
140
+ // TODO: 아래 나중에 리팩토링 필요함
141
+ if (typeof getValue === 'function' && getValue) {
142
+ let setValue = it[linkInfo.property];
143
+ if (mapScript) {
144
+ setValue = ScriptUtils.eval(`${this.getBindScript(config)} return ${mapScript}`, Object.assign(bindObj, { __render: Object.freeze(Object.assign({ element: it, target: bindObj, range: Range.range, value: setValue, scripts: _a.setBindProperty(config === null || config === void 0 ? void 0 : config.scripts, obj) }, config === null || config === void 0 ? void 0 : config.eventVariables)) }));
145
+ }
146
+ getValue(setValue);
147
+ }
148
+ else if (getValue) {
149
+ let setValue = getValue;
150
+ if (mapScript) {
151
+ setValue = ScriptUtils.eval(`${this.getBindScript(config)} return ${mapScript}`, Object.assign(bindObj, { __render: Object.freeze(Object.assign({ element: it, target: bindObj, range: Range.range, value: setValue, scripts: _a.setBindProperty(config === null || config === void 0 ? void 0 : config.scripts, obj) }, config === null || config === void 0 ? void 0 : config.eventVariables)) }));
152
+ }
153
+ // console.log('------->',it.value, setValue)
154
+ if (setValue === null) {
155
+ it.removeAttribute(linkInfo.property);
156
+ }
157
+ else {
158
+ // console.log('-----------',it, setValue)
159
+ it[linkInfo.property] = setValue;
160
+ }
161
+ // 여기서 value가 먼저냐 value-link가 먼저냐 선을 정해야되는거네..-> 라고해서 undefined일때에는 element값을 먼저셋팅해준다.
162
+ }
163
+ else if (getValue === undefined) {
164
+ this.setValue(obj, varName, it[linkInfo.property]);
165
+ }
166
+ it.addEventListener(linkInfo.event, (event) => {
167
+ let value = it[linkInfo.property];
168
+ if (mapScript) {
169
+ value = ScriptUtils.eval(`${this.getBindScript(config)} return ${mapScript}`, Object.assign(bindObj, {
170
+ __render: Object.freeze(Object.assign({ event, element: it, attribute: DomUtils.getAttributeToObject(it), target: event.target, range: Range.range, scripts: _a.setBindProperty(config === null || config === void 0 ? void 0 : config.scripts, obj) }, config === null || config === void 0 ? void 0 : config.eventVariables))
171
+ }));
172
+ }
173
+ if (typeof this.getValue(obj, varName, bindObj) === 'function') {
174
+ this.getValue(obj, varName, bindObj)(value, event);
175
+ }
176
+ else {
177
+ this.setValue(obj, varName, value);
178
+ }
179
+ });
180
+ }
181
+ });
182
+ });
183
+ // on-init event
184
+ this.procAttr(childNodes, _a.onInitAttrName, (it, attribute) => {
185
+ // it.removeAttribute(EventManager.onInitAttrName);
186
+ let script = attribute;
187
+ if (script) {
188
+ script = 'return ' + script;
189
+ }
190
+ if (script) {
191
+ ScriptUtils.eval(`${this.getBindScript(config)}; ${script} `, Object.assign(obj, {
192
+ __render: Object.freeze(Object.assign({ element: it, attribute: DomUtils.getAttributeToObject(it) }, config === null || config === void 0 ? void 0 : config.eventVariables))
193
+ }));
194
+ }
195
+ });
196
+ this.onRenderedEvent(obj, childNodes, config);
197
+ this.changeVar(obj, childNodes, undefined, config);
198
+ // console.log('eventManager-applyEvent-->', config?.applyEvents)
199
+ const elements = Array.from(childNodes).filter(it => it.nodeType === 1).map(it => it);
200
+ elements.forEach(it => {
201
+ var _b;
202
+ (_b = config === null || config === void 0 ? void 0 : config.applyEvents) === null || _b === void 0 ? void 0 : _b.filter(ta => it.getAttribute(ta.attrName) !== null).forEach(ta => ta.callBack(it, it.getAttribute(ta.attrName), obj));
203
+ });
204
+ }
205
+ // RawSet에서 replaceBody이후에 호출
206
+ onRenderedEvent(obj, childNodes, config) {
207
+ // console.log('--------onRenderedEvent', obj, childNodes);
208
+ // console.log(document.querySelectorAll(`[${EventManager.onRenderedInitAttrName}]`))
209
+ this.procAttr(childNodes, _a.onRenderedInitAttrName, (it, attribute) => {
210
+ // it.removeAttribute(EventManager.onRenderedInitAttrName);
211
+ if (!it.isConnected) {
212
+ return;
213
+ }
214
+ let script = attribute;
215
+ if (script) {
216
+ script = 'return ' + script;
217
+ }
218
+ // console.log('onRendered!!')
219
+ if (script) {
220
+ ScriptUtils.eval(`${this.getBindScript(config)}; ${script} `, Object.assign(obj, {
221
+ __render: Object.freeze(Object.assign({ element: it, attribute: DomUtils.getAttributeToObject(it) }, config === null || config === void 0 ? void 0 : config.eventVariables))
222
+ }));
223
+ }
224
+ });
225
+ }
226
+ // eslint-disable-next-line no-undef
227
+ changeVar(obj, elements, varName, config) {
228
+ // style
229
+ this.procAttr(elements, _a.styleAttrName, (it, attribute) => {
230
+ let script = attribute;
231
+ if (script) {
232
+ script = 'return ' + script;
233
+ }
234
+ if (_a.isUsingThisVar(script, varName) || varName === undefined) {
235
+ const data = ScriptUtils.eval(`const $element = this.__render.element; ${script} `, Object.assign(obj, {
236
+ __render: Object.freeze({
237
+ element: it,
238
+ attribute: DomUtils.getAttributeToObject(it)
239
+ })
240
+ }));
241
+ if (typeof data === 'string') {
242
+ it.setAttribute('style', data);
243
+ }
244
+ else if (Array.isArray(data)) {
245
+ it.setAttribute('style', data.join(';'));
246
+ }
247
+ else {
248
+ for (const [key, value] of Object.entries(data)) {
249
+ if (it instanceof HTMLElement) {
250
+ it.style[key] = String(value);
251
+ }
252
+ }
253
+ }
254
+ }
255
+ });
256
+ // class
257
+ this.procAttr(elements, _a.classAttrName, (it, attribute) => {
258
+ let script = attribute;
259
+ if (script) {
260
+ script = 'return ' + script;
261
+ }
262
+ if (_a.isUsingThisVar(script, varName) || varName === undefined) {
263
+ const data = ScriptUtils.eval(`const $element = this.element; ${script} `, Object.assign(obj, {
264
+ __render: Object.freeze({
265
+ element: it,
266
+ attribute: DomUtils.getAttributeToObject(it)
267
+ })
268
+ }));
269
+ if (typeof data === 'string') {
270
+ it.setAttribute('class', data);
271
+ }
272
+ else if (Array.isArray(data)) {
273
+ it.setAttribute('class', data.join(' '));
274
+ }
275
+ else {
276
+ for (const [key, value] of Object.entries(data)) {
277
+ if (it instanceof HTMLElement) {
278
+ if (value) {
279
+ it.classList.add(key);
280
+ }
281
+ else {
282
+ it.classList.remove(key);
283
+ }
284
+ }
285
+ }
286
+ }
287
+ }
288
+ });
289
+ // this.onRenderedEvent(obj,elements, config);
290
+ }
291
+ addDrEvents(obj, eventName, elements, config) {
292
+ // console.log('-------?', config?.router)
293
+ const attr = _a.attrPrefix + 'event-' + eventName;
294
+ this.procAttr(elements, attr, (it, attribute) => {
295
+ const script = attribute;
296
+ const hasDispatch = it.hasAttribute(`${attr}:dispatch`);
297
+ // console.log('hasDispatch',hasDispatch, attr, it);
298
+ it.addEventListener(eventName, (event) => {
299
+ let filter = true;
300
+ const filterScript = it.getAttribute(`${attr}:filter`);
301
+ const thisTarget = Object.assign(obj, {
302
+ __render: Object.freeze(Object.assign({ event, element: it, target: event.target, range: Range.range, attribute: DomUtils.getAttributeToObject(it), router: config === null || config === void 0 ? void 0 : config.router, scripts: _a.setBindProperty(config === null || config === void 0 ? void 0 : config.scripts, obj) }, config === null || config === void 0 ? void 0 : config.eventVariables))
303
+ });
304
+ if (filterScript) {
305
+ filter = ScriptUtils.eval(`${this.getBindScript(config)} return ${filterScript}`, thisTarget);
306
+ }
307
+ if (filter) {
308
+ ScriptUtils.eval(`${this.getBindScript(config)} ${script} `, thisTarget);
309
+ }
310
+ });
311
+ if (hasDispatch) {
312
+ it.dispatchEvent(new Event(eventName));
313
+ }
314
+ });
315
+ }
316
+ // eslint-disable-next-line no-undef
317
+ addDrEventPram(obj, attr, elements, config) {
318
+ this.procAttr(elements, attr, (it, attribute, attributes) => {
319
+ const bind = attributes[attr + ':bind'];
320
+ if (bind) {
321
+ const script = attribute;
322
+ const params = {};
323
+ const prefix = attr + ':';
324
+ Object.entries(attributes).filter(([k, v]) => k.startsWith(prefix)).forEach(([k, v]) => {
325
+ params[k.slice(prefix.length)] = v;
326
+ });
327
+ bind.split(',').forEach(eventName => {
328
+ it.addEventListener(eventName.trim(), (event) => {
329
+ ScriptUtils.eval(`const $params = this.__render.params; ${this.getBindScript(config)} ${script} `, Object.assign(obj, {
330
+ __render: Object.freeze(Object.assign({ event, element: it, attribute: DomUtils.getAttributeToObject(it), target: event.target, range: Range.range, scripts: _a.setBindProperty(config === null || config === void 0 ? void 0 : config.scripts, obj), params }, config === null || config === void 0 ? void 0 : config.eventVariables))
331
+ }));
332
+ });
333
+ });
334
+ }
335
+ });
336
+ }
337
+ // eslint-disable-next-line no-undef
338
+ procAttr(elements = new Set(), attrName, callBack) {
339
+ const sets = new Set();
340
+ elements.forEach(it => {
341
+ // console.log('--->type', it, it.nodeType)
342
+ if (!it) {
343
+ return;
344
+ }
345
+ // Node.ELEMENT_NODE = 1
346
+ if (it.nodeType === 1) {
347
+ const e = it;
348
+ sets.add(e);
349
+ e.querySelectorAll(`[${attrName}]`).forEach(it => {
350
+ sets.add(it);
351
+ });
352
+ }
353
+ });
354
+ // console.log('---setr',sets);
355
+ sets.forEach(it => {
356
+ const attr = it.getAttribute(attrName);
357
+ const attrs = DomUtils.getAttributeToObject(it);
358
+ if (attr) {
359
+ callBack(it, attr, attrs);
360
+ }
361
+ });
362
+ }
363
+ getValue(obj, name, bindObj) {
364
+ // let r = obj[name];
365
+ let r = ScriptUtils.evalReturn(name, obj);
366
+ if (typeof r === 'function') {
367
+ r = r.bind(bindObj !== null && bindObj !== void 0 ? bindObj : obj);
368
+ }
369
+ return r;
370
+ }
371
+ setValue(obj, name, value) {
372
+ name = name.replaceAll('this.', 'this.this.');
373
+ ScriptUtils.eval(`${name} = this.value;`, {
374
+ this: obj,
375
+ value: value
376
+ });
377
+ }
378
+ static isUsingThisVar(raws, varName) {
379
+ // console.log('isUsingV', raws)
380
+ // console.log('isUsingV', raws, varName, ScriptUtils.getVariablePaths(raws ?? ''))
381
+ if (varName && raws) {
382
+ if (varName.startsWith('this.')) {
383
+ varName = varName.replace(/this\./, '');
384
+ }
385
+ _a.VARNAMES.forEach(it => {
386
+ // raws = raws!.replace(RegExp(it.replace('$', '\\$'), 'g'), `this?.___${it}`);
387
+ raws = raws.replace(RegExp(it.replace('$', '\\$'), 'g'), `this.___${it}`);
388
+ });
389
+ const variablePaths = ScriptUtils.getVariablePaths(raws !== null && raws !== void 0 ? raws : '');
390
+ return variablePaths.has(varName);
391
+ }
392
+ return false;
393
+ }
394
+ static setBindProperty(scripts, obj) {
395
+ if (scripts) {
396
+ // const newScripts = Object.assign({}, scripts)
397
+ const newScripts = Object.assign({}, scripts);
398
+ for (const [key, value] of Object.entries(newScripts)) {
399
+ if (typeof value === 'function') {
400
+ newScripts[key] = value.bind(obj);
401
+ }
402
+ }
403
+ return newScripts;
404
+ }
405
+ }
406
+ getBindScript(config) {
407
+ if (config === null || config === void 0 ? void 0 : config.eventVariables) {
408
+ const bindScript = Object.entries(config.eventVariables).filter(([key, value]) => !this.bindScript.includes(`const ${key}`)).map(([key, value]) => {
409
+ return `const ${key} = this.__render.${key};`;
410
+ }).join(';');
411
+ return this.bindScript + '' + bindScript;
412
+ }
413
+ else {
414
+ return this.bindScript;
415
+ }
416
+ }
417
+ }
418
+ _a = EventManager;
419
+ EventManager.attrPrefix = 'dr-';
420
+ EventManager.ownerVariablePathAttrName = _a.attrPrefix + 'owner-variable-path';
421
+ EventManager.eventParam = _a.attrPrefix + 'event';
422
+ EventManager.onInitAttrName = _a.attrPrefix + 'on-init';
423
+ EventManager.valueAttrName = _a.attrPrefix + 'value';
424
+ EventManager.linkAttrs = [
425
+ { name: _a.attrPrefix + 'value-link', property: 'value', event: 'input' },
426
+ { name: _a.attrPrefix + 'hidden-link', property: 'value', event: 'input' },
427
+ { name: _a.attrPrefix + 'required-link', property: 'value', event: 'input' },
428
+ { name: _a.attrPrefix + 'checked-link', property: 'checked', event: 'change' },
429
+ { name: _a.attrPrefix + 'open-link', property: 'open', event: 'toggle' },
430
+ ];
431
+ EventManager.linkTargetMapAttrName = _a.attrPrefix + 'link-variables';
432
+ EventManager.onRenderedInitAttrName = _a.attrPrefix + 'on-rendered-init';
433
+ EventManager.attrAttrName = _a.attrPrefix + 'attr';
434
+ EventManager.normalAttrMapAttrName = _a.attrPrefix + 'normal-attr-map';
435
+ EventManager.styleAttrName = _a.attrPrefix + 'style';
436
+ EventManager.classAttrName = _a.attrPrefix + 'class';
437
+ EventManager.VALUE_VARNAME = '$value';
438
+ EventManager.SCRIPTS_VARNAME = '$scripts';
439
+ EventManager.FAG_VARNAME = '$fag';
440
+ EventManager.RAWSET_VARNAME = '$rawSet';
441
+ EventManager.RENDER_VARNAME = '$render';
442
+ EventManager.NEAR_THIS_VARNAME = '$nearThis';
443
+ EventManager.PARENT_THIS_VARNAME = '$parentThis';
444
+ EventManager.ROOT_OBJECT_VARNAME = '$rootObject';
445
+ EventManager.SCRIPT_UTILS_VARNAME = '$scriptUtils';
446
+ EventManager.RANGE_VARNAME = '$range';
447
+ EventManager.ROUTER_VARNAME = '$router';
448
+ EventManager.INNER_HTML_VARNAME = '$innerHTML';
449
+ EventManager.ELEMENT_VARNAME = '$element';
450
+ EventManager.TARGET_VARNAME = '$target';
451
+ EventManager.EVENT_VARNAME = '$event';
452
+ EventManager.COMPONENT_VARNAME = '$component';
453
+ EventManager.INNERHTML_VARNAME = '$innerHTML';
454
+ EventManager.ATTRIBUTE_VARNAME = '$attribute';
455
+ EventManager.CREATOR_META_DATA_VARNAME = '$creatorMetaData';
456
+ EventManager.PARENT_THIS_PATH_VARNAME = '$parentPath';
457
+ EventManager.CURRENT_THIS_VARNAME = '$currentThis';
458
+ EventManager.CURRENT_THIS_PATH_VARNAME = '$currentThisPath';
459
+ EventManager.NEAR_THIS_PATH_VARNAME = '$nearThisPath';
460
+ EventManager.VARNAMES = [_a.SCRIPTS_VARNAME, _a.FAG_VARNAME, _a.RAWSET_VARNAME, _a.RANGE_VARNAME, _a.ROUTER_VARNAME, _a.ELEMENT_VARNAME, _a.TARGET_VARNAME, _a.EVENT_VARNAME, _a.COMPONENT_VARNAME, _a.INNERHTML_VARNAME, _a.ATTRIBUTE_VARNAME, _a.ATTRIBUTE_VARNAME, _a.CREATOR_META_DATA_VARNAME, _a.PARENT_THIS_PATH_VARNAME, _a.PARENT_THIS_VARNAME, _a.attrAttrName];
461
+ EventManager.WINDOW_EVENT_POPSTATE = 'popstate';
462
+ EventManager.WINDOW_EVENT_RESIZE = 'resize';
463
+ EventManager.WINDOW_EVENTS = [_a.WINDOW_EVENT_POPSTATE, _a.WINDOW_EVENT_RESIZE];
464
+ EventManager.attrNames = [
465
+ _a.valueAttrName,
466
+ _a.attrAttrName,
467
+ _a.normalAttrMapAttrName,
468
+ _a.styleAttrName,
469
+ _a.classAttrName,
470
+ _a.attrPrefix + 'window-event-' + _a.WINDOW_EVENT_POPSTATE,
471
+ _a.attrPrefix + 'window-event-' + _a.WINDOW_EVENT_RESIZE,
472
+ _a.onInitAttrName,
473
+ ..._a.linkAttrs.map(it => it.name),
474
+ _a.eventParam
475
+ ];
476
+ export const eventManager = new EventManager();
477
+ //# sourceMappingURL=EventManager.js.map
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { DomRender } from './DomRender';
2
+ //# sourceMappingURL=index.d.ts.map
package/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { DomRender } from './DomRender';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,24 @@
1
+ export declare class RangeResult implements IteratorResult<number> {
2
+ done: boolean;
3
+ value: number;
4
+ constructor(value: number | undefined, done: boolean);
5
+ }
6
+ export declare class RangeIterator implements Iterator<number> {
7
+ private _first;
8
+ private _current;
9
+ private _last;
10
+ private _step;
11
+ constructor(first: number, last: number, step: number);
12
+ next(value?: any): IteratorResult<number>;
13
+ }
14
+ export declare class Range implements Iterable<number> {
15
+ first: number;
16
+ last: number;
17
+ step: number;
18
+ readonly isRange = true;
19
+ constructor(first: number, last: number, step?: number);
20
+ [Symbol.iterator](): Iterator<number>;
21
+ map<U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any): U[];
22
+ static range(first: number | string, last?: number, step?: number): Range;
23
+ }
24
+ //# sourceMappingURL=Range.d.ts.map
@@ -0,0 +1,70 @@
1
+ // within rangeResult.ts
2
+ // @ts-ignore
3
+ export class RangeResult {
4
+ constructor(value, done) {
5
+ this.done = done;
6
+ this.value = value !== null && value !== void 0 ? value : 0;
7
+ }
8
+ }
9
+ export class RangeIterator {
10
+ constructor(first, last, step) {
11
+ this._current = this._first = first;
12
+ this._last = last;
13
+ this._step = step;
14
+ }
15
+ next(value) {
16
+ let r;
17
+ if (this._first < this._last && this._current < this._last) {
18
+ r = new RangeResult(this._current, false);
19
+ this._current += this._step;
20
+ }
21
+ else if (this._first < this._last && this._current === this._last) {
22
+ r = new RangeResult(this._current, false);
23
+ this._current += this._step;
24
+ }
25
+ else if (this._first > this._last && this._current > this._last) {
26
+ r = new RangeResult(this._current, false);
27
+ this._current -= this._step;
28
+ }
29
+ else if (this._first > this._last && this._current === this._last) {
30
+ r = new RangeResult(this._current, false);
31
+ this._current -= this._step;
32
+ }
33
+ else if (this._current === this._last) {
34
+ r = new RangeResult(this._current, false);
35
+ this._current -= this._step;
36
+ }
37
+ else {
38
+ r = new RangeResult(undefined, true);
39
+ }
40
+ return r;
41
+ }
42
+ }
43
+ export class Range {
44
+ constructor(first, last, step = 1) {
45
+ this.first = first;
46
+ this.last = last;
47
+ this.step = step;
48
+ this.isRange = true;
49
+ }
50
+ [Symbol.iterator]() {
51
+ return new RangeIterator(this.first, this.last, this.step);
52
+ }
53
+ map(callbackfn, thisArg) {
54
+ return Array.from(this).map(callbackfn);
55
+ }
56
+ static range(first, last, step = 1) {
57
+ if (typeof first === 'number' && last === undefined) {
58
+ return new Range(0, first, step);
59
+ }
60
+ else if (typeof first === 'string') {
61
+ const [_first, _last = '0'] = first.split('..');
62
+ const [__last, _step = '1'] = _last.split(',');
63
+ return new Range(Number(_first.trim()), Number(__last.trim()), Number(_step.trim()));
64
+ }
65
+ else {
66
+ return new Range(first, last !== null && last !== void 0 ? last : 0, step);
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=Range.js.map
@@ -0,0 +1,4 @@
1
+ export interface OnBeforeReturnGet {
2
+ onBeforeReturnGet(name: string, value: any, fullPath?: string[]): void;
3
+ }
4
+ //# sourceMappingURL=OnBeforeReturnGet.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=OnBeforeReturnGet.js.map
@@ -0,0 +1,5 @@
1
+ export interface OnBeforeReturnSet {
2
+ onBeforeReturnSet(name: string, value: any, fullPath?: string[]): void;
3
+ }
4
+ export declare function isOnBeforeReturnSet(obj: any): obj is OnBeforeReturnSet;
5
+ //# sourceMappingURL=OnBeforeReturnSet.d.ts.map
@@ -0,0 +1,4 @@
1
+ export function isOnBeforeReturnSet(obj) {
2
+ return typeof (obj === null || obj === void 0 ? void 0 : obj.onBeforeReturnSet) === 'function';
3
+ }
4
+ //# sourceMappingURL=OnBeforeReturnSet.js.map
@@ -0,0 +1,9 @@
1
+ import { RawSet } from '../rawsets/RawSet';
2
+ export type OtherData = {
3
+ rawSet?: RawSet;
4
+ };
5
+ export interface OnChangeAttrRender {
6
+ onChangeAttrRender(name: string, value: any, other: OtherData): void;
7
+ }
8
+ export declare const isOnChangeAttrRender: (obj: any) => obj is OnChangeAttrRender;
9
+ //# sourceMappingURL=OnChangeAttrRender.d.ts.map
@@ -0,0 +1,4 @@
1
+ export const isOnChangeAttrRender = (obj) => {
2
+ return typeof (obj === null || obj === void 0 ? void 0 : obj.onChangeAttrRender) === 'function';
3
+ };
4
+ //# sourceMappingURL=OnChangeAttrRender.js.map
@@ -0,0 +1,5 @@
1
+ export interface OnChildRenderedByProperty {
2
+ onChildRenderedByProperty(key: string, value: any): void;
3
+ }
4
+ export declare function isOnChildRenderedByProperty(obj: any): obj is OnChildRenderedByProperty;
5
+ //# sourceMappingURL=OnChildRenderedByProperty.d.ts.map
@@ -0,0 +1,4 @@
1
+ export function isOnChildRenderedByProperty(obj) {
2
+ return typeof (obj === null || obj === void 0 ? void 0 : obj.onChildRenderedByProperty) === 'function';
3
+ }
4
+ //# sourceMappingURL=OnChildRenderedByProperty.js.map
@@ -0,0 +1,5 @@
1
+ export interface OnCreateRender {
2
+ onCreateRender(...param: any[]): void;
3
+ }
4
+ export declare const isOnCreateRender: (obj: any) => obj is OnCreateRender;
5
+ //# sourceMappingURL=OnCreateRender.d.ts.map
@@ -0,0 +1,4 @@
1
+ export const isOnCreateRender = (obj) => {
2
+ return typeof (obj === null || obj === void 0 ? void 0 : obj.onCreateRender) === 'function';
3
+ };
4
+ //# sourceMappingURL=OnCreateRender.js.map
@@ -0,0 +1,10 @@
1
+ import { Render } from '../rawsets/Render';
2
+ export type OnCreateRenderDataParams = {
3
+ rootParent: any;
4
+ render?: Render;
5
+ };
6
+ export interface OnCreateRenderData {
7
+ onCreateRenderData(data: OnCreateRenderDataParams): void;
8
+ }
9
+ export declare const isOnCreateRenderData: (obj: any) => obj is OnCreateRenderData;
10
+ //# sourceMappingURL=OnCreateRenderData.d.ts.map
@@ -0,0 +1,4 @@
1
+ export const isOnCreateRenderData = (obj) => {
2
+ return typeof (obj === null || obj === void 0 ? void 0 : obj.onCreateRenderData) === 'function';
3
+ };
4
+ //# sourceMappingURL=OnCreateRenderData.js.map