");vwo_$('head').append(_vwo_sel);return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("HEAD")}}, R_722072_156_1_2_0:{ fn:function(log,nonce=''){return (function(x) {
if(!vwo_$.fn.vwoRevertHtml){
return;
};
var ctx=vwo_$(x),el;
/*vwo_debug log("Revert","content",""); vwo_debug*/;
el=vwo_$('[vwo-element-id="1744048774370"]');
el.revertContentOp().remove();})("HEAD")}}, C_722072_156_1_2_1:{ fn:function(log,nonce=''){return (function(x) {})(".w-inline-block,.w-button,input.w-button,.splash,.splash .mw-ol-btn.mw-ol-whitemw-ol-btn, .splash .mw-ol-btn.mw-ol-whitemw-ol-btn:visited,.splash .logo-link,.splash .btn,.nav,.mw-ol-btn, .mw-ol-btn:visited,.mw-ol-btn.mw-ol-whitemw-ol-btn, .mw-ol-btn.mw-ol-whitemw-ol-btn:visited,.mw-ol-btn.mw-ol-white,.overlay2,.div-block-42,.splash-h1,.div-block-18,.sidephoto,.link-3, .link-3:visited,.stafflink,.w-background-video,.w-background-video > video,.w-background-video > video::-webkit-media-controls-start-playback-button,.background-video,.mw-ol-btn,.mw-ol-btn.mw-ol-whitemw-ol-btn.nav,.w-hidden-small,.link-block,.btn,.w-hidden-tiny,.btn.whitebtn,.btn.whitebtn.onorange,.div-block-42 p,.div-block-17,.dark,.darkpara,.givingtues,.important-text,.heading-5,.btn, .btn:visited,.link-2,.big,.splash .pushdown__col,.splash .pushdown__content,.splash .pushdown-copy > *:last-child,.splash .grid-area,.splash .grid-card,.splash .grid-card div > p,.splash .grid-card div > p > span,.splash .grid-card .flex-col,.splash .grid-card div > p > b,.splash .grid-card button,.splash div div.centered,.splash div a.other-link,.splash .grid-card p:nth-of-type(3),.splash .heading-5,.splash .nav,.splash .dark,/* .splash .grid-card p:nth-of-type(3),.splash .div-block-17,.splash p.dark")}}, R_722072_156_1_2_1:{ fn:function(log,nonce=''){return (function(x) {
if(!vwo_$.fn.vwoRevertHtml){
return;
};
})(".w-inline-block,.w-button,input.w-button,.splash,.splash .mw-ol-btn.mw-ol-whitemw-ol-btn, .splash .mw-ol-btn.mw-ol-whitemw-ol-btn:visited,.splash .logo-link,.splash .btn,.nav,.mw-ol-btn, .mw-ol-btn:visited,.mw-ol-btn.mw-ol-whitemw-ol-btn, .mw-ol-btn.mw-ol-whitemw-ol-btn:visited,.mw-ol-btn.mw-ol-white,.overlay2,.div-block-42,.splash-h1,.div-block-18,.sidephoto,.link-3, .link-3:visited,.stafflink,.w-background-video,.w-background-video > video,.w-background-video > video::-webkit-media-controls-start-playback-button,.background-video,.mw-ol-btn,.mw-ol-btn.mw-ol-whitemw-ol-btn.nav,.w-hidden-small,.link-block,.btn,.w-hidden-tiny,.btn.whitebtn,.btn.whitebtn.onorange,.div-block-42 p,.div-block-17,.dark,.darkpara,.givingtues,.important-text,.heading-5,.btn, .btn:visited,.link-2,.big,.splash .pushdown__col,.splash .pushdown__content,.splash .pushdown-copy > *:last-child,.splash .grid-area,.splash .grid-card,.splash .grid-card div > p,.splash .grid-card div > p > span,.splash .grid-card .flex-col,.splash .grid-card div > p > b,.splash .grid-card button,.splash div div.centered,.splash div a.other-link,.splash .grid-card p:nth-of-type(3),.splash .heading-5,.splash .nav,.splash .dark,/* .splash .grid-card p:nth-of-type(3),.splash .div-block-17,.splash p.dark")}}, C_722072_156_1_3_0:{ fn:function(log,nonce=''){return (function(x) {;var _vwo_sel=vwo_$("");vwo_$('head').append(_vwo_sel);return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("HEAD")}}, R_722072_156_1_3_0:{ fn:function(log,nonce=''){return (function(x) {
if(!vwo_$.fn.vwoRevertHtml){
return;
};
var ctx=vwo_$(x),el;
/*vwo_debug log("Revert","content",""); vwo_debug*/;
el=vwo_$('[vwo-element-id="1744048774372"]');
el.revertContentOp().remove();})("HEAD")}}, C_722072_156_1_3_1:{ fn:function(log,nonce=''){return (function(x) {})(".w-inline-block,.w-button,input.w-button,.splash,.splash .mw-ol-btn.mw-ol-whitemw-ol-btn, .splash .mw-ol-btn.mw-ol-whitemw-ol-btn:visited,.splash .logo-link,.splash .btn,.nav,.mw-ol-btn, .mw-ol-btn:visited,.mw-ol-btn.mw-ol-whitemw-ol-btn, .mw-ol-btn.mw-ol-whitemw-ol-btn:visited,.mw-ol-btn.mw-ol-white,.overlay2,.div-block-42,.splash-h1,.div-block-18,.sidephoto,.link-3, .link-3:visited,.stafflink,.w-background-video,.w-background-video > video,.w-background-video > video::-webkit-media-controls-start-playback-button,.background-video,.mw-ol-btn,.mw-ol-btn.mw-ol-whitemw-ol-btn.nav,.w-hidden-small,.link-block,.btn,.w-hidden-tiny,.btn.whitebtn,.btn.whitebtn.onorange,.div-block-42 p,.div-block-17,.dark,.darkpara,.givingtues,.important-text,.heading-5,.btn, .btn:visited,.link-2,.big,.splash .pushdown__col,.splash .pushdown__content,.splash .pushdown-copy > *:last-child,.splash .grid-area,.splash .grid-card,.splash .grid-card div > p,.splash .grid-card div > p > span,.splash .grid-card .flex-col,.splash .grid-card div > p > b,.splash .grid-card button,.splash div div.centered,.splash div a.other-link,.splash .grid-card p:nth-of-type(3),.splash .heading-5,/* .splash .grid-card p:nth-of-type(3),.splash .div-block-17,.splash .nav,.splash .dark,.splash p.dark")}}, R_722072_156_1_3_1:{ fn:function(log,nonce=''){return (function(x) {
if(!vwo_$.fn.vwoRevertHtml){
return;
};
})(".w-inline-block,.w-button,input.w-button,.splash,.splash .mw-ol-btn.mw-ol-whitemw-ol-btn, .splash .mw-ol-btn.mw-ol-whitemw-ol-btn:visited,.splash .logo-link,.splash .btn,.nav,.mw-ol-btn, .mw-ol-btn:visited,.mw-ol-btn.mw-ol-whitemw-ol-btn, .mw-ol-btn.mw-ol-whitemw-ol-btn:visited,.mw-ol-btn.mw-ol-white,.overlay2,.div-block-42,.splash-h1,.div-block-18,.sidephoto,.link-3, .link-3:visited,.stafflink,.w-background-video,.w-background-video > video,.w-background-video > video::-webkit-media-controls-start-playback-button,.background-video,.mw-ol-btn,.mw-ol-btn.mw-ol-whitemw-ol-btn.nav,.w-hidden-small,.link-block,.btn,.w-hidden-tiny,.btn.whitebtn,.btn.whitebtn.onorange,.div-block-42 p,.div-block-17,.dark,.darkpara,.givingtues,.important-text,.heading-5,.btn, .btn:visited,.link-2,.big,.splash .pushdown__col,.splash .pushdown__content,.splash .pushdown-copy > *:last-child,.splash .grid-area,.splash .grid-card,.splash .grid-card div > p,.splash .grid-card div > p > span,.splash .grid-card .flex-col,.splash .grid-card div > p > b,.splash .grid-card button,.splash div div.centered,.splash div a.other-link,.splash .grid-card p:nth-of-type(3),.splash .heading-5,/* .splash .grid-card p:nth-of-type(3),.splash .div-block-17,.splash .nav,.splash .dark,.splash p.dark")}}, ce79_4_1:{ fn:function(executeTrigger, vwo_$) {
(// Example Code: This code will stop polling after 5 sec of dom ready (on calling executeTrigger() method)
function() {
vwo_$(document).ready(function () {
// Waiting for 5 more seconds
setTimeout(function () {
// Call this method to stop the polling
executeTrigger();
}, 5000);
});
}
)()
}}, R_722072_79_1_3_1:{ fn:function(){return (function(x) { try{
var el,ctx=vwo_$(x);
/*vwo_debug log("Revert","addElement","body"); vwo_debug*/(el=vwo_$('[vwo-element-id="1734023424996"]')).remove();
var ctx=vwo_$(x),el;
/*vwo_debug log("Revert","content",""); vwo_debug*/;
el=vwo_$('[vwo-element-id="1734023425072"]');
el.revertContentOp().remove();
return vwo_$('head')[0] && vwo_$('head')[0].lastChild; } catch(e) {} })("HEAD")}}, C_722072_157_1_2_0:{ fn:function(log,nonce=''){return (function(x) {;var _vwo_sel=vwo_$("");vwo_$('head').append(_vwo_sel);return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("HEAD")}}, R_722072_157_1_2_0:{ fn:function(log,nonce=''){return (function(x) {
if(!vwo_$.fn.vwoRevertHtml){
return;
};
var ctx=vwo_$(x),el;
/*vwo_debug log("Revert","content",""); vwo_debug*/;
el=vwo_$('[vwo-element-id="1744062807510"]');
el.revertContentOp().remove();})("HEAD")}}, C_722072_157_1_2_1:{ fn:function(log,nonce=''){return (function(x) {var el,ctx=vwo_$(x);
/*vwo_debug log("addElement","body"); vwo_debug*/!(el=vwo_$("body")).find('[vwo-op-1744062793557=""]').length&&el.vwoElement({html:'
\n \x3c!--
--\x3e\n
\n
\n ร \n
\n
\n
\n
\n
\n \x3c!-- \n If you have a moment...\n --\x3e\n \nYou can be the difference in a child making a decision to follow Jesus at camp this summer. Will you help a kid get to Eagle Lake Camps of The Navigators this summer? Give here ยป\n
\n \n
\n
\n
\n
\n
\n \x3c!--
--\x3e\n
',position:"append"});})("body")}}, C_722072_121_1_2_0:{ fn:function(log,nonce=''){return (function(x) {
try{
var _vwo_sel = vwo_$("`);
!vwo_$("head").find('#1734023482004').length && vwo_$('head').append(_vwo_sel);}catch(e) {console.error(e)}
try{}catch(e) {console.error(e)}
try{const DEFAULT_DONATION_FREQUENCY="One-Time";function getQueryParam(e){let t=window.location.search.match(e+"=([^&]*)");return t?t[1]:void 0}function initOnElement(e,t,n){const i=e.getElementsByTagName(t);return i.length?n(i):setTimeout(initOnElement,500,e,t,n)}window.DonationForm=window.DonationForm||{recurring_checkbox:null,submit_button:null,other_amt:null,gift_array_elements:[],onetime_gift_array:[],recurring_gift_array:[10,20,30,40],setRecurring:function(e){console.log("setRecurring",e,this.recurring_checkbox),(!this.recurring_checkbox.checked&&e||this.recurring_checkbox.checked&&!e)&&(console.log("checked",this.recurring_checkbox.checked,"(before click)"),this.recurring_checkbox.click(),console.log("checked",this.recurring_checkbox.checked,"(after click)"))},selectGiftArray:function(e){this.gift_array_elements[e].click()},modifyGiftArray:function(e){this.gift_array_elements.forEach((t,n)=>{t.value=e[n],t.textContent="$"+e[n]})},setOneTimeGiftArrayValues:function(){let e=this;this.gift_array_elements.forEach(t=>{e.onetime_gift_array.push(parseInt(t.value))})},setFirstNamePersonalization:function(e){const t=void 0===getQueryParam("first_name")||""===getQueryParam("first_name")?"Friend":getQueryParam("first_name");for(let n=0;n<=e.length-1;n++)e[n].innerHTML.includes("[Name]")&&(e[n].innerHTML=e[n].innerHTML.replace(/\[[^\]]*]/,t)),e[n].innerHTML.includes("Friend")&&(e[n].innerHTML=e[n].innerHTML.replace("Friend",t))},init:function(){document.querySelectorAll(".tab").forEach(e=>{e.addEventListener("click",(function(e){this.classList.add("selected"),this.classList.contains("recurring")?(document.querySelector(".tab.onetime").classList.remove("selected"),DonationForm.setRecurring(!0)):(document.querySelector(".tab.recurring").classList.remove("selected"),DonationForm.setRecurring(!1))}))}),this.hasOwnProperty("setOneTimeGiftArrayValues")&&this.setOneTimeGiftArrayValues(),this.setRecurring(!1),this.hasOwnProperty("selectGiftArray")&&this.selectGiftArray(0)}},initOnElement(document,"c-donate-community-staff-information",(function(e){initOnElement(e[0],"div",(function(e){e[0].querySelectorAll("div.slds-col")[0].classList.add("page-image");const t=e[0].querySelectorAll("div.slds-col")[1];if(t.classList.add("donation-form-content"),t.querySelector(".tabs"))return;const n=t.querySelectorAll("div,lightning-formatted-rich-text");for(let e=0;e<=n.length-1;e++)0==e&&n[e].classList.add("page-title"),1==e&&n[e].classList.add("page-action-text"),2==e&&n[e].classList.add("donation-form"),3==e&&n[e].classList.add("bottom-title"),4==e&&n[e].classList.add("page-text");n[4]&&n[4].shadowRoot&&n[4].shadowRoot.querySelectorAll("div p")&&DonationForm.setFirstNamePersonalization(n[4].shadowRoot.querySelectorAll("div p")),n[1].before(n[4]);const i=document.createElement("div");i.classList.add("tabs"),i.innerHTML='One-Time Gift
Recurring Gift
',n[2].before(i),initOnElement(n[2],"c-donate-community-donate-buttons",(function(e){initOnElement(e[0].shadowRoot.querySelector("div"),"div",(function(e){for(let t=0;tdialog.donation-interrupter {\n --dialog-margin: 2rem;\n --dialog-padding: 3rem;\n position: fixed;\n outline: none;\n border: none;\n padding: 0;\n box-sizing: border-box;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 800px;\n}\ndialog::backdrop { background-color: rgba(0, 0, 0, 0.4); }\ndialog.donation-interrupter > .wrapper {\n position: relative;\n margin: calc(var(--dialog-padding));\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\ndialog.donation-interrupter section {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\ndialog.donation-interrupter section > div {\n display: flex;\n flex-direction: row;\n gap: 1rem;\n}\ndialog.donation-interrupter section.donation-interrupter--cta button > * {\n font-family: inherit;\n color: inherit;\n background-color: transparent;\n display: inline;\n padding: 0;\n margin: 0;\n font-size: inherit !important;\n text-transform: inherit;\n}\ndialog.donation-interrupter button[data-action=\"dismiss\"] {\n --scale: 3;\n position: absolute;\n top: -1.5rem;\n right: -1.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n background: none;\n border: none;\n outline: none;\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n line-height: 0;\n width: calc(1rem * var(--scale));\n height: calc(1rem * var(--scale));\n font-size: calc(1rem * var(--scale));\n}\ndialog.donation-interrupter > div span[before]::before { content: attr(before); }\ndialog.donation-interrupter button.btn-dismiss {\n color: rgba(0, 0, 0, 0.5);\n background-color: rgba(255, 255, 255, 0.5);\n border-radius: 100%;\n}\ndialog.donation-interrupter button[data-action=\"dismiss\"] + section { max-width: calc(100% - 1rem); } /* clear dismiss button */\n@media only screen and (max-width: 500px) {\n dialog.donation-interrupter section.donation-interrupter--cta > div { flex-direction: column; }\n dialog.donation-interrupter {\n --dialog-margin: 0.5rem !important;\n --dialog-padding: 0.5rem !important;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 100%;\n max-height: calc(100vh - calc(2 * var(--dialog-margin)));\n height: min-content;\n overflow: hidden;\n }\n dialog.donation-interrupter > .wrapper { padding: .75rem !important; }\n}\n@media only screen and (max-width: 375px) {\n dialog.donation-interrupter {\n --dialog-margin: 0rem !important;\n --dialog-padding: 0.5rem !important;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 100%;\n max-height: 100vh;\n height: 100vh;\n overflow: hidden;\n border-radius: 0 !important;\n }\n dialog.donation-interrupter > .wrapper {\n padding: .75rem !important;\n height: calc(100% - 2* 0.5rem) !important;\n overflow: hidden;\n justify-content: space-evenly;\n }\n}\n/* NAV THEME ===================================================================================== */\ndialog.donation-interrupter[theme=\"NAV\"] h1,\ndialog.donation-interrupter[theme=\"NAV\"] h2,\ndialog.donation-interrupter[theme=\"NAV\"] h3,\ndialog.donation-interrupter[theme=\"NAV\"] h4,\ndialog.donation-interrupter[theme=\"NAV\"] h5,\ndialog.donation-interrupter[theme=\"NAV\"] h6,\ndialog.donation-interrupter[theme=\"NAV\"] ul,\ndialog.donation-interrupter[theme=\"NAV\"] p {\n margin: 0;\n line-height: 1.5;\n}\ndialog.donation-interrupter[theme=\"NAV\"] {\n --primary-color: #e16b2a;\n --secondary-color: #008C95;\n --dialog-padding: 1.5rem;\n border-radius: 0.5rem;\n font: 16px \"Montserrat\";\n color: #54473f;\n}\ndialog.donation-interrupter[theme=\"NAV\"] button[data-action=\"dismiss\"] {\n --scale: 4;\n top: -2rem;\n right: -2rem;\n display: none;\n}\ndialog.donation-interrupter[theme=\"NAV\"] .wrapper {\n border: 2px solid var(--secondary-color);\n padding: 1.5rem;\n}\ndialog.donation-interrupter[theme=\"NAV\"] .wrapper > section {\n gap: 0.5rem;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 {\n margin: 0;\n color: #303030;\n line-height: 1.3;\n font-size: 2em;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body p,\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body li,\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta p {\n color: #404040;\n line-height: 1.8;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body ul {\n list-style: disc;\n padding-left: 1.15rem;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta p {\n /*font-weight: bold;*/\n margin: 0;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta > div { \n justify-content: flex-start;\n align-items: center;\n align-items: stretch;\n align-content: center;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button {\n width: 100%;\n padding: 0.5rem 1rem;\n /*font-size: 0.9em;*/\n font-weight: 500;\n border-radius: 0;\n box-sizing: border-box;\n /*text-transform: uppercase !important;*/\n letter-spacing: 0.5px;\n line-height: 1.5;\n max-width: unset;\n transition: all 200ms ease;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button b {\n /*font-size: 1.05em !important;*/\n text-transform: uppercase;\n font-weight: 700;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:first-child {\n color: white;\n background: var(--primary-color);\n border: none;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:first-child:hover {\n border-color: color-mix(in srgb, var(--primary-color) 90%, black); /* darken */\n background: color-mix(in srgb, var(--primary-color) 90%, black); /* darken */\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:last-child {\n color: black;\n background: white;\n border: 2px solid var(--secondary-color);\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:last-child:hover {\n color: white;\n border-color: color-mix(in srgb, var(--secondary-color) 90%, black); /* darken */\n background: color-mix(in srgb, var(--secondary-color) 90%, black); /* darken */\n}\n@media only screen and (max-width: 768px) {\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 { font-size: 1.85em; }\n}\n@media only screen and (max-width: 500px) {\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 { font-size: 1.6em; }\n} \n@media only screen and (max-width: 375px) {\n dialog.donation-interrupter {\n --dialog-margin: 0rem !important;\n --dialog-padding: 0.5rem !important;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 100%;\n max-height: 100vh;\n height: 100vh;\n overflow: hidden;\n border-radius: 0 !important;\n }\n dialog.donation-interrupter > .wrapper {\n border: none;\n padding: .75rem !important;\n height: calc(100% - 2* 0.5rem) !important;\n overflow: hidden;\n overflow-y: scroll;\n justify-content: space-evenly;\n }\n}\n@media only screen and (max-width: 375px) {\n dialog.donation-interrupter[theme=\"NAV\"] > .wrapper {\n border: none;\n padding: 0;\n }\n}\n@media only screen and (max-width: 440px) {\n dialog.donation-interrupter[theme=\"NAV\"] > .wrapper { gap: 0.5rem }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 {\n font-size: 1.4em;\n line-height: 1.4;\n letter-spacing: -0.25px;\n }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body { gap: 0.35rem }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body p,\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body li { line-height: 1.5 }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta > div { gap: 0.75rem }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button {\n font-size: 0.9em;\n line-height: 1.2;\n letter-spacing: -0.15px;\n }\n}\n@media only screen and (max-width: 280px) { /* Z fold, folded (edge case) */\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body p,\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta p {\n line-height: 1.25;\n }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 {\n font-size: 1.5em;\n line-height: 1.25;\n }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button {\n font-size: 0.8em;\n line-height: 1.15;\n }\n}\n`);
!vwo_$("head").find('#1734023482010').length && vwo_$('head').append(_vwo_sel);}catch(e) {console.error(e)}
try{;
/*vwo_debug log("addElement","body"); vwo_debug*/;
el=vwo_$("body")
;
!el.find('[vwo-op-1734023482012=""]').length && el.vwoElement({"position":"append","html":"\n \n \n
\n Before you go, would you consider becoming a monthly partner? \n \n
\n \n Your partnership will:\n
\n \n provide the funds needed to launch new collegiate sites \n sustain ministry efforts through our kids' Bible camp, Eagle Lake \n develop new Bible studies, Scripture memory tools and other resources \n \n \n You will play an active role in this ongoing work of bringing the\n\t\tdisciplemakers to Jesusโ Great Commission. Would you consider \n becoming a monthly partner today?\n
\n \n
\n \n \n YES! \n \n Convert my gift to a 10 monthly gift. \n \n \n No, thanks. \n \n Process my original one-time gift. \n \n
\n \n
\n "});}catch(e) {console.error(e)}
try{const DONATION_INTERRUPTER_GROUP_NAME = "MemorizeScripture2" /* all the popups in this test will share the same group name so that the metrics for them are all counted in the test */;
window.HTMLElement.prototype.getSlot = window.HTMLElement.prototype.getSlot || function () { return this.querySelector('slot') || this.shadowRoot.querySelector('slot'); }
window.HTMLElement.prototype.getSlotNodes = window.HTMLElement.prototype.getSlotNodes || function (n) { return (parseInt(n) !== 'NaN' && n >= 0) ? Array.from(this.getSlot().assignedNodes({ flatten: true })).at(n) : Array.from(this.getSlot().assignedNodes({ flatten: true })); }
window.HTMLElement.prototype.shadowChildren = window.HTMLElement.prototype.shadowChildren || function (n) { return (parseInt(n) !== 'NaN' && n >= 0) ? Array.from(this.shadowRoot.children).at(n) : Array.from(this.shadowRoot.children); }
function waitForElement (el, retry, onSuccess = (el) => {}, delay = 30) {
if ( !el ) return setTimeout(retry, delay);
onSuccess(el);
return true;
}
//
function vwoSendEvent (eventName = "customEvent", object = { label: '' }) {
window.VWO = window.VWO || [];
VWO.event = VWO.event || function () {VWO.push(["event"].concat([].slice.call(arguments)));};
VWO.event(eventName, object);
console.log(eventName, object);
}
const vwoSendEvent_DonationInterrupter = (action, group = undefined) => {
if (action === "Shown")
vwoSendEvent("custom_DonationInterrupter_Shown", { shown: true, group: group });
else if (action === "Yes")
vwoSendEvent("custom_DonationInterrupter_Yes", { yes: true, group: group });
else if (action === "No")
vwoSendEvent("custom_DonationInterrupter_No", { donationInterrupterNoClicked: true, group: group });
};
//
function entangleElements (element1, element2, method = 'innerHTML', options = { attributes: true, childList: true, subtree: true }) {
if (!element1 || !element2)
return console.error(`entangleElements: ${!element1 && "element1"}${!element1 && !element2 ? " and " : " "} ${!element2 && "element2"} ${!element1 && !element2 ? "are" : "is"} undefined.`);
console.log("Entangling:\n", element1, ' ', element2, "\nElement 2 will mirror Element 1's values.");
const handleMutation = (mutationList, observer) => { // Callback function to execute when mutations are observed
let lastAttributeValues = {};
for (const mutation of mutationList) {
switch (mutation.type) {
case "attributes":
const { attributeName, oldValue } = mutation;
if (attributeName !== "style") { // ignore changes to style attribute
const currentValue = element1.getAttribute(attributeName);
if (currentValue === null) {
element2.removeAttribute(attributeName); // mirror element 1 attributes on element 2 by removing null value attribute
} else {
element2.setAttribute(attributeName, currentValue); // mirror element 1 attributes on element 2
}
}
break;
default:
element2[method] = element1[method];
break;
}
}
};
const observer = new MutationObserver(handleMutation);
observer.observe(element1, options); // Start observing the target node for configured mutations
return observer;
}
//
//
//
//
function init () {
try {
customElements.whenDefined("c-donate-community-staff-information").then(() => {
customElements.whenDefined("c-donate-community-donate-buttons").then(() => {
customElements.whenDefined("lightning-input").then(() => {
const wrapperForm = document.querySelector('c-donate-community-staff-information');
const wrapperFormInteractive = wrapperForm.shadowRoot.querySelector('c-donate-community-donate-buttons').shadowChildren(0);
/// Interface with the giving form and create a window object
const form = {
getGiftArrayButtons: function () {
let w = wrapperFormInteractive;
return Array.from(w.children).slice(0, Array.from(w.children).indexOf(w.querySelector('.slds-form-element'))).map(x => x.querySelector('button'));
},
getAmount: function () {
const sanitizeAmount = a => a.replace(/[^\d\.]/,''); // remove non-digit characters (except for decimals)
let selected = this.getGiftArrayButtons().filter(x => x.classList.contains("donate-selected"))[0];
if (selected) {
return parseFloat(selected.value);
} else {
selected = wrapperFormInteractive.querySelector('lightning-input').shadowChildren(0).shadowChildren(0).querySelector('input');
return parseFloat(sanitizeAmount(selected.value));
}
console.warn("Amount is not defined: no option is selected.")
return undefined;
},
setAmount: function (n) {
let match;
const otherAmount = wrapperFormInteractive.querySelector('lightning-input').shadowChildren(0).shadowChildren(0).querySelector('input');
for (const button of this.getGiftArrayButtons()) { // iterate over gift array buttons
if (parseFloat(button.value) === parseFloat(n) ) { // if matching button found for amount
otherAmount.value = ''; // clear other amount
button.click(); // click the matching button
return this.getAmount() === parseFloat(n); // return true if the getAmount() matches the input value
}
}
otherAmount.value = parseFloat(n); // set the other amount field value to the input value
otherAmount.dispatchEvent(new Event('change', { bubbles: true })); // trigger a change event to cause the input to be formatted
return this.getAmount() === parseFloat(n); // return true if the getAmount() matches the input value
},
getRecurring: function () {
const checkbox = [...wrapperFormInteractive.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]');
return checkbox.checked;
},
setRecurring: function (toRecurring = true) {
const checkbox = [...wrapperFormInteractive.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]');
const isRecurring = this.getRecurring(), isOnetime = !isRecurring, toOnetime = !toRecurring; // semantic booleans
if ( (isOnetime && toRecurring) || (isRecurring && toOnetime)) {
checkbox.click();
}
return this.getRecurring() === toRecurring;
},
submit: function (btn = this.buttons["Donate Now"]) {
return btn.click();
},
};
//form.giftArrayButtons = form.getGiftArrayButtons();
window.NA = window.NA || {};
window.NA.MiniDonationForm = form;
waitForElement(wrapperFormInteractive.querySelector('button'), init, (el) => { // wait for form buttons
window.NA.MiniDonationForm.buttons = {
"Donate Now": Array.from(wrapperFormInteractive.children).slice(Array.from(wrapperFormInteractive.children).indexOf(wrapperFormInteractive.querySelector('.slds-form-element'))).map(x => x.querySelector('button')).filter(y => y)[0],
"Add to Basket": Array.from(wrapperFormInteractive.children).slice(Array.from(wrapperFormInteractive.children).indexOf(wrapperFormInteractive.querySelector('.slds-form-element'))).map(x => x.querySelector('button')).filter(y => y)[1],
};
window.NA.MiniDonationForm.cloneSubmitButton = function (originalButton = this.buttons["Donate Now"]) {
const clonedButton = originalButton.cloneNode(true); // clone the button and its children
clonedButton.attributes = originalButton.attributes; // copy attributes
if (clonedButton.style) clonedButton.style = originalButton.style; // copy styles
originalButton.after(clonedButton); // insert the fake button after the original
//entangleElements(originalButton, clonedButton, 'outerHTML'); // quantum entangle the elements via outerHTML -- does not work if the element is fully replaced when state changed
return clonedButton; // return the fake button
};
/// Interface with the Donation Interrupter and create a window object
waitForElement(document.querySelector('dialog.donation-interrupter'), init, (dialog) => { // wait for element
const donationPageType = window.Navigators?.donationPageType?.toLowerCase() ?? undefined;
if (donationPageType !== "project") {
dialog.style.setProperty("display", "none", "important");
//dialog.remove();
return console.warn(`Donation page type must be "Project" for this test to run.`), null;
}
if (document.querySelectorAll('dialog.donation-interrupter').length > 1) {
return console.warn(`Multiple donation interrupters found on the page.`), null;
}
console.log("dialog found:", dialog);
try {
const DonationInterrupter = {
dialog: dialog || document.querySelector('dialog.donation-interrupter'),
_tokenName: DONATION_INTERRUPTER_GROUP_NAME ? "NA_DonationInterrupter_" + DONATION_INTERRUPTER_GROUP_NAME : "NA_DonationInterrupter",
_memoryMode: sessionStorage,
status: "ready",
getStatus: function () {
return this._memoryMode.getItem(this._tokenName + "_status") || undefined;
},
setStatus: function (t) {
this._memoryMode.setItem(this._tokenName + "_status", t);
this.status = t;
return this.getStatus();
},
conditions: (function(){return true;})(),
newAmount: function (originalAmount) { return originalAmount / 12; }, // reduced ask amount
onShow: function (e) {},
onHide: function (e) {},
show: function (e = undefined) {
this.dialog.showModal();
this.dialog.addEventListener('keydown', e => { e.key === "Escape" && (e.preventDefault(), e.stopImmediatePropagation()) }); // prevent esc button clicked
this.setStatus("shown");
typeof this.onShow === "function" && this.onShow.call(null, e);
},
hide: function (e = undefined) {
this.setStatus("dismissed");
this.dialog.close();
typeof this.onHide === "function" && this.onHide.call(null, e);
},
updateDialogData: function () {
if (this.dialog) {
let originalAmount = window.NA.MiniDonationForm.getAmount(),
suggestedAmount = this.newAmount(originalAmount);
[...this.dialog.querySelectorAll('span[data="amount_original"]')].forEach(span => span.textContent = originalAmount.toString());
[...this.dialog.querySelectorAll('span[data="amount_suggested"]')].forEach(span => span.textContent = suggestedAmount.toString());
}
},
};
window.NA = window.NA || {};
window.NA.DonationInterrupter = DonationInterrupter ? DonationInterrupter : window.NA.DonationInterrupter;
if (window.NA.MiniDonationForm && window.NA.DonationInterrupter)
main(window.NA.MiniDonationForm, window.NA.DonationInterrupter);
} catch (err) {
console.error("Failed to interface with donation interrupter.");
}
}, 100); // wait for element
}, 100); // wait for form buttons
}); // when "lightning-input" defined
}); // when "c-donate-community-donate-buttons" defined
}); // when "c-donate-community-staff-information" defined
} catch (err) {
console.error("Error when waiting for custom elements:", err);
}
}
//
//
//
//
//
//
//
//
function main (FormInterface, DonationInterrupterInterface, debug_mode = 0) {
if (!FormInterface.buttons)
return setTimeout(init, 100);
if (!DonationInterrupterInterface.buttons) {
DonationInterrupterInterface.buttons = { // finish setting up the reference to the CTA buttons in the
"yes": [...DonationInterrupterInterface.dialog.querySelectorAll('button')][0],
"no": [...DonationInterrupterInterface.dialog.querySelectorAll('button')][1],
};
return main(FormInterface, DonationInterrupterInterface, debug_mode); // and try again
}
window.NA.DonationInterrupter.setStatus(window.NA.DonationInterrupter._memoryMode.getItem(window.NA.DonationInterrupter._tokenName + "_status") || "ready"); // set status to the sessionStorage token (saved state) or ready (first time)
window.NA.DonationInterrupter.newAmount = (originalAmount) => {
if (originalAmount < 500 && originalAmount >= 400 ) {
return 50;
} else if (originalAmount < 400 && originalAmount >= 300 ) {
return 40;
} else if (originalAmount < 300 && originalAmount >= 200 ) {
return 30;
} else if (originalAmount < 200 && originalAmount >= 100 ) {
return 15;
} else {
return 10;
}
}; // set the function that determines the reduced gift amount: constant $10
/// Add click handle to fake submit button to trigger popup
try {
for (const button of Object.values(FormInterface.buttons)) {
const originalButton = button, // get the original button to clone
fakeButton = FormInterface.cloneSubmitButton(originalButton); // clones the element, attributes, and styles
originalButton.style.display = "none"; // hide original button
fakeButton.style.setProperty("margin-left", '0', "important"); // fix positioning
//debug_mode && fakeButton.style.setProperty("border", "3px dashed red", "important"); // highlight the fake button
setInterval(() => fakeButton.disabled = originalButton.disabled, 50); // update disabled state of button every 50ms
fakeButton.addEventListener('click', (e) => { // when the fake button copy is clicked
let amount = FormInterface.getAmount(), // get the amount
isRecurring = FormInterface.getRecurring(), // check if recurring
popupShown = DonationInterrupterInterface.status === "shown" || DonationInterrupterInterface.status === "dismissed"; // check if the popup has been dismissed
if (debug_mode) { // log expression in debug_mode
console.groupCollapsed("Check conditions");
console.info(amount, "< 500", amount < 500);
console.info(isRecurring, "=== false", isRecurring === false);
console.info(popupShown, "=== false", popupShown === false);
console.groupEnd("Check conditions");
}
const conditionsMet = [
//amount >= 5, // greater than $5
amount < 500, // less than $100
isRecurring === false, // not recurring
popupShown === false, // not already seen
].every(condition => condition ? true : false); // reduce the expression evaluations to true or false
debug_mode && console.info("showPopup?", conditionsMet);
// Which button triggered the popup determins which button will be used to submit
if (e.srcElement.textContent === FormInterface.buttons["Add to Basket"].textContent) { // if clicked button text equal to original "Add to Basket" button text
conditionsMet ? DonationInterrupterInterface.show(e) : FormInterface.submit(FormInterface.buttons["Add to Basket"]);
} else {
conditionsMet ? DonationInterrupterInterface.show(e) : FormInterface.submit();
}
});
}
}
catch (err) {
console.error("Failed to clone submit button and add event listener.", err);
}
window.NA.DonationInterrupter.onShow = (e) => { // after the popup has been shown
window.NA.DonationInterrupter.updateDialogData(); // update the values in the dialog
//vwoCustomEvent("DonationInterrupter:Shown", { 'token': window.NA.DonationInterrupter._tokenName }); // trigger VWO event to calculate metric that donation interrupter was shown
vwoSendEvent_DonationInterrupter("Shown", window.NA.DonationInterrupter._tokenName);
/// Add click handlers to dialog buttons
try {
const buttons = window.NA.DonationInterrupter.buttons;
const { yes, no } = buttons; // get the button references from the window object
if (e.srcElement.textContent === FormInterface.buttons["Add to Basket"].textContent) { // if clicked button text equal to original "Add to Basket" button text
yes.addEventListener('click', (e) => { // "Yes" button clicked ("Add to Basket" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"Yes" clicked');
//vwoCustomEvent("DonationInterrupter:Yes", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("Yes", window.NA.DonationInterrupter._tokenName);
const originalAmount = FormInterface.getAmount(),
newAmount = window.NA.DonationInterrupter.newAmount(originalAmount);
debug_mode && console.log(originalAmount, '->', newAmount);
FormInterface.setRecurring(true); // set to recurring
FormInterface.setAmount(newAmount); // update amount field
DonationInterrupterInterface.hide(); // close popup
FormInterface.submit(FormInterface.buttons["Add to Basket"]); // submit "Add to Basket"
debug_mode && console.groupEnd('"Yes" clicked');
});
no.addEventListener('click', (e) => { // "No" button clicked ("Add to Basket" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"No" clicked');
//vwoCustomEvent("DonationInterrupter:No", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("No", window.NA.DonationInterrupter._tokenName);
DonationInterrupterInterface.hide(); // close popup
FormInterface.submit(FormInterface.buttons["Add to Basket"]); // submit "Add to Basket"
debug_mode && console.groupEnd('"No" clicked');
});
}
else {
yes.addEventListener('click', (e) => { // "Yes" button clicked ("Donate Now" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"Yes" clicked');
//vwoCustomEvent("DonationInterrupter:Yes", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("Yes", window.NA.DonationInterrupter._tokenName);
const originalAmount = FormInterface.getAmount(),
newAmount = window.NA.DonationInterrupter.newAmount(originalAmount);
debug_mode && console.log(originalAmount, '->', newAmount);
FormInterface.setRecurring(true); // set to recurring
FormInterface.setAmount(newAmount); // update amount field
DonationInterrupterInterface.hide(); // close popup
FormInterface.submit(); // submit "Donate Now"
debug_mode && console.groupEnd('"Yes" clicked');
});
no.addEventListener('click', (e) => { // "No" button clicked ("Donate Now" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"No" clicked');
//vwoCustomEvent("DonationInterrupter:No", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("No", window.NA.DonationInterrupter._tokenName);
DonationInterrupterInterface.hide(); // close popup
FormInterface.submit(); // submit "Donate Now"
debug_mode && console.groupEnd('"No" clicked');
});
}
debug_mode && console.log("added handlers to buttons", buttons);
}
catch (err) { // if failed
console.error("Failed to attach event listeners to dialog buttons.", err);
//return setTimeout(()=>window.NA.DonationInterrupter.onShow(e), 500); // try again
}
};
}
//
//
setTimeout(init, 500);
}catch(e) {console.error(e)}
return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("head")}}, R_722072_121_1_2_1:{ fn:function(log,nonce=''){return (function(x) {
try{
var ctx=vwo_$(x),el;
/*vwo_debug log("Revert","content",""); vwo_debug*/;
el=vwo_$('[vwo-element-id="1734023482010"]');
el.revertContentOp().remove();
} catch(e) {console.error(e)}
try{
var el,ctx=vwo_$(x);
/*vwo_debug log("Revert","addElement","body"); vwo_debug*/(el=vwo_$('[vwo-element-id="1734023482011"]')).remove();
} catch(e) {console.error(e)}
return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("head")}}, ce121_4_1:{ fn:function(executeTrigger, vwo_$) {
(// Example Code: This code will stop polling after 5 sec of dom ready (on calling executeTrigger() method)
function() {
vwo_$(document).ready(function () {
// Waiting for 5 more seconds
setTimeout(function () {
// Call this method to stop the polling
executeTrigger();
}, 5000);
});
}
)()
}}, js_3390e077c52956459a51fd91b769cbc3:{ fn:function() { return window.window.Navigators.donationPageType }}, R_722072_157_1_2_1:{ fn:function(log,nonce=''){return (function(x) {
if(!vwo_$.fn.vwoRevertHtml){
return;
};
var el,ctx=vwo_$(x);
/*vwo_debug log("Revert","addElement","body"); vwo_debug*/(el=vwo_$('[vwo-element-id="1744048814304"]')).remove();})("body")}}, C_722072_79_1_2_0:{ fn:function(){return (function(x) { try{
var _vwo_sel = vwo_$("");
!vwo_$("head").find("#1734023425003").length && vwo_$('head').append(_vwo_sel);
const DEFAULT_DONATION_FREQUENCY="One-Time";function getQueryParam(e){let t=window.location.search.match(e+"=([^&]*)");return t?t[1]:void 0}function initOnElement(e,t,n){const i=e.getElementsByTagName(t);return i.length?n(i):setTimeout(initOnElement,500,e,t,n)}window.DonationForm=window.DonationForm||{recurring_checkbox:null,submit_button:null,other_amt:null,gift_array_elements:[],onetime_gift_array:[],recurring_gift_array:[10,20,30,40],setRecurring:function(e){console.log("setRecurring",e,this.recurring_checkbox),(!this.recurring_checkbox.checked&&e||this.recurring_checkbox.checked&&!e)&&(console.log("checked",this.recurring_checkbox.checked,"(before click)"),this.recurring_checkbox.click(),console.log("checked",this.recurring_checkbox.checked,"(after click)"))},selectGiftArray:function(e){this.gift_array_elements[e].click()},modifyGiftArray:function(e){this.gift_array_elements.forEach((t,n)=>{t.value=e[n],t.textContent="$"+e[n]})},setOneTimeGiftArrayValues:function(){let e=this;this.gift_array_elements.forEach(t=>{e.onetime_gift_array.push(parseInt(t.value))})},setFirstNamePersonalization:function(e){const t=void 0===getQueryParam("first_name")||""===getQueryParam("first_name")?"Friend":getQueryParam("first_name");for(let n=0;n<=e.length-1;n++)e[n].innerHTML.includes("[Name]")&&(e[n].innerHTML=e[n].innerHTML.replace(/\[[^\]]*]/,t)),e[n].innerHTML.includes("Friend")&&(e[n].innerHTML=e[n].innerHTML.replace("Friend",t))},init:function(){document.querySelectorAll(".tab").forEach(e=>{e.addEventListener("click",(function(e){this.classList.add("selected"),this.classList.contains("recurring")?(document.querySelector(".tab.onetime").classList.remove("selected"),DonationForm.setRecurring(!0)):(document.querySelector(".tab.recurring").classList.remove("selected"),DonationForm.setRecurring(!1))}))}),this.setOneTimeGiftArrayValues(),this.setRecurring(!1),this.selectGiftArray(0)}},initOnElement(document,"c-donate-community-staff-information",(function(e){initOnElement(e[0],"div",(function(e){e[0].querySelectorAll("div.slds-col")[0].classList.add("page-image");const t=e[0].querySelectorAll("div.slds-col")[1];t.classList.add("donation-form-content");const n=t.querySelectorAll("div,lightning-formatted-rich-text");for(let e=0;e<=n.length-1;e++)0==e&&n[e].classList.add("page-title"),1==e&&n[e].classList.add("page-action-text"),2==e&&n[e].classList.add("donation-form"),3==e&&n[e].classList.add("bottom-title"),4==e&&n[e].classList.add("page-text");DonationForm.setFirstNamePersonalization(n[4].shadowRoot.querySelectorAll("div p")),n[1].before(n[4]);const i=document.createElement("div");i.classList.add("tabs"),i.innerHTML='One-Time Gift
Recurring Gift
',n[2].before(i),initOnElement(n[2],"c-donate-community-donate-buttons",(function(e){initOnElement(e[0].shadowRoot.querySelector("div"),"div",(function(e){for(let t=0;t dialog.donation-interrupter {\n --dialog-margin: 2rem;\n --dialog-padding: 3rem;\n position: fixed;\n outline: none;\n border: none;\n padding: 0;\n box-sizing: border-box;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 800px;\n}\ndialog::backdrop { background-color: rgba(0, 0, 0, 0.4); }\ndialog.donation-interrupter > .wrapper {\n position: relative;\n margin: calc(var(--dialog-padding));\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\ndialog.donation-interrupter section {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\ndialog.donation-interrupter section > div {\n display: flex;\n flex-direction: row;\n gap: 1rem;\n}\ndialog.donation-interrupter section.donation-interrupter--cta button > * {\n font-family: inherit;\n color: inherit;\n background-color: transparent;\n display: inline;\n padding: 0;\n margin: 0;\n font-size: inherit !important;\n text-transform: inherit;\n}\ndialog.donation-interrupter button[data-action=\"dismiss\"] {\n --scale: 3;\n position: absolute;\n top: -1.5rem;\n right: -1.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n background: none;\n border: none;\n outline: none;\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n line-height: 0;\n width: calc(1rem * var(--scale));\n height: calc(1rem * var(--scale));\n font-size: calc(1rem * var(--scale));\n}\ndialog.donation-interrupter > div span[before]::before { content: attr(before); }\ndialog.donation-interrupter button.btn-dismiss {\n color: rgba(0, 0, 0, 0.5);\n background-color: rgba(255, 255, 255, 0.5);\n border-radius: 100%;\n}\ndialog.donation-interrupter button[data-action=\"dismiss\"] + section { max-width: calc(100% - 1rem); } /* clear dismiss button */\n@media only screen and (max-width: 500px) {\n dialog.donation-interrupter section.donation-interrupter--cta > div { flex-direction: column; }\n dialog.donation-interrupter {\n --dialog-margin: 0.5rem !important;\n --dialog-padding: 0.5rem !important;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 100%;\n max-height: calc(100vh - calc(2 * var(--dialog-margin)));\n height: min-content;\n overflow: hidden;\n }\n dialog.donation-interrupter > .wrapper { padding: .75rem !important; }\n}\n@media only screen and (max-width: 375px) {\n dialog.donation-interrupter {\n --dialog-margin: 0rem !important;\n --dialog-padding: 0.5rem !important;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 100%;\n max-height: 100vh;\n height: 100vh;\n overflow: hidden;\n border-radius: 0 !important;\n }\n dialog.donation-interrupter > .wrapper {\n padding: .75rem !important;\n height: calc(100% - 2* 0.5rem) !important;\n overflow: hidden;\n justify-content: space-evenly;\n }\n}\n/* NAV THEME ===================================================================================== */\ndialog.donation-interrupter[theme=\"NAV\"] h1,\ndialog.donation-interrupter[theme=\"NAV\"] h2,\ndialog.donation-interrupter[theme=\"NAV\"] h3,\ndialog.donation-interrupter[theme=\"NAV\"] h4,\ndialog.donation-interrupter[theme=\"NAV\"] h5,\ndialog.donation-interrupter[theme=\"NAV\"] h6,\ndialog.donation-interrupter[theme=\"NAV\"] ul,\ndialog.donation-interrupter[theme=\"NAV\"] p {\n margin: 0;\n line-height: 1.5;\n}\ndialog.donation-interrupter[theme=\"NAV\"] {\n --primary-color: #e16b2a;\n --secondary-color: #008C95;\n --dialog-padding: 1.5rem;\n border-radius: 0.5rem;\n font: 16px \"Montserrat\";\n color: #54473f;\n}\ndialog.donation-interrupter[theme=\"NAV\"] button[data-action=\"dismiss\"] {\n --scale: 4;\n top: -2rem;\n right: -2rem;\n display: none;\n}\ndialog.donation-interrupter[theme=\"NAV\"] .wrapper {\n border: 2px solid var(--secondary-color);\n padding: 1.5rem;\n}\ndialog.donation-interrupter[theme=\"NAV\"] .wrapper > section {\n gap: 0.5rem;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 {\n margin: 0;\n color: #303030;\n line-height: 1.3;\n font-size: 2em;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body p,\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body li,\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta p {\n color: #404040;\n line-height: 1.8;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body ul {\n list-style: disc;\n padding-left: 1.15rem;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta p {\n /*font-weight: bold;*/\n margin: 0;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta > div { \n justify-content: flex-start;\n align-items: center;\n align-items: stretch;\n align-content: center;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button {\n width: 100%;\n padding: 0.5rem 1rem;\n /*font-size: 0.9em;*/\n font-weight: 500;\n border-radius: 0;\n box-sizing: border-box;\n /*text-transform: uppercase !important;*/\n letter-spacing: 0.5px;\n line-height: 1.5;\n max-width: unset;\n transition: all 200ms ease;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button b {\n /*font-size: 1.05em !important;*/\n text-transform: uppercase;\n font-weight: 700;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:first-child {\n color: white;\n background: var(--primary-color);\n border: none;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:first-child:hover {\n border-color: color-mix(in srgb, var(--primary-color) 90%, black); /* darken */\n background: color-mix(in srgb, var(--primary-color) 90%, black); /* darken */\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:last-child {\n color: black;\n background: white;\n border: 2px solid var(--secondary-color);\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:last-child:hover {\n color: white;\n border-color: color-mix(in srgb, var(--secondary-color) 90%, black); /* darken */\n background: color-mix(in srgb, var(--secondary-color) 90%, black); /* darken */\n}\n@media only screen and (max-width: 768px) {\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 { font-size: 1.85em; }\n}\n@media only screen and (max-width: 500px) {\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 { font-size: 1.6em; }\n} \n@media only screen and (max-width: 375px) {\n dialog.donation-interrupter {\n --dialog-margin: 0rem !important;\n --dialog-padding: 0.5rem !important;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 100%;\n max-height: 100vh;\n height: 100vh;\n overflow: hidden;\n border-radius: 0 !important;\n }\n dialog.donation-interrupter > .wrapper {\n border: none;\n padding: .75rem !important;\n height: calc(100% - 2* 0.5rem) !important;\n overflow: hidden;\n overflow-y: scroll;\n justify-content: space-evenly;\n }\n}\n@media only screen and (max-width: 375px) {\n dialog.donation-interrupter[theme=\"NAV\"] > .wrapper {\n border: none;\n padding: 0;\n }\n}\n@media only screen and (max-width: 440px) {\n dialog.donation-interrupter[theme=\"NAV\"] > .wrapper { gap: 0.5rem }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 {\n font-size: 1.4em;\n line-height: 1.4;\n letter-spacing: -0.25px;\n }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body { gap: 0.35rem }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body p,\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body li { line-height: 1.5 }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta > div { gap: 0.75rem }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button {\n font-size: 0.9em;\n line-height: 1.2;\n letter-spacing: -0.15px;\n }\n}\n@media only screen and (max-width: 280px) { /* Z fold, folded (edge case) */\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body p,\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta p {\n line-height: 1.25;\n }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 {\n font-size: 1.5em;\n line-height: 1.25;\n }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button {\n font-size: 0.8em;\n line-height: 1.15;\n }\n} ");
!vwo_$("head").find("#1734023425028").length && vwo_$('head').append(_vwo_sel);
!vwo_$("body").find('[vwo-op-1734023425027=""]').length && vwo_$("body").vwoElement({ "html": "\n \n \n
\n Before you finalize your gift... would you be willing to chip in an additional $5 per month to help provide for unexpected missionary expenses? \n \n
\n \n\t\tYour small additional monthly gift will help care for thousands of missionaries to give them training, support in the field, and financial support when unexpected challenges arise.\n
\n \n If you are willing to also give a monthly gift, weโd love to send you an incredible book, 31 Days toward Trusting God by Jerry Bridges.\n
\n \n Would you be willing to chip in an additional $5 per month alongside your missionary gift?\n
\n \n
\n \n \n YES! \n \n Please add a 5 monthly gift to my cart. \n \n \n No, thanks. \n \n Just process my original gift. \n \n
\n \n
\n ", "position": "append", "customBodyElement": true, "addElementId": 1734023425027 })
'esversion: 8';
const DONATION_INTERRUPTER_GROUP_NAME = "StaffDP" /* all the popups in this test will share the same group name so that the metrics for them are all counted in the test */;
window.HTMLElement.prototype.getSlot = window.HTMLElement.prototype.getSlot || function () { return this.querySelector('slot') || this.shadowRoot.querySelector('slot'); }
window.HTMLElement.prototype.getSlotNodes = window.HTMLElement.prototype.getSlotNodes || function (n) { return (parseInt(n) !== 'NaN' && n >= 0) ? Array.from(this.getSlot().assignedNodes({ flatten: true })).at(n) : Array.from(this.getSlot().assignedNodes({ flatten: true })); }
window.HTMLElement.prototype.shadowChildren = window.HTMLElement.prototype.shadowChildren || function (n) { return (parseInt(n) !== 'NaN' && n >= 0) ? Array.from(this.shadowRoot.children).at(n) : Array.from(this.shadowRoot.children); }
function waitForElement (el, retry, onSuccess = (el) => {}, delay = 30) {
if ( !el ) return setTimeout(retry, delay);
onSuccess(el);
return true;
}
//
function vwoSendEvent (eventName = "customEvent", object = { label: '' }) {
window.VWO = window.VWO || [];
VWO.event = VWO.event || function () {VWO.push(["event"].concat([].slice.call(arguments)));};
VWO.event(eventName, object);
console.log(eventName, object);
}
const vwoSendEvent_DonationInterrupter = (action, group = undefined) => {
if (action === "Shown")
vwoSendEvent("custom_DonationInterrupter_Shown", { shown: true, group: group });
else if (action === "Yes")
vwoSendEvent("custom_DonationInterrupter_Yes", { yes: true, group: group });
else if (action === "No")
vwoSendEvent("custom_DonationInterrupter_No", { donationInterrupterNoClicked: true, group: group });
};
//
function getBasketId (tokenName = `LSSIndex:LOCAL{"namespace":"c"}`){
const token = localStorage.getItem(tokenName);
if (!token) {
return console.error("getBasketId:", "Failed to get token from localStorage:", tokenName);
} else {
try {
const { basket } = JSON.parse(token); // get basket property from the object
return basket;
} catch (error) {
return console.error("getBasketId:", "Failed to parse JSON:", token);
}
}
}
//
function getBasket (basketId) {
let token = localStorage.getItem(basketId);
if (!token) {
const emptyBasket = {
"Id": "localBasket",
"Basket_Items__r": [],
"Total__c": 0,
"Number_of_Items__c": 0,
"itemMap": {}
};
console.info("getBasket:", "Failed to get token from localStorage:", basketId, "\nAttempting to create a new empty basket and retrying...");
localStorage.setItem(basketId, JSON.stringify(emptyBasket));
token = localStorage.getItem(basketId);
}
if (!token) {
return console.error("getBasket:", "Failed to get token from localStorage:", basketId);
} else {
try {
return JSON.parse(token); // get basket property from the object
} catch (error) {
return console.error("getBasket:", "Failed to parse JSON:", token);
}
}
}
//
function addItemToBasket (item) {
const basketId = getBasketId(),
basket = getBasket(basketId);
if ( basket.Basket_Items__r.find(item => item.id === item.Id) ) { // check if the item Id is already in the cart
const foundItem = basket.Basket_Items__r.find(item => item.Id);
foundItem["Quantity__c"] += 1; // update the quantity of the found item
foundItem["Total_Amount__c"] = foundItem["Amount__c"] * foundItem["Quantity__c"]; // update the quantity of the found item
foundItem["Total_Deductible_Amount__c"] = foundItem["Amount__c"] * foundItem["Quantity__c"]; // update the quantity of the found item
} else {
basket.Basket_Items__r.push(item); // add the item to the array
}
basket.Number_of_Items__c = basket.Basket_Items__r.length; // update item count
basket.Total__c = basket.Basket_Items__r.reduce((total, item) => total + item["Amount__c"], 0); // update total amount
basket.itemMap = Object.fromEntries(basket.Basket_Items__r.map((item, index) => ([item.Id, index]))); // update itemMap
return localStorage.setItem(basketId, JSON.stringify(basket));
}
//
function entangleElements (element1, element2, method = 'innerHTML', options = { attributes: true, childList: true, subtree: true }) {
if (!element1 || !element2)
return console.error(`entangleElements: ${!element1 && "element1"}${!element1 && !element2 ? " and " : " "} ${!element2 && "element2"} ${!element1 && !element2 ? "are" : "is"} undefined.`);
console.log("Entangling:\n", element1, ' ', element2, "\nElement 2 will mirror Element 1's values.");
const handleMutation = (mutationList, observer) => { // Callback function to execute when mutations are observed
let lastAttributeValues = {};
for (const mutation of mutationList) {
switch (mutation.type) {
case "attributes":
const { attributeName, oldValue } = mutation;
if (attributeName !== "style") { // ignore changes to style attribute
const currentValue = element1.getAttribute(attributeName);
if (currentValue === null) {
element2.removeAttribute(attributeName); // mirror element 1 attributes on element 2 by removing null value attribute
} else {
element2.setAttribute(attributeName, currentValue); // mirror element 1 attributes on element 2
}
}
break;
default:
element2[method] = element1[method];
break;
}
}
};
const observer = new MutationObserver(handleMutation);
observer.observe(element1, options); // Start observing the target node for configured mutations
return observer;
}
//
//
//
//
function init () {
try {
customElements.whenDefined("c-donate-community-staff-information").then(() => {
customElements.whenDefined("c-donate-community-donate-buttons").then(() => {
customElements.whenDefined("lightning-input").then(() => {
const wrapperForm = document.querySelector('c-donate-community-staff-information');
const wrapperFormInteractive = wrapperForm.shadowRoot.querySelector('c-donate-community-donate-buttons').shadowChildren(0);
console.log(wrapperFormInteractive);
/// Interface with the giving form and create a window object
const form = {
getGiftArrayButtons: function () {
let w = wrapperFormInteractive;
return Array.from(w.children).slice(0, Array.from(w.children).indexOf(w.querySelector('.slds-form-element'))).map(x => x.querySelector('button'));
},
getAmount: function () {
const sanitizeAmount = a => a.replace(/[^\d\.]/,''); // remove non-digit characters (except for decimals)
let selected = this.getGiftArrayButtons().filter(x => x.classList.contains("donate-selected"))[0];
if (selected) {
return parseFloat(selected.value);
} else {
selected = wrapperFormInteractive.querySelector('lightning-input').shadowChildren(0).shadowChildren(0).querySelector('input');
return parseFloat(sanitizeAmount(selected.value));
}
console.warn("Amount is not defined: no option is selected.")
return undefined;
},
setAmount: function (n) {
let match;
const otherAmount = wrapperFormInteractive.querySelector('lightning-input').shadowChildren(0).shadowChildren(0).querySelector('input');
for (const button of this.getGiftArrayButtons()) { // iterate over gift array buttons
if (parseFloat(button.value) === parseFloat(n) ) { // if matching button found for amount
otherAmount.value = ''; // clear other amount
button.click(); // click the matching button
return this.getAmount() === parseFloat(n); // return true if the getAmount() matches the input value
}
}
otherAmount.value = parseFloat(n); // set the other amount field value to the input value
otherAmount.dispatchEvent(new Event('change', { bubbles: true })); // trigger a change event to cause the input to be formatted
return this.getAmount() === parseFloat(n); // return true if the getAmount() matches the input value
},
getRecurring: function () {
const checkbox = [...wrapperFormInteractive.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]');
return checkbox.checked;
},
setRecurring: function (toRecurring = true) {
const checkbox = [...wrapperFormInteractive.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]');
const isRecurring = this.getRecurring(), isOnetime = !isRecurring, toOnetime = !toRecurring; // semantic booleans
if ( (isOnetime && toRecurring) || (isRecurring && toOnetime)) {
checkbox.click();
}
return this.getRecurring() === toRecurring;
},
submit: function (btn = this.buttons["Donate Now"]) {
return btn.click();
},
};
form.giftArrayButtons = form.getGiftArrayButtons();
window.NA = window.NA || {};
window.NA.MiniDonationForm = form;
waitForElement(wrapperFormInteractive.querySelector('button'), init, (el) => { // wait for form buttons
window.NA.MiniDonationForm.buttons = {
"Donate Now": Array.from(wrapperFormInteractive.children).slice(Array.from(wrapperFormInteractive.children).indexOf(wrapperFormInteractive.querySelector('.slds-form-element'))).map(x => x.querySelector('button')).filter(y => y)[0],
"Add to Basket": Array.from(wrapperFormInteractive.children).slice(Array.from(wrapperFormInteractive.children).indexOf(wrapperFormInteractive.querySelector('.slds-form-element'))).map(x => x.querySelector('button')).filter(y => y)[1],
};
window.NA.MiniDonationForm.cloneSubmitButton = function (originalButton = this.buttons["Donate Now"]) {
const clonedButton = originalButton.cloneNode(true); // clone the button and its children
clonedButton.attributes = originalButton.attributes; // copy attributes
if (clonedButton.style) clonedButton.style = originalButton.style; // copy styles
originalButton.after(clonedButton); // insert the fake button after the original
//entangleElements(originalButton, clonedButton, 'outerHTML'); // quantum entangle the elements via outerHTML -- does not work if the element is fully replaced when state changed
return clonedButton; // return the fake button
};
/// Interface with the Donation Interrupter and create a window object
waitForElement(document.querySelector('dialog.donation-interrupter'), init, (dialog) => { // wait for element
const donationPageType = window.Navigators?.donationPageType?.toLowerCase() ?? undefined;
if (donationPageType !== "staff") {
dialog.style.setProperty("display", "none", "important");
//dialog.remove();
return console.warn(`Donation page type must be "Staff" for this test to run.`), null;
}
if (document.querySelectorAll('dialog.donation-interrupter').length > 1) {
return console.warn(`Multiple donation interrupters found on the page.`), null;
}
console.log("dialog found:", dialog);
try {
const DonationInterrupter = {
dialog: dialog || document.querySelector('dialog.donation-interrupter'),
_tokenName: DONATION_INTERRUPTER_GROUP_NAME ? "NA_DonationInterrupter_" + DONATION_INTERRUPTER_GROUP_NAME : "NA_DonationInterrupter",
_memoryMode: sessionStorage,
status: "ready",
getStatus: function () {
return this._memoryMode.getItem(this._tokenName + "_status") || undefined;
},
setStatus: function (t) {
this._memoryMode.setItem(this._tokenName + "_status", t);
this.status = t;
return this.getStatus();
},
conditions: (function(){return true;})(),
newAmount: function (originalAmount) { return originalAmount / 12; }, // reduced ask amount
onShow: function (e) {},
onHide: function (e) {},
show: function (e = undefined) {
this.dialog.showModal();
this.dialog.addEventListener('keydown', e => { e.key === "Escape" && (e.preventDefault(), e.stopImmediatePropagation()) }); // prevent esc button clicked
this.setStatus("shown");
typeof this.onShow === "function" && this.onShow.call(null, e);
},
hide: function (e = undefined) {
this.setStatus("dismissed");
this.dialog.close();
typeof this.onHide === "function" && this.onHide.call(null, e);
},
updateDialogData: function () {
if (this.dialog) {
let originalAmount = window.NA.MiniDonationForm.getAmount(),
suggestedAmount = this.newAmount(originalAmount);
[...this.dialog.querySelectorAll('span[data="amount_original"]')].forEach(span => span.textContent = originalAmount.toString());
[...this.dialog.querySelectorAll('span[data="amount_suggested"]')].forEach(span => span.textContent = suggestedAmount.toString());
}
},
};
window.NA = window.NA || {};
window.NA.DonationInterrupter = DonationInterrupter ? DonationInterrupter : window.NA.DonationInterrupter;
if (window.NA.MiniDonationForm && window.NA.DonationInterrupter)
main(window.NA.MiniDonationForm, window.NA.DonationInterrupter);
} catch (err) {
console.error("Failed to interface with donation interrupter.");
}
}, 100); // wait for element
}, 100); // wait for form buttons
}); // when "lightning-input" defined
}); // when "c-donate-community-donate-buttons" defined
}); // when "c-donate-community-staff-information" defined
} catch (err) {
console.error("Error when waiting for custom elements:", err);
}
}
//
//
//
//
//
//
//
//
function main (FormInterface, DonationInterrupterInterface, debug_mode = 0) {
if (!FormInterface.buttons)
return setTimeout(init, 100);
if (!DonationInterrupterInterface.buttons) {
DonationInterrupterInterface.buttons = { // finish setting up the reference to the CTA buttons in the
"yes": [...DonationInterrupterInterface.dialog.querySelectorAll('button')][0],
"no": [...DonationInterrupterInterface.dialog.querySelectorAll('button')][1],
};
return main(FormInterface, DonationInterrupterInterface, debug_mode); // and try again
}
window.NA.DonationInterrupter.setStatus(window.NA.DonationInterrupter._memoryMode.getItem(window.NA.DonationInterrupter._tokenName + "_status") || "ready"); // set status to the sessionStorage token (saved state) or ready (first time)
window.NA.DonationInterrupter.newAmount = originalAmount => 5; // set the function that determines the reduced gift amount: constant $10
/// Add click handle to fake submit button to trigger popup
try {
for (const button of Object.values(FormInterface.buttons)) {
const originalButton = button, // get the original button to clone
fakeButton = FormInterface.cloneSubmitButton(originalButton); // clones the element, attributes, and styles
originalButton.style.display = "none"; // hide original button
fakeButton.style.setProperty("margin-left", '0', "important"); // fix positioning
//debug_mode && fakeButton.style.setProperty("border", "3px dashed red", "important"); // highlight the fake button
setInterval(() => fakeButton.disabled = originalButton.disabled, 50); // update disabled state of button every 50ms
fakeButton.addEventListener('click', (e) => { // when the fake button copy is clicked
let amount = FormInterface.getAmount(), // get the amount
isRecurring = FormInterface.getRecurring(), // check if recurring
popupShown = DonationInterrupterInterface.status === "shown" || DonationInterrupterInterface.status === "dismissed"; // check if the popup has been dismissed
if (debug_mode) { // log expression in debug_mode
console.groupCollapsed("Check conditions");
console.info(amount, "< 250", amount < 250);
console.info(isRecurring, "=== false", isRecurring === false);
console.info(popupShown, "=== false", popupShown === false);
console.groupEnd("Check conditions");
}
const conditionsMet = [
//amount >= 5, // greater than $5
amount < 250, // less than $250
isRecurring === false, // not recurring
popupShown === false, // not already seen
].every(condition => condition ? true : false); // reduce the expression evaluations to true or false
debug_mode && console.info("showPopup?", conditionsMet);
// Which button triggered the popup determins which button will be used to submit
if (e.srcElement.textContent === FormInterface.buttons["Add to Basket"].textContent) { // if clicked button text equal to original "Add to Basket" button text
conditionsMet ? DonationInterrupterInterface.show(e) : FormInterface.submit(FormInterface.buttons["Add to Basket"]);
} else {
conditionsMet ? DonationInterrupterInterface.show(e) : FormInterface.submit();
}
});
}
}
catch (err) {
console.error("Failed to clone submit button and add event listener.", err);
}
window.NA.DonationInterrupter.onShow = (e) => { // after the popup has been shown
window.NA.DonationInterrupter.updateDialogData(); // update the values in the dialog
//vwoCustomEvent("DonationInterrupter:Shown", { 'token': window.NA.DonationInterrupter._tokenName }); // trigger VWO event to calculate metric that donation interrupter was shown
vwoSendEvent_DonationInterrupter("Shown", window.NA.DonationInterrupter._tokenName);
/// Add click handlers to dialog buttons
try {
const buttons = window.NA.DonationInterrupter.buttons;
const { yes, no } = buttons; // get the button references from the window object
if (e.srcElement.textContent === FormInterface.buttons["Add to Basket"].textContent) { // if clicked button text equal to original "Add to Basket" button text
yes.addEventListener('click', (e) => { // "Yes" button clicked ("Add to Basket" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"Yes" clicked');
//vwoCustomEvent("DonationInterrupter:Yes", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("Yes", window.NA.DonationInterrupter._tokenName);
const originalAmount = FormInterface.getAmount(),
newAmount = window.NA.DonationInterrupter.newAmount(originalAmount);
debug_mode && console.log(originalAmount, '->', newAmount);
//FormInterface.setRecurring(true); // set to recurring
//FormInterface.setAmount(newAmount); // update amount field
DonationInterrupterInterface.hide(); // close popup
addItemToBasket({
"Id": "a4e1Q000000cwIWQAY",
"Amount__c": 5,
"Total_Amount__c": 5,
"Benefit_Amount__c": 0,
"Total_Benefit_Amount__c": 0,
"Total_Deductible_Amount__c": 5,
"Recurring__c": true,
"Anonymous__c": false,
"Quantity__c": 1,
"Community_Campaign__c": "a4e1Q000000cwIWQAY",
"Community_Campaign__r": { "Name": "Missionary Care" } // #22747091
});
FormInterface.submit(FormInterface.buttons["Add to Basket"]); // submit "Add to Basket"
debug_mode && console.groupEnd('"Yes" clicked');
});
no.addEventListener('click', (e) => { // "No" button clicked ("Add to Basket" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"No" clicked');
//vwoCustomEvent("DonationInterrupter:No", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("No", window.NA.DonationInterrupter._tokenName);
DonationInterrupterInterface.hide(); // close popup
FormInterface.submit(FormInterface.buttons["Add to Basket"]); // submit "Add to Basket"
debug_mode && console.groupEnd('"No" clicked');
});
}
else {
yes.addEventListener('click', (e) => { // "Yes" button clicked ("Donate Now" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"Yes" clicked');
//vwoCustomEvent("DonationInterrupter:Yes", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("Yes", window.NA.DonationInterrupter._tokenName);
const originalAmount = FormInterface.getAmount(),
newAmount = window.NA.DonationInterrupter.newAmount(originalAmount);
debug_mode && console.log(originalAmount, '->', newAmount);
//FormInterface.setRecurring(true); // set to recurring
//FormInterface.setAmount(newAmount); // update amount field
DonationInterrupterInterface.hide(); // close popup
addItemToBasket({
"Id": "a4e1Q000000cwIWQAY",
"Amount__c": 5,
"Total_Amount__c": 5,
"Benefit_Amount__c": 0,
"Total_Benefit_Amount__c": 0,
"Total_Deductible_Amount__c": 5,
"Recurring__c": true,
"Anonymous__c": false,
"Quantity__c": 1,
"Community_Campaign__c": "a4e1Q000000cwIWQAY",
"Community_Campaign__r": { "Name": "Missionary Care" } // #22747091
});
FormInterface.submit(); // submit "Donate Now"
debug_mode && console.groupEnd('"Yes" clicked');
});
no.addEventListener('click', (e) => { // "No" button clicked ("Donate Now" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"No" clicked');
//vwoCustomEvent("DonationInterrupter:No", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("No", window.NA.DonationInterrupter._tokenName);
DonationInterrupterInterface.hide(); // close popup
FormInterface.submit(); // submit "Donate Now"
debug_mode && console.groupEnd('"No" clicked');
});
}
debug_mode && console.log("added handlers to buttons", buttons);
}
catch (err) { // if failed
console.error("Failed to attach event listeners to dialog buttons.", err);
//return setTimeout(()=>window.NA.DonationInterrupter.onShow(e), 500); // try again
}
};
}
//
//
setTimeout(init, 500);
return vwo_$('head')[0] && vwo_$('head')[0].lastChild; } catch(e) {} })("HEAD")}}, R_722072_79_1_2_1:{ fn:function(){return (function(x) { try{
var el,ctx=vwo_$(x);
/*vwo_debug log("Revert","addElement","body"); vwo_debug*/(el=vwo_$('[vwo-element-id="1734023425027"]')).remove();
var ctx=vwo_$(x),el;
/*vwo_debug log("Revert","content",""); vwo_debug*/;
el=vwo_$('[vwo-element-id="1734023425028"]');
el.revertContentOp().remove();
return vwo_$('head')[0] && vwo_$('head')[0].lastChild; } catch(e) {} })("HEAD")}}, C_722072_79_1_3_0:{ fn:function(){return (function(x) { try{
var _vwo_sel = vwo_$("");
!vwo_$("head").find("#1734023424983").length && vwo_$('head').append(_vwo_sel);
const DEFAULT_DONATION_FREQUENCY="One-Time";function getQueryParam(e){let t=window.location.search.match(e+"=([^&]*)");return t?t[1]:void 0}function initOnElement(e,t,n){const i=e.getElementsByTagName(t);return i.length?n(i):setTimeout(initOnElement,500,e,t,n)}window.DonationForm=window.DonationForm||{recurring_checkbox:null,submit_button:null,other_amt:null,gift_array_elements:[],onetime_gift_array:[],recurring_gift_array:[10,20,30,40],setRecurring:function(e){console.log("setRecurring",e,this.recurring_checkbox),(!this.recurring_checkbox.checked&&e||this.recurring_checkbox.checked&&!e)&&(console.log("checked",this.recurring_checkbox.checked,"(before click)"),this.recurring_checkbox.click(),console.log("checked",this.recurring_checkbox.checked,"(after click)"))},selectGiftArray:function(e){this.gift_array_elements[e].click()},modifyGiftArray:function(e){this.gift_array_elements.forEach((t,n)=>{t.value=e[n],t.textContent="$"+e[n]})},setOneTimeGiftArrayValues:function(){let e=this;this.gift_array_elements.forEach(t=>{e.onetime_gift_array.push(parseInt(t.value))})},setFirstNamePersonalization:function(e){const t=void 0===getQueryParam("first_name")||""===getQueryParam("first_name")?"Friend":getQueryParam("first_name");for(let n=0;n<=e.length-1;n++)e[n].innerHTML.includes("[Name]")&&(e[n].innerHTML=e[n].innerHTML.replace(/\[[^\]]*]/,t)),e[n].innerHTML.includes("Friend")&&(e[n].innerHTML=e[n].innerHTML.replace("Friend",t))},init:function(){document.querySelectorAll(".tab").forEach(e=>{e.addEventListener("click",(function(e){this.classList.add("selected"),this.classList.contains("recurring")?(document.querySelector(".tab.onetime").classList.remove("selected"),DonationForm.setRecurring(!0)):(document.querySelector(".tab.recurring").classList.remove("selected"),DonationForm.setRecurring(!1))}))}),this.setOneTimeGiftArrayValues(),this.setRecurring(!1),this.selectGiftArray(0)}},initOnElement(document,"c-donate-community-staff-information",(function(e){initOnElement(e[0],"div",(function(e){e[0].querySelectorAll("div.slds-col")[0].classList.add("page-image");const t=e[0].querySelectorAll("div.slds-col")[1];t.classList.add("donation-form-content");const n=t.querySelectorAll("div,lightning-formatted-rich-text");for(let e=0;e<=n.length-1;e++)0==e&&n[e].classList.add("page-title"),1==e&&n[e].classList.add("page-action-text"),2==e&&n[e].classList.add("donation-form"),3==e&&n[e].classList.add("bottom-title"),4==e&&n[e].classList.add("page-text");DonationForm.setFirstNamePersonalization(n[4].shadowRoot.querySelectorAll("div p")),n[1].before(n[4]);const i=document.createElement("div");i.classList.add("tabs"),i.innerHTML='One-Time Gift
Recurring Gift
',n[2].before(i),initOnElement(n[2],"c-donate-community-donate-buttons",(function(e){initOnElement(e[0].shadowRoot.querySelector("div"),"div",(function(e){for(let t=0;t dialog.donation-interrupter {\n --dialog-margin: 2rem;\n --dialog-padding: 3rem;\n position: fixed;\n outline: none;\n border: none;\n padding: 0;\n box-sizing: border-box;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 800px;\n}\ndialog::backdrop { background-color: rgba(0, 0, 0, 0.4); }\ndialog.donation-interrupter > .wrapper {\n position: relative;\n margin: calc(var(--dialog-padding));\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\ndialog.donation-interrupter section {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\ndialog.donation-interrupter section > div {\n display: flex;\n flex-direction: row;\n gap: 1rem;\n}\ndialog.donation-interrupter section.donation-interrupter--cta button > * {\n font-family: inherit;\n color: inherit;\n background-color: transparent;\n display: inline;\n padding: 0;\n margin: 0;\n font-size: inherit !important;\n text-transform: inherit;\n}\ndialog.donation-interrupter button[data-action=\"dismiss\"] {\n --scale: 3;\n position: absolute;\n top: -1.5rem;\n right: -1.5rem;\n display: flex;\n justify-content: center;\n align-items: center;\n background: none;\n border: none;\n outline: none;\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n line-height: 0;\n width: calc(1rem * var(--scale));\n height: calc(1rem * var(--scale));\n font-size: calc(1rem * var(--scale));\n}\ndialog.donation-interrupter > div span[before]::before { content: attr(before); }\ndialog.donation-interrupter button.btn-dismiss {\n color: rgba(0, 0, 0, 0.5);\n background-color: rgba(255, 255, 255, 0.5);\n border-radius: 100%;\n}\ndialog.donation-interrupter button[data-action=\"dismiss\"] + section { max-width: calc(100% - 1rem); } /* clear dismiss button */\n@media only screen and (max-width: 500px) {\n dialog.donation-interrupter section.donation-interrupter--cta > div { flex-direction: column; }\n dialog.donation-interrupter {\n --dialog-margin: 0.5rem !important;\n --dialog-padding: 0.5rem !important;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 100%;\n max-height: calc(100vh - calc(2 * var(--dialog-margin)));\n height: min-content;\n overflow: hidden;\n }\n dialog.donation-interrupter > .wrapper { padding: .75rem !important; }\n}\n@media only screen and (max-width: 375px) {\n dialog.donation-interrupter {\n --dialog-margin: 0rem !important;\n --dialog-padding: 0.5rem !important;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 100%;\n max-height: 100vh;\n height: 100vh;\n overflow: hidden;\n border-radius: 0 !important;\n }\n dialog.donation-interrupter > .wrapper {\n padding: .75rem !important;\n height: calc(100% - 2* 0.5rem) !important;\n overflow: hidden;\n justify-content: space-evenly;\n }\n}\n/* NAV THEME ===================================================================================== */\ndialog.donation-interrupter[theme=\"NAV\"] h1,\ndialog.donation-interrupter[theme=\"NAV\"] h2,\ndialog.donation-interrupter[theme=\"NAV\"] h3,\ndialog.donation-interrupter[theme=\"NAV\"] h4,\ndialog.donation-interrupter[theme=\"NAV\"] h5,\ndialog.donation-interrupter[theme=\"NAV\"] h6,\ndialog.donation-interrupter[theme=\"NAV\"] ul,\ndialog.donation-interrupter[theme=\"NAV\"] p {\n margin: 0;\n line-height: 1.5;\n}\ndialog.donation-interrupter[theme=\"NAV\"] {\n --primary-color: #e16b2a;\n --secondary-color: #008C95;\n --dialog-padding: 1.5rem;\n border-radius: 0.5rem;\n font: 16px \"Montserrat\";\n color: #54473f;\n}\ndialog.donation-interrupter[theme=\"NAV\"] button[data-action=\"dismiss\"] {\n --scale: 4;\n top: -2rem;\n right: -2rem;\n display: none;\n}\ndialog.donation-interrupter[theme=\"NAV\"] .wrapper {\n border: 2px solid var(--secondary-color);\n padding: 1.5rem;\n}\ndialog.donation-interrupter[theme=\"NAV\"] .wrapper > section {\n gap: 0.5rem;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 {\n margin: 0;\n color: #303030;\n line-height: 1.3;\n font-size: 2em;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body p,\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body li,\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta p {\n color: #404040;\n line-height: 1.8;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body ul {\n list-style: disc;\n padding-left: 1.15rem;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta p {\n /*font-weight: bold;*/\n margin: 0;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta > div { \n justify-content: flex-start;\n align-items: center;\n align-items: stretch;\n align-content: center;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button {\n width: 100%;\n padding: 0.5rem 1rem;\n /*font-size: 0.9em;*/\n font-weight: 500;\n border-radius: 0;\n box-sizing: border-box;\n /*text-transform: uppercase !important;*/\n letter-spacing: 0.5px;\n line-height: 1.5;\n max-width: unset;\n transition: all 200ms ease;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button b {\n /*font-size: 1.05em !important;*/\n text-transform: uppercase;\n font-weight: 700;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:first-child {\n color: white;\n background: var(--primary-color);\n border: none;\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:first-child:hover {\n border-color: color-mix(in srgb, var(--primary-color) 90%, black); /* darken */\n background: color-mix(in srgb, var(--primary-color) 90%, black); /* darken */\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:last-child {\n color: black;\n background: white;\n border: 2px solid var(--secondary-color);\n}\ndialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta div > button:last-child:hover {\n color: white;\n border-color: color-mix(in srgb, var(--secondary-color) 90%, black); /* darken */\n background: color-mix(in srgb, var(--secondary-color) 90%, black); /* darken */\n}\n@media only screen and (max-width: 768px) {\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 { font-size: 1.85em; }\n}\n@media only screen and (max-width: 500px) {\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 { font-size: 1.6em; }\n} \n@media only screen and (max-width: 375px) {\n dialog.donation-interrupter {\n --dialog-margin: 0rem !important;\n --dialog-padding: 0.5rem !important;\n max-width: calc(100% - calc(2 * var(--dialog-margin)));\n width: 100%;\n max-height: 100vh;\n height: 100vh;\n overflow: hidden;\n border-radius: 0 !important;\n }\n dialog.donation-interrupter > .wrapper {\n border: none;\n padding: .75rem !important;\n height: calc(100% - 2* 0.5rem) !important;\n overflow: hidden;\n overflow-y: scroll;\n justify-content: space-evenly;\n }\n}\n@media only screen and (max-width: 375px) {\n dialog.donation-interrupter[theme=\"NAV\"] > .wrapper {\n border: none;\n padding: 0;\n }\n}\n@media only screen and (max-width: 440px) {\n dialog.donation-interrupter[theme=\"NAV\"] > .wrapper { gap: 0.5rem }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 {\n font-size: 1.4em;\n line-height: 1.4;\n letter-spacing: -0.25px;\n }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body { gap: 0.35rem }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body p,\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body li { line-height: 1.5 }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta > div { gap: 0.75rem }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button {\n font-size: 0.9em;\n line-height: 1.2;\n letter-spacing: -0.15px;\n }\n}\n@media only screen and (max-width: 280px) { /* Z fold, folded (edge case) */\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--body p,\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta p {\n line-height: 1.25;\n }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--heading > h2 {\n font-size: 1.5em;\n line-height: 1.25;\n }\n dialog.donation-interrupter[theme=\"NAV\"] section.donation-interrupter--cta button {\n font-size: 0.8em;\n line-height: 1.15;\n }\n} ");
!vwo_$("head").find("#1734023425072").length && vwo_$('head').append(_vwo_sel);
!vwo_$("body").find('[vwo-op-1734023424996=""]').length && vwo_$("body").vwoElement({ "html": "\n \n \n
\n Before you finalize your gift... would you be willing to chip in an additional $10 per month to help provide for unexpected missionary expenses? \n \n
\n \n\t\tYour small additional monthly gift will help care for thousands of missionaries to give them training, support in the field, and financial support when unexpected challenges arise.\n
\n \n If you are willing to also give a monthly gift, weโd love to send you an incredible book, 31 Days toward Trusting God by Jerry Bridges.\n
\n \n Would you be willing to chip in an additional $10 per month alongside your missionary gift?\n
\n \n
\n \n \n YES! \n \n Please add a 5 monthly gift to my cart. \n \n \n No, thanks. \n \n Just process my original gift. \n \n
\n \n
\n ", "position": "append", "customBodyElement": true, "addElementId": 1734023424996 })
'esversion: 8';
const ASK_AMOUNT = 10;
const DONATION_INTERRUPTER_GROUP_NAME = "StaffDP" /* all the popups in this test will share the same group name so that the metrics for them are all counted in the test */;
//
//
//
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
//
//
//
window.HTMLElement.prototype.getSlot = window.HTMLElement.prototype.getSlot || function () { return this.querySelector('slot') || this.shadowRoot.querySelector('slot'); }
window.HTMLElement.prototype.getSlotNodes = window.HTMLElement.prototype.getSlotNodes || function (n) { return (parseInt(n) !== 'NaN' && n >= 0) ? Array.from(this.getSlot().assignedNodes({ flatten: true })).at(n) : Array.from(this.getSlot().assignedNodes({ flatten: true })); }
window.HTMLElement.prototype.shadowChildren = window.HTMLElement.prototype.shadowChildren || function (n) { return (parseInt(n) !== 'NaN' && n >= 0) ? Array.from(this.shadowRoot.children).at(n) : Array.from(this.shadowRoot.children); }
function waitForElement (el, retry, onSuccess = (el) => {}, delay = 30) {
if ( !el ) return setTimeout(retry, delay);
onSuccess(el);
return true;
}
//
function vwoSendEvent (eventName = "customEvent", object = { label: '' }) {
window.VWO = window.VWO || [];
VWO.event = VWO.event || function () {VWO.push(["event"].concat([].slice.call(arguments)));};
VWO.event(eventName, object);
console.log(eventName, object);
}
const vwoSendEvent_DonationInterrupter = (action, group = undefined) => {
if (action === "Shown")
vwoSendEvent("custom_DonationInterrupter_Shown", { shown: true, group: group });
else if (action === "Yes")
vwoSendEvent("custom_DonationInterrupter_Yes", { yes: true, group: group });
else if (action === "No")
vwoSendEvent("custom_DonationInterrupter_No", { donationInterrupterNoClicked: true, group: group });
};
//
function getBasketId (tokenName = `LSSIndex:LOCAL{"namespace":"c"}`){
const token = localStorage.getItem(tokenName);
if (!token) {
return console.error("getBasketId:", "Failed to get token from localStorage:", tokenName);
} else {
try {
const { basket } = JSON.parse(token); // get basket property from the object
return basket;
} catch (error) {
return console.error("getBasketId:", "Failed to parse JSON:", token);
}
}
}
function getBasket (basketId) {
let token = localStorage.getItem(basketId);
if (!token) {
const emptyBasket = {
"Id": "localBasket",
"Basket_Items__r": [],
"Total__c": 0,
"Number_of_Items__c": 0,
"itemMap": {}
};
console.info("getBasket:", "Failed to get token from localStorage:", basketId, "\nAttempting to create a new empty basket and retrying...");
localStorage.setItem(basketId, JSON.stringify(emptyBasket));
token = localStorage.getItem(basketId);
}
if (!token) {
return console.error("getBasket:", "Failed to get token from localStorage:", basketId);
} else {
try {
return JSON.parse(token); // get basket property from the object
} catch (error) {
return console.error("getBasket:", "Failed to parse JSON:", token);
}
}
}
function addItemToBasket (item) {
const basketId = getBasketId(),
basket = getBasket(basketId);
if ( basket.Basket_Items__r.find(item => item.id === item.Id) ) { // check if the item Id is already in the cart
const foundItem = basket.Basket_Items__r.find(item => item.Id);
foundItem["Quantity__c"] += 1; // update the quantity of the found item
foundItem["Total_Amount__c"] = foundItem["Amount__c"] * foundItem["Quantity__c"]; // update the quantity of the found item
foundItem["Total_Deductible_Amount__c"] = foundItem["Amount__c"] * foundItem["Quantity__c"]; // update the quantity of the found item
} else {
basket.Basket_Items__r.push(item); // add the item to the array
}
basket.Number_of_Items__c = basket.Basket_Items__r.length; // update item count
basket.Total__c = basket.Basket_Items__r.reduce((total, item) => total + item["Amount__c"], 0); // update total amount
basket.itemMap = Object.fromEntries(basket.Basket_Items__r.map((item, index) => ([item.Id, index]))); // update itemMap
return localStorage.setItem(basketId, JSON.stringify(basket));
}
function setAppealCode (sf_ac) {
let queryString;
let searchParams = window.location.search;
if (searchParams.match('sf_ac')) {
const regex = new RegExp(`(${'sf_ac'}=)([^&]*)`);
queryString = searchParams.replace(regex, `$1${sf_ac}`); // replace existing appeal code value
} else {
queryString = searchParams + '&sf_ac=' + sf_ac; // append appeal code
}
window.history.pushState('', '', '?' + queryString);
}
//
function entangleElements (element1, element2, method = 'innerHTML', options = { attributes: true, childList: true, subtree: true }) {
if (!element1 || !element2)
return console.error(`entangleElements: ${!element1 && "element1"}${!element1 && !element2 ? " and " : " "} ${!element2 && "element2"} ${!element1 && !element2 ? "are" : "is"} undefined.`);
console.log("Entangling:\n", element1, ' ', element2, "\nElement 2 will mirror Element 1's values.");
const handleMutation = (mutationList, observer) => { // Callback function to execute when mutations are observed
let lastAttributeValues = {};
for (const mutation of mutationList) {
switch (mutation.type) {
case "attributes":
const { attributeName, oldValue } = mutation;
if (attributeName !== "style") { // ignore changes to style attribute
const currentValue = element1.getAttribute(attributeName);
if (currentValue === null) {
element2.removeAttribute(attributeName); // mirror element 1 attributes on element 2 by removing null value attribute
} else {
element2.setAttribute(attributeName, currentValue); // mirror element 1 attributes on element 2
}
}
break;
default:
element2[method] = element1[method];
break;
}
}
};
const observer = new MutationObserver(handleMutation);
observer.observe(element1, options); // Start observing the target node for configured mutations
return observer;
}
//
//
//
//
function init () {
if (window.VWOInjected) {
console.warn("Do not preview using the VWO Visual Editor.");
return;
}
if (sessionStorage.getItem("NA_DonationInterrupter_StaffDPv2_status") === "dismissed") {
console.warn("Popup already dismissed.");
return;
}
try {
customElements.whenDefined("c-donate-community-staff-information").then(() => {
customElements.whenDefined("c-donate-community-donate-buttons").then(() => {
customElements.whenDefined("lightning-input").then(() => {
const wrapperForm = document.querySelector('c-donate-community-staff-information');
const wrapperFormInteractive = wrapperForm.shadowRoot.querySelector('c-donate-community-donate-buttons').shadowChildren(0);
console.log(wrapperFormInteractive);
/// Interface with the giving form and create a window object
const form = {
getGiftArrayButtons: function () {
let w = wrapperFormInteractive;
return Array.from(w.children).slice(0, Array.from(w.children).indexOf(w.querySelector('.slds-form-element'))).map(x => x.querySelector('button'));
},
getAmount: function () {
const sanitizeAmount = a => a.replace(/[^\d\.]/,''); // remove non-digit characters (except for decimals)
let selected = this.getGiftArrayButtons().filter(x => x.classList.contains("donate-selected"))[0];
if (selected) {
return parseFloat(selected.value);
} else {
selected = wrapperFormInteractive.querySelector('lightning-input').shadowChildren(0).shadowChildren(0).querySelector('input');
return parseFloat(sanitizeAmount(selected.value));
}
console.warn("Amount is not defined: no option is selected.")
return undefined;
},
setAmount: function (n) {
let match;
const otherAmount = wrapperFormInteractive.querySelector('lightning-input').shadowChildren(0).shadowChildren(0).querySelector('input');
for (const button of this.getGiftArrayButtons()) { // iterate over gift array buttons
if (parseFloat(button.value) === parseFloat(n) ) { // if matching button found for amount
otherAmount.value = ''; // clear other amount
button.click(); // click the matching button
return this.getAmount() === parseFloat(n); // return true if the getAmount() matches the input value
}
}
otherAmount.value = parseFloat(n); // set the other amount field value to the input value
otherAmount.dispatchEvent(new Event('change', { bubbles: true })); // trigger a change event to cause the input to be formatted
return this.getAmount() === parseFloat(n); // return true if the getAmount() matches the input value
},
getRecurring: function () {
const checkbox = [...wrapperFormInteractive.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]');
return checkbox.checked;
},
setRecurring: function (toRecurring = true) {
const checkbox = [...wrapperFormInteractive.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]');
const isRecurring = this.getRecurring(), isOnetime = !isRecurring, toOnetime = !toRecurring; // semantic booleans
if ( (isOnetime && toRecurring) || (isRecurring && toOnetime)) {
checkbox.click();
}
return this.getRecurring() === toRecurring;
},
submit: function (btn = this.buttons["Donate Now"]) {
return btn.click();
},
};
//form.giftArrayButtons = form.getGiftArrayButtons();
window.NA = window.NA || {};
window.NA.MiniDonationForm = form;
waitForElement(wrapperFormInteractive.querySelector('button'), init, (el) => { // wait for form buttons
window.NA.MiniDonationForm.buttons = {
"Donate Now": Array.from(wrapperFormInteractive.children).slice(Array.from(wrapperFormInteractive.children).indexOf(wrapperFormInteractive.querySelector('.slds-form-element'))).map(x => x.querySelector('button')).filter(y => y)[0],
"Add to Basket": Array.from(wrapperFormInteractive.children).slice(Array.from(wrapperFormInteractive.children).indexOf(wrapperFormInteractive.querySelector('.slds-form-element'))).map(x => x.querySelector('button')).filter(y => y)[1],
};
window.NA.MiniDonationForm.cloneSubmitButton = function (originalButton = this.buttons["Donate Now"]) {
const clonedButton = originalButton.cloneNode(true); // clone the button and its children
clonedButton.attributes = originalButton.attributes; // copy attributes
clonedButton.id = clonedButton.textContent.trim().replaceAll(' ', '_') + "_copy";
if (clonedButton.style) clonedButton.style = originalButton.style; // copy styles
originalButton.after(clonedButton); // insert the fake button after the original
//entangleElements(originalButton, clonedButton, 'outerHTML'); // quantum entangle the elements via outerHTML -- does not work if the element is fully replaced when state changed
return clonedButton; // return the fake button
};
/// Interface with the Donation Interrupter and create a window object
waitForElement(document.querySelector('dialog.donation-interrupter'), init, (dialog) => { // wait for element
const donationPageType = window.Navigators?.donationPageType?.toLowerCase() ?? undefined;
if (donationPageType !== "staff") {
dialog.style.setProperty("display", "none", "important");
//dialog.remove();
return console.warn(`Donation page type must be "Staff" for this test to run.`), null;
}
if (document.querySelectorAll('dialog.donation-interrupter').length > 1) {
return console.warn(`Multiple donation interrupters found on the page.`), null;
}
console.log("dialog found:", dialog);
try {
const DonationInterrupter = {
dialog: dialog || document.querySelector('dialog.donation-interrupter'),
_tokenName: DONATION_INTERRUPTER_GROUP_NAME ? "NA_DonationInterrupter_" + DONATION_INTERRUPTER_GROUP_NAME : "NA_DonationInterrupter",
_memoryMode: sessionStorage,
status: "ready",
getStatus: function () {
return this._memoryMode.getItem(this._tokenName + "_status") || undefined;
},
setStatus: function (t) {
this._memoryMode.setItem(this._tokenName + "_status", t);
this.status = t;
return this.getStatus();
},
conditions: (function(){return true;})(),
newAmount: function (originalAmount) { return originalAmount / 12; }, // reduced ask amount
onShow: function (e) {},
onHide: function (e) {},
show: function (e = undefined) {
this.dialog.showModal();
this.dialog.addEventListener('keydown', e => { e.key === "Escape" && (e.preventDefault(), e.stopImmediatePropagation()) }); // prevent esc button clicked
this.setStatus("shown");
typeof this.onShow === "function" && this.onShow.call(null, e);
},
hide: function (e = undefined) {
this.setStatus("dismissed");
this.dialog.close();
typeof this.onHide === "function" && this.onHide.call(null, e);
},
updateDialogData: function () {
if (this.dialog) {
let originalAmount = window.NA.MiniDonationForm.getAmount(),
suggestedAmount = this.newAmount(originalAmount);
[...this.dialog.querySelectorAll('span[data="amount_original"]')].forEach(span => span.textContent = originalAmount.toString());
[...this.dialog.querySelectorAll('span[data="amount_suggested"]')].forEach(span => span.textContent = suggestedAmount.toString());
}
},
};
window.NA = window.NA || {};
window.NA.DonationInterrupter = DonationInterrupter ? DonationInterrupter : window.NA.DonationInterrupter;
if (window.NA.MiniDonationForm && window.NA.DonationInterrupter)
main(window.NA.MiniDonationForm, window.NA.DonationInterrupter);
} catch (err) {
console.error("Failed to interface with donation interrupter.");
}
}, 100); // wait for element
}, 100); // wait for form buttons
}); // when "lightning-input" defined
}); // when "c-donate-community-donate-buttons" defined
}); // when "c-donate-community-staff-information" defined
} catch (err) {
console.error("Error when waiting for custom elements:", err);
}
}
//
//
//
//
//
//
//
//
function main (FormInterface, DonationInterrupterInterface, debug_mode = 0) {
if (!FormInterface.buttons)
return setTimeout(init, 100);
if (!DonationInterrupterInterface.buttons) {
DonationInterrupterInterface.buttons = { // finish setting up the reference to the CTA buttons in the
"yes": [...DonationInterrupterInterface.dialog.querySelectorAll('button')][0],
"no": [...DonationInterrupterInterface.dialog.querySelectorAll('button')][1],
};
return main(FormInterface, DonationInterrupterInterface, debug_mode); // and try again
}
window.NA.DonationInterrupter.setStatus(window.NA.DonationInterrupter._memoryMode.getItem(window.NA.DonationInterrupter._tokenName + "_status") || "ready"); // set status to the sessionStorage token (saved state) or ready (first time)
window.NA.DonationInterrupter.newAmount = originalAmount => ASK_AMOUNT; // set the function that determines the reduced gift amount: constant $10
/// Add click handle to fake submit button to trigger popup
try {
const existingCopiedButtons = [...(window.NA.MiniDonationForm.buttons["Donate Now"]?.parentElement.parentElement).querySelectorAll('button[id$=copy]')];
if (existingCopiedButtons.length > 2)
return;
//
for (const button of Object.values(FormInterface.buttons)) {
const originalButton = button, // get the original button to clone
fakeButton = FormInterface.cloneSubmitButton(originalButton); // clones the element, attributes, and styles
originalButton.style.display = "none"; // hide original button
fakeButton.style.setProperty("margin-left", '0', "important"); // fix positioning
//debug_mode && fakeButton.style.setProperty("border", "3px dashed red", "important"); // highlight the fake button
setInterval(() => fakeButton.disabled = originalButton.disabled, 50); // update disabled state of button every 50ms
fakeButton.addEventListener('click', (e) => { // when the fake button copy is clicked
let amount = FormInterface.getAmount(), // get the amount
isRecurring = FormInterface.getRecurring(), // check if recurring
popupShown = DonationInterrupterInterface.status === "shown" || DonationInterrupterInterface.status === "dismissed"; // check if the popup has been dismissed
if (debug_mode) { // log expression in debug_mode
console.groupCollapsed("Check conditions");
console.info(amount, "< 250", amount < 250);
//console.info(isRecurring, "=== false", isRecurring === false);
console.info(popupShown, "=== false", popupShown === false);
console.groupEnd("Check conditions");
}
const conditionsMet = [
//amount >= 5, // greater than $5
amount < 250, // less than $250
//isRecurring === false, // not recurring
popupShown === false, // not already seen
].every(condition => condition ? true : false); // reduce the expression evaluations to true or false
debug_mode && console.info("showPopup?", conditionsMet);
// Which button triggered the popup determins which button will be used to submit
if (e.srcElement.textContent === FormInterface.buttons["Add to Basket"].textContent) { // if clicked button text equal to original "Add to Basket" button text
conditionsMet ? DonationInterrupterInterface.show(e) : FormInterface.submit(FormInterface.buttons["Add to Basket"]);
} else {
conditionsMet ? DonationInterrupterInterface.show(e) : FormInterface.submit();
}
if (conditionsMet) {
const existingCopiedButtons = [...(window.NA.MiniDonationForm.buttons["Donate Now"]?.parentElement.parentElement).querySelectorAll('button[id$=copy]')];
existingCopiedButtons.forEach(btn => btn.style.setProperty("display", "none"));
}
});
}
}
catch (err) {
console.error("Failed to clone submit button and add event listener.", err);
}
window.NA.DonationInterrupter.onShow = (e) => { // after the popup has been shown
window.NA.DonationInterrupter.updateDialogData(); // update the values in the dialog
//vwoCustomEvent("DonationInterrupter:Shown", { 'token': window.NA.DonationInterrupter._tokenName }); // trigger VWO event to calculate metric that donation interrupter was shown
vwoSendEvent_DonationInterrupter("Shown", window.NA.DonationInterrupter._tokenName);
/// Add click handlers to dialog buttons
try {
const buttons = window.NA.DonationInterrupter.buttons;
const { yes, no } = buttons; // get the button references from the window object
if (e.srcElement.textContent === FormInterface.buttons["Add to Basket"].textContent) { // if clicked button text equal to original "Add to Basket" button text
yes.addEventListener('click', (e) => { // "Yes" button clicked ("Add to Basket" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"Yes" clicked');
//vwoCustomEvent("DonationInterrupter:Yes", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("Yes", window.NA.DonationInterrupter._tokenName);
const originalAmount = FormInterface.getAmount(),
newAmount = window.NA.DonationInterrupter.newAmount(originalAmount);
debug_mode && console.log(originalAmount, '->', newAmount);
//FormInterface.setRecurring(true); // set to recurring
//FormInterface.setAmount(newAmount); // update amount field
DonationInterrupterInterface.hide(); // close popup
setAppealCode("1009710");
addItemToBasket({
"Id": "a4e1Q000000cwIWQAY",
"Amount__c": ASK_AMOUNT,
"Total_Amount__c": ASK_AMOUNT,
"Benefit_Amount__c": 0,
"Total_Benefit_Amount__c": 0,
"Total_Deductible_Amount__c": ASK_AMOUNT,
"Recurring__c": true,
"Anonymous__c": false,
"Quantity__c": 1,
"Community_Campaign__c": "a4e1Q000000cwIWQAY",
"Community_Campaign__r": { "Name": "Missionary Care" } // #22747091
});
FormInterface.submit(FormInterface.buttons["Add to Basket"]); // submit "Add to Basket"
debug_mode && console.groupEnd('"Yes" clicked');
});
no.addEventListener('click', (e) => { // "No" button clicked ("Add to Basket" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"No" clicked');
//vwoCustomEvent("DonationInterrupter:No", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("No", window.NA.DonationInterrupter._tokenName);
DonationInterrupterInterface.hide(); // close popup
FormInterface.submit(FormInterface.buttons["Add to Basket"]); // submit "Add to Basket"
debug_mode && console.groupEnd('"No" clicked');
});
}
else {
yes.addEventListener('click', (e) => { // "Yes" button clicked ("Donate Now" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"Yes" clicked');
//vwoCustomEvent("DonationInterrupter:Yes", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("Yes", window.NA.DonationInterrupter._tokenName);
const originalAmount = FormInterface.getAmount(),
newAmount = window.NA.DonationInterrupter.newAmount(originalAmount);
debug_mode && console.log(originalAmount, '->', newAmount);
//FormInterface.setRecurring(true); // set to recurring
//FormInterface.setAmount(newAmount); // update amount field
DonationInterrupterInterface.hide(); // close popup
setAppealCode("1009710");
addItemToBasket({
"Id": "a4e1Q000000cwIWQAY",
"Amount__c": ASK_AMOUNT,
"Total_Amount__c": ASK_AMOUNT,
"Benefit_Amount__c": 0,
"Total_Benefit_Amount__c": 0,
"Total_Deductible_Amount__c": ASK_AMOUNT,
"Recurring__c": true,
"Anonymous__c": false,
"Quantity__c": 1,
"Community_Campaign__c": "a4e1Q000000cwIWQAY",
"Community_Campaign__r": { "Name": "Missionary Care" } // #22747091
});
FormInterface.submit(); // submit "Donate Now"
debug_mode && console.groupEnd('"Yes" clicked');
});
no.addEventListener('click', (e) => { // "No" button clicked ("Donate Now" triggered popup)
e.preventDefault();
debug_mode && console.groupCollapsed('"No" clicked');
//vwoCustomEvent("DonationInterrupter:No", { 'token': window.NA.DonationInterrupter._tokenName });
vwoSendEvent_DonationInterrupter("No", window.NA.DonationInterrupter._tokenName);
DonationInterrupterInterface.hide(); // close popup
FormInterface.submit(); // submit "Donate Now"
debug_mode && console.groupEnd('"No" clicked');
});
}
debug_mode && console.log("added handlers to buttons", buttons);
}
catch (err) { // if failed
console.error("Failed to attach event listeners to dialog buttons.", err);
//return setTimeout(()=>window.NA.DonationInterrupter.onShow(e), 500); // try again
}
};
}
//
//
setTimeout(init, 500);
return vwo_$('head')[0] && vwo_$('head')[0].lastChild; } catch(e) {} })("HEAD")}}, C_722072_157_1_2_2:{ fn:function(log,nonce=''){return (function(x) {var el,ctx=vwo_$(x);
/*vwo_debug log("content",".pushdown-copy > p:nth-of-type(1)"); vwo_debug*/el=vwo_$(".pushdown-copy > p:nth-of-type(1)"),vwo_$(".pushdown-copy > p:nth-of-type(1)").each((function(){this.__vwoControlOuterHTML=this.__vwoControlOuterHTML||this.outerHTML,!vwo_$(this).find('[vwo-op-1744062807509-0=""]').length&&vwo_$(this).append('Will you help a kid get to Eagle Lake Camps of The Navigators this summer? '),vwo_$(this).nonEmptyContents().eq(0).replaceWith2(document.createTextNode("You can be the difference in a child making a decision to follow Jesus at camp this summer. "))})),el=vwo_$(".pushdown-copy > p:nth-of-type(1)");})(".pushdown-copy > p:nth-of-type(1)")}}, R_722072_157_1_2_2:{ fn:function(log,nonce=''){return (function(x) {
if(!vwo_$.fn.vwoRevertHtml){
return;
};
var el,ctx=vwo_$(x);
/*vwo_debug log("Revert","content",".pushdown-copy > p:nth-of-type(1)"); vwo_debug*/(el=vwo_$(".pushdown-copy > p:nth-of-type(1)")).revertContentOp(),el=vwo_$(".pushdown-copy > p:nth-of-type(1)");})(".pushdown-copy > p:nth-of-type(1)")}}, C_722072_157_1_2_3:{ fn:function(log,nonce=''){return (function(x) {})(".na-pushdown-wrapper,.mw-w-button,input.mw-w-button,#page,.pushdownbar,.div-block-16,.pushdownheadline,.pushdown,.div-block-7,.div-block-8,.paragraph-2,.div-block-15,.mw-btn,.mw-btn:visited,.mw-white,.mw-btn.mw-white,.mw-btn.mw-whitemw-btn:link,.na-pushdown-wrapper .close span,.na-pushdown-wrapper .close,.fa-angle-down:before,/*#donate-menu,.close-wrapper,.btn-dismiss,#masthead .close-menu,.pushdown .pushdown__row,.pushdown .pushdown__col,.pushdown .pushdown__content,.pushdown .pushdown-copy > *:last-child,.pushdown .grid-area,.pushdown .grid-card,.pushdown .grid-card div > p,.pushdown .grid-card div > p > span,.pushdown .grid-card .flex-col,.pushdown .grid-card div > p > b,.pushdown .grid-card button,.pushdown div div.centered,.pushdown div a.other-link,.pushdown .pushdown__close,.pushdown .grid-card p:nth-of-type(3),.pushdown .grid-card p > b")}}, R_722072_157_1_2_3:{ fn:function(log,nonce=''){return (function(x) {
if(!vwo_$.fn.vwoRevertHtml){
return;
};
})(".na-pushdown-wrapper,.mw-w-button,input.mw-w-button,#page,.pushdownbar,.div-block-16,.pushdownheadline,.pushdown,.div-block-7,.div-block-8,.paragraph-2,.div-block-15,.mw-btn,.mw-btn:visited,.mw-white,.mw-btn.mw-white,.mw-btn.mw-whitemw-btn:link,.na-pushdown-wrapper .close span,.na-pushdown-wrapper .close,.fa-angle-down:before,/*#donate-menu,.close-wrapper,.btn-dismiss,#masthead .close-menu,.pushdown .pushdown__row,.pushdown .pushdown__col,.pushdown .pushdown__content,.pushdown .pushdown-copy > *:last-child,.pushdown .grid-area,.pushdown .grid-card,.pushdown .grid-card div > p,.pushdown .grid-card div > p > span,.pushdown .grid-card .flex-col,.pushdown .grid-card div > p > b,.pushdown .grid-card button,.pushdown div div.centered,.pushdown div a.other-link,.pushdown .pushdown__close,.pushdown .grid-card p:nth-of-type(3),.pushdown .grid-card p > b")}}, C_722072_157_1_3_0:{ fn:function(log,nonce=''){return (function(x) {;var _vwo_sel=vwo_$("");vwo_$('head').append(_vwo_sel);return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("HEAD")}}},rules:[{"triggers":["12607155"],"tags":[{"data":{"type":"g","campaigns":[{"c":79,"g":7}]},"metricId":0,"id":"metric"}]},{"triggers":["13064070"],"tags":[{"data":{"type":"g","campaigns":[{"c":158,"g":9}]},"metricId":0,"id":"metric"}]},{"triggers":["13064073"],"tags":[{"data":{"type":"g","campaigns":[{"c":158,"g":10}]},"metricId":0,"id":"metric"}]},{"triggers":["4252289"],"tags":[{"data":{"type":"m","campaigns":[{"c":158,"g":1}]},"metricId":490091,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":70,"g":5}]},"metricId":490091,"id":"metric"}]},{"triggers":["10067839"],"tags":[{"priority":4,"data":"campaigns.121","id":"runCampaign"}]},{"triggers":["4252292"],"tags":[{"data":{"type":"m","campaigns":[{"c":70,"g":6}]},"metricId":490094,"id":"metric"}]},{"triggers":["4091675"],"tags":[{"data":{"type":"m","campaigns":[{"c":158,"g":4}]},"metricId":476318,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":157,"g":4}]},"metricId":476318,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":121,"g":2}]},"metricId":476318,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":79,"g":2}]},"metricId":476318,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":156,"g":4}]},"metricId":476318,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":70,"g":2}]},"metricId":476318,"id":"metric"}]},{"triggers":["11807224"],"tags":[{"data":{"type":"g","campaigns":[{"c":121,"g":5}]},"metricId":0,"id":"metric"}]},{"triggers":["8881173"],"tags":[{"priority":4,"data":"campaigns.70","id":"runCampaign"}]},{"triggers":["10067944"],"tags":[{"priority":4,"data":"campaigns.79","id":"runCampaign"}]},{"triggers":["11807227"],"tags":[{"data":{"type":"g","campaigns":[{"c":121,"g":6}]},"metricId":0,"id":"metric"}]},{"triggers":["1740152"],"tags":[{"data":{"type":"m","campaigns":[{"c":158,"g":6}]},"metricId":165095,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":157,"g":1}]},"metricId":165095,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":121,"g":3}]},"metricId":165095,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":79,"g":3}]},"metricId":165095,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":156,"g":1}]},"metricId":165095,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":70,"g":3}]},"metricId":165095,"id":"metric"}]},{"triggers":["11807230"],"tags":[{"data":{"type":"g","campaigns":[{"c":121,"g":7}]},"metricId":0,"id":"metric"}]},{"triggers":["12607149"],"tags":[{"data":{"type":"g","campaigns":[{"c":79,"g":5}]},"metricId":0,"id":"metric"}]},{"triggers":["4252295"],"tags":[{"data":{"type":"m","campaigns":[{"c":70,"g":7}]},"metricId":490097,"id":"metric"}]},{"triggers":["1740149"],"tags":[{"data":{"type":"m","campaigns":[{"c":158,"g":7}]},"metricId":165092,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":157,"g":2}]},"metricId":165092,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":121,"g":4}]},"metricId":165092,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":79,"g":4}]},"metricId":165092,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":156,"g":2}]},"metricId":165092,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":70,"g":4}]},"metricId":165092,"id":"metric"}]},{"triggers":["12607152"],"tags":[{"data":{"type":"g","campaigns":[{"c":79,"g":6}]},"metricId":0,"id":"metric"}]},{"triggers":["13064067"],"tags":[{"priority":4,"data":"campaigns.158","id":"runCampaign"},{"priority":4,"data":"campaigns.157","id":"runCampaign"},{"priority":4,"data":"campaigns.156","id":"runCampaign"}]},{"triggers":["13290603"],"tags":[{"data":{"type":"g","campaigns":[{"c":157,"g":5}]},"metricId":0,"id":"metric"}]},{"triggers":["1417796"],"tags":[{"data":{"type":"m","campaigns":[{"c":158,"g":8}]},"metricId":165089,"id":"metric"}]},{"triggers":["4091672"],"tags":[{"data":{"type":"m","campaigns":[{"c":158,"g":5}]},"metricId":476312,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":157,"g":3}]},"metricId":476312,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":121,"g":1}]},"metricId":476312,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":79,"g":1}]},"metricId":476312,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":156,"g":3}]},"metricId":476312,"id":"metric"},{"data":{"type":"m","campaigns":[{"c":70,"g":1}]},"metricId":476312,"id":"metric"}]},{"triggers":["75"],"tags":[{"id":"urlChange"}]},{"triggers":["5"],"tags":[{"id":"checkEnvironment"}]},{"triggers":["8"],"tags":[{"priority":2,"id":"groupCampaigns"},{"priority":3,"id":"prePostMutation"}]},{"triggers":["9"],"tags":[{"priority":2,"id":"visibilityService"}]},{"triggers":["2"],"tags":[{"id":"runTestCampaign"}]}],pages:{"ec":[{"1551882":{"inc":["o",["url","urlReg","(?i).*"]]}},{"2209614":{"exc":["o",["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?donations\\.navigators\\.org.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?donations\\-prod\\.navigators\\.org.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?donate\\.navigators\\.org.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?navigators\\.org\\\/disciplemaking.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?navigators\\.org\\\/about\\\/contact\\-us.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?navigators\\.org\\\/prayer\\-request.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?forms\\.navigators\\.org.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?joinstaff\\.navigators\\.org.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?navigators\\.org\\\/mk.*"],["url","urlReg","(?i).*donations.*"],["url","urlReg","(?i).*give.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?navigators\\.org\\\/ministry\\-partner\\-care.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?dev\\-navigators\\.pantheonsite\\.io.*"]],"inc":["o",["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?navigators\\.org.*"]]}}]},pagesEval:{"ec":[1551882,2209614]},stags:{}}})();
;;var commonWrapper=function(argument){if(!argument){argument={valuesGetter:function(){return{}},valuesSetter:function(){},verifyData:function(){return{}}}}const getVisitorUuid=function(){if(window._vwo_acc_id>=1037725){return window.VWO&&window.VWO.get("visitor.id")}else{return window.VWO._&&window.VWO._.cookies&&window.VWO._.cookies.get("_vwo_uuid")}};var pollInterval=100;var timeout=6e4;return function(){var accountIntegrationSettings={};var _interval=null;function waitForAnalyticsVariables(){try{accountIntegrationSettings=argument.valuesGetter();accountIntegrationSettings.visitorUuid=getVisitorUuid()}catch(error){accountIntegrationSettings=undefined}if(accountIntegrationSettings&&argument.verifyData(accountIntegrationSettings)){argument.valuesSetter(accountIntegrationSettings);return 1}return 0}var currentTime=0;_interval=setInterval((function(){currentTime=currentTime||performance.now();var result=waitForAnalyticsVariables();if(result||performance.now()-currentTime>=timeout){clearInterval(_interval)}}),pollInterval)}};
commonWrapper({valuesGetter:function(){return {"ga4s":0}},valuesSetter:function(data){var singleCall=data["ga4s"]||0;if(singleCall){window.sessionStorage.setItem("vwo-ga4-singlecall",true)}var ga4_device_id="";if(typeof window.VWO._.cookies!=="undefined"){ga4_device_id=window.VWO._.cookies.get("_ga")||""}if(ga4_device_id){window.vwo_ga4_uuid=ga4_device_id.split(".").slice(-2).join(".")}},verifyData:function(data){if(typeof window.VWO._.cookies!=="undefined"){return window.VWO._.cookies.get("_ga")||""}else{return false}}})();
var pushBasedCommonWrapper=function(argument){var firedCamp={};if(!argument){argument={integrationName:"",getExperimentList:function(){},accountSettings:function(){},pushData:function(){}}}return function(){window.VWO=window.VWO||[];const getVisitorUuid=function(){if(window._vwo_acc_id>=1037725){return window.VWO&&window.VWO.get("visitor.id")}else{return window.VWO._&&window.VWO._.cookies&&window.VWO._.cookies.get("_vwo_uuid")}};var sendDebugLogsOld=function(expId,variationId,errorType,user_type,data){try{var errorPayload={f:argument["integrationName"]||"",a:window._vwo_acc_id,url:window.location.href,exp:expId,v:variationId,vwo_uuid:getVisitorUuid(),user_type:user_type};if(errorType=="initIntegrationCallback"){errorPayload["log_type"]="initIntegrationCallback";errorPayload["data"]=JSON.stringify(data||"")}else if(errorType=="timeout"){errorPayload["timeout"]=true}if(window.VWO._.customError){window.VWO._.customError({msg:"integration debug",url:window.location.href,lineno:"",colno:"",source:JSON.stringify(errorPayload)})}}catch(e){window.VWO._.customError&&window.VWO._.customError({msg:"integration debug failed",url:"",lineno:"",colno:"",source:""})}};var sendDebugLogs=function(expId,variationId,errorType,user_type){var eventName="vwo_debugLogs";var eventPayload={};try{eventPayload={intName:argument["integrationName"]||"",varId:variationId,expId:expId,type:errorType,vwo_uuid:getVisitorUuid(),user_type:user_type};if(window.VWO._.event){window.VWO._.event(eventName,eventPayload,{enableLogs:1})}}catch(e){eventPayload={msg:"integration event log failed",url:window.location.href};window.VWO._.event&&window.VWO._.event(eventName,eventPayload)}};const callbackFn=function(data){if(!data)return;var expId=data[1],variationId=data[2],repeated=data[0],singleCall=0,debug=0;var experimentList=argument.getExperimentList();var integrationName=argument["integrationName"]||"vwo";if(typeof argument.accountSettings==="function"){var accountSettings=argument.accountSettings();if(accountSettings){singleCall=accountSettings["singleCall"];debug=accountSettings["debug"]}}if(debug){sendDebugLogs(expId,variationId,"intCallTriggered",repeated)}if(singleCall&&(repeated==="vS"||repeated==="vSS")||firedCamp[expId]){return}window.expList=window.expList||{};var expList=window.expList[integrationName]=window.expList[integrationName]||[];if(expId&&variationId&&["VISUAL_AB","VISUAL","SPLIT_URL"].indexOf(_vwo_exp[expId].type)>-1){if(experimentList.indexOf(+expId)!==-1){firedCamp[expId]=variationId;var visitorUuid=getVisitorUuid();var pollInterval=100;var currentTime=0;var timeout=6e4;var user_type=_vwo_exp[expId].exec?"vwo-retry":"vwo-new";var interval=setInterval((function(){if(expList.indexOf(expId)!==-1){clearInterval(interval);return}currentTime=currentTime||performance.now();var toClearInterval=argument.pushData(expId,variationId,visitorUuid);if(debug&&toClearInterval){sendDebugLogsOld(expId,variationId,"",user_type);sendDebugLogs(expId,variationId,"intDataPushed",user_type)}var isTimeout=performance.now()-currentTime>=timeout;if(isTimeout&&debug){sendDebugLogsOld(expId,variationId,"timeout",user_type);sendDebugLogs(expId,variationId,"intTimeout",user_type)}if(toClearInterval||isTimeout){clearInterval(interval)}if(toClearInterval){window.expList[integrationName].push(expId)}}),pollInterval||100)}}};window.VWO.push(["onVariationApplied",callbackFn]);window.VWO.push(["onVariationShownSent",callbackFn])}};
var surveyDataCommonWrapper=function(argument){if(!argument){argument={getCampaignList:function(){return[]},surveyStatusChange:function(){},answerSubmitted:function(){}}}return function(){window.VWO=window.VWO||[];function getValuesFromAnswers(answers){var values=[];for(var i=0;i=timeout;if(toClearInterval||isTimeout){clearInterval(interval)}}),pollInterval)}}window.VWO.push(["onSurveyShown",function(data){commonSurveyCallback(data,argument.surveyStatusChange,"surveyShown")}]);window.VWO.push(["onSurveyCompleted",function(data){commonSurveyCallback(data,argument.surveyStatusChange,"surveyCompleted")}]);window.VWO.push(["onSurveyAnswerSubmitted",function(data){commonSurveyCallback(data,argument.answerSubmitted,"surveySubmitted")}])}};
(function(){var VWOOmniTemp={};window.VWOOmni=window.VWOOmni||{};for(var key in VWOOmniTemp)Object.prototype.hasOwnProperty.call(VWOOmniTemp,key)&&(window.VWOOmni[key]=VWOOmniTemp[key]);window._vwoIntegrationsLoaded=1;pushBasedCommonWrapper({integrationName:"GA4",getExperimentList:function(){return [70,79,121,156,157,158]},accountSettings:function(){var accountIntegrationSettings={"manualSetup":true,"setupVia":"gtm","dataVariable":"dataLayer"};if(accountIntegrationSettings["debugType"]=="ga4"&&accountIntegrationSettings["debug"]){accountIntegrationSettings["debug"]=1}else{accountIntegrationSettings["debug"]=0}return accountIntegrationSettings},pushData:function(expId,variationId){var accountIntegrationSettings={"manualSetup":true,"setupVia":"gtm","dataVariable":"dataLayer"};var ga4Setup=accountIntegrationSettings["setupVia"]||"gtag";if(typeof window.gtag!=="undefined"&&ga4Setup=="gtag"){window.gtag("event","VWO",{vwo_campaign_name:window._vwo_exp[expId].name+":"+expId,vwo_variation_name:window._vwo_exp[expId].comb_n[variationId]+":"+variationId});window.gtag("event","experience_impression",{exp_variant_string:"VWO-"+expId+"-"+variationId});return true}return false}})();pushBasedCommonWrapper({integrationName:"GA4-GTM",getExperimentList:function(){return [70,79,121,156,157,158]},accountSettings:function(){var accountIntegrationSettings={"manualSetup":true,"setupVia":"gtm","dataVariable":"dataLayer"};if(accountIntegrationSettings["debugType"]=="gtm"&&accountIntegrationSettings["debug"]){accountIntegrationSettings["debug"]=1}else{accountIntegrationSettings["debug"]=0}return accountIntegrationSettings},pushData:function(expId,variationId){var accountIntegrationSettings={"manualSetup":true,"setupVia":"gtm","dataVariable":"dataLayer"};var ga4Setup=accountIntegrationSettings["setupVia"]||"gtm";var dataVariable=accountIntegrationSettings["dataVariable"]||"dataLayer";if(typeof window[dataVariable]!=="undefined"&&ga4Setup=="gtm"){window[dataVariable].push({event:"vwo-data-push-ga4",vwo_exp_variant_string:"VWO-"+expId+"-"+variationId});return true}return false}})();
;})();(function(){window.VWO=window.VWO||[];var pollInterval=100;var _vis_data={};var intervalObj={};var analyticsTimerObj={};var experimentListObj={};window.VWO.push(["onVariationApplied",function(data){if(!data){return}var expId=data[1],variationId=data[2];if(expId&&variationId&&["VISUAL_AB","VISUAL","SPLIT_URL"].indexOf(window._vwo_exp[expId].type)>-1){}}])})();;
;var vD=VWO.data||{};VWO.data={content:{"fns":{"list":{"vn":1,"args":{"1":{}}}}},as:"r5.visualwebsiteoptimizer.com",dacdnUrl:"https://dev.visualwebsiteoptimizer.com",accountJSInfo:{"rp":30,"pc":{"t":0,"a":0},"noSS":false,"pvn":0,"ts":1745245911}};for(var k in vD){VWO.data[k]=vD[k]};;var gcpfb=function(a,loadFunc,status,err,success){function vwoErr() {_vwo_err({message:"Google_Cdn failing for " + a + ". Trying Fallback..",code:"cloudcdnerr",status:status});} if(a.indexOf("/cdn/")!==-1){loadFunc(a.replace("cdn/",""),err,success); vwoErr(); return true;} else if(a.indexOf("/dcdn/")!==-1&&a.indexOf("evad.js") !== -1){loadFunc(a.replace("dcdn/",""),err,success); vwoErr(); return true;}};window.VWO=window.VWO || [];window.VWO._= window.VWO._ || {};window.VWO._.gcpfb=gcpfb;;var d={cookie:document.cookie,URL:document.URL,referrer:document.referrer};var w={VWO:{_:{}},location:{href:window.location.href,search:window.location.search},_vwoCc:window._vwoCc};;window._vwo_cdn="https://dev.visualwebsiteoptimizer.com/cdn/";window._vwo_apm_debug_cdn="https://dev.visualwebsiteoptimizer.com/cdn/";window.VWO._.useCdn=true;window.vwo_eT="br";window._VWO=window._VWO||{};window._VWO.fSeg={};window._VWO.dcdnUrl="/dcdn/settings.js";window.VWO.sTs=1745237248;window._VWO._vis_nc_lib=window._vwo_cdn+"edrv/nc-3f9594955e9158c3d78e98fc4a36811dbr.js";var loadWorker=function(url){_vwo_code.load(url, { dSC: true, onloadCb: function(xhr,a){window._vwo_wt_l=true;if(xhr.status===200 ||xhr.status===304){var code="var window="+JSON.stringify(w)+",document="+JSON.stringify(d)+";window.document=document;"+xhr.responseText;var blob=new Blob([code||"throw new Error('code not found!');"],{type:"application/javascript"}),url=URL.createObjectURL(blob);window.mainThread={webWorker:new Worker(url)};window.vwoChannelFW=new MessageChannel();window.vwoChannelToW=new MessageChannel();window.mainThread.webWorker.postMessage({vwoChannelToW:vwoChannelToW.port1,vwoChannelFW:vwoChannelFW.port2},[vwoChannelToW.port1, vwoChannelFW.port2]);if(!window._vwo_mt_f)return window._vwo_wt_f=true;_vwo_code.addScript({text:window._vwo_mt_f});delete window._vwo_mt_f}else{if(gcpfb(a,loadWorker,xhr.status)){return;}_vwo_code.finish("&e=loading_failure:"+a)}}, onerrorCb: function(a){if(gcpfb(a,loadWorker)){return;}window._vwo_wt_l=true;_vwo_code.finish("&e=loading_failure:"+a);}})};loadWorker("https://dev.visualwebsiteoptimizer.com/cdn/edrv/worker-413c17ee3e4a9a6250095279e25419c6br.js");;var _vis_opt_file;var _vis_opt_lib;if(window.VWO._.allSettings.dataStore.previewExtraSettings!=undefined&&window.VWO._.allSettings.dataStore.previewExtraSettings.isSurveyPreviewMode){var surveyHash=window.VWO._.allSettings.dataStore.plugins.LIBINFO.SURVEY_DEBUG_EVENTS.HASH;var param1="evad.js?va=";var param2="&d=debugger_new";var param3="&sp=1&a=722072&sh="+surveyHash;_vis_opt_file=vwoCode.use_existing_jquery&&typeof vwoCode.use_existing_jquery()!=="undefined"?vwoCode.use_existing_jquery()?param1+"vanj"+param2:param1+"va_gq"+param2:param1+"edrv/va_gq-7c7c840681fb5b7ddc0fce3da241cf55br.js"+param2;_vis_opt_file=_vis_opt_file+param3;_vis_opt_lib="https://dev.visualwebsiteoptimizer.com/dcdn/"+_vis_opt_file}else if(window.VWO._.allSettings.dataStore.mode!=undefined&&window.VWO._.allSettings.dataStore.mode=="PREVIEW"){ var path1 = 'edrv/pd_'; var path2 = window.VWO._.allSettings.dataStore.plugins.LIBINFO.EVAD.HASH + ".js"; ;_vis_opt_file=vwoCode.use_existing_jquery&&typeof vwoCode.use_existing_jquery()!=="undefined"?vwoCode.use_existing_jquery()?path1+"vanj"+path2:path1+"va_gq"+path2:path1+"edrv/va_gq-7c7c840681fb5b7ddc0fce3da241cf55br.js"+path2;_vis_opt_lib="https://dev.visualwebsiteoptimizer.com/cdn/"+_vis_opt_file}else{_vis_opt_file=vwoCode.use_existing_jquery&&typeof vwoCode.use_existing_jquery()!=="undefined"?vwoCode.use_existing_jquery()?"edrv/vanj-298dbd0998f2c686c389cd1da334dba4br.js":"edrv/va_gq-7c7c840681fb5b7ddc0fce3da241cf55br.js":"edrv/va_gq-7c7c840681fb5b7ddc0fce3da241cf55br.js"}window._vwo_library_timer=setTimeout((function(){vwoCode.removeLoaderAndOverlay&&vwoCode.removeLoaderAndOverlay();vwoCode.finish()}),vwoCode.library_tolerance&&typeof vwoCode.library_tolerance()!=="undefined"?vwoCode.library_tolerance():2500),_vis_opt_lib=typeof _vis_opt_lib=="undefined"?window._vwo_cdn+_vis_opt_file:_vis_opt_lib;var loadLib=function(url){_vwo_code.load(url, { dSC: true, onloadCb:function(xhr,a){window._vwo_mt_l=true;if(xhr.status===200 || xhr.status===304){if(!window._vwo_wt_f)return window._vwo_mt_f=xhr.responseText;_vwo_code.addScript({text:xhr.responseText});delete window._vwo_wt_f;}else{if(gcpfb(a,loadLib,xhr.status)){return;}_vwo_code.finish("&e=loading_failure:"+a);}}, onerrorCb: function(a){if(gcpfb(a,loadLib)){return;}window._vwo_mt_l=true;_vwo_code.finish("&e=loading_failure:"+a);}})};loadLib(_vis_opt_lib);VWO.load_co=function(u,opts){return window._vwo_code.load(u,opts);};;;}}catch(e){_vwo_code.finish();_vwo_code.removeLoaderAndOverlay&&_vwo_code.removeLoaderAndOverlay();_vwo_err(e);window.VWO.caE=1}})();
Skip to content
In a Christian culture where โfull-time ministryโ usually means church buildings and seminary, the Navs Workplace Mission will focus on equipping laborers in one of the largest mission fields in existence โthe workplace.
โWhile Navs Workplace is technically a new Mission, The Navigators have been impacting the workplace since their early beginnings,โ Navs Workplace Mission Leader Al Miyashita says. โThis development is exciting because the workplace is now officially recognized as an integral part of achieving the Calling of The Navigators .โ
Members of the Navs Workplace Mission will be both staff and non-staff laborers, Al says. Some staff will work out of an office, serving God through doing their job as well as being available to coworkers for counsel, mentoring, and spiritual discussions and studies. Other staff will come alongside those in the workplace, supporting their efforts. Non-staff laborers in the Mission will minister within the unique opportunities of their particular workplace. All will strive to carry the banner of Christ in character and conduct, Al says.
โTheir work will be done in excellence ,โ Al says. โThey will be known for their integrity , their decision making will be sound and principled, they will treat all people with respect, they will be humble. They will be the lights in darkness, a reflection of Christ wherever they work.โ
Why the Workplace?
When Al thinks about the workplace, he is often reminded of John 4:35 and Matthew 9:37.
โJohn 4 says โlift up your eyes and look on the fields, that they are white for harvestโ,โ Al says. โMatthew 9 says โthe workers are few.โ I want to have my eyes opened to see the harvest, and I want to be involved where God is working.โ
While every harvest field is worth investing in, Al sees the workplace as particularly ripe with diverse, perennial fruit . The workplace includes 155 million people, Al says, with 37 percent being under age 35, 47 percent being women, 34 percent being ethnic, and the average person spending about 30 percent of their waking hours working.
โWhat excites me is the significance that the workplace can have in the transformation of personal lives and the cities as a whole,โ Al says. โJust think of the attitudes, words, and actions that come out at work, and how different it would be if a person lived a transformed life there. Think of the influence they could have on the people around them, and the organization or company they support.โ
Another motivation for the Navs Workplace Mission is the significantly high percentage of Millennials โpeople who reached adulthood around the year 2000โwho have turned away from their faith. The workplace is a prime place to reach them by example.
โCorruption is rampant in the workplace,โ Al says. โBusinesses and executives have taken advantage of their power and position for personal gain. Millennials are increasingly critical of this kind of corruption. I believe that just as Christians had an impact on the Roman Empire through living godly lives centuries ago, the Navs Workplace Mission will be used by God to transform workplaces for generations to come.โ
Called to Work
Al points out that the Bible is full of verses that place great value on work, going all the way back to Genesis.
โUltimately, our work is for God , whether we are working in the fields harvesting or on a trading floor buying and selling,โ Al says. โThere is no biblical distinction of any work being more important than another. Everyone is uniquely gifted by God to work, and where we work and what we do are part of His plan for reaching the world with the Gospel. No matter who we are, what we do, or where we are, He can use us. โ
Attitude of Availability
Al recently heard a message about the Good Samaritan. Heโd heard the passage many times before, but this time he heard it differently.
โI listened, and I thought about the story, and I began to see this Samaritan as a transformed workplace worker,โ Al says. โThe amount of time we spend in the workplace gives us the opportunity to hear the needs and see the hurts of our peers and employees. We can choose to get involved like the Samaritan, or we can walk right by like the two men before him. As laborers in the workplace, we have to get involved. We cannot be bystanders. Our willingness and availability will allow us to be used by God to heal hearts.โ
Al Miyashita spent 31 years at IBM, holding several executive positions. Al and his wife, Moni, were married in 1997 and have two adult children and a son-in-law. Al assumed his role as Navs Workplace Mission leader in May 2014, continuing a long history of service with The Navigators.
Sophia is just one of many who have been impacted by The Navigatorsโ growing ministry in Boston. Learn more about her story and how the Lord has moved through her journey.
Continue Reading
Last month, Navigator staff came together in Texas for the National Staff Gathering where they enjoyed times of laughter, along with โฆ
Continue Reading