vsn 0.1.149 → 1.0.1

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 (587) hide show
  1. package/README.md +7 -6
  2. package/dist/index.cjs +5181 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +650 -0
  5. package/dist/index.d.ts +650 -0
  6. package/dist/index.js +5112 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/index.min.js +9 -0
  9. package/dist/index.min.js.map +1 -0
  10. package/package.json +31 -35
  11. package/.gitattributes +0 -2
  12. package/.travis.yml +0 -28
  13. package/demo/demo.html +0 -237
  14. package/demo/examples/cascading-function-sheets.html +0 -39
  15. package/demo/examples/component-slots.html +0 -29
  16. package/demo/examples/events.html +0 -21
  17. package/demo/examples/item-filtering.html +0 -45
  18. package/demo/examples/loop.html +0 -21
  19. package/demo/examples/persist.html +0 -17
  20. package/demo/examples/replace-html.html +0 -19
  21. package/demo/markup-default.html +0 -2
  22. package/demo/markup.html +0 -2
  23. package/demo/memory-leak-test.html +0 -82
  24. package/demo/named-stack.html +0 -34
  25. package/demo/resources/xhr-animations.html +0 -24
  26. package/demo/resources/xhr-cfs.html +0 -1
  27. package/demo/resources/xhr-html.html +0 -1
  28. package/demo/resources/xhr-lazy.html +0 -60
  29. package/demo/resources/xhr-memory-leak-test.html +0 -14
  30. package/demo/resources/xhr-persist.html +0 -40
  31. package/demo/resources/xhr-test-component.html +0 -4
  32. package/demo/service.html +0 -22
  33. package/demo/silly-animations.html +0 -27
  34. package/demo/vsn.js +0 -3
  35. package/demo/xhr-response.html +0 -1
  36. package/demo/xhr-test.html +0 -32
  37. package/dist/AST/ArithmeticNode.d.ts +0 -15
  38. package/dist/AST/ArithmeticNode.js +0 -114
  39. package/dist/AST/ArithmeticNode.js.map +0 -1
  40. package/dist/AST/ArrayNode.d.ts +0 -14
  41. package/dist/AST/ArrayNode.js +0 -166
  42. package/dist/AST/ArrayNode.js.map +0 -1
  43. package/dist/AST/AsNode.d.ts +0 -13
  44. package/dist/AST/AsNode.js +0 -92
  45. package/dist/AST/AsNode.js.map +0 -1
  46. package/dist/AST/AssignmentNode.d.ts +0 -24
  47. package/dist/AST/AssignmentNode.js +0 -392
  48. package/dist/AST/AssignmentNode.js.map +0 -1
  49. package/dist/AST/BlockNode.d.ts +0 -11
  50. package/dist/AST/BlockNode.js +0 -114
  51. package/dist/AST/BlockNode.js.map +0 -1
  52. package/dist/AST/BooleanLiteralNode.d.ts +0 -5
  53. package/dist/AST/BooleanLiteralNode.js +0 -31
  54. package/dist/AST/BooleanLiteralNode.js.map +0 -1
  55. package/dist/AST/ClassNode.d.ts +0 -47
  56. package/dist/AST/ClassNode.js +0 -593
  57. package/dist/AST/ClassNode.js.map +0 -1
  58. package/dist/AST/ComparisonNode.d.ts +0 -15
  59. package/dist/AST/ComparisonNode.js +0 -120
  60. package/dist/AST/ComparisonNode.js.map +0 -1
  61. package/dist/AST/ConditionalNode.d.ts +0 -13
  62. package/dist/AST/ConditionalNode.js +0 -95
  63. package/dist/AST/ConditionalNode.js.map +0 -1
  64. package/dist/AST/DispatchEventNode.d.ts +0 -17
  65. package/dist/AST/DispatchEventNode.js +0 -152
  66. package/dist/AST/DispatchEventNode.js.map +0 -1
  67. package/dist/AST/ElementAttributeNode.d.ts +0 -20
  68. package/dist/AST/ElementAttributeNode.js +0 -242
  69. package/dist/AST/ElementAttributeNode.js.map +0 -1
  70. package/dist/AST/ElementQueryNode.d.ts +0 -17
  71. package/dist/AST/ElementQueryNode.js +0 -148
  72. package/dist/AST/ElementQueryNode.js.map +0 -1
  73. package/dist/AST/ElementStyleNode.d.ts +0 -20
  74. package/dist/AST/ElementStyleNode.js +0 -205
  75. package/dist/AST/ElementStyleNode.js.map +0 -1
  76. package/dist/AST/ForStatementNode.d.ts +0 -17
  77. package/dist/AST/ForStatementNode.js +0 -121
  78. package/dist/AST/ForStatementNode.js.map +0 -1
  79. package/dist/AST/FunctionArgumentNode.d.ts +0 -11
  80. package/dist/AST/FunctionArgumentNode.js +0 -142
  81. package/dist/AST/FunctionArgumentNode.js.map +0 -1
  82. package/dist/AST/FunctionCallNode.d.ts +0 -14
  83. package/dist/AST/FunctionCallNode.js +0 -241
  84. package/dist/AST/FunctionCallNode.js.map +0 -1
  85. package/dist/AST/FunctionNode.d.ts +0 -20
  86. package/dist/AST/FunctionNode.js +0 -220
  87. package/dist/AST/FunctionNode.js.map +0 -1
  88. package/dist/AST/IfStatementNode.d.ts +0 -14
  89. package/dist/AST/IfStatementNode.js +0 -168
  90. package/dist/AST/IfStatementNode.js.map +0 -1
  91. package/dist/AST/InNode.d.ts +0 -15
  92. package/dist/AST/InNode.js +0 -107
  93. package/dist/AST/InNode.js.map +0 -1
  94. package/dist/AST/IndexNode.d.ts +0 -16
  95. package/dist/AST/IndexNode.js +0 -152
  96. package/dist/AST/IndexNode.js.map +0 -1
  97. package/dist/AST/LiteralNode.d.ts +0 -10
  98. package/dist/AST/LiteralNode.js +0 -74
  99. package/dist/AST/LiteralNode.js.map +0 -1
  100. package/dist/AST/LoopNode.d.ts +0 -12
  101. package/dist/AST/LoopNode.js +0 -121
  102. package/dist/AST/LoopNode.js.map +0 -1
  103. package/dist/AST/ModifierNode.d.ts +0 -14
  104. package/dist/AST/ModifierNode.js +0 -90
  105. package/dist/AST/ModifierNode.js.map +0 -1
  106. package/dist/AST/NamedStackNode.d.ts +0 -28
  107. package/dist/AST/NamedStackNode.js +0 -142
  108. package/dist/AST/NamedStackNode.js.map +0 -1
  109. package/dist/AST/Node.d.ts +0 -28
  110. package/dist/AST/Node.js +0 -263
  111. package/dist/AST/Node.js.map +0 -1
  112. package/dist/AST/NotNode.d.ts +0 -12
  113. package/dist/AST/NotNode.js +0 -103
  114. package/dist/AST/NotNode.js.map +0 -1
  115. package/dist/AST/NumberLiteralNode.d.ts +0 -5
  116. package/dist/AST/NumberLiteralNode.js +0 -36
  117. package/dist/AST/NumberLiteralNode.js.map +0 -1
  118. package/dist/AST/ObjectNode.d.ts +0 -14
  119. package/dist/AST/ObjectNode.js +0 -147
  120. package/dist/AST/ObjectNode.js.map +0 -1
  121. package/dist/AST/OnNode.d.ts +0 -9
  122. package/dist/AST/OnNode.js +0 -129
  123. package/dist/AST/OnNode.js.map +0 -1
  124. package/dist/AST/RootScopeMemberNode.d.ts +0 -12
  125. package/dist/AST/RootScopeMemberNode.js +0 -90
  126. package/dist/AST/RootScopeMemberNode.js.map +0 -1
  127. package/dist/AST/ScopeMemberNode.d.ts +0 -13
  128. package/dist/AST/ScopeMemberNode.js +0 -165
  129. package/dist/AST/ScopeMemberNode.js.map +0 -1
  130. package/dist/AST/ScopeNodeAbstract.d.ts +0 -8
  131. package/dist/AST/ScopeNodeAbstract.js +0 -105
  132. package/dist/AST/ScopeNodeAbstract.js.map +0 -1
  133. package/dist/AST/StringFormatNode.d.ts +0 -18
  134. package/dist/AST/StringFormatNode.js +0 -151
  135. package/dist/AST/StringFormatNode.js.map +0 -1
  136. package/dist/AST/UnitLiteralNode.d.ts +0 -15
  137. package/dist/AST/UnitLiteralNode.js +0 -72
  138. package/dist/AST/UnitLiteralNode.js.map +0 -1
  139. package/dist/AST/WASM/Context.d.ts +0 -4
  140. package/dist/AST/WASM/Context.js +0 -18
  141. package/dist/AST/WASM/Context.js.map +0 -1
  142. package/dist/AST/WASM/Function.d.ts +0 -22
  143. package/dist/AST/WASM/Function.js +0 -126
  144. package/dist/AST/WASM/Function.js.map +0 -1
  145. package/dist/AST/WASM/Memory.d.ts +0 -12
  146. package/dist/AST/WASM/Memory.js +0 -22
  147. package/dist/AST/WASM/Memory.js.map +0 -1
  148. package/dist/AST/WASM/Section.d.ts +0 -5
  149. package/dist/AST/WASM/Section.js +0 -11
  150. package/dist/AST/WASM/Section.js.map +0 -1
  151. package/dist/AST/WASM.d.ts +0 -58
  152. package/dist/AST/WASM.js +0 -293
  153. package/dist/AST/WASM.js.map +0 -1
  154. package/dist/AST/WithNode.d.ts +0 -15
  155. package/dist/AST/WithNode.js +0 -197
  156. package/dist/AST/WithNode.js.map +0 -1
  157. package/dist/AST/XHRNode.d.ts +0 -15
  158. package/dist/AST/XHRNode.js +0 -151
  159. package/dist/AST/XHRNode.js.map +0 -1
  160. package/dist/AST.d.ts +0 -160
  161. package/dist/AST.js +0 -1156
  162. package/dist/AST.js.map +0 -1
  163. package/dist/Attribute.d.ts +0 -46
  164. package/dist/Attribute.js +0 -262
  165. package/dist/Attribute.js.map +0 -1
  166. package/dist/Bencmark.d.ts +0 -14
  167. package/dist/Bencmark.js +0 -236
  168. package/dist/Bencmark.js.map +0 -1
  169. package/dist/Component.d.ts +0 -7
  170. package/dist/Component.js +0 -179
  171. package/dist/Component.js.map +0 -1
  172. package/dist/Configuration.d.ts +0 -12
  173. package/dist/Configuration.js +0 -64
  174. package/dist/Configuration.js.map +0 -1
  175. package/dist/Controller.d.ts +0 -13
  176. package/dist/Controller.js +0 -60
  177. package/dist/Controller.js.map +0 -1
  178. package/dist/DOM/AbstractDOM.d.ts +0 -56
  179. package/dist/DOM/AbstractDOM.js +0 -1078
  180. package/dist/DOM/AbstractDOM.js.map +0 -1
  181. package/dist/DOM/DOMObject.d.ts +0 -33
  182. package/dist/DOM/DOMObject.js +0 -152
  183. package/dist/DOM/DOMObject.js.map +0 -1
  184. package/dist/DOM/ShadowDOM.d.ts +0 -5
  185. package/dist/DOM/ShadowDOM.js +0 -32
  186. package/dist/DOM/ShadowDOM.js.map +0 -1
  187. package/dist/DOM/WrappedDocument.d.ts +0 -5
  188. package/dist/DOM/WrappedDocument.js +0 -34
  189. package/dist/DOM/WrappedDocument.js.map +0 -1
  190. package/dist/DOM/WrappedWindow.d.ts +0 -6
  191. package/dist/DOM/WrappedWindow.js +0 -45
  192. package/dist/DOM/WrappedWindow.js.map +0 -1
  193. package/dist/DOM.d.ts +0 -5
  194. package/dist/DOM.js +0 -37
  195. package/dist/DOM.js.map +0 -1
  196. package/dist/EventDispatcher.d.ts +0 -36
  197. package/dist/EventDispatcher.js +0 -393
  198. package/dist/EventDispatcher.js.map +0 -1
  199. package/dist/Formats.d.ts +0 -5
  200. package/dist/Formats.js +0 -47
  201. package/dist/Formats.js.map +0 -1
  202. package/dist/MessageList.d.ts +0 -15
  203. package/dist/MessageList.js +0 -127
  204. package/dist/MessageList.js.map +0 -1
  205. package/dist/Model.d.ts +0 -12
  206. package/dist/Model.js +0 -92
  207. package/dist/Model.js.map +0 -1
  208. package/dist/Modifiers.d.ts +0 -17
  209. package/dist/Modifiers.js +0 -100
  210. package/dist/Modifiers.js.map +0 -1
  211. package/dist/Query.d.ts +0 -4
  212. package/dist/Query.js +0 -66
  213. package/dist/Query.js.map +0 -1
  214. package/dist/Registry.d.ts +0 -41
  215. package/dist/Registry.js +0 -165
  216. package/dist/Registry.js.map +0 -1
  217. package/dist/Scope/DynamicScopeData.d.ts +0 -6
  218. package/dist/Scope/DynamicScopeData.js +0 -83
  219. package/dist/Scope/DynamicScopeData.js.map +0 -1
  220. package/dist/Scope/ObjectAccessor.d.ts +0 -7
  221. package/dist/Scope/ObjectAccessor.js +0 -40
  222. package/dist/Scope/ObjectAccessor.js.map +0 -1
  223. package/dist/Scope/QueryReference.d.ts +0 -10
  224. package/dist/Scope/QueryReference.js +0 -103
  225. package/dist/Scope/QueryReference.js.map +0 -1
  226. package/dist/Scope/ScopeAbstract.d.ts +0 -9
  227. package/dist/Scope/ScopeAbstract.js +0 -28
  228. package/dist/Scope/ScopeAbstract.js.map +0 -1
  229. package/dist/Scope/ScopeData.d.ts +0 -4
  230. package/dist/Scope/ScopeData.js +0 -60
  231. package/dist/Scope/ScopeData.js.map +0 -1
  232. package/dist/Scope/ScopeDataAbstract.d.ts +0 -30
  233. package/dist/Scope/ScopeDataAbstract.js +0 -303
  234. package/dist/Scope/ScopeDataAbstract.js.map +0 -1
  235. package/dist/Scope/ScopeObject.d.ts +0 -3
  236. package/dist/Scope/ScopeObject.js +0 -28
  237. package/dist/Scope/ScopeObject.js.map +0 -1
  238. package/dist/Scope/ScopeReference.d.ts +0 -10
  239. package/dist/Scope/ScopeReference.js +0 -73
  240. package/dist/Scope/ScopeReference.js.map +0 -1
  241. package/dist/Scope/ScopedVariableType.d.ts +0 -6
  242. package/dist/Scope/ScopedVariableType.js +0 -14
  243. package/dist/Scope/ScopedVariableType.js.map +0 -1
  244. package/dist/Scope/WrappedArray.d.ts +0 -21
  245. package/dist/Scope/WrappedArray.js +0 -252
  246. package/dist/Scope/WrappedArray.js.map +0 -1
  247. package/dist/Scope/properties/ArrayProperty.d.ts +0 -12
  248. package/dist/Scope/properties/ArrayProperty.js +0 -88
  249. package/dist/Scope/properties/ArrayProperty.js.map +0 -1
  250. package/dist/Scope/properties/FloatProperty.d.ts +0 -4
  251. package/dist/Scope/properties/FloatProperty.js +0 -30
  252. package/dist/Scope/properties/FloatProperty.js.map +0 -1
  253. package/dist/Scope/properties/IntegerProperty.d.ts +0 -4
  254. package/dist/Scope/properties/IntegerProperty.js +0 -30
  255. package/dist/Scope/properties/IntegerProperty.js.map +0 -1
  256. package/dist/Scope/properties/Property.d.ts +0 -30
  257. package/dist/Scope/properties/Property.js +0 -205
  258. package/dist/Scope/properties/Property.js.map +0 -1
  259. package/dist/Scope/properties/_imports.d.ts +0 -4
  260. package/dist/Scope/properties/_imports.js +0 -13
  261. package/dist/Scope/properties/_imports.js.map +0 -1
  262. package/dist/Scope.d.ts +0 -39
  263. package/dist/Scope.js +0 -434
  264. package/dist/Scope.js.map +0 -1
  265. package/dist/Service.d.ts +0 -9
  266. package/dist/Service.js +0 -49
  267. package/dist/Service.js.map +0 -1
  268. package/dist/Tag/ShadowRootTag.d.ts +0 -3
  269. package/dist/Tag/ShadowRootTag.js +0 -28
  270. package/dist/Tag/ShadowRootTag.js.map +0 -1
  271. package/dist/Tag/SlotTag.d.ts +0 -3
  272. package/dist/Tag/SlotTag.js +0 -28
  273. package/dist/Tag/SlotTag.js.map +0 -1
  274. package/dist/Tag/SlottedTag.d.ts +0 -7
  275. package/dist/Tag/SlottedTag.js +0 -78
  276. package/dist/Tag/SlottedTag.js.map +0 -1
  277. package/dist/Tag/TagList.d.ts +0 -13
  278. package/dist/Tag/TagList.js +0 -104
  279. package/dist/Tag/TagList.js.map +0 -1
  280. package/dist/Tag.d.ts +0 -117
  281. package/dist/Tag.js +0 -1471
  282. package/dist/Tag.js.map +0 -1
  283. package/dist/Types.d.ts +0 -8
  284. package/dist/Types.js +0 -54
  285. package/dist/Types.js.map +0 -1
  286. package/dist/Validators.d.ts +0 -7
  287. package/dist/Validators.js +0 -54
  288. package/dist/Validators.js.map +0 -1
  289. package/dist/attributes/AddClassIf.d.ts +0 -4
  290. package/dist/attributes/AddClassIf.js +0 -93
  291. package/dist/attributes/AddClassIf.js.map +0 -1
  292. package/dist/attributes/Bind.d.ts +0 -24
  293. package/dist/attributes/Bind.js +0 -273
  294. package/dist/attributes/Bind.js.map +0 -1
  295. package/dist/attributes/ComponentAttribute.d.ts +0 -5
  296. package/dist/attributes/ComponentAttribute.js +0 -110
  297. package/dist/attributes/ComponentAttribute.js.map +0 -1
  298. package/dist/attributes/ControllerAttribute.d.ts +0 -11
  299. package/dist/attributes/ControllerAttribute.js +0 -127
  300. package/dist/attributes/ControllerAttribute.js.map +0 -1
  301. package/dist/attributes/DisableIf.d.ts +0 -5
  302. package/dist/attributes/DisableIf.js +0 -94
  303. package/dist/attributes/DisableIf.js.map +0 -1
  304. package/dist/attributes/Exec.d.ts +0 -10
  305. package/dist/attributes/Exec.js +0 -133
  306. package/dist/attributes/Exec.js.map +0 -1
  307. package/dist/attributes/Format.d.ts +0 -5
  308. package/dist/attributes/Format.js +0 -99
  309. package/dist/attributes/Format.js.map +0 -1
  310. package/dist/attributes/If.d.ts +0 -11
  311. package/dist/attributes/If.js +0 -159
  312. package/dist/attributes/If.js.map +0 -1
  313. package/dist/attributes/JSONAttribute.d.ts +0 -5
  314. package/dist/attributes/JSONAttribute.js +0 -119
  315. package/dist/attributes/JSONAttribute.js.map +0 -1
  316. package/dist/attributes/KeyAbstract.d.ts +0 -7
  317. package/dist/attributes/KeyAbstract.js +0 -117
  318. package/dist/attributes/KeyAbstract.js.map +0 -1
  319. package/dist/attributes/KeyDown.d.ts +0 -4
  320. package/dist/attributes/KeyDown.js +0 -88
  321. package/dist/attributes/KeyDown.js.map +0 -1
  322. package/dist/attributes/KeyUp.d.ts +0 -4
  323. package/dist/attributes/KeyUp.js +0 -88
  324. package/dist/attributes/KeyUp.js.map +0 -1
  325. package/dist/attributes/LazyAttribute.d.ts +0 -8
  326. package/dist/attributes/LazyAttribute.js +0 -122
  327. package/dist/attributes/LazyAttribute.js.map +0 -1
  328. package/dist/attributes/List.d.ts +0 -18
  329. package/dist/attributes/List.js +0 -396
  330. package/dist/attributes/List.js.map +0 -1
  331. package/dist/attributes/ListItem.d.ts +0 -12
  332. package/dist/attributes/ListItem.js +0 -119
  333. package/dist/attributes/ListItem.js.map +0 -1
  334. package/dist/attributes/ListItemModel.d.ts +0 -4
  335. package/dist/attributes/ListItemModel.js +0 -39
  336. package/dist/attributes/ListItemModel.js.map +0 -1
  337. package/dist/attributes/ModelAttribute.d.ts +0 -5
  338. package/dist/attributes/ModelAttribute.js +0 -41
  339. package/dist/attributes/ModelAttribute.js.map +0 -1
  340. package/dist/attributes/Name.d.ts +0 -6
  341. package/dist/attributes/Name.js +0 -88
  342. package/dist/attributes/Name.js.map +0 -1
  343. package/dist/attributes/On.d.ts +0 -9
  344. package/dist/attributes/On.js +0 -135
  345. package/dist/attributes/On.js.map +0 -1
  346. package/dist/attributes/PersistAttribute.d.ts +0 -15
  347. package/dist/attributes/PersistAttribute.js +0 -215
  348. package/dist/attributes/PersistAttribute.js.map +0 -1
  349. package/dist/attributes/Referenced.d.ts +0 -3
  350. package/dist/attributes/Referenced.js +0 -38
  351. package/dist/attributes/Referenced.js.map +0 -1
  352. package/dist/attributes/RootAttribute.d.ts +0 -7
  353. package/dist/attributes/RootAttribute.js +0 -141
  354. package/dist/attributes/RootAttribute.js.map +0 -1
  355. package/dist/attributes/ScopeAttribute.d.ts +0 -9
  356. package/dist/attributes/ScopeAttribute.js +0 -152
  357. package/dist/attributes/ScopeAttribute.js.map +0 -1
  358. package/dist/attributes/ScopeChange.d.ts +0 -10
  359. package/dist/attributes/ScopeChange.js +0 -153
  360. package/dist/attributes/ScopeChange.js.map +0 -1
  361. package/dist/attributes/ScriptAttribute.d.ts +0 -4
  362. package/dist/attributes/ScriptAttribute.js +0 -45
  363. package/dist/attributes/ScriptAttribute.js.map +0 -1
  364. package/dist/attributes/ServiceAttribute.d.ts +0 -7
  365. package/dist/attributes/ServiceAttribute.js +0 -45
  366. package/dist/attributes/ServiceAttribute.js.map +0 -1
  367. package/dist/attributes/SetAttribute.d.ts +0 -11
  368. package/dist/attributes/SetAttribute.js +0 -146
  369. package/dist/attributes/SetAttribute.js.map +0 -1
  370. package/dist/attributes/StandardAttribute.d.ts +0 -15
  371. package/dist/attributes/StandardAttribute.js +0 -170
  372. package/dist/attributes/StandardAttribute.js.map +0 -1
  373. package/dist/attributes/StyleAttribute.d.ts +0 -14
  374. package/dist/attributes/StyleAttribute.js +0 -218
  375. package/dist/attributes/StyleAttribute.js.map +0 -1
  376. package/dist/attributes/StyleVarAttribute.d.ts +0 -11
  377. package/dist/attributes/StyleVarAttribute.js +0 -124
  378. package/dist/attributes/StyleVarAttribute.js.map +0 -1
  379. package/dist/attributes/TemplateAttribute.d.ts +0 -5
  380. package/dist/attributes/TemplateAttribute.js +0 -89
  381. package/dist/attributes/TemplateAttribute.js.map +0 -1
  382. package/dist/attributes/TypeAttribute.d.ts +0 -5
  383. package/dist/attributes/TypeAttribute.js +0 -104
  384. package/dist/attributes/TypeAttribute.js.map +0 -1
  385. package/dist/attributes/XHRAttribute.d.ts +0 -14
  386. package/dist/attributes/XHRAttribute.js +0 -242
  387. package/dist/attributes/XHRAttribute.js.map +0 -1
  388. package/dist/attributes/_imports.d.ts +0 -32
  389. package/dist/attributes/_imports.js +0 -68
  390. package/dist/attributes/_imports.js.map +0 -1
  391. package/dist/contrib/XHR.d.ts +0 -21
  392. package/dist/contrib/XHR.js +0 -78
  393. package/dist/contrib/XHR.js.map +0 -1
  394. package/dist/contrib/_imports.d.ts +0 -1
  395. package/dist/contrib/_imports.js +0 -6
  396. package/dist/contrib/_imports.js.map +0 -1
  397. package/dist/custom-elements.d.ts +0 -9
  398. package/dist/custom-elements.js +0 -44
  399. package/dist/custom-elements.js.map +0 -1
  400. package/dist/demo/ServiceDemo.d.ts +0 -5
  401. package/dist/demo/ServiceDemo.js +0 -87
  402. package/dist/demo/ServiceDemo.js.map +0 -1
  403. package/dist/demo.d.ts +0 -2
  404. package/dist/demo.js +0 -17
  405. package/dist/demo.js.map +0 -1
  406. package/dist/helpers/DOMHelper.d.ts +0 -3
  407. package/dist/helpers/DOMHelper.js +0 -81
  408. package/dist/helpers/DOMHelper.js.map +0 -1
  409. package/dist/helpers/ElementHelper.d.ts +0 -4
  410. package/dist/helpers/ElementHelper.js +0 -53
  411. package/dist/helpers/ElementHelper.js.map +0 -1
  412. package/dist/helpers/VisionHelper.d.ts +0 -13
  413. package/dist/helpers/VisionHelper.js +0 -148
  414. package/dist/helpers/VisionHelper.js.map +0 -1
  415. package/dist/helpers/decorators.d.ts +0 -5
  416. package/dist/helpers/decorators.js +0 -59
  417. package/dist/helpers/decorators.js.map +0 -1
  418. package/dist/version.d.ts +0 -1
  419. package/dist/version.js +0 -5
  420. package/dist/version.js.map +0 -1
  421. package/dist/vsn.d.ts +0 -36
  422. package/dist/vsn.js +0 -201
  423. package/dist/vsn.js.map +0 -1
  424. package/karma.conf.js +0 -34
  425. package/src/AST/ArithmeticNode.ts +0 -52
  426. package/src/AST/ArrayNode.ts +0 -39
  427. package/src/AST/AsNode.ts +0 -32
  428. package/src/AST/AssignmentNode.ts +0 -256
  429. package/src/AST/BlockNode.ts +0 -25
  430. package/src/AST/BooleanLiteralNode.ts +0 -10
  431. package/src/AST/ClassNode.ts +0 -267
  432. package/src/AST/ComparisonNode.ts +0 -57
  433. package/src/AST/ConditionalNode.ts +0 -36
  434. package/src/AST/DispatchEventNode.ts +0 -58
  435. package/src/AST/ElementAttributeNode.ts +0 -97
  436. package/src/AST/ElementQueryNode.ts +0 -48
  437. package/src/AST/ElementStyleNode.ts +0 -74
  438. package/src/AST/ForStatementNode.ts +0 -59
  439. package/src/AST/FunctionArgumentNode.ts +0 -27
  440. package/src/AST/FunctionCallNode.ts +0 -93
  441. package/src/AST/FunctionNode.ts +0 -82
  442. package/src/AST/IfStatementNode.ts +0 -67
  443. package/src/AST/InNode.ts +0 -46
  444. package/src/AST/IndexNode.ts +0 -64
  445. package/src/AST/LiteralNode.ts +0 -17
  446. package/src/AST/LoopNode.ts +0 -35
  447. package/src/AST/ModifierNode.ts +0 -32
  448. package/src/AST/NamedStackNode.ts +0 -83
  449. package/src/AST/Node.ts +0 -104
  450. package/src/AST/NotNode.ts +0 -41
  451. package/src/AST/NumberLiteralNode.ts +0 -14
  452. package/src/AST/ObjectNode.ts +0 -55
  453. package/src/AST/OnNode.ts +0 -23
  454. package/src/AST/RootScopeMemberNode.ts +0 -27
  455. package/src/AST/ScopeMemberNode.ts +0 -63
  456. package/src/AST/ScopeNodeAbstract.ts +0 -21
  457. package/src/AST/StringFormatNode.ts +0 -43
  458. package/src/AST/UnitLiteralNode.ts +0 -51
  459. package/src/AST/WASM/Context.ts +0 -12
  460. package/src/AST/WASM/Function.ts +0 -67
  461. package/src/AST/WASM/Memory.ts +0 -21
  462. package/src/AST/WASM/Section.ts +0 -6
  463. package/src/AST/WASM.ts +0 -244
  464. package/src/AST/WithNode.ts +0 -68
  465. package/src/AST/XHRNode.ts +0 -85
  466. package/src/AST.ts +0 -969
  467. package/src/Attribute.ts +0 -130
  468. package/src/Bencmark.ts +0 -184
  469. package/src/Component.ts +0 -63
  470. package/src/Configuration.ts +0 -47
  471. package/src/Controller.ts +0 -36
  472. package/src/DOM/AbstractDOM.ts +0 -465
  473. package/src/DOM/DOMObject.ts +0 -77
  474. package/src/DOM/ShadowDOM.ts +0 -15
  475. package/src/DOM/WrappedDocument.ts +0 -9
  476. package/src/DOM/WrappedWindow.ts +0 -21
  477. package/src/DOM.ts +0 -13
  478. package/src/EventDispatcher.ts +0 -234
  479. package/src/Formats.ts +0 -33
  480. package/src/MessageList.ts +0 -85
  481. package/src/Model.ts +0 -44
  482. package/src/Modifiers.ts +0 -54
  483. package/src/Query.ts +0 -17
  484. package/src/Registry.ts +0 -141
  485. package/src/Scope/DynamicScopeData.ts +0 -27
  486. package/src/Scope/ObjectAccessor.ts +0 -21
  487. package/src/Scope/QueryReference.ts +0 -29
  488. package/src/Scope/ScopeAbstract.ts +0 -11
  489. package/src/Scope/ScopeData.ts +0 -20
  490. package/src/Scope/ScopeDataAbstract.ts +0 -200
  491. package/src/Scope/ScopeObject.ts +0 -3
  492. package/src/Scope/ScopeReference.ts +0 -30
  493. package/src/Scope/ScopedVariableType.ts +0 -7
  494. package/src/Scope/WrappedArray.ts +0 -134
  495. package/src/Scope/properties/ArrayProperty.ts +0 -46
  496. package/src/Scope/properties/FloatProperty.ts +0 -5
  497. package/src/Scope/properties/IntegerProperty.ts +0 -5
  498. package/src/Scope/properties/Property.ts +0 -173
  499. package/src/Scope/properties/_imports.ts +0 -4
  500. package/src/Scope.ts +0 -333
  501. package/src/Service.ts +0 -24
  502. package/src/Tag/ShadowRootTag.ts +0 -5
  503. package/src/Tag/SlotTag.ts +0 -5
  504. package/src/Tag/SlottedTag.ts +0 -17
  505. package/src/Tag/TagList.ts +0 -52
  506. package/src/Tag.ts +0 -838
  507. package/src/Types.ts +0 -34
  508. package/src/Validators.ts +0 -45
  509. package/src/attributes/AddClassIf.ts +0 -14
  510. package/src/attributes/Bind.ts +0 -144
  511. package/src/attributes/ComponentAttribute.ts +0 -23
  512. package/src/attributes/ControllerAttribute.ts +0 -50
  513. package/src/attributes/DisableIf.ts +0 -16
  514. package/src/attributes/Exec.ts +0 -32
  515. package/src/attributes/Format.ts +0 -18
  516. package/src/attributes/If.ts +0 -40
  517. package/src/attributes/JSONAttribute.ts +0 -40
  518. package/src/attributes/KeyAbstract.ts +0 -28
  519. package/src/attributes/KeyDown.ts +0 -10
  520. package/src/attributes/KeyUp.ts +0 -10
  521. package/src/attributes/LazyAttribute.ts +0 -30
  522. package/src/attributes/List.ts +0 -210
  523. package/src/attributes/ListItem.ts +0 -30
  524. package/src/attributes/ListItemModel.ts +0 -7
  525. package/src/attributes/ModelAttribute.ts +0 -8
  526. package/src/attributes/Name.ts +0 -16
  527. package/src/attributes/On.ts +0 -39
  528. package/src/attributes/PersistAttribute.ts +0 -83
  529. package/src/attributes/Referenced.ts +0 -5
  530. package/src/attributes/RootAttribute.ts +0 -24
  531. package/src/attributes/ScopeAttribute.ts +0 -40
  532. package/src/attributes/ScopeChange.ts +0 -35
  533. package/src/attributes/ScriptAttribute.ts +0 -9
  534. package/src/attributes/ServiceAttribute.ts +0 -13
  535. package/src/attributes/SetAttribute.ts +0 -44
  536. package/src/attributes/StandardAttribute.ts +0 -72
  537. package/src/attributes/StyleAttribute.ts +0 -90
  538. package/src/attributes/StyleVarAttribute.ts +0 -40
  539. package/src/attributes/TemplateAttribute.ts +0 -12
  540. package/src/attributes/TypeAttribute.ts +0 -23
  541. package/src/attributes/XHRAttribute.ts +0 -109
  542. package/src/attributes/_imports.ts +0 -32
  543. package/src/contrib/XHR.ts +0 -46
  544. package/src/contrib/_imports.ts +0 -1
  545. package/src/custom-elements.ts +0 -46
  546. package/src/demo/ServiceDemo.ts +0 -12
  547. package/src/demo.ts +0 -2
  548. package/src/helpers/DOMHelper.ts +0 -17
  549. package/src/helpers/ElementHelper.ts +0 -26
  550. package/src/helpers/VisionHelper.ts +0 -88
  551. package/src/helpers/decorators.ts +0 -11
  552. package/src/version.ts +0 -2
  553. package/src/vsn.ts +0 -106
  554. package/test/AST/ArithmeticAssignmentNode.spec.ts +0 -45
  555. package/test/AST/ClassNode.spec.ts +0 -175
  556. package/test/AST/FunctionNode.spec.ts +0 -51
  557. package/test/AST/StringFormatNode.spec.ts +0 -12
  558. package/test/AST/WASM.spec.ts +0 -63
  559. package/test/AST/XHRNode.spec.ts +0 -10
  560. package/test/AST.spec.ts +0 -353
  561. package/test/Controller.spec.ts +0 -42
  562. package/test/DOM.spec.ts +0 -63
  563. package/test/EventDispatcher.spec.ts +0 -191
  564. package/test/MessageList.spec.ts +0 -101
  565. package/test/Model/DataModel.spec.ts +0 -0
  566. package/test/Scope/DynamicScopeData.spec.ts +0 -141
  567. package/test/Scope/ScopeData.spec.ts +0 -58
  568. package/test/Scope/WrappedArray.spec.ts +0 -11
  569. package/test/Scope/properties/ArrayProperty.spec.ts +0 -23
  570. package/test/Scope.spec.ts +0 -69
  571. package/test/Tag/TagList.spec.ts +0 -21
  572. package/test/Tag.spec.ts +0 -4
  573. package/test/attributes/Bind.spec.ts +0 -174
  574. package/test/attributes/JSONAttribute.spec.ts +0 -91
  575. package/test/attributes/ListItem.spec.ts +0 -118
  576. package/test/attributes/ScopeAttribute.spec.ts +0 -35
  577. package/test/attributes/ServiceAttribute.spec.ts +0 -41
  578. package/test/attributes/SetAttribute.spec.ts +0 -55
  579. package/test/attributes/Styles.spec.ts +0 -43
  580. package/test/globals.js +0 -2
  581. package/tsconfig.base.json +0 -17
  582. package/tsconfig.json +0 -6
  583. package/tsconfig.test.json +0 -7
  584. package/types/vsn-component.d.ts +0 -5
  585. package/webpack.config.js +0 -48
  586. package/webpack.development.js +0 -6
  587. package/webpack.production.js +0 -5
package/src/Tag.ts DELETED
@@ -1,838 +0,0 @@
1
- import {Scope} from "./Scope";
2
- import {Attribute, AttributeState} from "./Attribute";
3
- import {DOM} from "./DOM";
4
- import {Controller} from "./Controller";
5
- import {VisionHelper} from "./helpers/VisionHelper";
6
- import {StandardAttribute} from "./attributes/StandardAttribute";
7
- import {On} from "./attributes/On";
8
- import {Registry} from "./Registry";
9
- import {DOMObject} from "./DOM/DOMObject";
10
- import {Tree} from "./AST";
11
- import {StyleAttribute} from "./attributes/StyleAttribute";
12
- import {Modifiers} from "./Modifiers";
13
-
14
- export enum TagState {
15
- Instantiated,
16
- AttributesBuilt,
17
- AttributesCompiled,
18
- AttributesSetup,
19
- AttributesExtracted,
20
- AttributesConnected,
21
- Built,
22
- Deconstructed,
23
- }
24
-
25
- export class Tag extends DOMObject {
26
- public static readonly TaggedVariable: string = '_vsn_tag';
27
- public readonly rawAttributes: { [key: string]: string; };
28
- public readonly parsedAttributes: { [key: string]: string[]; };
29
- public readonly deferredAttributes: Attribute[] = [];
30
- protected _state: TagState;
31
- protected _meta: { [key: string]: any; };
32
- protected attributes: Map<string, Attribute> = new Map<string, Attribute>();
33
- protected _nonDeferredAttributes: Attribute[] = [];
34
- protected _parentTag: Tag;
35
- protected _children: Tag[] = [];
36
- protected _controller: Controller;
37
-
38
- public static readonly magicAttributes: string[] = [
39
- '@text',
40
- '@html',
41
- '@class',
42
- '@value',
43
- '@disabled',
44
- '@hidden',
45
- '@selected',
46
- '@readonly',
47
- '@multiple',
48
- '@required',
49
- '@autofocus',
50
- ];
51
-
52
- public static readonly flagAttributes: string[] = [
53
- '@disabled',
54
- '@hidden',
55
- '@checked',
56
- '@selected',
57
- '@readonly',
58
- '@multiple',
59
- '@required',
60
- '@autofocus',
61
- ];
62
-
63
- protected inputTags: string[] = [
64
- 'input',
65
- 'select',
66
- 'textarea'
67
- ];
68
-
69
- public get uniqueScope(): boolean {
70
- return this._uniqueScope;
71
- };
72
-
73
- constructor(
74
- element: HTMLElement,
75
- public readonly dom: DOM,
76
- ...props
77
- ) {
78
- super(element, props);
79
- element[Tag.TaggedVariable] = this;
80
- this.rawAttributes = {};
81
- this.parsedAttributes = {};
82
- this.onEventHandlers = {};
83
- this.onEventBindings = {};
84
- this.analyzeElementAttributes();
85
- this._state = TagState.Instantiated;
86
- }
87
-
88
- public get meta() {
89
- if (!this._meta)
90
- this._meta = {};
91
- return this._meta;
92
- }
93
-
94
- public get state(): TagState {
95
- return this._state;
96
- }
97
-
98
- protected onAttributeStateChange(event) {
99
- if (event.previouseState === AttributeState.Deferred) // @todo: what is this?
100
- this._nonDeferredAttributes.length = 0;
101
- }
102
-
103
- public getAttributesWithState(state: AttributeState): Attribute[] {
104
- const attrs: Attribute[] = [];
105
- for (const attr of this.attributes.values()) {
106
- if (attr.state === state)
107
- attrs.push(attr);
108
- }
109
- return attrs;
110
- }
111
-
112
- public get nonDeferredAttributes(): Attribute[] {
113
- if (this._nonDeferredAttributes.length > 0)
114
- return this._nonDeferredAttributes;
115
-
116
- const attrs: Attribute[] = [];
117
- for (const attr of this.attributes.values()) {
118
- if (attr.state !== AttributeState.Deferred)
119
- attrs.push(attr);
120
- }
121
- this._nonDeferredAttributes = attrs;
122
- return attrs;
123
- }
124
-
125
- public get style(): CSSStyleDeclaration {
126
- return this.element.style;
127
- }
128
-
129
- public get computedStyle(): CSSStyleDeclaration {
130
- return VisionHelper.window && window.getComputedStyle(this.element) || null;
131
- }
132
-
133
- public analyzeElementAttributes() {
134
- if (!this.element.attributes || this.element.attributes.length <= 0) return;
135
- for (let i: number = 0; i < this.element.attributes.length; i++) {
136
- const a = this.element.attributes[i];
137
- this.rawAttributes[a.name] = a.value;
138
- if (a.name.indexOf(':') > -1) {
139
- const nameParts: string[] = a.name.split(':');
140
- const values = nameParts.slice(1);
141
- values.push(a.value);
142
- this.parsedAttributes[nameParts[0]] = values;
143
- } else {
144
- this.parsedAttributes[a.name] = [null, a.value];
145
- }
146
- }
147
- }
148
-
149
- public async exec(code: string) {
150
- const tree = new Tree(code);
151
- await tree.prepare(this.scope, this.dom, this);
152
- return await tree.evaluate(this.scope, this.dom, this);
153
- }
154
-
155
- public async evaluate() {
156
- for (const attr of this.nonDeferredAttributes) {
157
- await attr.evaluate();
158
- }
159
- }
160
-
161
- mutate(mutation: MutationRecord): void {
162
- this.attributes.forEach(attr => attr.mutate(mutation));
163
- this.dispatch('mutate', mutation);
164
- }
165
-
166
- public get(attr: string) {
167
- this.element.getAttribute(attr);
168
- }
169
-
170
- public set(attr: string, value) {
171
- this.element.setAttribute(attr, value);
172
- }
173
-
174
- public async getAttributeClass(attr: string) {
175
- if (!attr.startsWith('vsn-'))
176
- return null;
177
- attr = this.getAttributeName(attr);
178
- return Registry.instance.attributes.get(attr);
179
- }
180
-
181
- getAttributeName(attr: string): string {
182
- attr = attr.split('|')[0];
183
- if (attr.indexOf(':') > -1) {
184
- const parts: string[] = attr.split(':');
185
- attr = parts[0];
186
- }
187
-
188
- return attr;
189
- }
190
-
191
- getAttributeBinding(attr: string): string {
192
- attr = attr.split('|')[0];
193
- if (attr.indexOf(':') > -1) {
194
- const parts: string[] = attr.split(':');
195
- return parts[1];
196
- }
197
-
198
- return null;
199
- }
200
-
201
- get isInput(): boolean {
202
- return this.inputTags.indexOf(this.element.tagName.toLowerCase()) > -1;
203
- }
204
-
205
- get isSelect(): boolean {
206
- return this.element.tagName.toLowerCase() === 'select';
207
- }
208
-
209
- get isMultipleSelect(): boolean {
210
- return this.isSelect && this.element.hasAttribute('multiple');
211
- }
212
-
213
- set value(value: string | string[]) {
214
- if (this.isInput) {
215
- if (this.isMultipleSelect) {
216
- for (const option of Array.from((this.element as HTMLSelectElement).options)) {
217
- option.selected = value.indexOf(option.value) > -1;
218
- }
219
- } else {
220
- this.element.setAttribute('value', value as string);
221
- (this.element as any).value = value;
222
- }
223
-
224
- } else {
225
- this.element.innerText = value as string;
226
- }
227
- }
228
-
229
- get value(): string | string[] {
230
- if (this.isInput) {
231
- if (this.isMultipleSelect) {
232
- return Array.from((this.element as HTMLSelectElement).options).filter((o) => o.selected).map((o) => o.value);
233
- }
234
- return (this.element as any).value;
235
- } else {
236
- return this.element.textContent;
237
- }
238
- }
239
-
240
- set checked(value) {
241
- if (this.isInput) {
242
- if (value) {
243
- this.element.setAttribute('checked', '');
244
- (this.element as HTMLInputElement).checked = true;
245
- } else {
246
- this.element.removeAttribute('checked');
247
- (this.element as HTMLInputElement).checked = false;
248
- }
249
- }
250
- }
251
-
252
- get checked(): boolean {
253
- if (this.isInput) {
254
- return (this.element as HTMLInputElement).checked;
255
- } else {
256
- return false;
257
- }
258
- }
259
-
260
- public addChild(tag: Tag) {
261
- this._children.push(tag);
262
- tag.once('deconstruct', this.removeChild, this);
263
- }
264
-
265
- public removeChild(tag: Tag) {
266
- const index = this._children.indexOf(tag);
267
- if (index > -1)
268
- this._children.splice(index, 1);
269
- }
270
-
271
- public get children(): Tag[] {
272
- return [...this._children];
273
- }
274
-
275
- public findParentTag() {
276
- let foundParent = false;
277
- if (this.element) {
278
- let parentElement: HTMLElement = DOM.getParentElement(this.element);
279
- while (parentElement) {
280
- if (parentElement[Tag.TaggedVariable]) {
281
- foundParent = true;
282
- this.parentTag = parentElement[Tag.TaggedVariable];
283
- break;
284
- }
285
- parentElement = DOM.getParentElement(parentElement);
286
- }
287
- }
288
- if (!foundParent && DOM.instance.root !== this)
289
- return DOM.instance.root;
290
- }
291
-
292
- public get parentTag(): Tag {
293
- if (!this._parentTag) {
294
- this.findParentTag();
295
- }
296
-
297
- return this._parentTag;
298
- }
299
-
300
- public set parentTag(tag: Tag) {
301
- if (this.element === document.body || tag.element === document.body)
302
- return;
303
-
304
- if (this._parentTag && this._parentTag !== tag) {
305
- this._parentTag.removeChild(this);
306
- this.scope.parentScope = null;
307
- }
308
-
309
- this._parentTag = tag;
310
- if (tag) {
311
- tag.addChild(this);
312
-
313
- if (this.scope !== tag.scope) {
314
- this.scope.parentScope = tag.scope;
315
- }
316
- }
317
- }
318
-
319
- public get scope(): Scope {
320
- if (!!this._scope)
321
- return this._scope;
322
-
323
- if (this.uniqueScope)
324
- return this.createScope(true);
325
-
326
- if (!!this.parentTag)
327
- return this.parentTag.scope;
328
-
329
- return DOM.instance.root.scope;
330
- }
331
-
332
- public get controller(): Controller {
333
- return this._controller;
334
- }
335
-
336
- public set controller(controller: Controller) {
337
- this._controller = controller;
338
- }
339
-
340
- public wrap(obj: any, triggerUpdates: boolean = false, updateFromWrapped: boolean = true) {
341
- if (VisionHelper.isConstructor(obj)) {
342
- obj = new obj();
343
- }
344
-
345
- if (obj instanceof Controller) {
346
- obj.init(this.scope, this, this.element);
347
- this.controller = obj;
348
- } else {
349
- obj['$scope'] = this.scope;
350
- obj['$tag'] = this;
351
- obj['$el'] = this.element;
352
- }
353
- this.scope.wrap(obj, triggerUpdates, updateFromWrapped);
354
- return obj;
355
- }
356
-
357
- public unwrap(): void {
358
- this.scope.unwrap();
359
- }
360
-
361
- public removeFromDOM() {
362
- this.element.remove();
363
- }
364
-
365
- public addToParentElement() {
366
- this.parentTag.element.appendChild(this.element)
367
- }
368
-
369
- public hide() {
370
- this.element.hidden = true;
371
- }
372
-
373
- public show() {
374
- this.element.hidden = false;
375
- }
376
-
377
- public findAncestorByAttribute(attr: string, includeSelf: boolean = false): Tag {
378
- if (includeSelf && this.hasAttribute(attr))
379
- return this;
380
- return this.parentTag ? this.parentTag.findAncestorByAttribute(attr, true) : null;
381
- }
382
-
383
- public findDescendantsByAttribute(attr: string, includeSelf: boolean = false): Tag[] {
384
- const tags = [];
385
- if (includeSelf && this.hasAttribute(attr))
386
- tags.push(this);
387
-
388
- for (const child of this.children) {
389
- tags.concat(child.findDescendantsByAttribute(attr, true))
390
- }
391
-
392
- return tags;
393
- }
394
-
395
- public findChildrenByAttribute(attr: string): Tag[] {
396
- return this.children.filter((child) => child.hasAttribute(attr));
397
- }
398
-
399
- public hasAttribute(attr: string): boolean {
400
- return !!this.parsedAttributes[attr];
401
- }
402
-
403
- public async getAttribute<T = Attribute>(key: string): Promise<T> {
404
- const cls: any = await Registry.instance.attributes.get(key);
405
- if (!cls) return;
406
- for (const attr of this.attributes.values())
407
- if (attr instanceof cls)
408
- return attr as any as T;
409
- }
410
-
411
- public isMagicAttribute(key: string): boolean {
412
- return Tag.magicAttributes.indexOf(key) > -1;
413
- }
414
-
415
- public setElementAttribute(key: string, value: any) {
416
- if (!this.element) return null;
417
- if (this.isMagicAttribute(key)) {
418
- if (key === '@text')
419
- this.element.innerText = value;
420
- else if (key === '@html') {
421
- this.element.innerHTML = value;
422
- DOM.instance.buildFrom(this.element).then((tag) => {
423
- Tree.reprepareExecutingTrees();
424
- });
425
- } else if (key === '@value')
426
- this.value = value;
427
- else if (key === '@class' && value) {
428
- this.element.classList.remove(...Array.from(this.element.classList));
429
- const classes: string[] = value instanceof Array ? value : [value];
430
- if (classes.length)
431
- this.element.classList.add(...classes);
432
- } else if (Tag.flagAttributes.indexOf(key) > -1) {
433
- const attrKey = key.replace('@', '');
434
- if (!!value) {
435
- this.element.setAttribute(attrKey, '');
436
- } else {
437
- this.element.removeAttribute(attrKey);
438
- }
439
- }
440
- } else {
441
- this.element.setAttribute(key, value);
442
- }
443
- }
444
-
445
- public getElementAttribute(key: string): any {
446
- if (!this.element) return null;
447
- if (this.isMagicAttribute(key)) {
448
- if (key === '@text')
449
- return this.element.innerText;
450
- else if (key === '@html')
451
- return this.element.innerHTML;
452
- else if (key === '@value')
453
- return this.value;
454
- else if (key === '@class') {
455
- return Array.from(this.element.classList);
456
- } else if (Tag.flagAttributes.indexOf(key) > -1) {
457
- const attrKey = key.replace('@', '');
458
- return this.element.hasAttribute(attrKey);
459
- }
460
- }
461
- return this.element.getAttribute(key);
462
- }
463
-
464
- public getRawAttributeValue(key: string, fallback: any = null) {
465
- return this.rawAttributes[key] ? this.rawAttributes[key] : fallback;
466
- }
467
-
468
- public hasRawAttribute(mod: string): boolean {
469
- return this.getRawAttributeValue(mod, undefined) !== undefined;
470
- }
471
-
472
- public getParsedAttributeValue(key: string, index: number = 0, fallback: any = null) {
473
- return this.parsedAttributes[key] && this.parsedAttributes[key][index] || fallback;
474
- }
475
-
476
- public async getTagsToBuild() {
477
- if (this.isSlot) {
478
- return await DOM.instance.getTagsForElements(this.delegates, true);
479
- } else {
480
- return [this];
481
- }
482
- }
483
-
484
- public async buildAttributes() {
485
- let requiresScope = false;
486
- let defer: boolean = false;
487
- const isMobile: boolean = VisionHelper.isMobile();
488
- if (this.element.offsetParent === null ||
489
- this.hasAttribute('hidden') ||
490
- this.hasAttribute('vsn-defer')
491
- ) {
492
- defer = true;
493
- }
494
-
495
- const tags: Tag[] = await this.getTagsToBuild() as Tag[];
496
- const slot: Tag = this.isSlot ? this : null;
497
- for (const tag of tags) {
498
- for (let attr in this.rawAttributes) {
499
- if (tag.attributes.has(attr)) continue;
500
-
501
- if (this.hasModifier(attr, 'mobile') && !isMobile)
502
- continue;
503
-
504
-
505
- if (this.hasModifier(attr, 'desktop') && isMobile)
506
- continue;
507
-
508
- const attrClass = await this.getAttributeClass(attr);
509
- if (attrClass) {
510
- if (attrClass.scoped)
511
- requiresScope = true;
512
-
513
- const attrObj = attrClass.create(tag, attr, attrClass, slot);
514
-
515
- tag.attributes.set(attr, attrObj);
516
- if (defer && attrClass.canDefer) {
517
- await attrObj.defer();
518
- tag.deferredAttributes.push(attrObj);
519
- attrObj.on('state', tag.onAttributeStateChange, tag);
520
- }
521
- }
522
- }
523
-
524
- if (tag.element.getAttribute('id'))
525
- requiresScope = true;
526
-
527
- if (requiresScope && !tag.uniqueScope) {
528
- tag._uniqueScope = true;
529
- }
530
-
531
- }
532
- this._state = TagState.AttributesBuilt;
533
- }
534
-
535
- public async compileAttributes() {
536
- const tags: Tag[] = await this.getTagsToBuild() as Tag[];
537
- for (const tag of tags) {
538
- for (const attr of tag.getAttributesWithState(AttributeState.Instantiated)) {
539
- await attr.compile();
540
- }
541
- }
542
- this._state = TagState.AttributesCompiled;
543
- }
544
-
545
- public async setupAttributes() {
546
- const tags: Tag[] = await this.getTagsToBuild() as Tag[];
547
- for (const tag of tags) {
548
- for (const attr of tag.getAttributesWithState(AttributeState.Compiled)) {
549
- await attr.setup();
550
- }
551
- }
552
- if (!this.isSlot)
553
- this.dom.registerElementInRoot(this);
554
- this._state = TagState.AttributesSetup;
555
- this.callOnWrapped('$setup');
556
- }
557
-
558
- public async extractAttributes() {
559
- const tags: Tag[] = await this.getTagsToBuild() as Tag[];
560
- for (const tag of tags) {
561
- for (const attr of tag.getAttributesWithState(AttributeState.Setup)) {
562
- await attr.extract();
563
- }
564
- }
565
- this._state = TagState.AttributesExtracted;
566
- this.callOnWrapped('$extracted');
567
- }
568
-
569
- public async connectAttributes() {
570
- const tags: Tag[] = await this.getTagsToBuild() as Tag[];
571
- for (const tag of tags) {
572
- if (tag.isInput) {
573
- tag.addEventHandler('input', null, tag.inputMutation, tag);
574
- }
575
-
576
- for (const attr of tag.getAttributesWithState(AttributeState.Extracted)) {
577
- await attr.connect();
578
- }
579
- }
580
- this._state = TagState.AttributesConnected;
581
- this.callOnWrapped('$bound');
582
- }
583
-
584
- public inputMutation(e) {
585
- if (this.isSelect) {
586
- const selected = (this.element as HTMLSelectElement).selectedOptions;
587
- const values = [];
588
- for (let i = 0; i < selected.length; i++) {
589
- values.push(selected[i].value);
590
- }
591
- for (const option of Array.from((this.element as HTMLSelectElement).options)) {
592
- if (values.indexOf(option.value) > -1) {
593
- option.setAttribute('selected', '');
594
- } else {
595
- option.removeAttribute('selected');
596
- }
597
- }
598
- this.value = values.join(',');
599
- } else {
600
- this.value = e.target.value;
601
- }
602
- }
603
-
604
- public async finalize() {
605
- const tags: Tag[] = await this.getTagsToBuild() as Tag[];
606
- for (const tag of tags) {
607
- for (const attr of tag.getAttributesWithState(AttributeState.Connected)) {
608
- await attr.finalize();
609
- }
610
- }
611
- this._state = TagState.Built;
612
- this.callOnWrapped('$built', this, this.scope, this.element);
613
- this.dispatch('$built', this);
614
- VisionHelper.nice(this.setupDeferredAttributes.bind(this));
615
- }
616
-
617
- public callOnWrapped(method, ...args: any[]): boolean {
618
- if (this._uniqueScope && this.scope && this.scope.wrapped && this.scope.wrapped[method]) {
619
- this.scope.wrapped[method](...args);
620
- return true;
621
- }
622
- return false;
623
- }
624
-
625
- protected handleEvent(eventType: string, e) {
626
- if (this.state === TagState.Deconstructed)
627
- return
628
-
629
- if (e)
630
- e.stopPropagation();
631
-
632
- if (!this.onEventHandlers[eventType])
633
- return;
634
-
635
- this.scope.set('$event', e);
636
- this.scope.set('$value', this.value);
637
- let preventedDefault = false;
638
- for (const handler of this.onEventHandlers[eventType]) {
639
- if (!preventedDefault && handler.modifiers.has('preventdefault') && e.cancelable) {
640
- e.preventDefault();
641
- preventedDefault = true;
642
- }
643
-
644
- if (handler.modifiers.has('once'))
645
- this.removeEventHandler(handler.event, handler.handler, handler.context);
646
-
647
- if (handler.modifiers.has('throttle')) {
648
- const modifierArguments = handler.modifiers.get('throttle').getArguments(['1000']);
649
- const throttleTime = parseInt(modifierArguments[0]);
650
- const now = Math.floor(Date.now());
651
- if (!handler.state.lastCalled || handler.state.lastCalled + throttleTime < now) {
652
- handler.state.lastCalled = now;
653
- } else {
654
- continue;
655
- }
656
- }
657
-
658
- if (handler.modifiers.has('debounce')) {
659
- clearTimeout(handler.state.debounceTimeout);
660
- const modifierArguments = handler.modifiers.get('debounce').getArguments(['1000']);
661
- const debounceTime = parseInt(modifierArguments[0]);
662
- handler.state.debounceTimeout = setTimeout(async () => {
663
- await handler.handler.call(handler.context, e);
664
- }, debounceTime);
665
- } else {
666
- handler.handler.call(handler.context, e);
667
- }
668
- }
669
- }
670
-
671
- public hasModifier(attribute: string, modifier: string): boolean {
672
- this.attributes
673
- return attribute.indexOf(`|${modifier}`) > -1;
674
- }
675
-
676
- public stripModifier(attribute: string, modifier: string): string {
677
- return attribute.replace(`|${modifier}`, '');
678
- }
679
-
680
- public getElementPath(element: HTMLElement): string {
681
- const path = [];
682
- let currentElement = element;
683
- while (currentElement) {
684
- let tag = currentElement.tagName
685
- if (currentElement.hasAttribute('id'))
686
- tag += `#${currentElement.getAttribute('id')}`;
687
- else if (currentElement.hasAttribute('class'))
688
- tag += `.${currentElement.getAttribute('class').split(' ').join('.')}`;
689
-
690
- path.push(tag);
691
- currentElement = currentElement.parentElement;
692
- }
693
- return path.reverse().join('>');
694
- }
695
-
696
- public addEventHandler(eventType: string, modifiers: Modifiers, handler, context: any = null) {
697
- let passiveValue: boolean = null;
698
- modifiers = modifiers || new Modifiers();
699
-
700
- if (modifiers.has('active')) {
701
- passiveValue = false;
702
- } else if (modifiers.has('passive')) {
703
- passiveValue = true;
704
- }
705
-
706
- if (!this.onEventHandlers[eventType]) {
707
- this.onEventHandlers[eventType] = [];
708
- const element: HTMLElement | Window = On.WindowEvents.indexOf(eventType) > -1 && window ? window : this.element;
709
- const eventListenerOpts: any = {};
710
- if (eventType.indexOf('touch') > -1 || passiveValue !== null)
711
- eventListenerOpts['passive'] = passiveValue === null && true || passiveValue;
712
-
713
-
714
- element.addEventListener(eventType, this.getEventBinding(eventType), eventListenerOpts);
715
- }
716
-
717
- this.onEventHandlers[eventType].push({
718
- handler: handler,
719
- event: eventType,
720
- context: context,
721
- modifiers: modifiers,
722
- state: {}
723
- });
724
- }
725
-
726
- public getEventBinding(eventType: string) {
727
- if (this.onEventBindings[eventType] === undefined)
728
- this.onEventBindings[eventType] = this.handleEvent.bind(this, eventType);
729
-
730
- return this.onEventBindings[eventType];
731
- }
732
-
733
- public removeEventHandler(eventType: string, handler, context: any = null) {
734
- if (!this.onEventHandlers[eventType])
735
- return;
736
-
737
- const _handler = this.onEventHandlers[eventType].find(h => h.handler === handler && h.context === context);
738
- if (_handler) {
739
- this.onEventHandlers[eventType].splice(this.onEventHandlers[eventType].indexOf(_handler), 1);
740
- if (this.onEventHandlers[eventType].length === 0) {
741
- this.element.removeEventListener(eventType, this.getEventBinding(eventType));
742
- }
743
- }
744
- }
745
-
746
- public removeAllEventHandlers() {
747
- for (const eventType of Object.keys(this.onEventHandlers)) {
748
- this.element.removeEventListener(eventType, this.getEventBinding(eventType));
749
- }
750
- this.onEventHandlers = {};
751
- }
752
-
753
- public removeContextEventHandlers(context: any) {
754
- for (const eventType of Object.keys(this.onEventHandlers)) {
755
- for (const handler of this.onEventHandlers[eventType]) {
756
- if (handler.context === context) {
757
- this.removeEventHandler(eventType, handler.handler, context);
758
- }
759
- }
760
- }
761
- }
762
-
763
- public createScope(force: boolean = false): Scope {
764
- // Standard attribute requires a unique scope
765
- // @todo: Does this cause any issues with attribute bindings on the parent scope prior to having its own scope? hmm...
766
- if (!this._scope && (force || this.uniqueScope)) {
767
- this._uniqueScope = true;
768
- this._scope = new Scope();
769
-
770
- if (this.parentTag) {
771
- this.scope.parentScope = this.parentTag.scope;
772
- }
773
- }
774
-
775
- return this._scope;
776
- }
777
-
778
- async watchAttribute(attributeName: string): Promise<Attribute | StandardAttribute> {
779
- if (this.attributes.has(attributeName) && this.attributes.get(attributeName) instanceof StandardAttribute) {
780
- return this.attributes.get(attributeName);
781
- }
782
-
783
- this.createScope(true);
784
- const standardAttribute = new StandardAttribute(this, attributeName);
785
- this.attributes.set(attributeName, standardAttribute);
786
- await this.setupAttribute(standardAttribute);
787
-
788
- return standardAttribute;
789
- }
790
-
791
- async watchStyle(styleName: string) {
792
- if (this.attributes.has('style'))
793
- return this.attributes.get('style');
794
-
795
- this.createScope(true);
796
-
797
- const styleAttribute = new StyleAttribute(this, 'style');
798
- this.attributes.set('style', styleAttribute);
799
- await this.setupAttribute(styleAttribute);
800
-
801
- return styleAttribute;
802
- }
803
-
804
- private async setupAttribute(attribute: Attribute) {
805
- await attribute.compile();
806
- await attribute.setup();
807
- await attribute.extract();
808
- await attribute.connect();
809
- }
810
-
811
- private async setupDeferredAttributes() {
812
- for (const attr of this.deferredAttributes)
813
- await this.setupAttribute(attr);
814
- this.deferredAttributes.length = 0;
815
- }
816
-
817
- deconstruct() {
818
- this._state = TagState.Deconstructed
819
- const dom = this.dom || DOM.instance;
820
- if (dom) {
821
- dom.removedQueued(this.element);
822
- dom.deregisterElementInRoot(this);
823
- }
824
- this.removeAllEventHandlers();
825
- this.attributes.forEach(attr => attr.deconstruct());
826
- this.attributes.clear();
827
- this.deferredAttributes.length = 0;
828
- this._children.forEach(child => child.deconstruct());
829
- this._children.length = 0;
830
- if (this._controller) {
831
- this._controller.deconstruct();
832
- this._controller = null;
833
- }
834
- this._parentTag = null;
835
- (this as any).dom = null;
836
- super.deconstruct();
837
- }
838
- }