mod-build 4.0.0 → 4.0.1-beta.2

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 (165) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/package.json +1 -1
  3. package/src/scripts/default/index.js +9 -0
  4. package/src/scripts/default/update-link-paths.js +7 -13
  5. package/src/scripts/default/use-dynamic-gtm.js +4 -5
  6. package/src/scripts/plugins.js +109 -0
  7. package/src/scripts/utils.js +12 -52
  8. package/tasks/serve.js +1 -1
  9. package/vite.config.js +3 -51
  10. package/src/accessible-components/button/_button.scss +0 -308
  11. package/src/accessible-components/button/back-button.html +0 -8
  12. package/src/accessible-components/button/button.html +0 -17
  13. package/src/accessible-components/carousel/_carousel.scss +0 -112
  14. package/src/accessible-components/carousel/carousel.html +0 -25
  15. package/src/accessible-components/carousel/carousel.js +0 -3426
  16. package/src/accessible-components/carousel/carousel.js.map +0 -1
  17. package/src/accessible-components/carousel/carousel.min.js +0 -6
  18. package/src/accessible-components/carousel/carousel.min.js.map +0 -1
  19. package/src/accessible-components/checkbox/_checkbox.scss +0 -153
  20. package/src/accessible-components/checkbox/checkbox-group.html +0 -18
  21. package/src/accessible-components/checkbox/checkbox.html +0 -8
  22. package/src/accessible-components/expand-collapse/_expand-collapse.scss +0 -129
  23. package/src/accessible-components/expand-collapse/expand-collapse.html +0 -14
  24. package/src/accessible-components/expand-collapse/expand-collapse.js +0 -52
  25. package/src/accessible-components/expand-collapse/expand-collapse.min.js +0 -2
  26. package/src/accessible-components/expand-collapse/expand-collapse.min.js.map +0 -1
  27. package/src/accessible-components/featured-block/_featured-block.scss +0 -221
  28. package/src/accessible-components/featured-block/featured-block.html +0 -54
  29. package/src/accessible-components/foot-assets/foot-assets.html +0 -112
  30. package/src/accessible-components/footer/footer.html +0 -2
  31. package/src/accessible-components/gtm-body/gtm-body.html +0 -4
  32. package/src/accessible-components/head/head.html +0 -187
  33. package/src/accessible-components/header/_header.scss +0 -287
  34. package/src/accessible-components/header/header.html +0 -66
  35. package/src/accessible-components/hero/_hero.scss +0 -405
  36. package/src/accessible-components/hero/hero.html +0 -53
  37. package/src/accessible-components/how-it-works/_how-it-works.scss +0 -217
  38. package/src/accessible-components/how-it-works/how-it-works-carousel.html +0 -12
  39. package/src/accessible-components/how-it-works/how-it-works-static.html +0 -12
  40. package/src/accessible-components/how-it-works/how-it-works.html +0 -14
  41. package/src/accessible-components/information/_information.scss +0 -96
  42. package/src/accessible-components/information/information.html +0 -32
  43. package/src/accessible-components/input/_input.scss +0 -204
  44. package/src/accessible-components/input/input.html +0 -22
  45. package/src/accessible-components/input/textarea.html +0 -9
  46. package/src/accessible-components/partners/_partners.scss +0 -234
  47. package/src/accessible-components/partners/partners.html +0 -56
  48. package/src/accessible-components/picture/picture.html +0 -19
  49. package/src/accessible-components/preloader/_preloader.scss +0 -61
  50. package/src/accessible-components/preloader/preloader.html +0 -23
  51. package/src/accessible-components/progress-bar/_progress-bar.scss +0 -140
  52. package/src/accessible-components/progress-bar/progress-bar.html +0 -21
  53. package/src/accessible-components/progress-bar/progress-bar.js +0 -37
  54. package/src/accessible-components/progress-bar/progress-bar.min.js +0 -2
  55. package/src/accessible-components/progress-bar/progress-bar.min.js.map +0 -1
  56. package/src/accessible-components/radio-button/_radio-button.scss +0 -586
  57. package/src/accessible-components/radio-button/radio-button.html +0 -33
  58. package/src/accessible-components/reviews/_reviews.scss +0 -175
  59. package/src/accessible-components/reviews/reviews-carousel.html +0 -12
  60. package/src/accessible-components/reviews/reviews-static.html +0 -12
  61. package/src/accessible-components/reviews/reviews.html +0 -37
  62. package/src/accessible-components/select/_select.scss +0 -69
  63. package/src/accessible-components/select/select.html +0 -10
  64. package/src/accessible-components/steps/_steps.scss +0 -636
  65. package/src/accessible-components/steps/defaultFormFieldConfig.json +0 -109
  66. package/src/accessible-components/steps/step-fields.html +0 -38
  67. package/src/accessible-components/steps/steps.html +0 -160
  68. package/src/accessible-components/tcpa/_tcpa.scss +0 -49
  69. package/src/accessible-components/tcpa/tcpa.html +0 -9
  70. package/src/accessible-components/tile/_tile.scss +0 -117
  71. package/src/accessible-components/tile/tile.html +0 -14
  72. package/src/accessible-components/value-props/_value-props.scss +0 -102
  73. package/src/accessible-components/value-props/value-props.html +0 -17
  74. package/src/accessible-components/zip-control/_zip-control.scss +0 -79
  75. package/src/accessible-components/zip-control/zip-control.html +0 -10
  76. package/src/resources/data/tcpa.json +0 -3
  77. package/src/resources/scripts/abandonment/abandonment-e099a424bf17408f1db2.min.js +0 -2
  78. package/src/resources/scripts/abandonment/abandonment.min.js +0 -2
  79. package/src/resources/scripts/footer/footer-component-7b5e263f64568573ecc0.min.js +0 -2
  80. package/src/resources/scripts/footer/footer-component.min.js +0 -2
  81. package/src/resources/scripts/helpers/initNumericOnlyFields.min.js +0 -2
  82. package/src/resources/scripts/helpers/initNumericOnlyFields.min.js.map +0 -1
  83. package/src/resources/scripts/helpers/isZipCodeValid.min.js +0 -2
  84. package/src/resources/scripts/helpers/isZipCodeValid.min.js.map +0 -1
  85. package/src/resources/scripts/mod-alytics/modalytics-0ac7d7a5a72ea67a0f47.min.js +0 -2
  86. package/src/resources/scripts/mod-alytics/modalytics.min.js +0 -2
  87. package/src/resources/scripts/mod-form/form/homeowner-f395431201f7a6e56690.min.js +0 -2
  88. package/src/resources/scripts/mod-form/form/homeowner.min.js +0 -2
  89. package/src/resources/scripts/mod-utils/modutils-a08fecfbb83afad1a9f8.min.js +0 -2
  90. package/src/resources/scripts/mod-utils/modutils.min.js +0 -2
  91. package/src/resources/styles/components/abandonment/abandonment-a8571a9e32ed6ef9acb4.min.css +0 -1
  92. package/src/resources/styles/components/abandonment/abandonment.min.css +0 -1
  93. package/src/resources/styles/components/footer/mod-footer-1fb2cec3278f29df57d0.min.css +0 -1
  94. package/src/resources/styles/components/footer/mod-footer.min.css +0 -1
  95. package/src/resources/styles/components/footer/qs-footer-9a3b0ab00428b03e6e9e.min.css +0 -1
  96. package/src/resources/styles/components/footer/qs-footer.min.css +0 -1
  97. package/src/resources/templates/modals/about/index.hbs +0 -9
  98. package/src/resources/templates/modals/about/index.html +0 -9
  99. package/src/resources/templates/modals/contact-us/index.hbs +0 -348
  100. package/src/resources/templates/modals/contact-us/index.html +0 -348
  101. package/src/resources/templates/modals/faq/index.hbs +0 -9
  102. package/src/resources/templates/modals/faq/index.html +0 -9
  103. package/src/resources/templates/modals/privacy/index.hbs +0 -236
  104. package/src/resources/templates/modals/privacy/index.html +0 -236
  105. package/src/resources/templates/modals/terms/index.hbs +0 -166
  106. package/src/resources/templates/modals/terms/index.html +0 -166
  107. package/src/shared-components/card-button/_card-button.scss +0 -49
  108. package/src/shared-components/card-button/card-button.html +0 -9
  109. package/src/shared-components/carousel/_carousel.scss +0 -106
  110. package/src/shared-components/carousel/carousel.html +0 -22
  111. package/src/shared-components/carousel/carousel.js +0 -3427
  112. package/src/shared-components/carousel/carousel.js.map +0 -1
  113. package/src/shared-components/carousel/carousel.min.js +0 -6
  114. package/src/shared-components/carousel/carousel.min.js.map +0 -1
  115. package/src/shared-components/carousel/carousel.min.min.js +0 -6
  116. package/src/shared-components/carousel/carousel.min.min.js.map +0 -1
  117. package/src/shared-components/checkbox/_checkbox.scss +0 -104
  118. package/src/shared-components/checkbox/checkbox.html +0 -6
  119. package/src/shared-components/expand-collapse/_expand-collapse.scss +0 -93
  120. package/src/shared-components/expand-collapse/expand-collapse.html +0 -8
  121. package/src/shared-components/expand-collapse/expand-collapse.js +0 -40
  122. package/src/shared-components/expand-collapse/expand-collapse.min.js +0 -2
  123. package/src/shared-components/expand-collapse/expand-collapse.min.js.map +0 -1
  124. package/src/shared-components/featured-block/_featured-block.scss +0 -185
  125. package/src/shared-components/featured-block/featured-block.html +0 -62
  126. package/src/shared-components/foot-assets/foot-assets.html +0 -107
  127. package/src/shared-components/form-tcpa/form-tcpa.html +0 -12
  128. package/src/shared-components/gtm-body/gtm-body.html +0 -4
  129. package/src/shared-components/head/head.html +0 -192
  130. package/src/shared-components/header/_header.scss +0 -200
  131. package/src/shared-components/header/header.html +0 -71
  132. package/src/shared-components/hero/_hero.scss +0 -253
  133. package/src/shared-components/hero/hero.html +0 -126
  134. package/src/shared-components/how-it-works/_how-it-works.scss +0 -138
  135. package/src/shared-components/how-it-works/how-it-works.html +0 -19
  136. package/src/shared-components/input/_input.scss +0 -229
  137. package/src/shared-components/input/input.html +0 -30
  138. package/src/shared-components/preloader/_preloader.scss +0 -61
  139. package/src/shared-components/preloader/preloader.html +0 -49
  140. package/src/shared-components/progress-bar/_progress-bar.scss +0 -105
  141. package/src/shared-components/progress-bar/progress-bar.html +0 -20
  142. package/src/shared-components/progress-bar/progress-bar.js +0 -25
  143. package/src/shared-components/progress-bar/progress-bar.min.js +0 -2
  144. package/src/shared-components/progress-bar/progress-bar.min.js.map +0 -1
  145. package/src/shared-components/radio-button/_radio-button.scss +0 -554
  146. package/src/shared-components/radio-button/radio-button.html +0 -25
  147. package/src/shared-components/reviews/_reviews.scss +0 -79
  148. package/src/shared-components/reviews/reviews.html +0 -27
  149. package/src/shared-components/select/_select.scss +0 -61
  150. package/src/shared-components/select/select.html +0 -8
  151. package/src/shared-components/steps/_steps.scss +0 -334
  152. package/src/shared-components/steps/defaultFormFieldConfig.json +0 -64
  153. package/src/shared-components/steps/step-fields.html +0 -36
  154. package/src/shared-components/steps/steps.html +0 -131
  155. package/src/shared-components/textarea/_textarea.scss +0 -96
  156. package/src/shared-components/textarea/textarea.html +0 -13
  157. package/src/shared-components/theme-toggle/_theme-toggle.scss +0 -68
  158. package/src/shared-components/theme-toggle/theme-toggle.html +0 -34
  159. package/src/shared-components/tile/_tile.scss +0 -117
  160. package/src/shared-components/tile/tile.html +0 -27
  161. package/src/shared-components/value-props/_value-props.scss +0 -98
  162. package/src/shared-components/value-props/value-props.html +0 -17
  163. package/src/shared-components/zip-control/_zip-control.scss +0 -42
  164. package/src/shared-components/zip-control/zip-control.html +0 -21
  165. package/src/temp/scripts/maxmind-geoip2.js +0 -104
@@ -1,348 +0,0 @@
1
- <div class="contact-us">
2
- <div class="contact-us__container">
3
- <form class="contact-us__form">
4
- <div class="step step--active" aria-hidden="false" tabindex="-1" aria-labelledby="contact-step-one-header">
5
- <span id="contact-step-one-header" class="visually-hidden">Step 1: Select the radio button option that suits your inquiry.</span>
6
- <div class="step__header">
7
- <p class="step__header-number">
8
- Step 1
9
- </p>
10
- <p class="step__header-text">
11
- Select an option that suits your inquiry
12
- </p>
13
- </div>
14
- <div class="step__content">
15
- <div class="step__content-item">
16
- <picture>
17
- <source srcset="https://modernize.com/quote/resources/assets/images/illustrations/misc/handshake.webp" type="image/webp">
18
- <img class="step__image" src="https://modernize.com/quote/resources/assets/images/illustrations/misc/handshake.jpg" alt="">
19
- </picture>
20
- <div class="step__fieldset">
21
- <fieldset>
22
- <legend>Partnerships</legend>
23
- <div class="field">
24
- <input type="radio" name="topic" value="SF_partnerships" id="SF_partnerships">
25
- <label for="SF_partnerships">Publisher/Media Partnership</label>
26
- </div>
27
- <div class="field">
28
- <input type="radio" name="topic" value="SF_advertisers" id="SF_advertisers">
29
- <label for="SF_advertisers">Advertisers</label>
30
- </div>
31
- </fieldset>
32
- </div>
33
- </div>
34
- <div class="step__content-item">
35
- <picture>
36
- <source srcset="https://modernize.com/quote/resources/assets/images/illustrations/misc/presentation.webp" type="image/webp">
37
- <img class="step__image" src="https://modernize.com/quote/resources/assets/images/illustrations/misc/presentation.jpg" alt="">
38
- </picture>
39
- <div class="step__fieldset">
40
- <fieldset>
41
- <legend>Website Content, Data, Technical Issues</legend>
42
- <div class="field">
43
- <input type="radio" name="topic" value="reprint-permissions" id="reprint-permissions">
44
- <label for="reprint-permissions">Reprint Permissions</label>
45
- </div>
46
- <div class="field">
47
- <input type="radio" name="topic" value="technical-site-issue" id="technical-site-issue">
48
- <label for="technical-site-issue">Technical Issues with Website</label>
49
- </div>
50
- </fieldset>
51
- </div>
52
- </div>
53
- <div class="step__content-item">
54
- <picture>
55
- <source srcset="https://modernize.com/quote/resources/assets/images/illustrations/misc/man-on-couch.webp" type="image/webp">
56
- <img class="step__image" src="https://modernize.com/quote/resources/assets/images/illustrations/misc/man-on-couch.jpg" alt="">
57
- </picture>
58
- <div class="step__fieldset">
59
- <fieldset>
60
- <legend>Unsubscribe Requests</legend>
61
- <div class="field">
62
- <input type="radio" name="topic" value="email-opt-out" id="email-opt-out">
63
- <label for="email-opt-out">Consumer Email Unsubscribe</label>
64
- </div>
65
- <div class="field">
66
- <input type="radio" name="topic" value="phone-opt-out" id="phone-opt-out">
67
- <label for="phone-opt-out">Consumer Phone Calls/Text Message Unsubscribe</label>
68
- </div>
69
- <div class="field">
70
- <input type="radio" name="topic" value="general-inquiry" id="general-inquiry">
71
- <label for="general-inquiry">Other Consumer Issues</label>
72
- </div>
73
- </fieldset>
74
- </div>
75
- <ul class="step__list">
76
- <li>
77
- <a href="https://privacy-central.securiti.ai/#/dsr/edc7a01c-b34c-43d4-8da8-127895e8bd71" target="_parent">California - Request to Know</a>
78
- <a href="tel:8448727854">(844) 872-7854</a>
79
- </li>
80
- <li>
81
- <a href="https://privacy-central.securiti.ai/#/dsr/edc7a01c-b34c-43d4-8da8-127895e8bd71" target="_parent">California - Request to Delete</a>
82
- </li>
83
- </ul>
84
- </div>
85
- </div>
86
- </div>
87
- <div class="step" aria-hidden="true" tabindex="-1" aria-labelledby="contact-step-two-header">
88
- <span id="contact-step-two-header" class="visually-hidden">Step 2: Submit your contact info and we'll address your request ASAP. Press tab to begin entering your information.</span>
89
- <div class="step__header">
90
- <p class="step__header-number">
91
- Step 2
92
- </p>
93
- <p class="step__header-text">
94
- Submit your contact info and we'll address your request ASAP
95
- </p>
96
- </div>
97
- <div class="step__content">
98
- <div class="step__error"></div>
99
- <div class="form-group parent-error">
100
- <label for="contact-name">Name</label>
101
- <input class="form-control" type="text" name="name" id="contact-name">
102
- <span class="step__error-message" id="error-contact-name">Please enter your name.</span>
103
- </div>
104
- <div class="form-group parent-error">
105
- <label for="contact-phone">Phone</label>
106
- <input class="form-control" type="tel" name="phone" id="contact-phone">
107
- <span class="step__error-message" id="error-contact-phone">Please enter a valid phone number.</span>
108
- </div>
109
- <div class="form-group parent-error">
110
- <label for="contact-email">Email</label>
111
- <input class="form-control" type="email" name="email" id="contact-email">
112
- <span class="step__error-message" id="error-contact-email">Please enter a valid email address.</span>
113
- </div>
114
- <div class="form-group parent-error">
115
- <label for="contact-message">Message</label>
116
- <textarea class="form-control" name="message" id="contact-message"></textarea>
117
- <span class="step__error-message" id="error-contact-message">Please enter your message.</span>
118
- </div>
119
- <div>
120
- <input type="hidden" name="domain" value="{{domain}}">
121
- <input type="hidden" name="date">
122
- <input type="hidden" name="time">
123
- <input type="hidden" name="vertical" value="HomeServices">
124
- <input type="hidden" name="g-recaptcha-response" value="">
125
- </div>
126
- </div>
127
- <div class="captcha-container captcha-body">
128
- <div class="g-recaptcha" data-callback="captcha_submit" data-sitekey="6LcsGEkUAAAAAHekw-AS_6Vcu_WeYk7LiPJB1mrR"></div>
129
- </div>
130
- <div class="form-controls">
131
- <button class="btn btn-secondary btn-back" type="button" aria-label="Back"></button>
132
- <button class="btn btn-submit" type="submit">
133
- <span class="btn__text">Submit</span>
134
- <span class="btn__spinner"></span>
135
- </button>
136
- </div>
137
- </div>
138
- </form>
139
- <div class="contact-us__thankyou" aria-hidden="true" tabindex="-1" aria-labelledby="contact-success-header">
140
- <span id="contact-success-header" class="visually-hidden"> Thank you. We'll address your request as soon as possible.</span>
141
- <picture>
142
- <source srcset="https://modernize.com/quote/resources/assets/images/illustrations/misc/laptop.webp" type="image/webp">
143
- <img class="contact-us__thankyou-img" src="https://modernize.com/quote/resources/assets/images/illustrations/misc/laptop.jpg" alt="">
144
- </picture>
145
- <p class="contact-us__thankyou-title">Thank You!</p>
146
- <p class="contact-us__thankyou-subtitle">We'll address your request as soon as possible.</p>
147
- </div>
148
- </div>
149
- </div>
150
- <script src="https://www.google.com/recaptcha/api.js"></script>
151
- <script>
152
- window.captcha_submit = function(response) {
153
- document.querySelector('input[name="g-recaptcha-response"]').value = response;
154
- }
155
- </script>
156
-
157
- <script>
158
- var contactUs = {
159
- $modal: document.getElementById('info-modal'),
160
- $form: document.querySelector('.contact-us__form'),
161
- $thankyou: document.querySelector('.contact-us__thankyou'),
162
- url: 'https://contact.formfetch.com/v2_submit',
163
- getFormData: function() {
164
- const date = new Date();
165
- const data = {};
166
- const inputs = this.$form.elements;
167
- if (inputs) {
168
- for (let i = 0; i < inputs.length; i++) {
169
- const input = inputs[i];
170
- if (input.name) {
171
- data[input.name] = input.value;
172
- }
173
- }
174
- }
175
-
176
- data.time = date.toLocaleTimeString();
177
- data.date = date.toLocaleDateString();
178
- return data;
179
- },
180
- validateData: function(data) {
181
- const _this = this;
182
- var isFormValid = true;
183
- const emailPattern = /^([\w\+-]+(?:\.[\w\+-]+)*)(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)/i;
184
-
185
- Object.keys(data).forEach(function(key) {
186
- var isValid = true;
187
- const value = data[key];
188
- switch (key) {
189
- case 'email':
190
- isValid = emailPattern.test(value);
191
- break;
192
- default:
193
- isValid = value !== '';
194
- break;
195
- }
196
-
197
- if (!isValid) {
198
- _this.markFieldAsInvalid(key);
199
- _this.focusOnFirstError();
200
- isFormValid = false;
201
- }
202
- });
203
-
204
- return isFormValid;
205
- },
206
- focusOnFirstError: function() {
207
- const $error = this.$form.querySelectorAll('.has-error');
208
-
209
- if ($error.length > 0) {
210
- const firstError = $error[0];
211
- const $field = firstError.querySelector('input[type="text"], input[type="tel"], input[type="email"], textarea');
212
- if ($field) {
213
- $field.focus();
214
- }
215
- }
216
- },
217
- markFieldAsInvalid: function(fieldName) {
218
- const $invalidField = this.$form.querySelector('#contact-' + fieldName);
219
- if ($invalidField) {
220
- $invalidField.parentElement.classList.add('has-error');
221
- }
222
-
223
- const $field = this.$form.querySelector('input[name="' + fieldName + '"]');
224
- if ($field) {
225
- $field.setAttribute('aria-invalid', 'true');
226
- $field.setAttribute('aria-describedby', 'error-contact' + fieldName);
227
- }
228
- },
229
- submit: function() {
230
- this.$form.classList.add('form--loading');
231
-
232
- const _this = this;
233
- const data = this.getFormData();
234
- const isFormValid = this.validateData(data);
235
- const formData = Object.keys(data).map(function(key) {
236
- return encodeURIComponent(key) + '=' + encodeURIComponent(data[key]).replace(/%20/g, '+');
237
- }).join('&');
238
-
239
- if (isFormValid) {
240
- // Submit Form
241
- var request = new XMLHttpRequest();
242
- request.onreadystatechange = function() {
243
- if (request.readyState === 4) {
244
- if (request.status === 200) {
245
- var response = JSON.parse(request.responseText);
246
- if (response.success) {
247
- _this.$form.style.display = 'none';
248
- _this.$thankyou.style.display = 'block';
249
- } else {
250
- _this.$form.classList.remove('form--loading');
251
- document.querySelector('.step__error').innerHTML = response.message;
252
- }
253
- } else {
254
- console.error('Request failed with status:', request.status);
255
- }
256
- }
257
- };
258
-
259
- request.open('POST', _this.url, true);
260
- request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
261
- request.send(formData);
262
- } else {
263
- _this.$form.classList.remove('form--loading');
264
- }
265
- },
266
- changeStep: function(direction) {
267
- const $activeStep = this.$form.querySelector('.step--active');
268
- const $nextStep = $activeStep.nextElementSibling;
269
- const $prevStep = $activeStep.previousElementSibling;
270
-
271
- $activeStep.classList.remove('step--active');
272
- $activeStep.setAttribute('aria-hidden', 'true');
273
- if (direction === 'next') {
274
- $nextStep.classList.add('step--active');
275
- $nextStep.setAttribute('aria-hidden', 'false');
276
- $nextStep.focus();
277
- } else {
278
- $prevStep.classList.add('step--active');
279
- $prevStep.setAttribute('aria-hidden', 'false');
280
- $prevStep.focus();
281
- }
282
- },
283
- watch: function() {
284
- const _this = this;
285
- var radioChangedWithMouse = false;
286
-
287
- // Watch form submission
288
- _this.$form.addEventListener('submit', function(e) {
289
- e.preventDefault();
290
- if (!_this.$form.classList.contains('form--loading')) {
291
- _this.submit();
292
- }
293
- });
294
-
295
- // Watch radio click with mouse only
296
- const $radioLabelsAndInputs = _this.$form.querySelectorAll('fieldset label, input[type="radio"]');
297
- $radioLabelsAndInputs.forEach(function(input) {
298
- input.addEventListener('mouseup', function() {
299
- radioChangedWithMouse = true;
300
- });
301
- })
302
-
303
- const $radioInputs = _this.$form.querySelectorAll('input[type="radio"]');
304
- $radioInputs.forEach(function(input) {
305
- input.addEventListener('click', function(e) {
306
- if (radioChangedWithMouse) {
307
- _this.changeStep('next');
308
- radioChangedWithMouse = false;
309
- }
310
- });
311
- input.addEventListener('keypress', function(e) {
312
- if(e.which == 13){
313
- e.preventDefault();
314
- _this.changeStep('next');
315
-
316
- // Making sure radio button is actually selected on Enter
317
- var focused = e.target;
318
- if (!focused.checked) {
319
- focused.checked = true;
320
- }
321
- }
322
- })
323
- });
324
-
325
- // Watch back button
326
- const $backBtn = _this.$form.querySelector('.btn-back');
327
- if ($backBtn) {
328
- $backBtn.addEventListener('click', function() {
329
- _this.changeStep('prev');
330
- });
331
- }
332
-
333
- // Remove error state when input/textarea changes
334
- const $formInputs = _this.$form.querySelectorAll('input, textarea');
335
- $formInputs.forEach(function(input) {
336
- input.addEventListener('change', function() {
337
- input.parentElement.classList.remove('has-error');
338
- input.setAttribute('aria-invalid', 'false');
339
- input.removeAttribute('aria-describedby');
340
- });
341
- });
342
- },
343
- init: function() {
344
- this.watch();
345
- }
346
- };
347
- contactUs.init();
348
- </script>
@@ -1,9 +0,0 @@
1
- <p>Below are answers to some of the more frequently asked questions we receive. If you do not see your question listed, please send us an email.</p>
2
- <h2>How does this service work?</h2>
3
- <p>We maintain a large network of home improvement professionals across the US. Once you have submitted your information to our system, we will instantly match you with local contractors in your area. Those contractors will provide free price quotes via the information you have provided. This process will save you time and money because you can compare rates from multiple companies without having to contact numerous contractors and provide your information several times.</p>
4
- <h2>Do you perform the contracting work?</h2>
5
- <p>No, we are not a general contractor. We are a free referral service for consumers needing home improvement services. We do not actually perform the work, but instead provide a free referral service.</p>
6
- <h2>I have already submitted my information, when will I get my quote?</h2>
7
- <p>The contractors who receive your request will usually begin building your quotes immediately and will often provide detailed pricing information within minutes. However, some quotes are more complicated and may require a little more time to process. Regardless, you should always receive your free quotes within 48 hours at the latest.</p>
8
- <h2>How do I get a quote?</h2>
9
- <p>To get a free, no-obligation quote, just go to our homepage, enter your zip code and submit the form.</p>
@@ -1,9 +0,0 @@
1
- <p>Below are answers to some of the more frequently asked questions we receive. If you do not see your question listed, please send us an email.</p>
2
- <h2>How does this service work?</h2>
3
- <p>We maintain a large network of home improvement professionals across the US. Once you have submitted your information to our system, we will instantly match you with local contractors in your area. Those contractors will provide free price quotes via the information you have provided. This process will save you time and money because you can compare rates from multiple companies without having to contact numerous contractors and provide your information several times.</p>
4
- <h2>Do you perform the contracting work?</h2>
5
- <p>No, we are not a general contractor. We are a free referral service for consumers needing home improvement services. We do not actually perform the work, but instead provide a free referral service.</p>
6
- <h2>I have already submitted my information, when will I get my quote?</h2>
7
- <p>The contractors who receive your request will usually begin building your quotes immediately and will often provide detailed pricing information within minutes. However, some quotes are more complicated and may require a little more time to process. Regardless, you should always receive your free quotes within 48 hours at the latest.</p>
8
- <h2>How do I get a quote?</h2>
9
- <p>To get a free, no-obligation quote, just go to our homepage, enter your zip code and submit the form.</p>