vsn 0.1.27 → 0.1.30

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 (244) hide show
  1. package/demo/vsn.js +1 -1
  2. package/dist/AST/ArithmeticAssignmentNode.d.ts +23 -0
  3. package/dist/AST/ArithmeticAssignmentNode.js +324 -0
  4. package/dist/AST/ArithmeticAssignmentNode.js.map +1 -0
  5. package/dist/AST/ArithmeticNode.d.ts +15 -0
  6. package/dist/AST/ArithmeticNode.js +114 -0
  7. package/dist/AST/ArithmeticNode.js.map +1 -0
  8. package/dist/AST/ArrayNode.d.ts +14 -0
  9. package/dist/AST/ArrayNode.js +114 -0
  10. package/dist/AST/ArrayNode.js.map +1 -0
  11. package/dist/AST/BlockNode.d.ts +11 -0
  12. package/dist/AST/BlockNode.js +98 -0
  13. package/dist/AST/BlockNode.js.map +1 -0
  14. package/dist/AST/BooleanLiteralNode.d.ts +5 -0
  15. package/dist/{Model/Collection.js → AST/BooleanLiteralNode.js} +12 -18
  16. package/dist/AST/BooleanLiteralNode.js.map +1 -0
  17. package/dist/AST/ComparisonNode.d.ts +15 -0
  18. package/dist/AST/ComparisonNode.js +120 -0
  19. package/dist/AST/ComparisonNode.js.map +1 -0
  20. package/dist/AST/ConditionalNode.d.ts +13 -0
  21. package/dist/AST/ConditionalNode.js +95 -0
  22. package/dist/AST/ConditionalNode.js.map +1 -0
  23. package/dist/AST/ElementAttributeNode.d.ts +18 -0
  24. package/dist/AST/ElementAttributeNode.js +159 -0
  25. package/dist/AST/ElementAttributeNode.js.map +1 -0
  26. package/dist/AST/ElementQueryNode.d.ts +13 -0
  27. package/dist/AST/ElementQueryNode.js +116 -0
  28. package/dist/AST/ElementQueryNode.js.map +1 -0
  29. package/dist/AST/ElementStyleNode.d.ts +18 -0
  30. package/dist/AST/ElementStyleNode.js +159 -0
  31. package/dist/AST/ElementStyleNode.js.map +1 -0
  32. package/dist/AST/ForStatementNode.d.ts +17 -0
  33. package/dist/AST/ForStatementNode.js +121 -0
  34. package/dist/AST/ForStatementNode.js.map +1 -0
  35. package/dist/AST/FunctionArgumentNode.d.ts +11 -0
  36. package/dist/AST/FunctionArgumentNode.js +100 -0
  37. package/dist/AST/FunctionArgumentNode.js.map +1 -0
  38. package/dist/AST/FunctionCallNode.d.ts +13 -0
  39. package/dist/AST/FunctionCallNode.js +102 -0
  40. package/dist/AST/FunctionCallNode.js.map +1 -0
  41. package/dist/AST/IfStatementNode.d.ts +14 -0
  42. package/dist/AST/IfStatementNode.js +128 -0
  43. package/dist/AST/IfStatementNode.js.map +1 -0
  44. package/dist/AST/InNode.d.ts +15 -0
  45. package/dist/AST/InNode.js +107 -0
  46. package/dist/AST/InNode.js.map +1 -0
  47. package/dist/AST/IndexNode.d.ts +16 -0
  48. package/dist/AST/IndexNode.js +126 -0
  49. package/dist/AST/IndexNode.js.map +1 -0
  50. package/dist/AST/LiteralNode.d.ts +10 -0
  51. package/dist/AST/LiteralNode.js +74 -0
  52. package/dist/AST/LiteralNode.js.map +1 -0
  53. package/dist/AST/Node.d.ts +19 -0
  54. package/dist/AST/Node.js +117 -0
  55. package/dist/AST/Node.js.map +1 -0
  56. package/dist/AST/NotNode.d.ts +12 -0
  57. package/dist/AST/NotNode.js +103 -0
  58. package/dist/AST/NotNode.js.map +1 -0
  59. package/dist/AST/NumberLiteralNode.d.ts +5 -0
  60. package/dist/{Model/fields/EmailField.js → AST/NumberLiteralNode.js} +17 -17
  61. package/dist/AST/NumberLiteralNode.js.map +1 -0
  62. package/dist/AST/ObjectNode.d.ts +14 -0
  63. package/dist/AST/ObjectNode.js +131 -0
  64. package/dist/AST/ObjectNode.js.map +1 -0
  65. package/dist/AST/RootScopeMemberNode.d.ts +11 -0
  66. package/dist/AST/RootScopeMemberNode.js +87 -0
  67. package/dist/AST/RootScopeMemberNode.js.map +1 -0
  68. package/dist/AST/ScopeMemberNode.d.ts +12 -0
  69. package/dist/AST/ScopeMemberNode.js +134 -0
  70. package/dist/AST/ScopeMemberNode.js.map +1 -0
  71. package/dist/AST/UnitLiteralNode.d.ts +15 -0
  72. package/dist/AST/UnitLiteralNode.js +72 -0
  73. package/dist/AST/UnitLiteralNode.js.map +1 -0
  74. package/dist/AST.d.ts +7 -60
  75. package/dist/AST.js +74 -1493
  76. package/dist/AST.js.map +1 -1
  77. package/dist/Controller.d.ts +4 -2
  78. package/dist/Controller.js +10 -2
  79. package/dist/Controller.js.map +1 -1
  80. package/dist/EventDispatcher.d.ts +4 -1
  81. package/dist/EventDispatcher.js +27 -12
  82. package/dist/EventDispatcher.js.map +1 -1
  83. package/dist/MessageList.d.ts +2 -1
  84. package/dist/MessageList.js +9 -1
  85. package/dist/MessageList.js.map +1 -1
  86. package/dist/Model/Field.d.ts +8 -0
  87. package/dist/Model/{fields/StringField.js → Field.js} +19 -24
  88. package/dist/Model/Field.js.map +1 -0
  89. package/dist/Model.d.ts +5 -4
  90. package/dist/Model.js +7 -18
  91. package/dist/Model.js.map +1 -1
  92. package/dist/Registry.d.ts +3 -0
  93. package/dist/Registry.js +11 -0
  94. package/dist/Registry.js.map +1 -1
  95. package/dist/Scope/DynamicScopeData.d.ts +6 -0
  96. package/dist/{Model/DataModel.js → Scope/DynamicScopeData.js} +15 -17
  97. package/dist/Scope/DynamicScopeData.js.map +1 -0
  98. package/dist/Scope/QueryReference.d.ts +10 -0
  99. package/dist/Scope/QueryReference.js +103 -0
  100. package/dist/Scope/QueryReference.js.map +1 -0
  101. package/dist/Scope/ScopeData.d.ts +4 -0
  102. package/dist/Scope/ScopeData.js +40 -0
  103. package/dist/Scope/ScopeData.js.map +1 -0
  104. package/dist/Scope/ScopeDataAbstract.d.ts +22 -0
  105. package/dist/Scope/ScopeDataAbstract.js +138 -0
  106. package/dist/Scope/ScopeDataAbstract.js.map +1 -0
  107. package/dist/Scope/ScopeReference.d.ts +10 -0
  108. package/dist/Scope/ScopeReference.js +73 -0
  109. package/dist/Scope/ScopeReference.js.map +1 -0
  110. package/dist/Scope/ScopedVariableType.d.ts +6 -0
  111. package/dist/Scope/ScopedVariableType.js +14 -0
  112. package/dist/Scope/ScopedVariableType.js.map +1 -0
  113. package/dist/Scope/WrappedArray.d.ts +16 -0
  114. package/dist/Scope/WrappedArray.js +121 -0
  115. package/dist/Scope/WrappedArray.js.map +1 -0
  116. package/dist/Scope/properties/Property.d.ts +18 -0
  117. package/dist/Scope/properties/Property.js +93 -0
  118. package/dist/Scope/properties/Property.js.map +1 -0
  119. package/dist/Scope.d.ts +4 -45
  120. package/dist/Scope.js +31 -266
  121. package/dist/Scope.js.map +1 -1
  122. package/dist/SimplePromise.d.ts +2 -2
  123. package/dist/SimplePromise.js.map +1 -1
  124. package/dist/Tag/List.d.ts +2 -2
  125. package/dist/Tag/List.js +14 -6
  126. package/dist/Tag/List.js.map +1 -1
  127. package/dist/Tag.js +1 -1
  128. package/dist/Tag.js.map +1 -1
  129. package/dist/Types.d.ts +1 -0
  130. package/dist/Types.js +8 -2
  131. package/dist/Types.js.map +1 -1
  132. package/dist/Validators.d.ts +7 -0
  133. package/dist/Validators.js +54 -0
  134. package/dist/Validators.js.map +1 -0
  135. package/dist/attributes/Bind.js +1 -1
  136. package/dist/attributes/Bind.js.map +1 -1
  137. package/dist/attributes/ClassConstructor.d.ts +1 -0
  138. package/dist/attributes/ClassConstructor.js +1 -1
  139. package/dist/attributes/ClassConstructor.js.map +1 -1
  140. package/dist/attributes/JSONAttribute.js.map +1 -1
  141. package/dist/attributes/List.js +4 -4
  142. package/dist/attributes/List.js.map +1 -1
  143. package/dist/attributes/Radio.js.map +1 -1
  144. package/dist/attributes/SetAttribute.js.map +1 -1
  145. package/dist/attributes/StyleAttribute.js.map +1 -1
  146. package/dist/vsn.d.ts +9 -1
  147. package/dist/vsn.js +24 -9
  148. package/dist/vsn.js.map +1 -1
  149. package/package.json +1 -1
  150. package/src/AST/ArithmeticAssignmentNode.ts +243 -0
  151. package/src/AST/ArithmeticNode.ts +52 -0
  152. package/src/AST/ArrayNode.ts +39 -0
  153. package/src/AST/BlockNode.ts +25 -0
  154. package/src/AST/BooleanLiteralNode.ts +10 -0
  155. package/src/AST/ComparisonNode.ts +57 -0
  156. package/src/AST/ConditionalNode.ts +36 -0
  157. package/src/AST/ElementAttributeNode.ts +63 -0
  158. package/src/AST/ElementQueryNode.ts +27 -0
  159. package/src/AST/ElementStyleNode.ts +63 -0
  160. package/src/AST/ForStatementNode.ts +59 -0
  161. package/src/AST/FunctionArgumentNode.ts +27 -0
  162. package/src/AST/FunctionCallNode.ts +32 -0
  163. package/src/AST/IfStatementNode.ts +67 -0
  164. package/src/AST/InNode.ts +46 -0
  165. package/src/AST/IndexNode.ts +61 -0
  166. package/src/AST/LiteralNode.ts +17 -0
  167. package/src/AST/Node.ts +71 -0
  168. package/src/AST/NotNode.ts +41 -0
  169. package/src/AST/NumberLiteralNode.ts +14 -0
  170. package/src/AST/ObjectNode.ts +55 -0
  171. package/src/AST/RootScopeMemberNode.ts +25 -0
  172. package/src/AST/ScopeMemberNode.ts +58 -0
  173. package/src/AST/UnitLiteralNode.ts +51 -0
  174. package/src/AST.ts +34 -1094
  175. package/src/Controller.ts +10 -2
  176. package/src/EventDispatcher.ts +29 -12
  177. package/src/MessageList.ts +5 -1
  178. package/src/Model/Field.ts +20 -0
  179. package/src/Model.ts +8 -22
  180. package/src/Registry.ts +10 -0
  181. package/src/{Model/DataModel.ts → Scope/DynamicScopeData.ts} +8 -10
  182. package/src/Scope/QueryReference.ts +29 -0
  183. package/src/Scope/ScopeData.ts +21 -0
  184. package/src/Scope/ScopeDataAbstract.ts +127 -0
  185. package/src/Scope/ScopeReference.ts +30 -0
  186. package/src/Scope/ScopedVariableType.ts +7 -0
  187. package/src/Scope/WrappedArray.ts +88 -0
  188. package/src/Scope/properties/Property.ts +79 -0
  189. package/src/Scope.ts +28 -194
  190. package/src/SimplePromise.ts +2 -2
  191. package/src/Tag/List.ts +4 -4
  192. package/src/Tag.ts +1 -1
  193. package/src/Types.ts +7 -2
  194. package/src/Validators.ts +45 -0
  195. package/src/attributes/Bind.ts +3 -3
  196. package/src/attributes/ClassConstructor.ts +2 -1
  197. package/src/attributes/JSONAttribute.ts +2 -1
  198. package/src/attributes/List.ts +1 -1
  199. package/src/attributes/Radio.ts +2 -1
  200. package/src/attributes/ScopeChange.ts +1 -1
  201. package/src/attributes/SetAttribute.ts +2 -1
  202. package/src/attributes/StyleAttribute.ts +2 -1
  203. package/src/attributes/TypeAttribute.ts +1 -1
  204. package/src/vsn.ts +14 -4
  205. package/test/AST/ArithmeticAssignmentNode.spec.ts +47 -0
  206. package/test/AST.spec.ts +2 -2
  207. package/test/Controller.spec.ts +44 -0
  208. package/test/MessageList.spec.ts +1 -1
  209. package/test/Model/DataModel.spec.ts +0 -141
  210. package/test/Scope/DynamicScopeData.spec.ts +141 -0
  211. package/test/Scope.spec.ts +13 -1
  212. package/test/Tag/TagList.spec.ts +1 -1
  213. package/dist/Model/Collection.d.ts +0 -5
  214. package/dist/Model/Collection.js.map +0 -1
  215. package/dist/Model/DataModel.d.ts +0 -6
  216. package/dist/Model/DataModel.js.map +0 -1
  217. package/dist/Model/ModelAbstract.d.ts +0 -20
  218. package/dist/Model/ModelAbstract.js +0 -122
  219. package/dist/Model/ModelAbstract.js.map +0 -1
  220. package/dist/Model/fields/BooleanField.d.ts +0 -5
  221. package/dist/Model/fields/BooleanField.js +0 -43
  222. package/dist/Model/fields/BooleanField.js.map +0 -1
  223. package/dist/Model/fields/EmailField.d.ts +0 -5
  224. package/dist/Model/fields/EmailField.js.map +0 -1
  225. package/dist/Model/fields/Field.d.ts +0 -13
  226. package/dist/Model/fields/Field.js +0 -79
  227. package/dist/Model/fields/Field.js.map +0 -1
  228. package/dist/Model/fields/FloatField.d.ts +0 -5
  229. package/dist/Model/fields/FloatField.js +0 -47
  230. package/dist/Model/fields/FloatField.js.map +0 -1
  231. package/dist/Model/fields/PositiveNumberField.d.ts +0 -5
  232. package/dist/Model/fields/PositiveNumberField.js +0 -51
  233. package/dist/Model/fields/PositiveNumberField.js.map +0 -1
  234. package/dist/Model/fields/StringField.d.ts +0 -5
  235. package/dist/Model/fields/StringField.js.map +0 -1
  236. package/src/Model/Collection.ts +0 -13
  237. package/src/Model/ModelAbstract.ts +0 -114
  238. package/src/Model/fields/BooleanField.ts +0 -16
  239. package/src/Model/fields/EmailField.ts +0 -12
  240. package/src/Model/fields/Field.ts +0 -65
  241. package/src/Model/fields/FloatField.ts +0 -22
  242. package/src/Model/fields/PositiveNumberField.ts +0 -24
  243. package/src/Model/fields/StringField.ts +0 -16
  244. package/test/Model.spec.ts +0 -306
@@ -1,47 +0,0 @@
1
- "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.FloatField = void 0;
19
- var Field_1 = require("./Field");
20
- var FloatField = /** @class */ (function (_super) {
21
- __extends(FloatField, _super);
22
- function FloatField() {
23
- return _super !== null && _super.apply(this, arguments) || this;
24
- }
25
- Object.defineProperty(FloatField.prototype, "value", {
26
- get: function () {
27
- return this._value;
28
- },
29
- set: function (data) {
30
- var oldValue = this.value;
31
- if (typeof (data) == 'string')
32
- data = parseFloat(data);
33
- if (typeof (data) == "number" && this.config.toFixed)
34
- data = parseFloat(data.toFixed(this.config.toFixed));
35
- this._value = data;
36
- this.dispatch('change', {
37
- oldValue: oldValue,
38
- value: data
39
- });
40
- },
41
- enumerable: false,
42
- configurable: true
43
- });
44
- return FloatField;
45
- }(Field_1.Field));
46
- exports.FloatField = FloatField;
47
- //# sourceMappingURL=FloatField.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FloatField.js","sourceRoot":"","sources":["../../../src/Model/fields/FloatField.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,iCAAgC;AAEhC;IAAgC,8BAAK;IAArC;;IAmBA,CAAC;IAlBG,sBAAI,6BAAK;aAeT;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;aAjBD,UAAU,IAAQ;YACd,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAG,OAAM,CAAC,IAAI,CAAC,IAAI,QAAQ;gBACnB,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAEhC,IAAG,OAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;gBAC9C,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAEzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBACpB,QAAQ,EAAC,QAAQ;gBACjB,KAAK,EAAC,IAAI;aACb,CAAC,CAAC;QACP,CAAC;;;OAAA;IAKL,iBAAC;AAAD,CAAC,AAnBD,CAAgC,aAAK,GAmBpC;AAnBY,gCAAU"}
@@ -1,5 +0,0 @@
1
- import { Field } from "./Field";
2
- export declare class PositiveIntegerField extends Field {
3
- set value(data: any);
4
- get value(): any;
5
- }
@@ -1,51 +0,0 @@
1
- "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.PositiveIntegerField = void 0;
19
- var Field_1 = require("./Field");
20
- var PositiveIntegerField = /** @class */ (function (_super) {
21
- __extends(PositiveIntegerField, _super);
22
- function PositiveIntegerField() {
23
- return _super !== null && _super.apply(this, arguments) || this;
24
- }
25
- Object.defineProperty(PositiveIntegerField.prototype, "value", {
26
- get: function () {
27
- return this._value;
28
- },
29
- set: function (data) {
30
- var oldValue = this.value;
31
- if (data == null) {
32
- this._value = null;
33
- return;
34
- }
35
- else if (typeof (data) == 'string')
36
- data = parseInt(data);
37
- if (data <= 0)
38
- data = 0;
39
- this._value = data;
40
- this.dispatch('change', {
41
- oldValue: oldValue,
42
- value: data
43
- });
44
- },
45
- enumerable: false,
46
- configurable: true
47
- });
48
- return PositiveIntegerField;
49
- }(Field_1.Field));
50
- exports.PositiveIntegerField = PositiveIntegerField;
51
- //# sourceMappingURL=PositiveNumberField.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PositiveNumberField.js","sourceRoot":"","sources":["../../../src/Model/fields/PositiveNumberField.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,iCAAgC;AAEhC;IAA0C,wCAAK;IAA/C;;IAqBA,CAAC;IApBG,sBAAI,uCAAK;aAiBT;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;aAnBD,UAAU,IAAQ;YACd,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAG,IAAI,IAAI,IAAI,EAAE;gBACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,OAAO;aACV;iBAAM,IAAG,OAAM,CAAC,IAAI,CAAC,IAAI,QAAQ;gBAC1B,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE9B,IAAG,IAAI,IAAI,CAAC;gBACR,IAAI,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBACpB,QAAQ,EAAC,QAAQ;gBACjB,KAAK,EAAC,IAAI;aACb,CAAC,CAAC;QACP,CAAC;;;OAAA;IAKL,2BAAC;AAAD,CAAC,AArBD,CAA0C,aAAK,GAqB9C;AArBY,oDAAoB"}
@@ -1,5 +0,0 @@
1
- import { Field } from "./Field";
2
- export declare class StringField extends Field {
3
- set value(data: any);
4
- get value(): any;
5
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"StringField.js","sourceRoot":"","sources":["../../../src/Model/fields/StringField.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,iCAAgC;AAEhC;IAAiC,+BAAK;IAAtC;;IAaA,CAAC;IAZG,sBAAI,8BAAK;aAST;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;aAXD,UAAU,IAAQ;YACd,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAC,IAAI,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBACpB,QAAQ,EAAC,QAAQ;gBACjB,KAAK,EAAC,IAAI;aACb,CAAC,CAAC;QACP,CAAC;;;OAAA;IAKL,kBAAC;AAAD,CAAC,AAbD,CAAiC,aAAK,GAarC;AAbY,kCAAW"}
@@ -1,13 +0,0 @@
1
- import {Model} from "../Model";
2
- import {ModelData} from "./ModelAbstract";
3
-
4
- export class Collection<T extends Model> extends Array<T> {
5
- getData: () => ModelData[] = (): ModelData[] => {
6
- // Returns an array of data from all of the models in the collection
7
- const data: ModelData[] = [];
8
- for(const item of this) {
9
- data.push(item.getData())
10
- }
11
- return data;
12
- };
13
- }
@@ -1,114 +0,0 @@
1
- import {Field} from "./fields/Field";
2
- import {EventDispatcher} from "../EventDispatcher";
3
-
4
- export interface ModelData {
5
- [key: string]: any;
6
- }
7
-
8
- export abstract class ModelAbstract extends EventDispatcher {
9
- [key: string]: any;
10
- __fields__: string[];
11
- protected _lastData: any;
12
-
13
- constructor() {
14
- super();
15
-
16
- // Models may have __fields__ from prototype
17
- if(!this['__fields__'])
18
- this.__fields__ = [];
19
- }
20
-
21
- createField(field: string, fieldType = Field, config?: any) {
22
- config = config || {};
23
- const instance = new fieldType(this, config.default, config),
24
- propDesc = Object.getOwnPropertyDescriptor(this, field);
25
- this['__'+field] = instance;
26
-
27
- // property getter
28
- const fieldGetter = function() {
29
- return instance.value;
30
- };
31
- const getter = propDesc ? propDesc.get : fieldGetter,
32
- fieldSetter = function(newVal: any) {
33
- instance.value = newVal;
34
- },
35
- setter = propDesc ? propDesc.set : fieldSetter;
36
-
37
- // Delete the original property
38
- delete this[field];
39
-
40
- // Create new property with getter and setter
41
- Object.defineProperty(this, field, {
42
- get: getter,
43
- set: setter,
44
- enumerable: true,
45
- configurable: true
46
- });
47
-
48
- instance.on('change', (...args: any[]) => {
49
- this.dispatch('change', field, ...args);
50
- this.dispatch('change:' + field, ...args);
51
- });
52
- return instance;
53
- }
54
-
55
- setData(data: ModelData) {
56
- const fields = this.getFields();
57
- for (const key in data) {
58
- if (fields.indexOf(key) > -1) {
59
- this[key] = data[key];
60
- }
61
- }
62
- }
63
-
64
- getData(): ModelData {
65
- const data: ModelData = {};
66
- for (const key of this.getFields()) {
67
- const field = this['__'+key];
68
- if(this[key] == null || !field)
69
- continue;
70
-
71
- data[key] = field.getData();
72
- }
73
- return data;
74
- }
75
-
76
- getFields(): string[] {
77
- return this.__fields__;
78
- }
79
-
80
- getField(field: string): Field {
81
- return this['__'+field];
82
- }
83
-
84
- bindToFields(event:string, fields:string[], callback: (...args: any[]) => any) {
85
- for(const field of fields) {
86
- const _field = this['__'+ field];
87
- if(_field)
88
- _field.on(event, callback);
89
-
90
- }
91
- }
92
-
93
- setLastData() {
94
- this._lastData = this.getData();
95
- }
96
-
97
- /*
98
- * Revert data to the last setData() call. Useful for forms that edit a
99
- * list of items and then hit cancel rather than saving the list.
100
- */
101
- revert() {
102
- this.setData(this._lastData);
103
- }
104
-
105
- isModified() {
106
- const oData = this._lastData,
107
- nData = this.getData();
108
- for(const key of this.getFields()) {
109
- if(nData[key] != oData[key])
110
- return true;
111
- }
112
- return false;
113
- }
114
- }
@@ -1,16 +0,0 @@
1
- import { Field } from "./Field";
2
-
3
- export class BooleanField extends Field {
4
- set value(data:any) {
5
- const oldValue = this.value;
6
- this._value = !!data;
7
- this.dispatch('change', {
8
- oldValue:oldValue,
9
- value:data
10
- });
11
- }
12
-
13
- get value() {
14
- return this._value;
15
- }
16
- }
@@ -1,12 +0,0 @@
1
- import { Field } from "./Field";
2
-
3
- export class EmailField extends Field {
4
- _emailRegex = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
5
-
6
- validate() {
7
- super.validate();
8
- if(this._value != null && !this._emailRegex.test(this._value))
9
- this._errors.push('Please enter a valid email address');
10
- return this._errors;
11
- }
12
- }
@@ -1,65 +0,0 @@
1
- import {EventDispatcher} from "../../EventDispatcher";
2
-
3
- export function field(fieldType = Field, config: {} | null = {}) {
4
- return function(target: any, key: string) {
5
- if(target.__fields__ == undefined) {
6
- target.__fields__ = [];
7
- }
8
-
9
- // Abstract models share __fields__
10
- if(target.__fields__.indexOf(key) == -1)
11
- target.__fields__.push(key);
12
-
13
- const getter = function() {
14
- return [fieldType, config];
15
- };
16
-
17
- Object.defineProperty(target, '__'+key+'__', {
18
- get: getter,
19
- set: v => {},
20
- enumerable:false,
21
- configurable: true
22
- });
23
- }
24
- }
25
-
26
- export class Field extends EventDispatcher {
27
- model:any;
28
- _value:any;
29
- _errors:String[];
30
- config:any;
31
-
32
- constructor(model:any, value?:any, config?: Object) {
33
- super();
34
- this.model = model;
35
- this.config = config;
36
- this.value = value;
37
- this._errors = [];
38
- }
39
-
40
- set value(v:any) {
41
- const oldValue = this._value;
42
- this._value = v;
43
- this.dispatch('change', {
44
- oldValue:oldValue,
45
- value:v
46
- });
47
- }
48
-
49
- get value() {
50
- return this._value;
51
- }
52
-
53
- getData() {
54
- return this.value;
55
- }
56
-
57
- validate() {
58
- this._errors = [];
59
-
60
- if(this.config['required'] == true && this._value == null)
61
- this._errors.push('This field is required.');
62
-
63
- return this._errors;
64
- }
65
- }
@@ -1,22 +0,0 @@
1
- import { Field } from "./Field";
2
-
3
- export class FloatField extends Field {
4
- set value(data:any) {
5
- const oldValue = this.value;
6
- if(typeof(data) == 'string')
7
- data = parseFloat(data);
8
-
9
- if(typeof(data) == "number" && this.config.toFixed)
10
- data = parseFloat(data.toFixed(this.config.toFixed));
11
-
12
- this._value = data;
13
- this.dispatch('change', {
14
- oldValue:oldValue,
15
- value:data
16
- });
17
- }
18
-
19
- get value() {
20
- return this._value;
21
- }
22
- }
@@ -1,24 +0,0 @@
1
- import { Field } from "./Field";
2
-
3
- export class PositiveIntegerField extends Field {
4
- set value(data:any) {
5
- const oldValue = this.value;
6
- if(data == null) {
7
- this._value = null;
8
- return;
9
- } else if(typeof(data) == 'string')
10
- data = parseInt(data);
11
-
12
- if(data <= 0)
13
- data = 0;
14
- this._value = data;
15
- this.dispatch('change', {
16
- oldValue:oldValue,
17
- value:data
18
- });
19
- }
20
-
21
- get value() {
22
- return this._value;
23
- }
24
- }
@@ -1,16 +0,0 @@
1
- import { Field } from "./Field";
2
-
3
- export class StringField extends Field {
4
- set value(data:any) {
5
- var oldValue = this.value;
6
- this._value = ''+data;
7
- this.dispatch('change', {
8
- oldValue:oldValue,
9
- value:data
10
- });
11
- }
12
-
13
- get value() {
14
- return this._value;
15
- }
16
- }