@4site/engrid-scripts 0.19.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 (189) hide show
  1. package/.prettierrc.js +226 -0
  2. package/LICENSE +24 -0
  3. package/dist/a11y.d.ts +6 -0
  4. package/dist/a11y.js +46 -0
  5. package/dist/add-name-to-message.d.ts +5 -0
  6. package/dist/add-name-to-message.js +49 -0
  7. package/dist/advocacy.d.ts +7 -0
  8. package/dist/advocacy.js +34 -0
  9. package/dist/amount-label.d.ts +6 -0
  10. package/dist/amount-label.js +29 -0
  11. package/dist/app.d.ts +19 -0
  12. package/dist/app.js +340 -0
  13. package/dist/apple-pay.d.ts +13 -0
  14. package/dist/apple-pay.js +169 -0
  15. package/dist/auto-country-select.d.ts +10 -0
  16. package/dist/auto-country-select.js +63 -0
  17. package/dist/auto-year.d.ts +7 -0
  18. package/dist/auto-year.js +35 -0
  19. package/dist/autocomplete.d.ts +5 -0
  20. package/dist/autocomplete.js +38 -0
  21. package/dist/autosubmit.d.ts +5 -0
  22. package/dist/autosubmit.js +14 -0
  23. package/dist/branding-html.d.ts +14 -0
  24. package/dist/branding-html.js +70 -0
  25. package/dist/capitalize-fields.d.ts +7 -0
  26. package/dist/capitalize-fields.js +22 -0
  27. package/dist/click-to-expand.d.ts +4 -0
  28. package/dist/click-to-expand.js +39 -0
  29. package/dist/cookie.d.ts +53 -0
  30. package/dist/cookie.js +76 -0
  31. package/dist/country-disable.d.ts +4 -0
  32. package/dist/country-disable.js +22 -0
  33. package/dist/country-redirect.d.ts +7 -0
  34. package/dist/country-redirect.js +61 -0
  35. package/dist/custom-currency.d.ts +9 -0
  36. package/dist/custom-currency.js +112 -0
  37. package/dist/data-attributes.d.ts +5 -0
  38. package/dist/data-attributes.js +122 -0
  39. package/dist/data-hide.d.ts +15 -0
  40. package/dist/data-hide.js +66 -0
  41. package/dist/data-layer.d.ts +23 -0
  42. package/dist/data-layer.js +312 -0
  43. package/dist/data-replace.d.ts +26 -0
  44. package/dist/data-replace.js +76 -0
  45. package/dist/debug-hidden-fields.d.ts +4 -0
  46. package/dist/debug-hidden-fields.js +42 -0
  47. package/dist/debug-panel.d.ts +27 -0
  48. package/dist/debug-panel.js +508 -0
  49. package/dist/deprecated.d.ts +5 -0
  50. package/dist/deprecated.js +40 -0
  51. package/dist/digital-wallets.d.ts +8 -0
  52. package/dist/digital-wallets.js +143 -0
  53. package/dist/ecard-to-target.d.ts +11 -0
  54. package/dist/ecard-to-target.js +73 -0
  55. package/dist/ecard.d.ts +8 -0
  56. package/dist/ecard.js +61 -0
  57. package/dist/embedded-ecard.d.ts +18 -0
  58. package/dist/embedded-ecard.js +267 -0
  59. package/dist/en-validators.d.ts +10 -0
  60. package/dist/en-validators.js +89 -0
  61. package/dist/engrid.d.ts +49 -0
  62. package/dist/engrid.js +547 -0
  63. package/dist/event-tickets.d.ts +3 -0
  64. package/dist/event-tickets.js +24 -0
  65. package/dist/events/country.d.ts +12 -0
  66. package/dist/events/country.js +42 -0
  67. package/dist/events/donation-amount.d.ts +16 -0
  68. package/dist/events/donation-amount.js +119 -0
  69. package/dist/events/donation-frequency.d.ts +17 -0
  70. package/dist/events/donation-frequency.js +115 -0
  71. package/dist/events/en-form.d.ts +20 -0
  72. package/dist/events/en-form.js +52 -0
  73. package/dist/events/index.d.ts +6 -0
  74. package/dist/events/index.js +6 -0
  75. package/dist/events/processing-fees.d.ts +20 -0
  76. package/dist/events/processing-fees.js +92 -0
  77. package/dist/events/remember-me-events.d.ts +18 -0
  78. package/dist/events/remember-me-events.js +36 -0
  79. package/dist/exit-intent-lightbox.d.ts +14 -0
  80. package/dist/exit-intent-lightbox.js +145 -0
  81. package/dist/expand-region-name.d.ts +7 -0
  82. package/dist/expand-region-name.js +44 -0
  83. package/dist/fast-form-fill.d.ts +8 -0
  84. package/dist/fast-form-fill.js +75 -0
  85. package/dist/freshaddress.d.ts +18 -0
  86. package/dist/freshaddress.js +204 -0
  87. package/dist/give-by-select.d.ts +9 -0
  88. package/dist/give-by-select.js +82 -0
  89. package/dist/iframe.d.ts +16 -0
  90. package/dist/iframe.js +217 -0
  91. package/dist/index.d.ts +82 -0
  92. package/dist/index.js +84 -0
  93. package/dist/input-has-value-and-focus.d.ts +9 -0
  94. package/dist/input-has-value-and-focus.js +50 -0
  95. package/dist/input-placeholders.d.ts +7 -0
  96. package/dist/input-placeholders.js +82 -0
  97. package/dist/interfaces/ecard-to-target-options.d.ts +9 -0
  98. package/dist/interfaces/ecard-to-target-options.js +8 -0
  99. package/dist/interfaces/embedded-ecard-options.d.ts +8 -0
  100. package/dist/interfaces/embedded-ecard-options.js +7 -0
  101. package/dist/interfaces/exit-intent-options.d.ts +13 -0
  102. package/dist/interfaces/exit-intent-options.js +13 -0
  103. package/dist/interfaces/options.d.ts +147 -0
  104. package/dist/interfaces/options.js +50 -0
  105. package/dist/interfaces/translate-options.d.ts +7 -0
  106. package/dist/interfaces/translate-options.js +42 -0
  107. package/dist/interfaces/upsell-options.d.ts +24 -0
  108. package/dist/interfaces/upsell-options.js +33 -0
  109. package/dist/live-currency.d.ts +15 -0
  110. package/dist/live-currency.js +140 -0
  111. package/dist/live-frequency.d.ts +13 -0
  112. package/dist/live-frequency.js +109 -0
  113. package/dist/live-variables.d.ts +21 -0
  114. package/dist/live-variables.js +147 -0
  115. package/dist/loader.d.ts +10 -0
  116. package/dist/loader.js +175 -0
  117. package/dist/logger.d.ts +16 -0
  118. package/dist/logger.js +84 -0
  119. package/dist/media-attribution.d.ts +4 -0
  120. package/dist/media-attribution.js +66 -0
  121. package/dist/menu.d.ts +0 -0
  122. package/dist/menu.js +1 -0
  123. package/dist/min-max-amount.d.ts +13 -0
  124. package/dist/min-max-amount.js +71 -0
  125. package/dist/mobile-cta.d.ts +9 -0
  126. package/dist/mobile-cta.js +71 -0
  127. package/dist/modal.d.ts +19 -0
  128. package/dist/modal.js +129 -0
  129. package/dist/neverbounce.d.ts +23 -0
  130. package/dist/neverbounce.js +244 -0
  131. package/dist/other-amount.d.ts +6 -0
  132. package/dist/other-amount.js +70 -0
  133. package/dist/page-background.d.ts +7 -0
  134. package/dist/page-background.js +55 -0
  135. package/dist/plaid.d.ts +6 -0
  136. package/dist/plaid.js +49 -0
  137. package/dist/postal-code-validator.d.ts +20 -0
  138. package/dist/postal-code-validator.js +118 -0
  139. package/dist/premium-gift.d.ts +10 -0
  140. package/dist/premium-gift.js +115 -0
  141. package/dist/progress-bar.d.ts +3 -0
  142. package/dist/progress-bar.js +40 -0
  143. package/dist/remember-me.d.ts +61 -0
  144. package/dist/remember-me.js +358 -0
  145. package/dist/required-if-visible.d.ts +8 -0
  146. package/dist/required-if-visible.js +60 -0
  147. package/dist/set-attr.d.ts +4 -0
  148. package/dist/set-attr.js +31 -0
  149. package/dist/set-recurr-freq.d.ts +7 -0
  150. package/dist/set-recurr-freq.js +70 -0
  151. package/dist/show-hide-radio-checkboxes.d.ts +13 -0
  152. package/dist/show-hide-radio-checkboxes.js +161 -0
  153. package/dist/show-if-amount.d.ts +15 -0
  154. package/dist/show-if-amount.js +117 -0
  155. package/dist/show-if-present.d.ts +7 -0
  156. package/dist/show-if-present.js +79 -0
  157. package/dist/skip-link.d.ts +4 -0
  158. package/dist/skip-link.js +36 -0
  159. package/dist/src-defer.d.ts +6 -0
  160. package/dist/src-defer.js +70 -0
  161. package/dist/supporter-hub.d.ts +9 -0
  162. package/dist/supporter-hub.js +75 -0
  163. package/dist/swap-amounts.d.ts +45 -0
  164. package/dist/swap-amounts.js +81 -0
  165. package/dist/thank-you-page-conditional-content.d.ts +8 -0
  166. package/dist/thank-you-page-conditional-content.js +46 -0
  167. package/dist/ticker.d.ts +11 -0
  168. package/dist/ticker.js +66 -0
  169. package/dist/tidycontact.d.ts +46 -0
  170. package/dist/tidycontact.js +1202 -0
  171. package/dist/translate-fields.d.ts +12 -0
  172. package/dist/translate-fields.js +548 -0
  173. package/dist/universal-opt-in.d.ts +7 -0
  174. package/dist/universal-opt-in.js +91 -0
  175. package/dist/upsell-lightbox.d.ts +31 -0
  176. package/dist/upsell-lightbox.js +363 -0
  177. package/dist/url-params-to-body-attrs.d.ts +5 -0
  178. package/dist/url-params-to-body-attrs.js +14 -0
  179. package/dist/url-to-form.d.ts +7 -0
  180. package/dist/url-to-form.js +32 -0
  181. package/dist/us-only-form.d.ts +4 -0
  182. package/dist/us-only-form.js +30 -0
  183. package/dist/version.d.ts +1 -0
  184. package/dist/version.js +1 -0
  185. package/dist/vgs.d.ts +16 -0
  186. package/dist/vgs.js +250 -0
  187. package/dist/welcome-back.d.ts +10 -0
  188. package/dist/welcome-back.js +112 -0
  189. package/package.json +32 -0
@@ -0,0 +1,12 @@
1
+ export declare class TranslateFields {
2
+ private countryToStateFields;
3
+ countriesSelect: NodeListOf<HTMLSelectElement>;
4
+ private options;
5
+ constructor();
6
+ private translateFields;
7
+ private translateField;
8
+ private resetTranslatedFields;
9
+ private setStateField;
10
+ private setStateValues;
11
+ private rememberState;
12
+ }
@@ -0,0 +1,548 @@
1
+ // Component to translate fields based on the country selected
2
+ // It will also adapt the state field to the country selected
3
+ import { ENGrid, TranslateOptionsDefaults } from ".";
4
+ import * as cookie from "./cookie";
5
+ export class TranslateFields {
6
+ constructor() {
7
+ this.countryToStateFields = {
8
+ "supporter.country": "supporter.region",
9
+ "transaction.shipcountry": "transaction.shipregion",
10
+ "supporter.billingCountry": "supporter.billingRegion",
11
+ "transaction.infcountry": "transaction.infreg",
12
+ };
13
+ this.countriesSelect = document.querySelectorAll('select[name="supporter.country"], select[name="transaction.shipcountry"], select[name="supporter.billingCountry"], select[name="transaction.infcountry"]');
14
+ let options = "EngridTranslate" in window ? window.EngridTranslate : {};
15
+ this.options = TranslateOptionsDefaults;
16
+ // Don't run this for US-only forms.
17
+ if (document.querySelector(".en__component--formblock.us-only-form .en__field--country")) {
18
+ return;
19
+ }
20
+ if (options) {
21
+ for (let key in options) {
22
+ this.options[key] = this.options[key]
23
+ ? [...this.options[key], ...options[key]]
24
+ : options[key];
25
+ }
26
+ }
27
+ //Storing these values on load so we can set them back after the translation/swap.
28
+ let countryAndStateValuesOnLoad = {};
29
+ if (this.countriesSelect) {
30
+ this.countriesSelect.forEach((select) => {
31
+ select.addEventListener("change", this.translateFields.bind(this, select.name));
32
+ if (select.value) {
33
+ countryAndStateValuesOnLoad[select.name] = select.value;
34
+ }
35
+ const stateField = document.querySelector(`select[name="${this.countryToStateFields[select.name]}"]`);
36
+ if (stateField) {
37
+ stateField.addEventListener("change", this.rememberState.bind(this, select.name));
38
+ if (stateField.value) {
39
+ countryAndStateValuesOnLoad[stateField.name] = stateField.value;
40
+ }
41
+ }
42
+ });
43
+ this.translateFields("supporter.country");
44
+ //dont set these back if submission failed. EN / cookie will handle it.
45
+ const submissionFailed = !!(ENGrid.checkNested(window.EngagingNetworks, "require", "_defined", "enjs", "checkSubmissionFailed") &&
46
+ window.EngagingNetworks.require._defined.enjs.checkSubmissionFailed());
47
+ if (!submissionFailed) {
48
+ for (let field in countryAndStateValuesOnLoad) {
49
+ ENGrid.setFieldValue(field, countryAndStateValuesOnLoad[field], false);
50
+ }
51
+ }
52
+ }
53
+ }
54
+ translateFields(countryName = "supporter.country") {
55
+ this.resetTranslatedFields();
56
+ const countryValue = ENGrid.getFieldValue(countryName);
57
+ // Translate the State Field
58
+ this.setStateField(countryValue, this.countryToStateFields[countryName]);
59
+ if (countryName === "supporter.country") {
60
+ if (countryValue in this.options) {
61
+ this.options[countryValue].forEach((field) => {
62
+ // console.log(field);
63
+ this.translateField(field.field, field.translation);
64
+ });
65
+ }
66
+ // Translate the "To:"
67
+ const recipient_block = document.querySelectorAll(".recipient-block");
68
+ if (!!recipient_block.length) {
69
+ switch (countryValue) {
70
+ case "FR":
71
+ case "FRA":
72
+ case "France":
73
+ recipient_block.forEach((elem) => (elem.innerHTML = "À:"));
74
+ break;
75
+ case "DE":
76
+ case "DEU":
77
+ case "Germany":
78
+ recipient_block.forEach((elem) => (elem.innerHTML = "Zu:"));
79
+ break;
80
+ case "NL":
81
+ case "NLD":
82
+ case "Netherlands":
83
+ recipient_block.forEach((elem) => (elem.innerHTML = "Aan:"));
84
+ break;
85
+ }
86
+ }
87
+ }
88
+ }
89
+ translateField(name, translation) {
90
+ const field = document.querySelector(`[name="${name}"]`);
91
+ if (field) {
92
+ const fieldWrapper = field.closest(".en__field");
93
+ if (fieldWrapper) {
94
+ const fieldLabel = fieldWrapper.querySelector(".en__field__label");
95
+ // Check if there's the simple country select class
96
+ const simplecountriesSelect = fieldLabel.querySelector(".engrid-simple-country");
97
+ let simplecountriesSelectClone = simplecountriesSelect
98
+ ? simplecountriesSelect.cloneNode(true)
99
+ : null;
100
+ if (field instanceof HTMLInputElement && field.placeholder != "") {
101
+ if (!fieldLabel || fieldLabel.innerHTML == field.placeholder) {
102
+ field.dataset.original = field.placeholder;
103
+ field.placeholder = translation;
104
+ }
105
+ }
106
+ if (fieldLabel) {
107
+ fieldLabel.dataset.original = fieldLabel.innerHTML;
108
+ fieldLabel.innerHTML = translation;
109
+ if (simplecountriesSelectClone) {
110
+ fieldLabel.appendChild(simplecountriesSelectClone);
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }
116
+ resetTranslatedFields() {
117
+ const fields = document.querySelectorAll("[data-original]");
118
+ fields.forEach((field) => {
119
+ if (field instanceof HTMLInputElement && field.dataset.original) {
120
+ field.placeholder = field.dataset.original;
121
+ }
122
+ else {
123
+ // Check if there's the simple country select class
124
+ const simplecountriesSelect = field.querySelector(".engrid-simple-country");
125
+ let simplecountriesSelectClone = simplecountriesSelect
126
+ ? simplecountriesSelect.cloneNode(true)
127
+ : null;
128
+ field.innerHTML = field.dataset.original;
129
+ if (simplecountriesSelectClone) {
130
+ field.appendChild(simplecountriesSelectClone);
131
+ }
132
+ }
133
+ field.removeAttribute("data-original");
134
+ });
135
+ }
136
+ setStateField(country, state) {
137
+ switch (country) {
138
+ case "ES":
139
+ case "ESP":
140
+ case "Spain":
141
+ this.setStateValues(state, "Provincia", null);
142
+ break;
143
+ case "BR":
144
+ case "BRA":
145
+ case "Brazil":
146
+ this.setStateValues(state, "Estado", null);
147
+ break;
148
+ case "FR":
149
+ case "FRA":
150
+ case "France":
151
+ this.setStateValues(state, "Région", null);
152
+ break;
153
+ case "GB":
154
+ case "GBR":
155
+ case "United Kingdom":
156
+ this.setStateValues(state, "State/Region", null);
157
+ break;
158
+ case "DE":
159
+ case "DEU":
160
+ case "Germany":
161
+ this.setStateValues(state, "Bundesland", null);
162
+ break;
163
+ case "NL":
164
+ case "NLD":
165
+ case "Netherlands":
166
+ this.setStateValues(state, "Provincie", null);
167
+ break;
168
+ case "AU":
169
+ case "AUS":
170
+ this.setStateValues(state, "Province / State", [
171
+ { label: "Select", value: "" },
172
+ { label: "New South Wales", value: "NSW" },
173
+ { label: "Victoria", value: "VIC" },
174
+ { label: "Queensland", value: "QLD" },
175
+ { label: "South Australia", value: "SA" },
176
+ { label: "Western Australia", value: "WA" },
177
+ { label: "Tasmania", value: "TAS" },
178
+ { label: "Northern Territory", value: "NT" },
179
+ { label: "Australian Capital Territory", value: "ACT" },
180
+ ]);
181
+ break;
182
+ case "Australia":
183
+ this.setStateValues(state, "Province / State", [
184
+ { label: "Select", value: "" },
185
+ { label: "New South Wales", value: "New South Wales" },
186
+ { label: "Victoria", value: "Victoria" },
187
+ { label: "Queensland", value: "Queensland" },
188
+ { label: "South Australia", value: "South Australia" },
189
+ { label: "Western Australia", value: "Western Australia" },
190
+ { label: "Tasmania", value: "Tasmania" },
191
+ { label: "Northern Territory", value: "Northern Territory" },
192
+ {
193
+ label: "Australian Capital Territory",
194
+ value: "Australian Capital Territory",
195
+ },
196
+ ]);
197
+ break;
198
+ case "US":
199
+ case "USA":
200
+ this.setStateValues(state, "State", [
201
+ { label: "Select State", value: "" },
202
+ { label: "Alabama", value: "AL" },
203
+ { label: "Alaska", value: "AK" },
204
+ { label: "Arizona", value: "AZ" },
205
+ { label: "Arkansas", value: "AR" },
206
+ { label: "California", value: "CA" },
207
+ { label: "Colorado", value: "CO" },
208
+ { label: "Connecticut", value: "CT" },
209
+ { label: "Delaware", value: "DE" },
210
+ { label: "District of Columbia", value: "DC" },
211
+ { label: "Florida", value: "FL" },
212
+ { label: "Georgia", value: "GA" },
213
+ { label: "Hawaii", value: "HI" },
214
+ { label: "Idaho", value: "ID" },
215
+ { label: "Illinois", value: "IL" },
216
+ { label: "Indiana", value: "IN" },
217
+ { label: "Iowa", value: "IA" },
218
+ { label: "Kansas", value: "KS" },
219
+ { label: "Kentucky", value: "KY" },
220
+ { label: "Louisiana", value: "LA" },
221
+ { label: "Maine", value: "ME" },
222
+ { label: "Maryland", value: "MD" },
223
+ { label: "Massachusetts", value: "MA" },
224
+ { label: "Michigan", value: "MI" },
225
+ { label: "Minnesota", value: "MN" },
226
+ { label: "Mississippi", value: "MS" },
227
+ { label: "Missouri", value: "MO" },
228
+ { label: "Montana", value: "MT" },
229
+ { label: "Nebraska", value: "NE" },
230
+ { label: "Nevada", value: "NV" },
231
+ { label: "New Hampshire", value: "NH" },
232
+ { label: "New Jersey", value: "NJ" },
233
+ { label: "New Mexico", value: "NM" },
234
+ { label: "New York", value: "NY" },
235
+ { label: "North Carolina", value: "NC" },
236
+ { label: "North Dakota", value: "ND" },
237
+ { label: "Ohio", value: "OH" },
238
+ { label: "Oklahoma", value: "OK" },
239
+ { label: "Oregon", value: "OR" },
240
+ { label: "Pennsylvania", value: "PA" },
241
+ { label: "Rhode Island", value: "RI" },
242
+ { label: "South Carolina", value: "SC" },
243
+ { label: "South Dakota", value: "SD" },
244
+ { label: "Tennessee", value: "TN" },
245
+ { label: "Texas", value: "TX" },
246
+ { label: "Utah", value: "UT" },
247
+ { label: "Vermont", value: "VT" },
248
+ { label: "Virginia", value: "VA" },
249
+ { label: "Washington", value: "WA" },
250
+ { label: "West Virginia", value: "WV" },
251
+ { label: "Wisconsin", value: "WI" },
252
+ { label: "Wyoming", value: "WY" },
253
+ {
254
+ label: "&#9472&#9472&nbspUS&nbspTerritories&nbsp&#9472&#9472",
255
+ value: "",
256
+ disabled: true,
257
+ },
258
+ { label: "American Samoa", value: "AS" },
259
+ { label: "Guam", value: "GU" },
260
+ { label: "Northern Mariana Islands", value: "MP" },
261
+ { label: "Puerto Rico", value: "PR" },
262
+ { label: "US Minor Outlying Islands", value: "UM" },
263
+ { label: "Virgin Islands", value: "VI" },
264
+ {
265
+ label: "&#9472&#9472&nbspArmed&nbspForces&nbsp&#9472&#9472",
266
+ value: "",
267
+ disabled: true,
268
+ },
269
+ { label: "Armed Forces Americas", value: "AA" },
270
+ { label: "Armed Forces Africa", value: "AE" },
271
+ { label: "Armed Forces Canada", value: "AE" },
272
+ { label: "Armed Forces Europe", value: "AE" },
273
+ { label: "Armed Forces Middle East", value: "AE" },
274
+ { label: "Armed Forces Pacific", value: "AP" },
275
+ ]);
276
+ break;
277
+ case "United States":
278
+ this.setStateValues(state, "State", [
279
+ { label: "Select State", value: "" },
280
+ { label: "Alabama", value: "Alabama" },
281
+ { label: "Alaska", value: "Alaska" },
282
+ { label: "Arizona", value: "Arizona" },
283
+ { label: "Arkansas", value: "Arkansas" },
284
+ { label: "California", value: "California" },
285
+ { label: "Colorado", value: "Colorado" },
286
+ { label: "Connecticut", value: "Connecticut" },
287
+ { label: "Delaware", value: "Delaware" },
288
+ { label: "District of Columbia", value: "District of Columbia" },
289
+ { label: "Florida", value: "Florida" },
290
+ { label: "Georgia", value: "Georgia" },
291
+ { label: "Hawaii", value: "Hawaii" },
292
+ { label: "Idaho", value: "Idaho" },
293
+ { label: "Illinois", value: "Illinois" },
294
+ { label: "Indiana", value: "Indiana" },
295
+ { label: "Iowa", value: "Iowa" },
296
+ { label: "Kansas", value: "Kansas" },
297
+ { label: "Kentucky", value: "Kentucky" },
298
+ { label: "Louisiana", value: "Louisiana" },
299
+ { label: "Maine", value: "Maine" },
300
+ { label: "Maryland", value: "Maryland" },
301
+ { label: "Massachusetts", value: "Massachusetts" },
302
+ { label: "Michigan", value: "Michigan" },
303
+ { label: "Minnesota", value: "Minnesota" },
304
+ { label: "Mississippi", value: "Mississippi" },
305
+ { label: "Missouri", value: "Missouri" },
306
+ { label: "Montana", value: "Montana" },
307
+ { label: "Nebraska", value: "Nebraska" },
308
+ { label: "Nevada", value: "Nevada" },
309
+ { label: "New Hampshire", value: "New Hampshire" },
310
+ { label: "New Jersey", value: "New Jersey" },
311
+ { label: "New Mexico", value: "New Mexico" },
312
+ { label: "New York", value: "New York" },
313
+ { label: "North Carolina", value: "North Carolina" },
314
+ { label: "North Dakota", value: "North Dakota" },
315
+ { label: "Ohio", value: "Ohio" },
316
+ { label: "Oklahoma", value: "Oklahoma" },
317
+ { label: "Oregon", value: "Oregon" },
318
+ { label: "Pennsylvania", value: "Pennsylvania" },
319
+ { label: "Rhode Island", value: "Rhode Island" },
320
+ { label: "South Carolina", value: "South Carolina" },
321
+ { label: "South Dakota", value: "South Dakota" },
322
+ { label: "Tennessee", value: "Tennessee" },
323
+ { label: "Texas", value: "Texas" },
324
+ { label: "Utah", value: "Utah" },
325
+ { label: "Vermont", value: "Vermont" },
326
+ { label: "Virginia", value: "Virginia" },
327
+ { label: "Washington", value: "Washington" },
328
+ { label: "West Virginia", value: "West Virginia" },
329
+ { label: "Wisconsin", value: "Wisconsin" },
330
+ { label: "Wyoming", value: "Wyoming" },
331
+ {
332
+ label: "&#9472&#9472&nbspUS&nbspTerritories&nbsp&#9472&#9472",
333
+ value: "",
334
+ disabled: true,
335
+ },
336
+ { label: "American Samoa", value: "American Samoa" },
337
+ { label: "Guam", value: "Guam" },
338
+ {
339
+ label: "Northern Mariana Islands",
340
+ value: "Northern Mariana Islands",
341
+ },
342
+ { label: "Puerto Rico", value: "Puerto Rico" },
343
+ {
344
+ label: "US Minor Outlying Islands",
345
+ value: "US Minor Outlying Islands",
346
+ },
347
+ { label: "Virgin Islands", value: "Virgin Islands" },
348
+ {
349
+ label: "&#9472&#9472&nbspArmed&nbspForces&nbsp&#9472&#9472",
350
+ value: "",
351
+ disabled: true,
352
+ },
353
+ { label: "Armed Forces Americas", value: "Armed Forces Americas" },
354
+ { label: "Armed Forces Africa", value: "Armed Forces Africa" },
355
+ { label: "Armed Forces Canada", value: "Armed Forces Canada" },
356
+ { label: "Armed Forces Europe", value: "Armed Forces Europe" },
357
+ {
358
+ label: "Armed Forces Middle East",
359
+ value: "Armed Forces Middle East",
360
+ },
361
+ { label: "Armed Forces Pacific", value: "Armed Forces Pacific" },
362
+ ]);
363
+ break;
364
+ case "CA":
365
+ case "CAN":
366
+ this.setStateValues(state, "Province / Territory", [
367
+ { label: "Select", value: "" },
368
+ { label: "Alberta", value: "AB" },
369
+ { label: "British Columbia", value: "BC" },
370
+ { label: "Manitoba", value: "MB" },
371
+ { label: "New Brunswick", value: "NB" },
372
+ { label: "Newfoundland and Labrador", value: "NL" },
373
+ { label: "Northwest Territories", value: "NT" },
374
+ { label: "Nova Scotia", value: "NS" },
375
+ { label: "Nunavut", value: "NU" },
376
+ { label: "Ontario", value: "ON" },
377
+ { label: "Prince Edward Island", value: "PE" },
378
+ { label: "Quebec", value: "QC" },
379
+ { label: "Saskatchewan", value: "SK" },
380
+ { label: "Yukon", value: "YT" },
381
+ ]);
382
+ break;
383
+ case "Canada":
384
+ this.setStateValues(state, "Province / Territory", [
385
+ { label: "Select", value: "" },
386
+ { label: "Alberta", value: "Alberta" },
387
+ { label: "British Columbia", value: "British Columbia" },
388
+ { label: "Manitoba", value: "Manitoba" },
389
+ { label: "New Brunswick", value: "New Brunswick" },
390
+ {
391
+ label: "Newfoundland and Labrador",
392
+ value: "Newfoundland and Labrador",
393
+ },
394
+ { label: "Northwest Territories", value: "Northwest Territories" },
395
+ { label: "Nova Scotia", value: "Nova Scotia" },
396
+ { label: "Nunavut", value: "Nunavut" },
397
+ { label: "Ontario", value: "Ontario" },
398
+ { label: "Prince Edward Island", value: "Prince Edward Island" },
399
+ { label: "Quebec", value: "Quebec" },
400
+ { label: "Saskatchewan", value: "Saskatchewan" },
401
+ { label: "Yukon", value: "Yukon" },
402
+ ]);
403
+ break;
404
+ case "MX":
405
+ case "MEX":
406
+ this.setStateValues(state, "Estado", [
407
+ { label: "Seleccione Estado", value: "" },
408
+ { label: "Aguascalientes", value: "AGU" },
409
+ { label: "Baja California", value: "BCN" },
410
+ { label: "Baja California Sur", value: "BCS" },
411
+ { label: "Campeche", value: "CAM" },
412
+ { label: "Chiapas", value: "CHP" },
413
+ { label: "Ciudad de Mexico", value: "CMX" },
414
+ { label: "Chihuahua", value: "CHH" },
415
+ { label: "Coahuila", value: "COA" },
416
+ { label: "Colima", value: "COL" },
417
+ { label: "Durango", value: "DUR" },
418
+ { label: "Guanajuato", value: "GUA" },
419
+ { label: "Guerrero", value: "GRO" },
420
+ { label: "Hidalgo", value: "HID" },
421
+ { label: "Jalisco", value: "JAL" },
422
+ { label: "Michoacan", value: "MIC" },
423
+ { label: "Morelos", value: "MOR" },
424
+ { label: "Nayarit", value: "NAY" },
425
+ { label: "Nuevo Leon", value: "NLE" },
426
+ { label: "Oaxaca", value: "OAX" },
427
+ { label: "Puebla", value: "PUE" },
428
+ { label: "Queretaro", value: "QUE" },
429
+ { label: "Quintana Roo", value: "ROO" },
430
+ { label: "San Luis Potosi", value: "SLP" },
431
+ { label: "Sinaloa", value: "SIN" },
432
+ { label: "Sonora", value: "SON" },
433
+ { label: "Tabasco", value: "TAB" },
434
+ { label: "Tamaulipas", value: "TAM" },
435
+ { label: "Tlaxcala", value: "TLA" },
436
+ { label: "Veracruz", value: "VER" },
437
+ { label: "Yucatan", value: "YUC" },
438
+ { label: "Zacatecas", value: "ZAC" },
439
+ ]);
440
+ break;
441
+ case "Mexico":
442
+ this.setStateValues(state, "Estado", [
443
+ { label: "Seleccione Estado", value: "" },
444
+ { label: "Aguascalientes", value: "Aguascalientes" },
445
+ { label: "Baja California", value: "Baja California" },
446
+ { label: "Baja California Sur", value: "Baja California Sur" },
447
+ { label: "Campeche", value: "Campeche" },
448
+ { label: "Chiapas", value: "Chiapas" },
449
+ { label: "Ciudad de Mexico", value: "Ciudad de Mexico" },
450
+ { label: "Chihuahua", value: "Chihuahua" },
451
+ { label: "Coahuila", value: "Coahuila" },
452
+ { label: "Colima", value: "Colima" },
453
+ { label: "Durango", value: "Durango" },
454
+ { label: "Guanajuato", value: "Guanajuato" },
455
+ { label: "Guerrero", value: "Guerrero" },
456
+ { label: "Hidalgo", value: "Hidalgo" },
457
+ { label: "Jalisco", value: "Jalisco" },
458
+ { label: "Michoacan", value: "Michoacan" },
459
+ { label: "Morelos", value: "Morelos" },
460
+ { label: "Nayarit", value: "Nayarit" },
461
+ { label: "Nuevo Leon", value: "Nuevo Leon" },
462
+ { label: "Oaxaca", value: "Oaxaca" },
463
+ { label: "Puebla", value: "Puebla" },
464
+ { label: "Queretaro", value: "Queretaro" },
465
+ { label: "Quintana Roo", value: "Quintana Roo" },
466
+ { label: "San Luis Potosi", value: "San Luis Potosi" },
467
+ { label: "Sinaloa", value: "Sinaloa" },
468
+ { label: "Sonora", value: "Sonora" },
469
+ { label: "Tabasco", value: "Tabasco" },
470
+ { label: "Tamaulipas", value: "Tamaulipas" },
471
+ { label: "Tlaxcala", value: "Tlaxcala" },
472
+ { label: "Veracruz", value: "Veracruz" },
473
+ { label: "Yucatan", value: "Yucatan" },
474
+ { label: "Zacatecas", value: "Zacatecas" },
475
+ ]);
476
+ break;
477
+ default:
478
+ this.setStateValues(state, "Province / State", null);
479
+ break;
480
+ }
481
+ }
482
+ setStateValues(state, label, values) {
483
+ const stateField = ENGrid.getField(state);
484
+ const stateWrapper = stateField ? stateField.closest(".en__field") : null;
485
+ if (stateWrapper) {
486
+ const stateLabel = stateWrapper.querySelector(".en__field__label");
487
+ const elementWrapper = stateWrapper.querySelector(".en__field__element");
488
+ if (stateLabel) {
489
+ stateLabel.innerHTML = label;
490
+ }
491
+ if (elementWrapper) {
492
+ const selectedState = cookie.get(`engrid-state-${state}`);
493
+ if (values === null || values === void 0 ? void 0 : values.length) {
494
+ const select = document.createElement("select");
495
+ select.name = state;
496
+ select.id = "en__field_" + state.toLowerCase().replace(".", "_");
497
+ select.classList.add("en__field__input");
498
+ select.classList.add("en__field__input--select");
499
+ select.autocomplete = "address-level1";
500
+ let valueSelected = false;
501
+ values.forEach((value) => {
502
+ const option = document.createElement("option");
503
+ option.value = value.value;
504
+ option.innerHTML = value.label;
505
+ if (selectedState === value.value && !valueSelected) {
506
+ option.selected = true;
507
+ valueSelected = true;
508
+ }
509
+ if (value.disabled) {
510
+ option.disabled = true;
511
+ }
512
+ select.appendChild(option);
513
+ });
514
+ elementWrapper.innerHTML = "";
515
+ elementWrapper.appendChild(select);
516
+ select.addEventListener("change", this.rememberState.bind(this, state));
517
+ select.dispatchEvent(new Event("change", { bubbles: true }));
518
+ }
519
+ else {
520
+ elementWrapper.innerHTML = "";
521
+ const input = document.createElement("input");
522
+ input.type = "text";
523
+ input.name = state;
524
+ input.placeholder = label;
525
+ input.id = "en__field_" + state.toLowerCase().replace(".", "_");
526
+ input.classList.add("en__field__input");
527
+ input.classList.add("en__field__input--text");
528
+ input.autocomplete = "address-level1";
529
+ if (selectedState) {
530
+ input.value = selectedState;
531
+ }
532
+ elementWrapper.appendChild(input);
533
+ input.addEventListener("change", this.rememberState.bind(this, state));
534
+ }
535
+ }
536
+ }
537
+ }
538
+ rememberState(state) {
539
+ const stateField = ENGrid.getField(state);
540
+ if (stateField) {
541
+ cookie.set(`engrid-state-${stateField.name}`, stateField.value, {
542
+ expires: 1,
543
+ sameSite: "none",
544
+ secure: true,
545
+ });
546
+ }
547
+ }
548
+ }
@@ -0,0 +1,7 @@
1
+ export declare class UniversalOptIn {
2
+ private logger;
3
+ private _elements;
4
+ constructor();
5
+ shouldRun(): boolean;
6
+ addEventListeners(): void;
7
+ }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * This class will add event listeners to every yes/no radio button or checkbox
3
+ * inside a universal opt-in element (any form block with the CSS class universal-opt-in). When the user clicks on a radio/checkbox
4
+ * button, we will search for every other radio/checkbox button inside the same
5
+ * universal opt-in element and mirror the user's selection.
6
+ * If instead of universal-opt-in you use universal-opt-in_null, the class will
7
+ * not mirror the user's selection when a radio "No" option is selected. Instead,
8
+ * it will unset all other radio buttons.
9
+ */
10
+ import { EngridLogger, ENGrid } from ".";
11
+ export class UniversalOptIn {
12
+ constructor() {
13
+ this.logger = new EngridLogger("UniversalOptIn", "#f0f0f0", "#d2691e", "🪞");
14
+ this._elements = document.querySelectorAll(".universal-opt-in, .universal-opt-in_null");
15
+ if (!this.shouldRun())
16
+ return;
17
+ this.addEventListeners();
18
+ }
19
+ shouldRun() {
20
+ if (this._elements.length === 0) {
21
+ this.logger.log("No universal opt-in elements found. Skipping.");
22
+ return false;
23
+ }
24
+ this.logger.log(`Found ${this._elements.length} universal opt-in elements.`);
25
+ return true;
26
+ }
27
+ addEventListeners() {
28
+ this._elements.forEach((element) => {
29
+ const yesNoElements = element.querySelectorAll(".en__field__input--radio, .en__field__input--checkbox");
30
+ if (yesNoElements.length > 0) {
31
+ yesNoElements.forEach((yesNoElement) => {
32
+ yesNoElement.addEventListener("click", () => {
33
+ if (yesNoElement instanceof HTMLInputElement &&
34
+ yesNoElement.getAttribute("type") === "checkbox") {
35
+ const yesNoValue = yesNoElement.checked;
36
+ if (yesNoValue) {
37
+ this.logger.log("Yes/No " + yesNoElement.getAttribute("type") + " is checked");
38
+ yesNoElements.forEach((yesNoElement2) => {
39
+ if (yesNoElement === yesNoElement2)
40
+ return;
41
+ if (yesNoElement2 instanceof HTMLInputElement &&
42
+ yesNoElement2.getAttribute("type") === "checkbox")
43
+ yesNoElement2.checked = true;
44
+ });
45
+ }
46
+ else {
47
+ this.logger.log("Yes/No " +
48
+ yesNoElement.getAttribute("type") +
49
+ " is unchecked");
50
+ yesNoElements.forEach((yesNoElement2) => {
51
+ if (yesNoElement === yesNoElement2)
52
+ return;
53
+ if (yesNoElement2 instanceof HTMLInputElement &&
54
+ yesNoElement2.getAttribute("type") === "checkbox")
55
+ yesNoElement2.checked = false;
56
+ });
57
+ }
58
+ return;
59
+ }
60
+ const yesNoValue = yesNoElement.getAttribute("value");
61
+ if (yesNoValue === "Y") {
62
+ this.logger.log("Yes/No " + yesNoElement.getAttribute("type") + " is checked");
63
+ yesNoElements.forEach((yesNoElement2) => {
64
+ const fieldName = yesNoElement2.getAttribute("name");
65
+ const clickedFieldName = yesNoElement.getAttribute("name");
66
+ if (!fieldName || fieldName === clickedFieldName)
67
+ return;
68
+ ENGrid.setFieldValue(fieldName, "Y");
69
+ });
70
+ }
71
+ else {
72
+ this.logger.log("Yes/No " + yesNoElement.getAttribute("type") + " is unchecked");
73
+ yesNoElements.forEach((yesNoElement2) => {
74
+ const fieldName = yesNoElement2.getAttribute("name");
75
+ const clickedFieldName = yesNoElement.getAttribute("name");
76
+ if (!fieldName || fieldName === clickedFieldName)
77
+ return;
78
+ if (element.classList.contains("universal-opt-in")) {
79
+ ENGrid.setFieldValue(fieldName, "N");
80
+ }
81
+ else {
82
+ yesNoElement2.checked = false;
83
+ }
84
+ });
85
+ }
86
+ });
87
+ });
88
+ }
89
+ });
90
+ }
91
+ }