mod-build 3.6.80 → 3.6.81
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.
- package/CHANGELOG.md +4 -0
- package/package.json +1 -1
- package/src/templates/_partials/apt-block.html +30 -0
- package/src/templates/_partials/scripts/analytics.html +4 -0
- package/src/templates/_partials/scripts/deferred-styles.html +16 -0
- package/src/templates/_partials/scripts/go-page-hiding-snippet.html +8 -0
- package/src/templates/_partials/scripts/google-maps.html +1 -0
- package/src/templates/_partials/scripts/google-optimize.html +12 -0
- package/src/templates/_partials/scripts/gtm-editorials/body/google-tag-manager-body.html +5 -0
- package/src/templates/_partials/scripts/gtm-editorials/head/google-tag-manager-head.html +10 -0
- package/src/templates/_partials/scripts/gtm-hil/body/google-tag-manager-body.html +5 -0
- package/src/templates/_partials/scripts/gtm-hil/head/google-tag-manager-head.html +10 -0
- package/src/templates/_partials/scripts/gtm-pro/body/google-tag-manager-body.html +5 -0
- package/src/templates/_partials/scripts/gtm-pro/head/google-tag-manager-head.html +10 -0
- package/src/templates/_partials/scripts/gtm-quote/body/google-tag-manager-body.html +5 -0
- package/src/templates/_partials/scripts/gtm-quote/head/google-tag-manager-head.html +9 -0
- package/src/templates/_partials/scripts/gtm-whitelabel/body/mod-google-tag-manager-body.html +5 -0
- package/src/templates/_partials/scripts/gtm-whitelabel/body/non-mod-google-tag-manager-body.html +5 -0
- package/src/templates/_partials/scripts/gtm-whitelabel/head/mod-google-tag-manager-head.html +10 -0
- package/src/templates/_partials/scripts/gtm-whitelabel/head/non-mod-google-tag-manager-head.html +9 -0
- package/src/templates/_partials/scripts/gtm-wordpress/body/google-tag-manager-body.html +5 -0
- package/src/templates/_partials/scripts/gtm-wordpress/head/google-tag-manager-head.html +9 -0
- package/src/templates/_partials/scripts/heap-bundle.html +7 -0
- package/src/templates/_partials/scripts/heap.html +4 -0
- package/src/templates/_partials/scripts/utm-params.html +9 -0
- package/src/templates/_partials/scripts/visual-website-optimizer.html +5 -0
- package/src/templates/_partials/scripts/vwo-redirect-callback.html +49 -0
- package/src/templates/components/qs-footer.html +55 -0
- package/src/templates/components/quote-footer-v1.html +148 -0
- package/src/templates/components/quote-footer-v2.html +169 -0
- package/src/templates/index.html +46 -0
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<div class="apt-block apt-block--instant" id="instant-apt-block" style="display: none">
|
|
2
|
+
<div class="apt-block__suptitle">
|
|
3
|
+
Next steps
|
|
4
|
+
</div>
|
|
5
|
+
<h2 class="apt-block__title">
|
|
6
|
+
Set Appointments
|
|
7
|
+
</h2>
|
|
8
|
+
<div class="apt-block__subtitle">
|
|
9
|
+
Request up to four appointments with contractors to receive free quotes.
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<div class="apt-block__instant-matches" id="apt-block-instant-matches"> </div>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<div class="apt-block" id="apt-block" style="display: none">
|
|
16
|
+
<h2 class="apt-block__title" id="apt-block-title">
|
|
17
|
+
Loading matches...
|
|
18
|
+
</h2>
|
|
19
|
+
|
|
20
|
+
<div class="apt-block__matches" id="apt-block-matches"> </div>
|
|
21
|
+
|
|
22
|
+
<div class="apt-block__loading" id="apt-block-loading">
|
|
23
|
+
<span class="apt-block__spinner"></span>
|
|
24
|
+
Searching for matches…
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<script>
|
|
29
|
+
var aptBlockTCPA = '{{#x 'this.tcpa("Schedule", "Modernize")'}}{{/x}}';
|
|
30
|
+
</script>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<noscript id="deferred-styles">
|
|
2
|
+
{{{deferredStyles deferredStyleUrls}}}
|
|
3
|
+
</noscript>
|
|
4
|
+
<script>
|
|
5
|
+
var loadDeferredStyles = function() {
|
|
6
|
+
var addStylesNode = document.getElementById("deferred-styles");
|
|
7
|
+
var replacement = document.createElement("div");
|
|
8
|
+
replacement.innerHTML = addStylesNode.textContent;
|
|
9
|
+
document.body.appendChild(replacement)
|
|
10
|
+
addStylesNode.parentElement.removeChild(addStylesNode);
|
|
11
|
+
};
|
|
12
|
+
var raf = requestAnimationFrame || mozRequestAnimationFrame ||
|
|
13
|
+
webkitRequestAnimationFrame || msRequestAnimationFrame;
|
|
14
|
+
if (raf) raf(function() { window.setTimeout(loadDeferredStyles, 0); });
|
|
15
|
+
else window.addEventListener('load', loadDeferredStyles);
|
|
16
|
+
</script>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<!-- Google Optimize Page-hiding snippet -->
|
|
2
|
+
<style>.async-hide { opacity: 0 !important} </style>
|
|
3
|
+
<script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
|
|
4
|
+
h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
|
|
5
|
+
(a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
|
|
6
|
+
})(window,document.documentElement,'async-hide','dataLayer',4000,
|
|
7
|
+
{'{{optimize_GTM}}':true});</script>
|
|
8
|
+
<!-- End Google Optimize Page-hiding snippet -->
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script src="//maps.googleapis.com/maps/api/js?key=AIzaSyBf4HNrR12KgZeMNsdoNIjD57pwVUsZ6e4&language=en&libraries=places&callback=modForm.initAddressAutocomplete" async defer></script>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Google Optimize -->
|
|
2
|
+
<script>
|
|
3
|
+
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
4
|
+
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
5
|
+
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
|
6
|
+
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
|
7
|
+
|
|
8
|
+
ga('create', '{{ga_tracking_ID}}', 'auto');
|
|
9
|
+
ga('require', '{{optimize_GTM}}');
|
|
10
|
+
</script>
|
|
11
|
+
<!-- End Google Optimize -->
|
|
12
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!-- Google Tag Manager -->
|
|
2
|
+
<script>
|
|
3
|
+
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
4
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
5
|
+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
6
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
|
7
|
+
})(window,document,'script','dataLayer','GTM-WPXKC8');
|
|
8
|
+
</script>
|
|
9
|
+
<!-- End Google Tag Manager -->
|
|
10
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!-- Google Tag Manager -->
|
|
2
|
+
<script>
|
|
3
|
+
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
4
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
5
|
+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
6
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
|
7
|
+
})(window,document,'script','dataLayer','GTM-TDM5ZF6');
|
|
8
|
+
</script>
|
|
9
|
+
<!-- End Google Tag Manager -->
|
|
10
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!-- Google Tag Manager -->
|
|
2
|
+
<script>
|
|
3
|
+
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
4
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
5
|
+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
6
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
|
7
|
+
})(window,document,'script','dataLayer','GTM-WPXKC8');
|
|
8
|
+
</script>
|
|
9
|
+
<!-- End Google Tag Manager -->
|
|
10
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- Google Tag Manager -->
|
|
2
|
+
<script>
|
|
3
|
+
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
4
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
5
|
+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
6
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
|
7
|
+
})(window,document,'script','dataLayer','GTM-NVJQBK2');
|
|
8
|
+
</script>
|
|
9
|
+
<!-- End Google Tag Manager -->
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!-- Google Tag Manager -->
|
|
2
|
+
<script>
|
|
3
|
+
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
4
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
5
|
+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
6
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
|
7
|
+
})(window,document,'script','dataLayer','GTM-TJ8BFVQ');
|
|
8
|
+
</script>
|
|
9
|
+
<!-- End Google Tag Manager -->
|
|
10
|
+
|
package/src/templates/_partials/scripts/gtm-whitelabel/head/non-mod-google-tag-manager-head.html
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- Google Tag Manager -->
|
|
2
|
+
<script>
|
|
3
|
+
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
4
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
5
|
+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
6
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
|
7
|
+
})(window,document,'script','dataLayer','GTM-TBC2FVC');
|
|
8
|
+
</script>
|
|
9
|
+
<!-- End Google Tag Manager -->
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- Google Tag Manager -->
|
|
2
|
+
<script>
|
|
3
|
+
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
|
4
|
+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
|
5
|
+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
|
6
|
+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
|
7
|
+
})(window,document,'script','dataLayer','GTM-WPXKC8');
|
|
8
|
+
</script>
|
|
9
|
+
<!-- End Google Tag Manager -->
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
{{ fileInclude 'node_modules/mod-build/src/scripts/vendor/heap-tracking.js' }}
|
|
3
|
+
|
|
4
|
+
{{ fileInclude 'node_modules/mod-build/src/scripts/vendor/heap-vwo.js' }}
|
|
5
|
+
|
|
6
|
+
{{ fileInclude 'node_modules/mod-build/src/scripts/vendor/heap-addeventproperties-identify.js' }}
|
|
7
|
+
</script>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
window.heap=window.heap||[],heap.load=function(e,t){window.heap.appid=e,window.heap.config=t=t||{};var r=t.forceSSL||"https:"===document.location.protocol,a=document.createElement("script");a.type="text/javascript",a.async=!0,a.src=(r?"https:":"http:")+"//cdn.heapanalytics.com/js/heap-"+e+".js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(a,n);for(var o=function(e){return function(){heap.push([e].concat(Array.prototype.slice.call(arguments,0)))}},p=["addEventProperties","addUserProperties","clearEventProperties","identify","removeEventProperty","setEventProperties","track","unsetEventProperty"],c=0;c<p.length;c++)heap[p[c]]=o(p[c])};
|
|
3
|
+
heap.load("3246578271");
|
|
4
|
+
</script>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
(function () {
|
|
3
|
+
var $networkLink = document.getElementById('join-network');
|
|
4
|
+
var pageTrade = ($networkLink.getAttribute('data-trade') ? $networkLink.getAttribute('data-trade').toLowerCase() : "");
|
|
5
|
+
var siteUrl = window.location.hostname + window.location.pathname;
|
|
6
|
+
|
|
7
|
+
$networkLink.href = 'https://modernize.com/pro/register/leads/?trade=' + pageTrade + '&utm_medium=microsites&utm_source=' + siteUrl;
|
|
8
|
+
})();
|
|
9
|
+
</script>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
{{ fileInclude 'node_modules/mod-build/src/scripts/has-qs-params.js' }}
|
|
3
|
+
{{ fileInclude 'node_modules/mod-build/src/scripts/url-cleaner.js' }}
|
|
4
|
+
{{ fileInclude 'node_modules/mod-build/src/scripts/vendor/visual-website-optimizer.js' }}
|
|
5
|
+
|
|
6
|
+
(function(VWO_HARD_TIMEOUT) {
|
|
7
|
+
window._vwo_evq = window._vwo_evq || [];
|
|
8
|
+
var queue = window._vwo_evq;
|
|
9
|
+
for (var i = 0; i < queue.length; i++) {
|
|
10
|
+
if (queue[i][0] === 'rD') {
|
|
11
|
+
window.willRedirectionOccur = true;
|
|
12
|
+
break;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
var _vwoOldPush = window._vwo_evq.push;
|
|
16
|
+
window._vwo_evq.push = function() {
|
|
17
|
+
var eventData = arguments[0],
|
|
18
|
+
willRedirectionOccur;
|
|
19
|
+
if (eventData[0] === 'rD') {
|
|
20
|
+
willRedirectionOccur = eventData[1];
|
|
21
|
+
// It will be set to true if a redirection is going to be done by VWO.
|
|
22
|
+
window.willRedirectionOccurByVWO = willRedirectionOccur;
|
|
23
|
+
}
|
|
24
|
+
_vwoOldPush.apply(window._vwo_evq, [].slice.call(arguments));
|
|
25
|
+
};
|
|
26
|
+
var hardLimitTimedout = false;
|
|
27
|
+
|
|
28
|
+
function tryNonVWOTracking() {
|
|
29
|
+
if ((window._vwo_code && (window._vwo_code.finished() || window._vwo_code.libExecuted)) || hardLimitTimedout) {
|
|
30
|
+
if (!window.willRedirectionOccurByVWO) {
|
|
31
|
+
clearTimeout(hardLimitTimer);
|
|
32
|
+
try {
|
|
33
|
+
// flag to call Modalytics.initHeapVwo() method in site level js
|
|
34
|
+
window.initHeapVwo = true;
|
|
35
|
+
} catch (e) {}
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
setTimeout(function() {
|
|
40
|
+
tryNonVWOTracking()
|
|
41
|
+
}, 500)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
var hardLimitTimer = setTimeout(function() {
|
|
45
|
+
hardLimitTimedout = true;
|
|
46
|
+
}, VWO_HARD_TIMEOUT);
|
|
47
|
+
tryNonVWOTracking();
|
|
48
|
+
})(5000 /*MAXIMUM TIME IN SECONDS IN WHICH CODE WILL EXECUTE ANYWAY*/ );
|
|
49
|
+
</script>
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<footer class="footer">
|
|
2
|
+
<div class="container">
|
|
3
|
+
<div class="footer__head-link">
|
|
4
|
+
{{qsFooterData.contractor.text}}
|
|
5
|
+
<a target="_blank" href="{{qsFooterData.contractor.link}}" rel="noopener noreferrer">
|
|
6
|
+
{{qsFooterData.contractor.linkText}}
|
|
7
|
+
</a>
|
|
8
|
+
</div>
|
|
9
|
+
<ul class="footer__links">
|
|
10
|
+
{{#each qsFooterData.links}}
|
|
11
|
+
<li>
|
|
12
|
+
<a
|
|
13
|
+
{{#xif "!this.modal" }}
|
|
14
|
+
href="{{this.url}}"
|
|
15
|
+
target="_blank"
|
|
16
|
+
rel="noopener noreferrer"
|
|
17
|
+
{{/xif}}
|
|
18
|
+
{{#xif "this.modal" }}
|
|
19
|
+
data-bind="modal-link"
|
|
20
|
+
data-load="/modals{{this.url}}index.html"
|
|
21
|
+
{{/xif}}
|
|
22
|
+
>
|
|
23
|
+
{{{this.name}}}{{#xif 'this.company === true'}}{{#if ../this.companyName}} {{{../this.companyName}}}{{/if}}{{/xif}}
|
|
24
|
+
</a>
|
|
25
|
+
</li>
|
|
26
|
+
{{/each}}
|
|
27
|
+
<!--
|
|
28
|
+
- Define the customFooterLinks array of objects in template.js / siteconfig.js
|
|
29
|
+
- e.g customFooterLinks: [{name: 'Test Link', url: '/test/', modal: true}]
|
|
30
|
+
-->
|
|
31
|
+
{{#if this.customFooterLinks}}
|
|
32
|
+
{{#each this.customFooterLinks}}
|
|
33
|
+
<li>
|
|
34
|
+
<a
|
|
35
|
+
{{#xif "!this.modal" }}
|
|
36
|
+
href="{{this.url}}"
|
|
37
|
+
target="_blank"
|
|
38
|
+
rel="noopener noreferrer"
|
|
39
|
+
{{/xif}}
|
|
40
|
+
{{#xif "this.modal" }}
|
|
41
|
+
data-bind="modal-link"
|
|
42
|
+
data-load="/modals{{this.url}}index.html"
|
|
43
|
+
{{/xif}}
|
|
44
|
+
>
|
|
45
|
+
{{{this.name}}}
|
|
46
|
+
</a>
|
|
47
|
+
</li>
|
|
48
|
+
{{/each}}
|
|
49
|
+
{{/if}}
|
|
50
|
+
</ul>
|
|
51
|
+
<p class="footer__copyright">
|
|
52
|
+
Copyright © {{year}} {{qsFooterData.copyright}}
|
|
53
|
+
</p>
|
|
54
|
+
</div>
|
|
55
|
+
</footer>
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
<div class="footer">
|
|
2
|
+
<div class="container">
|
|
3
|
+
{{#xif "this.hideBbb !== true" }}
|
|
4
|
+
<img src="{{assetsPath}}/images/logos/misc/bbb.svg" alt="BBB Accredited Logo" class="footer__bbb-logo footer__bbb">
|
|
5
|
+
{{/xif}}
|
|
6
|
+
<div class="footer__links contractor-link">
|
|
7
|
+
{{quoteFooterData.contractor.text}}
|
|
8
|
+
<a target="_blank" href="{{quoteFooterData.contractor.link}}" rel="noopener noreferrer">
|
|
9
|
+
{{quoteFooterData.contractor.linkText}}
|
|
10
|
+
</a>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="footer__content">
|
|
13
|
+
{{#xif 'this.copyright === "top"'}}
|
|
14
|
+
<div class="footer__copyright">
|
|
15
|
+
© Copyright {{year}} {{website_name}}.
|
|
16
|
+
{{{quoteFooterData.copyright}}}
|
|
17
|
+
<div class="footer__captcha-disclosure">
|
|
18
|
+
{{quoteFooterData.capchaDisclosure.text}}
|
|
19
|
+
<a href="{{quoteFooterData.capchaDisclosure.privacy.url}}" target="_blank">{{quoteFooterData.capchaDisclosure.privacy.text}}</a> and
|
|
20
|
+
<a href="{{quoteFooterData.capchaDisclosure.terms.url}}" target="_blank">{{{quoteFooterData.capchaDisclosure.terms.text}}}</a> apply.
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
{{/xif}}
|
|
24
|
+
{{#xif "this.privacylinks === 'top'"}}
|
|
25
|
+
<div class="footer__links">
|
|
26
|
+
{{#each quoteFooterData.privacyLinks}}
|
|
27
|
+
<a
|
|
28
|
+
{{#xif "this.modal === true" }}
|
|
29
|
+
href="{{../links.privacy}}"
|
|
30
|
+
data-load="{{#if ../this.variation}}/modals/privacy/index.html{{else}}./modals/privacy/index.html{{/if}}"
|
|
31
|
+
data-bind="modal-link"
|
|
32
|
+
data-anchor="#{{this.anchor}}"
|
|
33
|
+
{{/xif}}
|
|
34
|
+
{{#xif "this.modal === false" }}
|
|
35
|
+
href="{{this.anchor}}"
|
|
36
|
+
target="_blank"
|
|
37
|
+
rel="noopener noreferrer"
|
|
38
|
+
{{/xif}}
|
|
39
|
+
>{{{this.text}}}</a>
|
|
40
|
+
{{/each}}
|
|
41
|
+
<!--
|
|
42
|
+
- Define the customPrivacyLinks array of objects in template.js / siteconfig.js
|
|
43
|
+
- e.g customPrivacyLinks: [{ text: 'This is a custom link', anchor: 'ccpa' }]
|
|
44
|
+
-->
|
|
45
|
+
{{#if this.customPrivacyLinks}}
|
|
46
|
+
{{#each this.customPrivacyLinks}}
|
|
47
|
+
<a
|
|
48
|
+
{{#xif "this.modal === true" }}
|
|
49
|
+
href="{{../links.privacy}}"
|
|
50
|
+
data-load="{{#if ../this.variation}}/modals/privacy/index.html{{else}}./modals/privacy/index.html{{/if}}"
|
|
51
|
+
data-bind="modal-link"
|
|
52
|
+
data-anchor="#{{this.anchor}}"
|
|
53
|
+
{{/xif}}
|
|
54
|
+
{{#xif "this.modal === false" }}
|
|
55
|
+
href="{{this.anchor}}"
|
|
56
|
+
target="_blank"
|
|
57
|
+
rel="noopener noreferrer"
|
|
58
|
+
{{/xif}}
|
|
59
|
+
>{{{this.text}}}</a>
|
|
60
|
+
{{/each}}
|
|
61
|
+
{{/if}}
|
|
62
|
+
</div>
|
|
63
|
+
{{/xif}}
|
|
64
|
+
{{#xif 'this.copyright === "middle"'}}
|
|
65
|
+
<div class="footer__copyright">
|
|
66
|
+
© Copyright {{year}} {{website_name}}.
|
|
67
|
+
{{{quoteFooterData.copyright}}}
|
|
68
|
+
<div class="footer__captcha-disclosure">
|
|
69
|
+
{{quoteFooterData.capchaDisclosure.text}}
|
|
70
|
+
<a href="{{quoteFooterData.capchaDisclosure.privacy.url}}" target="_blank">{{quoteFooterData.capchaDisclosure.privacy.text}}</a> and
|
|
71
|
+
<a href="{{quoteFooterData.capchaDisclosure.terms.url}}" target="_blank">{{{quoteFooterData.capchaDisclosure.terms.text}}}</a> apply.
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
{{/xif}}
|
|
75
|
+
|
|
76
|
+
<div class="footer__links">
|
|
77
|
+
{{#each quoteFooterData.links}}
|
|
78
|
+
<a href="{{#if this.modal}}/{{this.url}}{{else}}{{this.url}}{{/if}}" {{#xif "this.modal === true" }}
|
|
79
|
+
data-load="{{#if ../this.variation}}/modals/{{this.url}}/index.html{{else}}./modals/{{this.url}}/index.html{{/if}}" data-bind="modal-link"{{/xif}} {{#if this.target}}target="{{this.target}}" {{#xif "this.target === '_blank'"}} rel="noopener noreferrer"{{/xif}} {{/if}}>
|
|
80
|
+
{{{this.text}}}
|
|
81
|
+
</a>
|
|
82
|
+
{{/each}}
|
|
83
|
+
<!--
|
|
84
|
+
- Define the customFooterLinks array of objects in template.js / siteconfig.js
|
|
85
|
+
- e.g customFooterLinks: [{url: '/test', text: 'Test Link'}]
|
|
86
|
+
-->
|
|
87
|
+
{{#if this.customFooterLinks}}
|
|
88
|
+
{{#each this.customFooterLinks}}
|
|
89
|
+
<a href="{{#if this.modal}}/{{this.url}}{{else}}{{this.url}}{{/if}}" {{#xif "this.modal === true" }}data-load="{{#if ../this.variation}}/modals/{{this.url}}/index.html{{else}}./modals/{{this.url}}/index.html{{/if}}" data-bind="modal-link"{{/xif}} {{#if this.target}}target="{{this.target}}" {{#xif "this.target === '_blank'"}} rel="noopener noreferrer"{{/xif}}{{/if}}>{{{this.text}}}</a>
|
|
90
|
+
{{/each}}
|
|
91
|
+
{{/if}}
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
{{#xif "this.privacylinks === 'bottom'"}}
|
|
95
|
+
<div class="footer__links">
|
|
96
|
+
{{#each quoteFooterData.privacyLinks}}
|
|
97
|
+
<a
|
|
98
|
+
{{#xif "this.modal === true" }}
|
|
99
|
+
href="{{../links.privacy}}"
|
|
100
|
+
data-load="{{#if ../this.variation}}/modals/privacy/index.html{{else}}./modals/privacy/index.html{{/if}}"
|
|
101
|
+
data-bind="modal-link"
|
|
102
|
+
data-anchor="#{{this.anchor}}"
|
|
103
|
+
{{/xif}}
|
|
104
|
+
{{#xif "this.modal === false" }}
|
|
105
|
+
href="{{this.anchor}}"
|
|
106
|
+
target="_blank"
|
|
107
|
+
rel="noopener noreferrer"
|
|
108
|
+
{{/xif}}
|
|
109
|
+
>{{{this.text}}}</a>
|
|
110
|
+
{{/each}}
|
|
111
|
+
<!--
|
|
112
|
+
- Define the customPrivacyLinks array of objects in template.js / siteconfig.js
|
|
113
|
+
- e.g customPrivacyLinks: [{ text: 'This is a custom link', anchor: 'ccpa' }]
|
|
114
|
+
-->
|
|
115
|
+
{{#if this.customPrivacyLinks}}
|
|
116
|
+
{{#each this.customPrivacyLinks}}
|
|
117
|
+
<a
|
|
118
|
+
{{#xif "this.modal === true" }}
|
|
119
|
+
href="{{../links.privacy}}"
|
|
120
|
+
data-load="{{#if ../this.variation}}/modals/privacy/index.html{{else}}./modals/privacy/index.html{{/if}}"
|
|
121
|
+
data-bind="modal-link"
|
|
122
|
+
data-anchor="#{{this.anchor}}"
|
|
123
|
+
{{/xif}}
|
|
124
|
+
{{#xif "this.modal === false" }}
|
|
125
|
+
href="{{this.anchor}}"
|
|
126
|
+
target="_blank"
|
|
127
|
+
rel="noopener noreferrer"
|
|
128
|
+
{{/xif}}
|
|
129
|
+
>{{{this.text}}}</a>
|
|
130
|
+
{{/each}}
|
|
131
|
+
{{/if}}
|
|
132
|
+
</div>
|
|
133
|
+
{{/xif}}
|
|
134
|
+
|
|
135
|
+
{{#xif 'this.copyright === "bottom"'}}
|
|
136
|
+
<div class="footer__copyright">
|
|
137
|
+
© Copyright {{year}} {{website_name}}.
|
|
138
|
+
{{{quoteFooterData.copyright}}}
|
|
139
|
+
<div class="footer__captcha-disclosure">
|
|
140
|
+
{{quoteFooterData.capchaDisclosure.text}}
|
|
141
|
+
<a href="{{quoteFooterData.capchaDisclosure.privacy.url}}" target="_blank">{{quoteFooterData.capchaDisclosure.privacy.text}}</a> and
|
|
142
|
+
<a href="{{quoteFooterData.capchaDisclosure.terms.url}}" target="_blank">{{{quoteFooterData.capchaDisclosure.terms.text}}}</a> apply.
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
{{/xif}}
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
<div class="footer container">
|
|
2
|
+
{{#xif "this.hideBbb !== true" }}
|
|
3
|
+
<img src="{{assetsPath}}/images/logos/misc/bbb.svg" alt="BBB Accredited Logo" class="footer__bbb-logo footer__bbb">
|
|
4
|
+
{{/xif}}
|
|
5
|
+
<div class="footer__links contractor-link">
|
|
6
|
+
{{quoteFooterData.contractor.text}}
|
|
7
|
+
<a target="_blank" href="{{quoteFooterData.contractor.link}}" rel="noopener noreferrer">
|
|
8
|
+
{{quoteFooterData.contractor.linkText}}
|
|
9
|
+
</a>
|
|
10
|
+
</div>
|
|
11
|
+
{{#xif 'this.copyright === "top"'}}
|
|
12
|
+
<div class="footer__row">
|
|
13
|
+
<div class="footer__copyright">
|
|
14
|
+
© Copyright {{year}} {{company_name}}. {{{quoteFooterData.copyright}}}
|
|
15
|
+
</div>
|
|
16
|
+
<div class="footer__captcha-disclosure">
|
|
17
|
+
{{quoteFooterData.capchaDisclosure.text}}
|
|
18
|
+
<a href="{{quoteFooterData.capchaDisclosure.privacy.url}}" target="_blank">{{quoteFooterData.capchaDisclosure.privacy.text}}</a> and
|
|
19
|
+
<a href="{{quoteFooterData.capchaDisclosure.terms.url}}" target="_blank">{{{quoteFooterData.capchaDisclosure.terms.text}}}</a> apply.
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
{{/xif}}
|
|
23
|
+
{{#xif "this.privacylinks === 'top'"}}
|
|
24
|
+
<div class="footer__row">
|
|
25
|
+
<ul class="footer__links">
|
|
26
|
+
{{#each quoteFooterData.privacyLinks}}
|
|
27
|
+
<li>
|
|
28
|
+
<a
|
|
29
|
+
{{#xif "this.modal === true" }}
|
|
30
|
+
href="{{../links.privacy}}"
|
|
31
|
+
data-load="{{#if ../this.variation}}/modals/privacy/index.html{{else}}./modals/privacy/index.html{{/if}}"
|
|
32
|
+
data-bind="modal-link"
|
|
33
|
+
data-anchor="#{{this.anchor}}"
|
|
34
|
+
{{/xif}}
|
|
35
|
+
{{#xif "this.modal === false" }}
|
|
36
|
+
href="{{this.anchor}}"
|
|
37
|
+
target="_blank"
|
|
38
|
+
rel="noopener noreferrer"
|
|
39
|
+
{{/xif}}
|
|
40
|
+
>
|
|
41
|
+
{{{this.text}}}
|
|
42
|
+
</a>
|
|
43
|
+
</li>
|
|
44
|
+
{{/each}}
|
|
45
|
+
<!--
|
|
46
|
+
- Define the customPrivacyLinks array of objects in template.js / siteconfig.js
|
|
47
|
+
- e.g customPrivacyLinks: [{ text: 'This is a custom link', anchor: 'ccpa' }]
|
|
48
|
+
-->
|
|
49
|
+
{{#if this.customPrivacyLinks}}
|
|
50
|
+
{{#each this.customPrivacyLinks}}
|
|
51
|
+
<li>
|
|
52
|
+
<a
|
|
53
|
+
{{#xif "this.modal === true" }}
|
|
54
|
+
href="{{../links.privacy}}"
|
|
55
|
+
data-load="{{#if ../this.variation}}/modals/privacy/index.html{{else}}./modals/privacy/index.html{{/if}}"
|
|
56
|
+
data-bind="modal-link"
|
|
57
|
+
data-anchor="#{{this.anchor}}"
|
|
58
|
+
{{/xif}}
|
|
59
|
+
{{#xif "this.modal === false" }}
|
|
60
|
+
href="{{this.anchor}}"
|
|
61
|
+
target="_blank"
|
|
62
|
+
rel="noopener noreferrer"
|
|
63
|
+
{{/xif}}
|
|
64
|
+
>
|
|
65
|
+
{{{this.text}}}
|
|
66
|
+
</a>
|
|
67
|
+
</li>
|
|
68
|
+
{{/each}}
|
|
69
|
+
{{/if}}
|
|
70
|
+
</ul>
|
|
71
|
+
</div>
|
|
72
|
+
{{/xif}}
|
|
73
|
+
<div class="footer__row">
|
|
74
|
+
<ul class="footer__links">
|
|
75
|
+
{{#each quoteFooterData.links}}
|
|
76
|
+
<li>
|
|
77
|
+
<a href="{{#if this.modal}}/{{this.url}}{{else}}{{this.url}}{{/if}}" {{#xif "this.modal === true" }}
|
|
78
|
+
data-load="{{#if ../this.variation}}/modals/{{this.url}}/index.html{{else}}./modals/{{this.url}}/index.html{{/if}}" data-bind="modal-link"{{/xif}} {{#if this.target}}target="{{this.target}}"{{#xif "this.target === '_blank'"}} rel="noopener noreferrer"{{/xif}}{{/if}}>{{{this.text}}}</a>
|
|
79
|
+
</li>
|
|
80
|
+
{{/each}}
|
|
81
|
+
<!--
|
|
82
|
+
- Define the customFooterLinks array of objects in template.js / siteconfig.js
|
|
83
|
+
- e.g customFooterLinks: [{url: 'test', text: 'Test Link'}]
|
|
84
|
+
-->
|
|
85
|
+
{{#if this.customFooterLinks}}
|
|
86
|
+
{{#each this.customFooterLinks}}
|
|
87
|
+
<li>
|
|
88
|
+
<a href="{{#if this.modal}}/{{this.url}}{{else}}{{this.url}}{{/if}}" {{#xif "this.modal === true" }}
|
|
89
|
+
data-load="{{#if ../this.variation}}/modals/{{this.url}}/index.html{{else}}./modals/{{this.url}}/index.html{{/if}}" data-bind="modal-link"{{/xif}} {{#if this.target}}target="{{this.target}}"{{#xif "this.target === '_blank'"}} rel="noopener noreferrer"{{/xif}}{{/if}}>{{{this.text}}}</a>
|
|
90
|
+
</li>
|
|
91
|
+
{{/each}}
|
|
92
|
+
{{/if}}
|
|
93
|
+
</ul>
|
|
94
|
+
</div>
|
|
95
|
+
{{#xif 'this.copyright === "middle"'}}
|
|
96
|
+
<div class="footer__row">
|
|
97
|
+
<div class="footer__copyright">
|
|
98
|
+
© Copyright {{year}} {{company_name}}. {{{quoteFooterData.copyright}}}
|
|
99
|
+
</div>
|
|
100
|
+
<div class="footer__captcha-disclosure">
|
|
101
|
+
{{quoteFooterData.capchaDisclosure.text}}
|
|
102
|
+
<a href="{{quoteFooterData.capchaDisclosure.privacy.url}}" target="_blank">{{quoteFooterData.capchaDisclosure.privacy.text}}</a> and
|
|
103
|
+
<a href="{{quoteFooterData.capchaDisclosure.terms.url}}" target="_blank">{{{quoteFooterData.capchaDisclosure.terms.text}}}</a> apply.
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
{{/xif}}
|
|
107
|
+
{{#xif "this.privacylinks === 'bottom'"}}
|
|
108
|
+
<div class="footer__row">
|
|
109
|
+
<ul class="footer__links">
|
|
110
|
+
{{#each quoteFooterData.privacyLinks}}
|
|
111
|
+
<li>
|
|
112
|
+
<a
|
|
113
|
+
{{#xif "this.modal === true" }}
|
|
114
|
+
href="{{../links.privacy}}"
|
|
115
|
+
data-load="{{#if ../this.variation}}/modals/privacy/index.html{{else}}./modals/privacy/index.html{{/if}}"
|
|
116
|
+
data-bind="modal-link"
|
|
117
|
+
data-anchor="#{{this.anchor}}"
|
|
118
|
+
{{/xif}}
|
|
119
|
+
{{#xif "this.modal === false" }}
|
|
120
|
+
href="{{this.anchor}}"
|
|
121
|
+
target="_blank"
|
|
122
|
+
rel="noopener noreferrer"
|
|
123
|
+
{{/xif}}
|
|
124
|
+
>
|
|
125
|
+
{{{this.text}}}
|
|
126
|
+
</a>
|
|
127
|
+
</li>
|
|
128
|
+
{{/each}}
|
|
129
|
+
<!--
|
|
130
|
+
- Define the customPrivacyLinks array of objects in template.js / siteconfig.js
|
|
131
|
+
- e.g customPrivacyLinks: [{ text: 'This is a custom link', anchor: 'ccpa' }]
|
|
132
|
+
-->
|
|
133
|
+
{{#if this.customPrivacyLinks}}
|
|
134
|
+
{{#each this.customPrivacyLinks}}
|
|
135
|
+
<li>
|
|
136
|
+
<a
|
|
137
|
+
{{#xif "this.modal === true" }}
|
|
138
|
+
href="{{../links.privacy}}"
|
|
139
|
+
data-load="{{#if ../this.variation}}/modals/privacy/index.html{{else}}./modals/privacy/index.html{{/if}}"
|
|
140
|
+
data-bind="modal-link"
|
|
141
|
+
data-anchor="#{{this.anchor}}"
|
|
142
|
+
{{/xif}}
|
|
143
|
+
{{#xif "this.modal === false" }}
|
|
144
|
+
href="{{this.anchor}}"
|
|
145
|
+
target="_blank"
|
|
146
|
+
rel="noopener noreferrer"
|
|
147
|
+
{{/xif}}
|
|
148
|
+
>
|
|
149
|
+
{{{this.text}}}
|
|
150
|
+
</a>
|
|
151
|
+
</li>
|
|
152
|
+
{{/each}}
|
|
153
|
+
{{/if}}
|
|
154
|
+
</ul>
|
|
155
|
+
</div>
|
|
156
|
+
{{/xif}}
|
|
157
|
+
{{#xif 'this.copyright === "bottom"'}}
|
|
158
|
+
<div class="footer__row">
|
|
159
|
+
<div class="footer__copyright">
|
|
160
|
+
© Copyright {{year}} {{company_name}}. {{{quoteFooterData.copyright}}}
|
|
161
|
+
</div>
|
|
162
|
+
<div class="footer__captcha-disclosure">
|
|
163
|
+
{{quoteFooterData.capchaDisclosure.text}}
|
|
164
|
+
<a href="{{quoteFooterData.capchaDisclosure.privacy.url}}" target="_blank">{{quoteFooterData.capchaDisclosure.privacy.text}}</a> and
|
|
165
|
+
<a href="{{quoteFooterData.capchaDisclosure.terms.url}}" target="_blank">{{{quoteFooterData.capchaDisclosure.terms.text}}}</a> apply.
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
{{/xif}}
|
|
169
|
+
</div>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
|
|
3
|
+
<head lang="en">
|
|
4
|
+
<script>
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
8
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
9
|
+
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
|
|
10
|
+
<title>modSite</title>
|
|
11
|
+
|
|
12
|
+
<link href="/styles/home.css" rel="stylesheet" type="text/css" />
|
|
13
|
+
</head>
|
|
14
|
+
|
|
15
|
+
<body>
|
|
16
|
+
<h1>
|
|
17
|
+
It works!
|
|
18
|
+
</h1>
|
|
19
|
+
|
|
20
|
+
<form id="form" class="form" novalidate="novalidate">
|
|
21
|
+
<div id="step1" class="step step--active" data-bind="step">
|
|
22
|
+
<input type="tel" name="zip" placeholder="Zip" maxlength="5" />
|
|
23
|
+
</div>
|
|
24
|
+
</form>
|
|
25
|
+
|
|
26
|
+
<!-- build:js /scripts/vendor/jquery.js -->
|
|
27
|
+
<script src="/node_modules/jquery/dist/jquery.js"></script>
|
|
28
|
+
<!-- endbuild -->
|
|
29
|
+
|
|
30
|
+
<!-- build:js /scripts/vendor/jquery.mask.min.js -->
|
|
31
|
+
<script src="/node_modules/jquery-mask-plugin/dist/jquery.mask.min.js"></script>
|
|
32
|
+
<!-- endbuild -->
|
|
33
|
+
|
|
34
|
+
<script src="/scripts/mod-utils.js"></script>
|
|
35
|
+
|
|
36
|
+
<script src="/scripts/mod-form.js"></script>
|
|
37
|
+
|
|
38
|
+
<script src="/scripts/compiled/home.js"></script>
|
|
39
|
+
|
|
40
|
+
<!-- build:js(src) /scripts/es6.js -->
|
|
41
|
+
<script src="/scripts/es6-1.js"></script>
|
|
42
|
+
<script src="/scripts/es6-2.js"></script>
|
|
43
|
+
<!-- endbuild -->
|
|
44
|
+
</body>
|
|
45
|
+
|
|
46
|
+
</html>
|