@luftborn/custom-elements 1.4.0 → 1.4.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 (196) hide show
  1. package/README.md +2 -2
  2. package/assets/style.css +277 -277
  3. package/azure-pipeline.yml +54 -0
  4. package/demo/index.html +585 -585
  5. package/demo/index.js +6109 -0
  6. package/demo/index.min.js +6110 -0
  7. package/demo/index.min.js.map +1 -0
  8. package/demo/index.ts +11 -11
  9. package/demo/old/index.html +586 -586
  10. package/demo/old/index.js +10849 -10849
  11. package/demo/old/index.min.js +10850 -10850
  12. package/demo/old/index.ts +10 -10
  13. package/dist/custom-form.d.ts +20 -20
  14. package/dist/custom-form.js +147 -147
  15. package/dist/elements/Address/AddressElement.d.ts +28 -28
  16. package/dist/elements/Address/AddressElement.js +206 -206
  17. package/dist/elements/BankField/BankFieldElement.d.ts +22 -22
  18. package/dist/elements/BankField/BankFieldElement.js +127 -127
  19. package/dist/elements/CPRElement/CPRElement.d.ts +14 -14
  20. package/dist/elements/CPRElement/CPRElement.js +82 -82
  21. package/dist/elements/CVRElement/CVRElement.d.ts +14 -14
  22. package/dist/elements/CVRElement/CVRElement.js +82 -82
  23. package/dist/elements/CheckBoxElement/CheckBoxElement.d.ts +14 -14
  24. package/dist/elements/CheckBoxElement/CheckBoxElement.js +96 -96
  25. package/dist/elements/CustomRegularExpression/CustomRegularExpressionElement.d.ts +12 -12
  26. package/dist/elements/CustomRegularExpression/CustomRegularExpressionElement.js +82 -82
  27. package/dist/elements/DateField/DateFieldElement.d.ts +12 -12
  28. package/dist/elements/DateField/DateFieldElement.js +85 -85
  29. package/dist/elements/DropDownList/DropDownListElement.d.ts +14 -14
  30. package/dist/elements/DropDownList/DropDownListElement.js +93 -93
  31. package/dist/elements/Elements.d.ts +18 -18
  32. package/dist/elements/Elements.js +37 -37
  33. package/dist/elements/EmailField/EmailFieldElement.d.ts +13 -13
  34. package/dist/elements/EmailField/EmailFieldElement.js +83 -83
  35. package/dist/elements/FileField/FileFieldElement.d.ts +15 -15
  36. package/dist/elements/FileField/FileFieldElement.js +103 -103
  37. package/dist/elements/IdentificationElement/IdentificationElement.d.ts +18 -18
  38. package/dist/elements/IdentificationElement/IdentificationElement.js +94 -94
  39. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.d.ts +16 -16
  40. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.js +114 -114
  41. package/dist/elements/NumericField/NumericFieldElement.d.ts +12 -12
  42. package/dist/elements/NumericField/NumericFieldElement.js +91 -91
  43. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.d.ts +14 -14
  44. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.js +99 -99
  45. package/dist/elements/TextAreaElement/TextAreaElement.d.ts +12 -12
  46. package/dist/elements/TextAreaElement/TextAreaElement.js +79 -79
  47. package/dist/elements/TextField/TextFieldElement.d.ts +12 -12
  48. package/dist/elements/TextField/TextFieldElement.js +79 -79
  49. package/dist/elements/TypeAhead/TypeAheadElement.d.ts +24 -24
  50. package/dist/elements/TypeAhead/TypeAheadElement.js +209 -209
  51. package/dist/framework/CustomEvents.d.ts +21 -21
  52. package/dist/framework/CustomEvents.js +47 -47
  53. package/dist/framework/CustomInputElement.d.ts +50 -50
  54. package/dist/framework/CustomInputElement.js +258 -258
  55. package/dist/framework/Language/Languages/Base/BaseDictionary.d.ts +4 -4
  56. package/dist/framework/Language/Languages/Base/BaseDictionary.js +20 -20
  57. package/dist/framework/Language/Languages/CzechDictionary.d.ts +4 -4
  58. package/dist/framework/Language/Languages/CzechDictionary.js +39 -39
  59. package/dist/framework/Language/Languages/DanishDictionary.d.ts +4 -4
  60. package/dist/framework/Language/Languages/DanishDictionary.js +39 -39
  61. package/dist/framework/Language/Languages/DutchDictionary.d.ts +4 -4
  62. package/dist/framework/Language/Languages/DutchDictionary.js +39 -39
  63. package/dist/framework/Language/Languages/EnglishDictionary.d.ts +4 -4
  64. package/dist/framework/Language/Languages/EnglishDictionary.js +39 -39
  65. package/dist/framework/Language/Languages/EstonianDictionary.d.ts +4 -4
  66. package/dist/framework/Language/Languages/EstonianDictionary.js +39 -39
  67. package/dist/framework/Language/Languages/FinnishDictionary.d.ts +4 -4
  68. package/dist/framework/Language/Languages/FinnishDictionary.js +39 -39
  69. package/dist/framework/Language/Languages/FrenchDictionary.d.ts +4 -4
  70. package/dist/framework/Language/Languages/FrenchDictionary.js +39 -39
  71. package/dist/framework/Language/Languages/GermanDictionary.d.ts +4 -4
  72. package/dist/framework/Language/Languages/GermanDictionary.js +39 -39
  73. package/dist/framework/Language/Languages/GreekDictionary.d.ts +4 -4
  74. package/dist/framework/Language/Languages/GreekDictionary.js +39 -39
  75. package/dist/framework/Language/Languages/HungarianDictionary.d.ts +4 -4
  76. package/dist/framework/Language/Languages/HungarianDictionary.js +39 -39
  77. package/dist/framework/Language/Languages/IcelandicDictionary.d.ts +4 -4
  78. package/dist/framework/Language/Languages/IcelandicDictionary.js +39 -39
  79. package/dist/framework/Language/Languages/ItalianDictionary.d.ts +4 -4
  80. package/dist/framework/Language/Languages/ItalianDictionary.js +39 -39
  81. package/dist/framework/Language/Languages/LatvianDictionary.d.ts +4 -4
  82. package/dist/framework/Language/Languages/LatvianDictionary.js +39 -39
  83. package/dist/framework/Language/Languages/LituanianDictionary.d.ts +4 -4
  84. package/dist/framework/Language/Languages/LituanianDictionary.js +39 -39
  85. package/dist/framework/Language/Languages/NorwegianDictionary.d.ts +4 -4
  86. package/dist/framework/Language/Languages/NorwegianDictionary.js +39 -39
  87. package/dist/framework/Language/Languages/PolishDictionary.d.ts +4 -4
  88. package/dist/framework/Language/Languages/PolishDictionary.js +39 -39
  89. package/dist/framework/Language/Languages/PortugueseDictionary.d.ts +4 -4
  90. package/dist/framework/Language/Languages/PortugueseDictionary.js +39 -39
  91. package/dist/framework/Language/Languages/SpanishDictionary.d.ts +4 -4
  92. package/dist/framework/Language/Languages/SpanishDictionary.js +39 -39
  93. package/dist/framework/Language/Languages/SwedishDictionary.d.ts +4 -4
  94. package/dist/framework/Language/Languages/SwedishDictionary.js +39 -39
  95. package/dist/framework/Language/Translator.d.ts +23 -23
  96. package/dist/framework/Language/Translator.js +115 -115
  97. package/dist/framework/Models/OptionWithDescription.d.ts +6 -6
  98. package/dist/framework/Models/OptionWithDescription.js +9 -9
  99. package/dist/framework/Polyfills/getAttributeNamesPolyfill.d.ts +1 -1
  100. package/dist/framework/Polyfills/getAttributeNamesPolyfill.js +17 -17
  101. package/dist/framework/Translations/CaseConverter.d.ts +5 -5
  102. package/dist/framework/Translations/CaseConverter.js +50 -50
  103. package/dist/framework/Utilities/ArrayUtil.d.ts +6 -6
  104. package/dist/framework/Utilities/ArrayUtil.js +36 -36
  105. package/dist/framework/Utilities/DomUtil.d.ts +21 -21
  106. package/dist/framework/Utilities/DomUtil.js +101 -101
  107. package/dist/framework/Utilities/DomUtility.d.ts +3 -3
  108. package/dist/framework/Utilities/DomUtility.js +12 -12
  109. package/dist/framework/Utilities/MakeRequest.d.ts +8 -8
  110. package/dist/framework/Utilities/MakeRequest.js +48 -48
  111. package/dist/framework/Utilities/StringUtil.d.ts +4 -4
  112. package/dist/framework/Utilities/StringUtil.js +16 -16
  113. package/dist/framework/Utilities/ViewportUtil.d.ts +8 -8
  114. package/dist/framework/Utilities/ViewportUtil.js +42 -42
  115. package/dist/framework/Utilities/debouncer.d.ts +8 -8
  116. package/dist/framework/Utilities/debouncer.js +51 -51
  117. package/dist/framework/Validation/IValidator.interface.d.ts +3 -3
  118. package/dist/framework/Validation/IValidator.interface.js +2 -2
  119. package/dist/framework/Validation/Validators/BankAccount.d.ts +4 -4
  120. package/dist/framework/Validation/Validators/BankAccount.js +12 -12
  121. package/dist/framework/Validation/Validators/BankAccountRegistrationNumber.d.ts +4 -4
  122. package/dist/framework/Validation/Validators/BankAccountRegistrationNumber.js +12 -12
  123. package/dist/framework/Validation/Validators/BankIdNorway.d.ts +5 -5
  124. package/dist/framework/Validation/Validators/BankIdNorway.js +21 -21
  125. package/dist/framework/Validation/Validators/BankIdSweden.d.ts +5 -5
  126. package/dist/framework/Validation/Validators/BankIdSweden.js +21 -21
  127. package/dist/framework/Validation/Validators/CPR.d.ts +9 -9
  128. package/dist/framework/Validation/Validators/CPR.js +75 -75
  129. package/dist/framework/Validation/Validators/CVR.d.ts +5 -5
  130. package/dist/framework/Validation/Validators/CVR.js +30 -30
  131. package/dist/framework/custom-element.decorator.d.ts +9 -9
  132. package/dist/framework/custom-element.decorator.js +51 -51
  133. package/dist/index.d.ts +7 -7
  134. package/dist/index.js +14 -14
  135. package/package.json +38 -38
  136. package/src/custom-form.ts +140 -140
  137. package/src/elements/Address/AddressElement.ts +216 -216
  138. package/src/elements/BankField/BankFieldElement.ts +127 -127
  139. package/src/elements/CPRElement/CPRElement.ts +74 -74
  140. package/src/elements/CVRElement/CVRElement.ts +75 -75
  141. package/src/elements/CheckBoxElement/CheckBoxElement.ts +99 -99
  142. package/src/elements/CustomRegularExpression/CustomRegularExpressionElement.ts +75 -75
  143. package/src/elements/DateField/DateFieldElement.ts +78 -78
  144. package/src/elements/DropDownList/DropDownListElement.ts +100 -100
  145. package/src/elements/Elements.ts +37 -37
  146. package/src/elements/EmailField/EmailFieldElement.ts +78 -78
  147. package/src/elements/FileField/FileFieldElement.ts +96 -96
  148. package/src/elements/IdentificationElement/IdentificationElement.ts +104 -104
  149. package/src/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.ts +116 -116
  150. package/src/elements/NumericField/NumericFieldElement.ts +84 -84
  151. package/src/elements/RadioButtonGroup/RadioButtonGroupElement.ts +103 -103
  152. package/src/elements/TextAreaElement/TextAreaElement.ts +72 -72
  153. package/src/elements/TextField/TextFieldElement.ts +72 -72
  154. package/src/elements/TypeAhead/TypeAheadElement.ts +248 -248
  155. package/src/framework/CustomEvents.ts +47 -47
  156. package/src/framework/CustomInputElement.ts +277 -277
  157. package/src/framework/Language/Languages/Base/BaseDictionary.ts +15 -15
  158. package/src/framework/Language/Languages/CzechDictionary.ts +18 -18
  159. package/src/framework/Language/Languages/DanishDictionary.ts +17 -17
  160. package/src/framework/Language/Languages/DutchDictionary.ts +17 -17
  161. package/src/framework/Language/Languages/EnglishDictionary.ts +18 -18
  162. package/src/framework/Language/Languages/EstonianDictionary.ts +17 -17
  163. package/src/framework/Language/Languages/FinnishDictionary.ts +17 -17
  164. package/src/framework/Language/Languages/FrenchDictionary.ts +17 -17
  165. package/src/framework/Language/Languages/GermanDictionary.ts +17 -17
  166. package/src/framework/Language/Languages/GreekDictionary.ts +17 -17
  167. package/src/framework/Language/Languages/HungarianDictionary.ts +17 -17
  168. package/src/framework/Language/Languages/IcelandicDictionary.ts +17 -17
  169. package/src/framework/Language/Languages/ItalianDictionary.ts +17 -17
  170. package/src/framework/Language/Languages/LatvianDictionary.ts +17 -17
  171. package/src/framework/Language/Languages/LituanianDictionary.ts +17 -17
  172. package/src/framework/Language/Languages/NorwegianDictionary.ts +17 -17
  173. package/src/framework/Language/Languages/PolishDictionary.ts +17 -17
  174. package/src/framework/Language/Languages/PortugueseDictionary.ts +17 -17
  175. package/src/framework/Language/Languages/SpanishDictionary.ts +17 -17
  176. package/src/framework/Language/Languages/SwedishDictionary.ts +17 -17
  177. package/src/framework/Language/Translator.ts +110 -110
  178. package/src/framework/Models/OptionWithDescription.ts +8 -8
  179. package/src/framework/Polyfills/getAttributeNamesPolyfill.ts +13 -13
  180. package/src/framework/Translations/CaseConverter.ts +43 -43
  181. package/src/framework/Utilities/ArrayUtil.ts +31 -31
  182. package/src/framework/Utilities/DomUtil.ts +117 -117
  183. package/src/framework/Utilities/DomUtility.ts +6 -6
  184. package/src/framework/Utilities/MakeRequest.ts +47 -47
  185. package/src/framework/Utilities/StringUtil.ts +8 -8
  186. package/src/framework/Utilities/ViewportUtil.ts +46 -46
  187. package/src/framework/Utilities/debouncer.ts +66 -66
  188. package/src/framework/Validation/IValidator.interface.ts +3 -3
  189. package/src/framework/Validation/Validators/BankAccount.ts +7 -7
  190. package/src/framework/Validation/Validators/BankAccountRegistrationNumber.ts +8 -8
  191. package/src/framework/Validation/Validators/BankIdNorway.ts +21 -21
  192. package/src/framework/Validation/Validators/BankIdSweden.ts +21 -21
  193. package/src/framework/Validation/Validators/CPR.ts +82 -82
  194. package/src/framework/Validation/Validators/CVR.ts +27 -27
  195. package/src/framework/custom-element.decorator.ts +57 -57
  196. package/src/index.ts +12 -12
package/demo/old/index.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { CustomForm, elements } from './../src/index';
2
-
3
- document.onreadystatechange = () => {
4
- if (document.readyState === 'complete') {
5
- let form = new CustomForm(document.forms[0]);
6
- form.onsubmit = promise => {
7
- promise.then(response => {});
8
- };
9
- }
10
- };
1
+ import { CustomForm, elements } from './../src/index';
2
+
3
+ document.onreadystatechange = () => {
4
+ if (document.readyState === 'complete') {
5
+ let form = new CustomForm(document.forms[0]);
6
+ form.onsubmit = promise => {
7
+ promise.then(response => {});
8
+ };
9
+ }
10
+ };
@@ -1,20 +1,20 @@
1
- import { CustomInputElement } from './framework/CustomInputElement';
2
- export declare class CustomForm {
3
- private form;
4
- action: string;
5
- method: string;
6
- _nativeInputs: HTMLInputElement[];
7
- onsubmit: ((this: CustomForm, promise: Promise<any>) => any) | null;
8
- constructor(form: HTMLFormElement);
9
- get inputs(): CustomInputElement[];
10
- get nativeInputs(): HTMLInputElement[];
11
- get hasFiles(): boolean;
12
- attachForm(): void;
13
- validate(): boolean;
14
- submit(): Promise<any>;
15
- private extractData;
16
- private binGroupsToDependency;
17
- private hideGroupAndItsDependencies;
18
- private showGroupAndItsDependencies;
19
- private isDescendant;
20
- }
1
+ import { CustomInputElement } from './framework/CustomInputElement';
2
+ export declare class CustomForm {
3
+ private form;
4
+ action: string;
5
+ method: string;
6
+ _nativeInputs: HTMLInputElement[];
7
+ onsubmit: ((this: CustomForm, promise: Promise<any>) => any) | null;
8
+ constructor(form: HTMLFormElement);
9
+ get inputs(): CustomInputElement[];
10
+ get nativeInputs(): HTMLInputElement[];
11
+ get hasFiles(): boolean;
12
+ attachForm(): void;
13
+ validate(): boolean;
14
+ submit(): Promise<any>;
15
+ private extractData;
16
+ private binGroupsToDependency;
17
+ private hideGroupAndItsDependencies;
18
+ private showGroupAndItsDependencies;
19
+ private isDescendant;
20
+ }
@@ -1,148 +1,148 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CustomForm = void 0;
4
- var FileFieldElement_1 = require("./elements/FileField/FileFieldElement");
5
- var ArrayUtil_1 = require("./framework/Utilities/ArrayUtil");
6
- var MakeRequest_1 = require("./framework/Utilities/MakeRequest");
7
- var CustomForm = /** @class */ (function () {
8
- function CustomForm(form) {
9
- this.form = form;
10
- this.action = form.action || '';
11
- this.method = form.method || 'get';
12
- this.attachForm();
13
- this.binGroupsToDependency();
14
- }
15
- Object.defineProperty(CustomForm.prototype, "inputs", {
16
- get: function () {
17
- return ArrayUtil_1.default.FromNodeList(this.form.querySelectorAll('.group-container:not([hidden]) [custom-input]:not([hidden])'));
18
- },
19
- enumerable: false,
20
- configurable: true
21
- });
22
- Object.defineProperty(CustomForm.prototype, "nativeInputs", {
23
- get: function () {
24
- this._nativeInputs =
25
- this._nativeInputs ||
26
- ArrayUtil_1.default.FromNodeList(this.form.querySelectorAll('input'));
27
- return this._nativeInputs;
28
- },
29
- enumerable: false,
30
- configurable: true
31
- });
32
- Object.defineProperty(CustomForm.prototype, "hasFiles", {
33
- get: function () {
34
- return this.inputs.some(function (input) { return input instanceof FileFieldElement_1.FileFieldElement; });
35
- },
36
- enumerable: false,
37
- configurable: true
38
- });
39
- CustomForm.prototype.attachForm = function () {
40
- var _this = this;
41
- this.form.onsubmit = function (event) {
42
- event.preventDefault();
43
- var valid = _this.validate();
44
- if (valid) {
45
- if (_this.onsubmit) {
46
- _this.onsubmit(_this.submit());
47
- }
48
- }
49
- };
50
- };
51
- CustomForm.prototype.validate = function () {
52
- this.inputs.forEach(function (input) { return input.validate(); });
53
- return this.inputs.every(function (input) { return input.valid; });
54
- };
55
- CustomForm.prototype.submit = function () {
56
- var formData = {};
57
- var headers = {};
58
- this.inputs.map(function (i) { return (formData[i.name] = i.value); });
59
- formData = this.extractData();
60
- return new MakeRequest_1.default(this.action, this.method, headers).send(formData);
61
- };
62
- CustomForm.prototype.extractData = function () {
63
- var formData = new FormData();
64
- for (var _i = 0, _a = this.inputs; _i < _a.length; _i++) {
65
- var input = _a[_i];
66
- if (input instanceof FileFieldElement_1.FileFieldElement) {
67
- for (var index = 0; index < input.value.length; index++) {
68
- var file = input.value[index];
69
- formData.append(input.name, file, file.name);
70
- }
71
- }
72
- else {
73
- formData.append("Values[" + input.name + "]", input.value);
74
- }
75
- }
76
- for (var _b = 0, _c = this.nativeInputs; _b < _c.length; _b++) {
77
- var input = _c[_b];
78
- if (input.name) {
79
- formData.append(input.name, input.value);
80
- }
81
- }
82
- return formData;
83
- };
84
- CustomForm.prototype.binGroupsToDependency = function () {
85
- var _this = this;
86
- var groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
87
- groupContainers.forEach(function (element) {
88
- var dependentField = element.getAttribute('data-depends-on');
89
- var dependentValue = element.getAttribute('data-dependent-value');
90
- var customElement = document.forms[0].querySelector("[name=\"" + dependentField + "\"]");
91
- element.setAttribute("hidden", "");
92
- customElement.onChange.on(function (event) {
93
- if (event.value === dependentValue || event.value.indexOf(dependentValue) >= 0) {
94
- _this.showGroupAndItsDependencies(element);
95
- }
96
- else {
97
- _this.hideGroupAndItsDependencies(element);
98
- }
99
- });
100
- });
101
- };
102
- CustomForm.prototype.hideGroupAndItsDependencies = function (group) {
103
- var _this = this;
104
- var inputElementsInsideGroup = this.inputs.filter(function (input) { return _this.isDescendant(group, input); });
105
- group.setAttribute("hidden", "");
106
- var groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
107
- groupContainers.forEach(function (otherGroup) {
108
- if (otherGroup !== group) {
109
- var groupDependsOnField_1 = otherGroup.getAttribute('data-depends-on');
110
- inputElementsInsideGroup.forEach(function (input) {
111
- if (input.name === groupDependsOnField_1) {
112
- _this.hideGroupAndItsDependencies(otherGroup);
113
- }
114
- });
115
- }
116
- });
117
- };
118
- CustomForm.prototype.showGroupAndItsDependencies = function (group) {
119
- var _this = this;
120
- group.removeAttribute("hidden");
121
- var inputElementsInsideGroup = this.inputs.filter(function (input) { return _this.isDescendant(group, input); });
122
- var groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
123
- groupContainers.forEach(function (otherGroup) {
124
- if (otherGroup !== group) {
125
- var groupDependsOnField_2 = otherGroup.getAttribute('data-depends-on');
126
- var dependentValue_1 = otherGroup.getAttribute('data-dependent-value');
127
- inputElementsInsideGroup.forEach(function (input) {
128
- if (input.name === groupDependsOnField_2 && (input.value === dependentValue_1 || input.value.indexOf(dependentValue_1) >= 0)) {
129
- _this.showGroupAndItsDependencies(otherGroup);
130
- }
131
- });
132
- }
133
- });
134
- };
135
- CustomForm.prototype.isDescendant = function (parent, child) {
136
- var node = child.parentNode;
137
- while (node != null) {
138
- if (node === parent) {
139
- return true;
140
- }
141
- node = node.parentElement;
142
- }
143
- return false;
144
- };
145
- return CustomForm;
146
- }());
147
- exports.CustomForm = CustomForm;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomForm = void 0;
4
+ var FileFieldElement_1 = require("./elements/FileField/FileFieldElement");
5
+ var ArrayUtil_1 = require("./framework/Utilities/ArrayUtil");
6
+ var MakeRequest_1 = require("./framework/Utilities/MakeRequest");
7
+ var CustomForm = /** @class */ (function () {
8
+ function CustomForm(form) {
9
+ this.form = form;
10
+ this.action = form.action || '';
11
+ this.method = form.method || 'get';
12
+ this.attachForm();
13
+ this.binGroupsToDependency();
14
+ }
15
+ Object.defineProperty(CustomForm.prototype, "inputs", {
16
+ get: function () {
17
+ return ArrayUtil_1.default.FromNodeList(this.form.querySelectorAll('.group-container:not([hidden]) [custom-input]:not([hidden])'));
18
+ },
19
+ enumerable: false,
20
+ configurable: true
21
+ });
22
+ Object.defineProperty(CustomForm.prototype, "nativeInputs", {
23
+ get: function () {
24
+ this._nativeInputs =
25
+ this._nativeInputs ||
26
+ ArrayUtil_1.default.FromNodeList(this.form.querySelectorAll('input'));
27
+ return this._nativeInputs;
28
+ },
29
+ enumerable: false,
30
+ configurable: true
31
+ });
32
+ Object.defineProperty(CustomForm.prototype, "hasFiles", {
33
+ get: function () {
34
+ return this.inputs.some(function (input) { return input instanceof FileFieldElement_1.FileFieldElement; });
35
+ },
36
+ enumerable: false,
37
+ configurable: true
38
+ });
39
+ CustomForm.prototype.attachForm = function () {
40
+ var _this = this;
41
+ this.form.onsubmit = function (event) {
42
+ event.preventDefault();
43
+ var valid = _this.validate();
44
+ if (valid) {
45
+ if (_this.onsubmit) {
46
+ _this.onsubmit(_this.submit());
47
+ }
48
+ }
49
+ };
50
+ };
51
+ CustomForm.prototype.validate = function () {
52
+ this.inputs.forEach(function (input) { return input.validate(); });
53
+ return this.inputs.every(function (input) { return input.valid; });
54
+ };
55
+ CustomForm.prototype.submit = function () {
56
+ var formData = {};
57
+ var headers = {};
58
+ this.inputs.map(function (i) { return (formData[i.name] = i.value); });
59
+ formData = this.extractData();
60
+ return new MakeRequest_1.default(this.action, this.method, headers).send(formData);
61
+ };
62
+ CustomForm.prototype.extractData = function () {
63
+ var formData = new FormData();
64
+ for (var _i = 0, _a = this.inputs; _i < _a.length; _i++) {
65
+ var input = _a[_i];
66
+ if (input instanceof FileFieldElement_1.FileFieldElement) {
67
+ for (var index = 0; index < input.value.length; index++) {
68
+ var file = input.value[index];
69
+ formData.append(input.name, file, file.name);
70
+ }
71
+ }
72
+ else {
73
+ formData.append("Values[" + input.name + "]", input.value);
74
+ }
75
+ }
76
+ for (var _b = 0, _c = this.nativeInputs; _b < _c.length; _b++) {
77
+ var input = _c[_b];
78
+ if (input.name) {
79
+ formData.append(input.name, input.value);
80
+ }
81
+ }
82
+ return formData;
83
+ };
84
+ CustomForm.prototype.binGroupsToDependency = function () {
85
+ var _this = this;
86
+ var groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
87
+ groupContainers.forEach(function (element) {
88
+ var dependentField = element.getAttribute('data-depends-on');
89
+ var dependentValue = element.getAttribute('data-dependent-value');
90
+ var customElement = document.forms[0].querySelector("[name=\"" + dependentField + "\"]");
91
+ element.setAttribute("hidden", "");
92
+ customElement.onChange.on(function (event) {
93
+ if (event.value === dependentValue || event.value.indexOf(dependentValue) >= 0) {
94
+ _this.showGroupAndItsDependencies(element);
95
+ }
96
+ else {
97
+ _this.hideGroupAndItsDependencies(element);
98
+ }
99
+ });
100
+ });
101
+ };
102
+ CustomForm.prototype.hideGroupAndItsDependencies = function (group) {
103
+ var _this = this;
104
+ var inputElementsInsideGroup = this.inputs.filter(function (input) { return _this.isDescendant(group, input); });
105
+ group.setAttribute("hidden", "");
106
+ var groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
107
+ groupContainers.forEach(function (otherGroup) {
108
+ if (otherGroup !== group) {
109
+ var groupDependsOnField_1 = otherGroup.getAttribute('data-depends-on');
110
+ inputElementsInsideGroup.forEach(function (input) {
111
+ if (input.name === groupDependsOnField_1) {
112
+ _this.hideGroupAndItsDependencies(otherGroup);
113
+ }
114
+ });
115
+ }
116
+ });
117
+ };
118
+ CustomForm.prototype.showGroupAndItsDependencies = function (group) {
119
+ var _this = this;
120
+ group.removeAttribute("hidden");
121
+ var inputElementsInsideGroup = this.inputs.filter(function (input) { return _this.isDescendant(group, input); });
122
+ var groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
123
+ groupContainers.forEach(function (otherGroup) {
124
+ if (otherGroup !== group) {
125
+ var groupDependsOnField_2 = otherGroup.getAttribute('data-depends-on');
126
+ var dependentValue_1 = otherGroup.getAttribute('data-dependent-value');
127
+ inputElementsInsideGroup.forEach(function (input) {
128
+ if (input.name === groupDependsOnField_2 && (input.value === dependentValue_1 || input.value.indexOf(dependentValue_1) >= 0)) {
129
+ _this.showGroupAndItsDependencies(otherGroup);
130
+ }
131
+ });
132
+ }
133
+ });
134
+ };
135
+ CustomForm.prototype.isDescendant = function (parent, child) {
136
+ var node = child.parentNode;
137
+ while (node != null) {
138
+ if (node === parent) {
139
+ return true;
140
+ }
141
+ node = node.parentElement;
142
+ }
143
+ return false;
144
+ };
145
+ return CustomForm;
146
+ }());
147
+ exports.CustomForm = CustomForm;
148
148
  //# sourceMappingURL=custom-form.js.map
@@ -1,28 +1,28 @@
1
- import { CustomInputElement } from '../../framework/CustomInputElement';
2
- export declare class AddressElement extends CustomInputElement {
3
- private autoCompleteEnabled;
4
- private addressAutoComplete;
5
- private googlePlacesLibraryElement;
6
- private googlePlacesApiKey;
7
- address: HTMLInputElement;
8
- city: HTMLInputElement;
9
- country: HTMLInputElement;
10
- zip: HTMLInputElement;
11
- constructor();
12
- get value(): string;
13
- set value(value: string);
14
- get valid(): boolean;
15
- connectedCallback(): void;
16
- componentDidMount(): void;
17
- initChildInputs(): void;
18
- change($event: any): void;
19
- validate(): void;
20
- changeLanguage(language: string): void;
21
- enableAutoComplete(): void;
22
- private googlePlacesLibraryElementBindLoad;
23
- bindAutoComplete(): void;
24
- onAddressChangedHandler(): void;
25
- static get observedAttributes(): string[];
26
- attributeChangedCallback(name: string, oldVal: string, newVal: string): void;
27
- private attributeChanged;
28
- }
1
+ import { CustomInputElement } from '../../framework/CustomInputElement';
2
+ export declare class AddressElement extends CustomInputElement {
3
+ private autoCompleteEnabled;
4
+ private addressAutoComplete;
5
+ private googlePlacesLibraryElement;
6
+ private googlePlacesApiKey;
7
+ address: HTMLInputElement;
8
+ city: HTMLInputElement;
9
+ country: HTMLInputElement;
10
+ zip: HTMLInputElement;
11
+ constructor();
12
+ get value(): string;
13
+ set value(value: string);
14
+ get valid(): boolean;
15
+ connectedCallback(): void;
16
+ componentDidMount(): void;
17
+ initChildInputs(): void;
18
+ change($event: any): void;
19
+ validate(): void;
20
+ changeLanguage(language: string): void;
21
+ enableAutoComplete(): void;
22
+ private googlePlacesLibraryElementBindLoad;
23
+ bindAutoComplete(): void;
24
+ onAddressChangedHandler(): void;
25
+ static get observedAttributes(): string[];
26
+ attributeChangedCallback(name: string, oldVal: string, newVal: string): void;
27
+ private attributeChanged;
28
+ }