@luftborn/custom-elements 1.1.44 → 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 (247) 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 -146
  15. package/dist/custom-form.js.map +1 -1
  16. package/dist/elements/Address/AddressElement.d.ts +28 -28
  17. package/dist/elements/Address/AddressElement.js +206 -206
  18. package/dist/elements/BankField/BankFieldElement.d.ts +22 -22
  19. package/dist/elements/BankField/BankFieldElement.js +127 -127
  20. package/dist/elements/CPRElement/CPRElement.d.ts +14 -14
  21. package/dist/elements/CPRElement/CPRElement.js +82 -82
  22. package/dist/elements/CVRElement/CVRElement.d.ts +14 -14
  23. package/dist/elements/CVRElement/CVRElement.js +82 -82
  24. package/dist/elements/CheckBoxElement/CheckBoxElement.d.ts +14 -14
  25. package/dist/elements/CheckBoxElement/CheckBoxElement.js +96 -96
  26. package/dist/elements/CheckBoxElement/CheckBoxElement.js.map +1 -1
  27. package/dist/elements/CustomRegularExpression/CustomRegularExpressionElement.d.ts +12 -12
  28. package/dist/elements/CustomRegularExpression/CustomRegularExpressionElement.js +82 -82
  29. package/dist/elements/DateField/DateFieldElement.d.ts +12 -12
  30. package/dist/elements/DateField/DateFieldElement.js +85 -85
  31. package/dist/elements/DropDownList/DropDownListElement.d.ts +14 -14
  32. package/dist/elements/DropDownList/DropDownListElement.js +93 -93
  33. package/dist/elements/DropDownList/DropDownListElement.js.map +1 -1
  34. package/dist/elements/Elements.d.ts +18 -18
  35. package/dist/elements/Elements.js +37 -37
  36. package/dist/elements/EmailField/EmailFieldElement.d.ts +13 -13
  37. package/dist/elements/EmailField/EmailFieldElement.js +83 -83
  38. package/dist/elements/FileField/FileFieldElement.d.ts +15 -12
  39. package/dist/elements/FileField/FileFieldElement.js +103 -83
  40. package/dist/elements/FileField/FileFieldElement.js.map +1 -1
  41. package/dist/elements/IdentificationElement/IdentificationElement.d.ts +18 -18
  42. package/dist/elements/IdentificationElement/IdentificationElement.js +94 -94
  43. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.d.ts +16 -16
  44. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.js +114 -108
  45. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.js.map +1 -1
  46. package/dist/elements/NumericField/NumericFieldElement.d.ts +12 -12
  47. package/dist/elements/NumericField/NumericFieldElement.js +91 -91
  48. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.d.ts +14 -14
  49. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.js +99 -99
  50. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.js.map +1 -1
  51. package/dist/elements/TextAreaElement/TextAreaElement.d.ts +12 -12
  52. package/dist/elements/TextAreaElement/TextAreaElement.js +79 -79
  53. package/dist/elements/TextField/TextFieldElement.d.ts +12 -12
  54. package/dist/elements/TextField/TextFieldElement.js +79 -79
  55. package/dist/elements/TypeAhead/TypeAheadElement.d.ts +24 -24
  56. package/dist/elements/TypeAhead/TypeAheadElement.js +209 -209
  57. package/dist/framework/CustomEvents.d.ts +21 -21
  58. package/dist/framework/CustomEvents.js +47 -47
  59. package/dist/framework/CustomInputElement.d.ts +50 -50
  60. package/dist/framework/CustomInputElement.js +258 -257
  61. package/dist/framework/CustomInputElement.js.map +1 -1
  62. package/dist/framework/Language/Languages/Base/BaseDictionary.d.ts +4 -4
  63. package/dist/framework/Language/Languages/Base/BaseDictionary.js +20 -20
  64. package/dist/framework/Language/Languages/CzechDictionary.d.ts +4 -0
  65. package/dist/framework/Language/Languages/CzechDictionary.js +40 -0
  66. package/dist/framework/Language/Languages/CzechDictionary.js.map +1 -0
  67. package/dist/framework/Language/Languages/DanishDictionary.d.ts +4 -4
  68. package/dist/framework/Language/Languages/DanishDictionary.js +39 -39
  69. package/dist/framework/Language/Languages/DutchDictionary.d.ts +4 -0
  70. package/dist/framework/Language/Languages/DutchDictionary.js +40 -0
  71. package/dist/framework/Language/Languages/DutchDictionary.js.map +1 -0
  72. package/dist/framework/Language/Languages/EnglishDictionary.d.ts +4 -4
  73. package/dist/framework/Language/Languages/EnglishDictionary.js +39 -39
  74. package/dist/framework/Language/Languages/EstonianDictionary.d.ts +4 -0
  75. package/dist/framework/Language/Languages/EstonianDictionary.js +40 -0
  76. package/dist/framework/Language/Languages/EstonianDictionary.js.map +1 -0
  77. package/dist/framework/Language/Languages/FinnishDictionary.d.ts +4 -0
  78. package/dist/framework/Language/Languages/FinnishDictionary.js +40 -0
  79. package/dist/framework/Language/Languages/FinnishDictionary.js.map +1 -0
  80. package/dist/framework/Language/Languages/FrenchDictionary.d.ts +4 -0
  81. package/dist/framework/Language/Languages/FrenchDictionary.js +40 -0
  82. package/dist/framework/Language/Languages/FrenchDictionary.js.map +1 -0
  83. package/dist/framework/Language/Languages/GermanDictionary.d.ts +4 -0
  84. package/dist/framework/Language/Languages/GermanDictionary.js +40 -0
  85. package/dist/framework/Language/Languages/GermanDictionary.js.map +1 -0
  86. package/dist/framework/Language/Languages/GreekDictionary.d.ts +4 -0
  87. package/dist/framework/Language/Languages/GreekDictionary.js +40 -0
  88. package/dist/framework/Language/Languages/GreekDictionary.js.map +1 -0
  89. package/dist/framework/Language/Languages/HungarianDictionary.d.ts +4 -0
  90. package/dist/framework/Language/Languages/HungarianDictionary.js +40 -0
  91. package/dist/framework/Language/Languages/HungarianDictionary.js.map +1 -0
  92. package/dist/framework/Language/Languages/IcelandicDictionary.d.ts +4 -0
  93. package/dist/framework/Language/Languages/IcelandicDictionary.js +40 -0
  94. package/dist/framework/Language/Languages/IcelandicDictionary.js.map +1 -0
  95. package/dist/framework/Language/Languages/ItalianDictionary.d.ts +4 -0
  96. package/dist/framework/Language/Languages/ItalianDictionary.js +40 -0
  97. package/dist/framework/Language/Languages/ItalianDictionary.js.map +1 -0
  98. package/dist/framework/Language/Languages/LatvianDictionary.d.ts +4 -0
  99. package/dist/framework/Language/Languages/LatvianDictionary.js +40 -0
  100. package/dist/framework/Language/Languages/LatvianDictionary.js.map +1 -0
  101. package/dist/framework/Language/Languages/LituanianDictionary.d.ts +4 -0
  102. package/dist/framework/Language/Languages/LituanianDictionary.js +40 -0
  103. package/dist/framework/Language/Languages/LituanianDictionary.js.map +1 -0
  104. package/dist/framework/Language/Languages/NorwegianDictionary.d.ts +4 -0
  105. package/dist/framework/Language/Languages/NorwegianDictionary.js +40 -0
  106. package/dist/framework/Language/Languages/NorwegianDictionary.js.map +1 -0
  107. package/dist/framework/Language/Languages/PolishDictionary.d.ts +4 -0
  108. package/dist/framework/Language/Languages/PolishDictionary.js +40 -0
  109. package/dist/framework/Language/Languages/PolishDictionary.js.map +1 -0
  110. package/dist/framework/Language/Languages/PortugueseDictionary.d.ts +4 -0
  111. package/dist/framework/Language/Languages/PortugueseDictionary.js +40 -0
  112. package/dist/framework/Language/Languages/PortugueseDictionary.js.map +1 -0
  113. package/dist/framework/Language/Languages/SpanishDictionary.d.ts +4 -0
  114. package/dist/framework/Language/Languages/SpanishDictionary.js +40 -0
  115. package/dist/framework/Language/Languages/SpanishDictionary.js.map +1 -0
  116. package/dist/framework/Language/Languages/SwedishDictionary.d.ts +4 -0
  117. package/dist/framework/Language/Languages/SwedishDictionary.js +40 -0
  118. package/dist/framework/Language/Languages/SwedishDictionary.js.map +1 -0
  119. package/dist/framework/Language/Translator.d.ts +23 -6
  120. package/dist/framework/Language/Translator.js +115 -32
  121. package/dist/framework/Language/Translator.js.map +1 -1
  122. package/dist/framework/Models/OptionWithDescription.d.ts +6 -6
  123. package/dist/framework/Models/OptionWithDescription.js +9 -9
  124. package/dist/framework/Polyfills/getAttributeNamesPolyfill.d.ts +1 -1
  125. package/dist/framework/Polyfills/getAttributeNamesPolyfill.js +17 -17
  126. package/dist/framework/Translations/CaseConverter.d.ts +5 -5
  127. package/dist/framework/Translations/CaseConverter.js +50 -50
  128. package/dist/framework/Utilities/ArrayUtil.d.ts +6 -0
  129. package/dist/framework/Utilities/ArrayUtil.js +37 -0
  130. package/dist/framework/Utilities/ArrayUtil.js.map +1 -0
  131. package/dist/framework/Utilities/DomUtil.d.ts +21 -0
  132. package/dist/framework/Utilities/DomUtil.js +102 -0
  133. package/dist/framework/Utilities/DomUtil.js.map +1 -0
  134. package/dist/framework/Utilities/DomUtility.d.ts +3 -3
  135. package/dist/framework/Utilities/DomUtility.js +12 -12
  136. package/dist/framework/Utilities/MakeRequest.d.ts +8 -0
  137. package/dist/framework/Utilities/MakeRequest.js +49 -0
  138. package/dist/framework/Utilities/MakeRequest.js.map +1 -0
  139. package/dist/framework/Utilities/StringUtil.d.ts +4 -0
  140. package/dist/framework/Utilities/StringUtil.js +17 -0
  141. package/dist/framework/Utilities/StringUtil.js.map +1 -0
  142. package/dist/framework/Utilities/ViewportUtil.d.ts +8 -0
  143. package/dist/framework/Utilities/ViewportUtil.js +43 -0
  144. package/dist/framework/Utilities/ViewportUtil.js.map +1 -0
  145. package/dist/framework/Utilities/debouncer.d.ts +8 -8
  146. package/dist/framework/Utilities/debouncer.js +51 -51
  147. package/dist/framework/Validation/IValidator.interface.d.ts +3 -3
  148. package/dist/framework/Validation/IValidator.interface.js +2 -2
  149. package/dist/framework/Validation/Validators/BankAccount.d.ts +4 -4
  150. package/dist/framework/Validation/Validators/BankAccount.js +12 -12
  151. package/dist/framework/Validation/Validators/BankAccountRegistrationNumber.d.ts +4 -4
  152. package/dist/framework/Validation/Validators/BankAccountRegistrationNumber.js +12 -12
  153. package/dist/framework/Validation/Validators/BankIdNorway.d.ts +5 -5
  154. package/dist/framework/Validation/Validators/BankIdNorway.js +21 -21
  155. package/dist/framework/Validation/Validators/BankIdSweden.d.ts +5 -5
  156. package/dist/framework/Validation/Validators/BankIdSweden.js +21 -21
  157. package/dist/framework/Validation/Validators/CPR.d.ts +9 -9
  158. package/dist/framework/Validation/Validators/CPR.js +75 -75
  159. package/dist/framework/Validation/Validators/CVR.d.ts +5 -5
  160. package/dist/framework/Validation/Validators/CVR.js +30 -30
  161. package/dist/framework/custom-element.decorator.d.ts +9 -9
  162. package/dist/framework/custom-element.decorator.js +51 -51
  163. package/dist/index.d.ts +7 -7
  164. package/dist/index.js +14 -14
  165. package/node_modules/@webcomponents/webcomponentsjs/CHANGELOG.md +15 -0
  166. package/node_modules/@webcomponents/webcomponentsjs/README.md +13 -0
  167. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-ce.js +31 -31
  168. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-ce.js.map +1 -1
  169. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_dom.js +15 -13
  170. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_dom.js.map +1 -1
  171. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_js.js.map +1 -1
  172. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +237 -223
  173. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +1 -1
  174. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce.js +188 -176
  175. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +1 -1
  176. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd.js +155 -144
  177. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd.js.map +1 -1
  178. package/node_modules/@webcomponents/webcomponentsjs/package.json +31 -64
  179. package/node_modules/@webcomponents/webcomponentsjs/src/entrypoints/webcomponents-pf_dom-index.js +2 -0
  180. package/node_modules/@webcomponents/webcomponentsjs/src/platform/event-listener-options.js +122 -0
  181. package/node_modules/@webcomponents/webcomponentsjs/src/platform/toggle-attribute.js +39 -0
  182. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.d.ts +1 -0
  183. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js +239 -225
  184. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js.map +1 -1
  185. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js +35 -3
  186. package/package.json +38 -39
  187. package/src/custom-form.ts +140 -139
  188. package/src/elements/Address/AddressElement.ts +216 -216
  189. package/src/elements/BankField/BankFieldElement.ts +127 -127
  190. package/src/elements/CPRElement/CPRElement.ts +74 -74
  191. package/src/elements/CVRElement/CVRElement.ts +75 -75
  192. package/src/elements/CheckBoxElement/CheckBoxElement.ts +99 -99
  193. package/src/elements/CustomRegularExpression/CustomRegularExpressionElement.ts +75 -75
  194. package/src/elements/DateField/DateFieldElement.ts +78 -78
  195. package/src/elements/DropDownList/DropDownListElement.ts +100 -100
  196. package/src/elements/Elements.ts +37 -37
  197. package/src/elements/EmailField/EmailFieldElement.ts +78 -78
  198. package/src/elements/FileField/FileFieldElement.ts +96 -76
  199. package/src/elements/IdentificationElement/IdentificationElement.ts +104 -104
  200. package/src/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.ts +116 -111
  201. package/src/elements/NumericField/NumericFieldElement.ts +84 -84
  202. package/src/elements/RadioButtonGroup/RadioButtonGroupElement.ts +103 -103
  203. package/src/elements/TextAreaElement/TextAreaElement.ts +72 -72
  204. package/src/elements/TextField/TextFieldElement.ts +72 -72
  205. package/src/elements/TypeAhead/TypeAheadElement.ts +248 -248
  206. package/src/framework/CustomEvents.ts +47 -47
  207. package/src/framework/CustomInputElement.ts +277 -276
  208. package/src/framework/Language/Languages/Base/BaseDictionary.ts +15 -15
  209. package/src/framework/Language/Languages/CzechDictionary.ts +18 -0
  210. package/src/framework/Language/Languages/DanishDictionary.ts +17 -17
  211. package/src/framework/Language/Languages/DutchDictionary.ts +18 -0
  212. package/src/framework/Language/Languages/EnglishDictionary.ts +18 -18
  213. package/src/framework/Language/Languages/EstonianDictionary.ts +18 -0
  214. package/src/framework/Language/Languages/FinnishDictionary.ts +18 -0
  215. package/src/framework/Language/Languages/FrenchDictionary.ts +18 -0
  216. package/src/framework/Language/Languages/GermanDictionary.ts +18 -0
  217. package/src/framework/Language/Languages/GreekDictionary.ts +18 -0
  218. package/src/framework/Language/Languages/HungarianDictionary.ts +18 -0
  219. package/src/framework/Language/Languages/IcelandicDictionary.ts +18 -0
  220. package/src/framework/Language/Languages/ItalianDictionary.ts +18 -0
  221. package/src/framework/Language/Languages/LatvianDictionary.ts +18 -0
  222. package/src/framework/Language/Languages/LituanianDictionary.ts +18 -0
  223. package/src/framework/Language/Languages/NorwegianDictionary.ts +18 -0
  224. package/src/framework/Language/Languages/PolishDictionary.ts +18 -0
  225. package/src/framework/Language/Languages/PortugueseDictionary.ts +18 -0
  226. package/src/framework/Language/Languages/SpanishDictionary.ts +18 -0
  227. package/src/framework/Language/Languages/SwedishDictionary.ts +18 -0
  228. package/src/framework/Language/Translator.ts +110 -26
  229. package/src/framework/Models/OptionWithDescription.ts +8 -8
  230. package/src/framework/Polyfills/getAttributeNamesPolyfill.ts +13 -13
  231. package/src/framework/Translations/CaseConverter.ts +43 -43
  232. package/src/framework/Utilities/ArrayUtil.ts +31 -0
  233. package/src/framework/Utilities/DomUtil.ts +117 -0
  234. package/src/framework/Utilities/DomUtility.ts +6 -6
  235. package/src/framework/Utilities/MakeRequest.ts +47 -0
  236. package/src/framework/Utilities/StringUtil.ts +9 -0
  237. package/src/framework/Utilities/ViewportUtil.ts +46 -0
  238. package/src/framework/Utilities/debouncer.ts +66 -66
  239. package/src/framework/Validation/IValidator.interface.ts +3 -3
  240. package/src/framework/Validation/Validators/BankAccount.ts +7 -7
  241. package/src/framework/Validation/Validators/BankAccountRegistrationNumber.ts +8 -8
  242. package/src/framework/Validation/Validators/BankIdNorway.ts +21 -21
  243. package/src/framework/Validation/Validators/BankIdSweden.ts +21 -21
  244. package/src/framework/Validation/Validators/CPR.ts +82 -82
  245. package/src/framework/Validation/Validators/CVR.ts +27 -27
  246. package/src/framework/custom-element.decorator.ts +57 -57
  247. package/src/index.ts +12 -12
@@ -157,16 +157,48 @@
157
157
  }
158
158
 
159
159
  if (polyfills.length) {
160
+ // When the Trusted Types API is available, `policy` is a
161
+ // `TrustedTypePolicy` with functions for creating trusted HTML, scripts,
162
+ // and script URLs. This policy is used below to (a) approve the bundle URL
163
+ // string created by the loader that is assigned to a `<script>`'s `src`
164
+ // attribute, (b) approve a constant script string that is assigned to that
165
+ // `<script>'s `onload` attribute, and (c) approve the string of HTML that
166
+ // the loader reads from that `<script>`'s `outerHTML`.
167
+ //
168
+ // If the Trusted Types API is not available, the returned object exposes a
169
+ // similar interface to a `TrustedTypePolicy`, but all of its functions are
170
+ // the identity function.
171
+ var policy = (function () {
172
+ var identity = function (x) {
173
+ return x;
174
+ };
175
+ var policyOptions = {
176
+ createHTML: identity,
177
+ createScript: identity,
178
+ createScriptURL: identity,
179
+ };
180
+ var policy =
181
+ window.trustedTypes &&
182
+ window.trustedTypes.createPolicy('webcomponents-loader', policyOptions);
183
+ return policy || policyOptions;
184
+ })();
185
+
160
186
  var url;
161
187
  var polyfillFile = 'bundles/webcomponents-' + polyfills.join('-') + '.js';
162
188
 
163
189
  // Load it from the right place.
164
190
  if (window.WebComponents.root) {
165
191
  url = window.WebComponents.root + polyfillFile;
192
+ if (
193
+ window.trustedTypes &&
194
+ window.trustedTypes.isScriptURL(window.WebComponents.root)
195
+ ) {
196
+ url = policy.createScriptURL(url);
197
+ }
166
198
  } else {
167
199
  var script = document.querySelector('script[src*="' + name + '"]');
168
200
  // Load it from the right place.
169
- url = script.src.replace(name, polyfillFile);
201
+ url = policy.createScriptURL(script.src.replace(name, polyfillFile));
170
202
  }
171
203
 
172
204
  var newScript = document.createElement('script');
@@ -176,9 +208,9 @@
176
208
  // make sure custom elements are batched whenever parser gets to the injected script
177
209
  newScript.setAttribute(
178
210
  'onload',
179
- 'window.WebComponents._batchCustomElements()'
211
+ policy.createScript('window.WebComponents._batchCustomElements()')
180
212
  );
181
- document.write(newScript.outerHTML);
213
+ document.write(policy.createHTML(newScript.outerHTML));
182
214
  document.addEventListener('DOMContentLoaded', ready);
183
215
  } else {
184
216
  newScript.addEventListener('load', function () {
package/package.json CHANGED
@@ -1,39 +1,38 @@
1
- {
2
- "name": "@luftborn/custom-elements",
3
- "version": "1.1.44",
4
- "description": "custom HTML elements for the form builder application ",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1",
7
- "prepublish": "tsc --declaration"
8
- },
9
- "main": "dist/index.js",
10
- "types": "dist/index.d.ts",
11
- "author": "Luftborn",
12
- "license": "ISC",
13
- "bundledDependencies": [
14
- "@webcomponents/webcomponentsjs"
15
- ],
16
- "dependencies": {
17
- "@luftborn/utilities": "^1.1.8",
18
- "@types/googlemaps": "^3.39.6",
19
- "@webcomponents/custom-elements": "^1.4.1",
20
- "@webcomponents/webcomponentsjs": "^2.6.0",
21
- "intl-tel-input": "^16.0.8",
22
- "restore": "^0.3.0"
23
- },
24
- "devDependencies": {
25
- "@babel/core": "^7.10.0",
26
- "@types/node": "^14.0.5",
27
- "babelify": "~10.0.0",
28
- "browserify": "~16.5.1",
29
- "gulp": "^4.0.2",
30
- "gulp-rename": "~1.4.0",
31
- "gulp-sourcemaps": "~2.6.5",
32
- "gulp-uglify": "~3.0.2",
33
- "gulp-webserver": "~0.9.1",
34
- "tsify": "~4.0.1",
35
- "typescript": "4.4.3",
36
- "vinyl-buffer": "~1.0.1",
37
- "vinyl-source-stream": "~2.0.0"
38
- }
39
- }
1
+ {
2
+ "name": "@luftborn/custom-elements",
3
+ "version": "1.4.1",
4
+ "description": "custom HTML elements for the form builder application ",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1",
7
+ "prepublish": "tsc --declaration"
8
+ },
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "author": "Luftborn",
12
+ "license": "ISC",
13
+ "bundledDependencies": [
14
+ "@webcomponents/webcomponentsjs"
15
+ ],
16
+ "dependencies": {
17
+ "@types/googlemaps": "^3.39.6",
18
+ "@webcomponents/custom-elements": "^1.4.1",
19
+ "@webcomponents/webcomponentsjs": "^2.4.3",
20
+ "intl-tel-input": "^16.0.8",
21
+ "restore": "^0.3.0"
22
+ },
23
+ "devDependencies": {
24
+ "@babel/core": "^7.10.0",
25
+ "@types/node": "^14.0.5",
26
+ "babelify": "~10.0.0",
27
+ "browserify": "~16.5.1",
28
+ "gulp": "^4.0.2",
29
+ "gulp-rename": "~1.4.0",
30
+ "gulp-sourcemaps": "~2.6.5",
31
+ "gulp-uglify": "~3.0.2",
32
+ "gulp-webserver": "~0.9.1",
33
+ "tsify": "~4.0.1",
34
+ "typescript": "4.4.3",
35
+ "vinyl-buffer": "~1.0.1",
36
+ "vinyl-source-stream": "~2.0.0"
37
+ }
38
+ }
@@ -1,139 +1,140 @@
1
- import { CustomInputElement } from './framework/CustomInputElement';
2
- import { FileFieldElement } from './elements/FileField/FileFieldElement';
3
- import { ArrayUtil, MakeRequest } from '@luftborn/utilities';
4
-
5
- export class CustomForm {
6
- action: string;
7
- method: string;
8
- _nativeInputs: HTMLInputElement[];
9
-
10
- public onsubmit: ((this: CustomForm, promise: Promise<any>) => any) | null;
11
-
12
- constructor(private form: HTMLFormElement) {
13
- this.action = form.action || '';
14
- this.method = form.method || 'get';
15
- this.attachForm();
16
- this.binGroupsToDependency();
17
- }
18
-
19
- get inputs(): CustomInputElement[] {
20
- return ArrayUtil.FromNodeList(this.form.querySelectorAll('.group-container:not([hidden]) [custom-input]:not([hidden])'));
21
- }
22
- get nativeInputs(): HTMLInputElement[] {
23
- this._nativeInputs =
24
- this._nativeInputs ||
25
- ArrayUtil.FromNodeList(this.form.querySelectorAll('input'));
26
- return this._nativeInputs;
27
- }
28
-
29
- get hasFiles(): boolean {
30
- return this.inputs.some(input => input instanceof FileFieldElement);
31
- }
32
-
33
- attachForm() {
34
- this.form.onsubmit = event => {
35
- event.preventDefault();
36
- let valid = this.validate();
37
- if (valid) {
38
- if (this.onsubmit) {
39
- this.onsubmit(this.submit());
40
- }
41
- }
42
- };
43
- }
44
-
45
- validate(): boolean {
46
- this.inputs.forEach(input => (<CustomInputElement>input).validate());
47
- return this.inputs.every(input => (<CustomInputElement>input).valid);
48
- }
49
-
50
- submit(): Promise<any> {
51
- let formData = {};
52
- const headers: any = {};
53
- this.inputs.map(i => (formData[i.name] = i.value));
54
- formData = this.extractData();
55
- return new MakeRequest(this.action, this.method, headers).send(
56
- formData,
57
- );
58
- }
59
- private extractData(): FormData {
60
- const formData: FormData = new FormData();
61
- for (const input of this.inputs) {
62
- if (input instanceof FileFieldElement) {
63
- for (let index = 0; index < input.value.length; index++) {
64
- const file = input.value[index];
65
- formData.append(input.name, file, file.name);
66
- }
67
- } else {
68
- formData.append(`Values[${input.name}]`, input.value);
69
- }
70
- }
71
- for (const input of this.nativeInputs) {
72
- if (input.name) {
73
- formData.append(input.name, input.value);
74
- }
75
- }
76
- return formData;
77
- }
78
-
79
- private binGroupsToDependency() {
80
- let groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])',
81
- );
82
- groupContainers.forEach((element: HTMLElement) => {
83
- let dependentField = element.getAttribute('data-depends-on');
84
- let dependentValue = element.getAttribute('data-dependent-value');
85
- let customElement: CustomInputElement = document.forms[0].querySelector(`[name="${dependentField}"]`) as CustomInputElement;
86
- element.setAttribute("hidden", "");
87
- customElement.onChange.on(event => {
88
- if (event.value === dependentValue || event.value.indexOf(dependentValue) >= 0) {
89
- this.showGroupAndItsDependencies(element);
90
- } else {
91
- this.hideGroupAndItsDependencies(element);
92
- }
93
- });
94
- });
95
- }
96
-
97
- private hideGroupAndItsDependencies(group: Element) {
98
- const inputElementsInsideGroup = this.inputs.filter(input => this.isDescendant(group, input));
99
- group.setAttribute("hidden", "");
100
- let groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
101
- groupContainers.forEach(otherGroup => {
102
- if (otherGroup !== group) {
103
- let groupDependsOnField = otherGroup.getAttribute('data-depends-on');
104
- inputElementsInsideGroup.forEach(input => {
105
- if (input.name === groupDependsOnField) {
106
- this.hideGroupAndItsDependencies(otherGroup);
107
- }
108
- });
109
- }
110
- });
111
- }
112
- private showGroupAndItsDependencies(group: Element) {
113
- group.removeAttribute("hidden");
114
- const inputElementsInsideGroup = this.inputs.filter(input => this.isDescendant(group, input));
115
- let groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
116
- groupContainers.forEach(otherGroup => {
117
- if (otherGroup !== group) {
118
- let groupDependsOnField = otherGroup.getAttribute('data-depends-on');
119
- let dependentValue = otherGroup.getAttribute('data-dependent-value');
120
- inputElementsInsideGroup.forEach(input => {
121
- if (input.name === groupDependsOnField && (input.value === dependentValue || input.value.indexOf(dependentValue) >= 0)) {
122
- this.showGroupAndItsDependencies(otherGroup);
123
- }
124
- });
125
- }
126
- });
127
- }
128
- private isDescendant(parent: Element, child: Element) {
129
- var node = child.parentNode;
130
- while (node != null) {
131
- if (node === parent) {
132
- return true;
133
- }
134
- node = node.parentElement;
135
- }
136
- return false;
137
- }
138
-
139
- }
1
+ import { CustomInputElement } from './framework/CustomInputElement';
2
+ import { FileFieldElement } from './elements/FileField/FileFieldElement';
3
+ import ArrayUtil from './framework/Utilities/ArrayUtil';
4
+ import MakeRequest from './framework/Utilities/MakeRequest';
5
+
6
+ export class CustomForm {
7
+ action: string;
8
+ method: string;
9
+ _nativeInputs: HTMLInputElement[];
10
+
11
+ public onsubmit: ((this: CustomForm, promise: Promise<any>) => any) | null;
12
+
13
+ constructor(private form: HTMLFormElement) {
14
+ this.action = form.action || '';
15
+ this.method = form.method || 'get';
16
+ this.attachForm();
17
+ this.binGroupsToDependency();
18
+ }
19
+
20
+ get inputs(): CustomInputElement[] {
21
+ return ArrayUtil.FromNodeList(this.form.querySelectorAll('.group-container:not([hidden]) [custom-input]:not([hidden])'));
22
+ }
23
+ get nativeInputs(): HTMLInputElement[] {
24
+ this._nativeInputs =
25
+ this._nativeInputs ||
26
+ ArrayUtil.FromNodeList(this.form.querySelectorAll('input'));
27
+ return this._nativeInputs;
28
+ }
29
+
30
+ get hasFiles(): boolean {
31
+ return this.inputs.some(input => input instanceof FileFieldElement);
32
+ }
33
+
34
+ attachForm() {
35
+ this.form.onsubmit = event => {
36
+ event.preventDefault();
37
+ let valid = this.validate();
38
+ if (valid) {
39
+ if (this.onsubmit) {
40
+ this.onsubmit(this.submit());
41
+ }
42
+ }
43
+ };
44
+ }
45
+
46
+ validate(): boolean {
47
+ this.inputs.forEach(input => (<CustomInputElement>input).validate());
48
+ return this.inputs.every(input => (<CustomInputElement>input).valid);
49
+ }
50
+
51
+ submit(): Promise<any> {
52
+ let formData = {};
53
+ const headers: any = {};
54
+ this.inputs.map(i => (formData[i.name] = i.value));
55
+ formData = this.extractData();
56
+ return new MakeRequest(this.action, this.method, headers).send(
57
+ formData,
58
+ );
59
+ }
60
+ private extractData(): FormData {
61
+ const formData: FormData = new FormData();
62
+ for (const input of this.inputs) {
63
+ if (input instanceof FileFieldElement) {
64
+ for (let index = 0; index < input.value.length; index++) {
65
+ const file = input.value[index];
66
+ formData.append(input.name, file, file.name);
67
+ }
68
+ } else {
69
+ formData.append(`Values[${input.name}]`, input.value);
70
+ }
71
+ }
72
+ for (const input of this.nativeInputs) {
73
+ if (input.name) {
74
+ formData.append(input.name, input.value);
75
+ }
76
+ }
77
+ return formData;
78
+ }
79
+
80
+ private binGroupsToDependency() {
81
+ let groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])',
82
+ );
83
+ groupContainers.forEach((element: HTMLElement) => {
84
+ let dependentField = element.getAttribute('data-depends-on');
85
+ let dependentValue = element.getAttribute('data-dependent-value');
86
+ let customElement: CustomInputElement = document.forms[0].querySelector(`[name="${dependentField}"]`) as CustomInputElement;
87
+ element.setAttribute("hidden", "");
88
+ customElement.onChange.on(event => {
89
+ if (event.value === dependentValue || event.value.indexOf(dependentValue) >= 0) {
90
+ this.showGroupAndItsDependencies(element);
91
+ } else {
92
+ this.hideGroupAndItsDependencies(element);
93
+ }
94
+ });
95
+ });
96
+ }
97
+
98
+ private hideGroupAndItsDependencies(group: Element) {
99
+ const inputElementsInsideGroup = this.inputs.filter(input => this.isDescendant(group, input));
100
+ group.setAttribute("hidden", "");
101
+ let groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
102
+ groupContainers.forEach(otherGroup => {
103
+ if (otherGroup !== group) {
104
+ let groupDependsOnField = otherGroup.getAttribute('data-depends-on');
105
+ inputElementsInsideGroup.forEach(input => {
106
+ if (input.name === groupDependsOnField) {
107
+ this.hideGroupAndItsDependencies(otherGroup);
108
+ }
109
+ });
110
+ }
111
+ });
112
+ }
113
+ private showGroupAndItsDependencies(group: Element) {
114
+ group.removeAttribute("hidden");
115
+ const inputElementsInsideGroup = this.inputs.filter(input => this.isDescendant(group, input));
116
+ let groupContainers = this.form.querySelectorAll('div.group-container:not([data-depends-on=""])');
117
+ groupContainers.forEach(otherGroup => {
118
+ if (otherGroup !== group) {
119
+ let groupDependsOnField = otherGroup.getAttribute('data-depends-on');
120
+ let dependentValue = otherGroup.getAttribute('data-dependent-value');
121
+ inputElementsInsideGroup.forEach(input => {
122
+ if (input.name === groupDependsOnField && (input.value === dependentValue || input.value.indexOf(dependentValue) >= 0)) {
123
+ this.showGroupAndItsDependencies(otherGroup);
124
+ }
125
+ });
126
+ }
127
+ });
128
+ }
129
+ private isDescendant(parent: Element, child: Element) {
130
+ var node = child.parentNode;
131
+ while (node != null) {
132
+ if (node === parent) {
133
+ return true;
134
+ }
135
+ node = node.parentElement;
136
+ }
137
+ return false;
138
+ }
139
+
140
+ }