");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")}}, 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")}}, R_722072_157_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="1744062807520"]');
el.revertContentOp().remove();})("HEAD")}}, C_722072_157_1_3_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-1744062806872=""]').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 \n You 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
One-time
\n
$35
\n
provides meals for campers
\n
\n Donate \n \n
\n
\n
\n
\n
One-time
\n
$75
\n
provides half a camp scholarship
\n
\n Donate \n \n
\n
\n
\n
\n
One-time
\n
$150
\n
provides 1 camp scholarship
\n
\n Donate \n \n
\n
\n
\n
\n
\n
\n
\n
\n \x3c!--
--\x3e\n
',position:"append"});})("body")}}, R_722072_157_1_3_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="1744062806843"]')).remove();})("body")}}, C_722072_157_1_3_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-1744062807520-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_3_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_3_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_3_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_158_1_2_1:{ fn:function(log,nonce=''){return (function(x) {
try{
var _vwo_sel = vwo_$("`);
!vwo_$("head").find('#1743104387380').length && vwo_$('head').append(_vwo_sel);}catch(e) {VWO._.vAEH(e);}
try{}catch(e) {VWO._.vAEH(e);}
try{const config = {
donationForm: {
defaultRecurring: false, // true for "Recurring" default, false for "One-Time" default
giftArrayAmounts: [], // an array of numbers (like [ 5, 10, 15, 25 ]) or `null` or `[]` for default gift array amounts
defaultAmount: null, // a number or `null` for no default
anonymousDefault: null, // true/false or null for no default
tributeDefault: null, // true/false or null for no default
hideCheckboxesAll: true, // true/false to hide the checkboxes button
hideCheckboxFreqeuncy: false,
hideCheckboxAnonymous: false,
hideCheckboxTribute: false,
hideCartButton: false, // true/false to hide the "Add to Basket" button
},
tabs: {
"one-time": {
text: "One-Time Gift",
giftArrayAmounts: [], // changing the gift array here overrides the one set above for the donationForm
},
"recurring": {
text: "Recurring Gift",
giftArrayAmounts: [], // changing the gift array here overrides the one set above for the donationForm
}
}
};
const configDonationInterrupter = {
enabled: true,
uniqueName: "NA__NAV-DonationInterrupterV2",
content: {
headingSection: `Before you go, would you consider becoming a monthly partner? `,
bodySection: `
Your monthly partnership will:
provide the funds needed to bring Eagle Lake Camp to places where many kids don’t get the opportunity to experience camp
ensure supplies are ready and counselors are properly trained and equipped to preach the gospel
allow camp to be accessible to kids despite any financial barriers their families may face
Most importantly, you will play an active role in this ongoing work of bringing campers to meet Jesus and grow in their walks with Him. Would you consider becoming a monthly partner today?
`,
ctaButtons: {
"Yes": `
YES!
Convert my gift to a 10 monthly gift.
`,
"No": `
No, thanks.
Process my original one-time gift.
`,
},
closeButton: false,
theme: "NAV",
},
memoryMode: 'session', // "session" or "forever"; indicates how long the last interacted state should be remembered
minAmount: 5.00, // gift under this amount will be processed (if above the form minimum) and not shown the donation interrupter
maxAmount: 100.00, // gifts equal to and above this amount will be processed and not shown the donation interrupter
askConditions: function (originalAmount, originalFrequency, state) {
const conditions = [
originalFrequency === "One-Time", // "One-Time" or "Recurring"
originalAmount > this.minAmount,
originalAmount < this.maxAmount,
state && state.status !== "shown" && state.status !== "dismissed" && state.status !== "converted", // do not show if the user has already seen the donation interrupter, dismissed the donation interrupter, or converted from the donation interrupter
];
return conditions.every((condition) => typeof condition === 'function' ? !!condition.call(null) : !!condition); // return true if every condition in the array evaluates to true
},
askAmount: function (originalAmount) {
let askAmount;
if (originalAmount >= 400 && originalAmount < 500) { // $400.00 - $499.99
askAmount = 50;
} else if (originalAmount >= 300 && originalAmount < 400) { // $300.00 - $399.99
askAmount = 40;
} else if (originalAmount >= 200 && originalAmount < 300) { // $200.00 - $299.99
askAmount = 30;
} else if (originalAmount >= 100 && originalAmount < 200) { // $100.00 - $199.99
askAmount = 15;
} else { // $ 0.01 - $ 99.99
askAmount = 10;
}
return parseFloat(askAmount);
},
};
//
//
//
//
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
//
//
//
//
// Run code with configuration from above
(function(){
console.log("init");
window.NA.DonationForm.init(config).then((donationFormApi) => {
console.log("initialized:", donationFormApi);
if (configDonationInterrupter && configDonationInterrupter.enabled === true) {
donationFormApi.DonationInterrupter(configDonationInterrupter);
console.log("initialized:", donationFormApi.DonationInterrupter);
donationFormApi.interceptSubmit(function (capturedEvent) {
try {
const donationInterrupterApi = this.DonationInterrupter;
if (donationFormApi && donationInterrupterApi) {
if (donationInterrupterApi.evaluateConditions()) {
console.log(donationFormApi);
donationInterrupterApi.show();
return false; // do not submit
} else {
console.warn("Condtions check failed: Donation Interrupter will not be shown.");
return true; // submit
}
} else {
throw new ReferenceError("DonationFormApi or DonationInterrupterApi is not defined.");
}
} catch (error) {
console.error("An error occured when handling submit:", error);
window.NA?.DonationForm && window.NA.DonationForm.submit(); // retry submit
} finally {
return false;
}
});
}
}).catch((error) => {
console.error("Error creating donation form API:", error);
});
})();
}catch(e) {VWO._.vAEH(e);}
return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("head")}}, C_722072_70_1_2_0:{ fn:function(log,nonce=''){return (function(x) {try{const MAX_ONETIME_AMOUNT=500,RECURRING_ASK=t=>{let e;return e=t>=400&&t<500?50:t>=300&&t<400?40:t>=200&&t<300?30:t>=100&&t<200?15:10,e};function waitForElement(t,e,o=(t=>{}),n=30){return t?(o(t),!0):setTimeout(e,n)}function vwoCustomEvent(t){window.VWO=window.VWO||[],VWO.event=VWO.event||function(){VWO.push(["event"].concat([].slice.call(arguments)))},VWO.event("customEvent",{label:t.toString()})}function entangleElements(t,e,o="innerHTML",n={attributes:!0,childList:!0,subtree:!0}){if(!t||!e)return console.error(`entangleElements: ${!t&&"element1"}${t||e?" ":" and "} ${!e&&"element2"} ${t||e?"is":"are"} undefined.`);console.log("Entangling:\n",t," ",e,"\nElement 2 will mirror Element 1's values.");const i=new MutationObserver((n,i)=>{for(const i of n)switch(i.type){case"attributes":const{attributeName:n,oldValue:r}=i;if("style"!==n){const o=t.getAttribute(n);null===o?e.removeAttribute(n):e.setAttribute(n,o)}break;default:e[o]=t[o]}});return i.observe(t,n),i}function init(){customElements.whenDefined("c-donate-community-giving-options").then(()=>{customElements.whenDefined("lightning-card").then(()=>{customElements.whenDefined("c-donate-community-donate-buttons").then(()=>{customElements.whenDefined("lightning-input").then(()=>{const t=[...document.querySelector("c-donate-community-giving-options").shadowRoot.querySelectorAll("lightning-card")][1].shadowRoot.querySelector(".slds-card__body").getSlotNodes(1).querySelector("c-donate-community-donate-buttons").shadowChildren(0),e={getGiftArrayButtons:function(){let e=t;return Array.from(e.children).slice(0,Array.from(e.children).indexOf(e.querySelector(".slds-form-element"))).map(t=>t.querySelector("button"))},getAmount:function(){const e=t=>t.replace(/[\$\,]/gm,"");let o=this.getGiftArrayButtons().filter(t=>t.classList.contains("donate-selected"))[0];return o||(o=t.querySelector("lightning-input").shadowChildren(0).shadowChildren(0).querySelector("input")),parseFloat(e(o.value))},setAmount:function(e){const o=t.querySelector("lightning-input").shadowChildren(0).shadowChildren(0).querySelector("input");for(const t of this.getGiftArrayButtons())if(parseFloat(t.value)===parseFloat(e))return o.value="",t.click(),this.getAmount()===parseFloat(e);return o.value=parseFloat(e),o.dispatchEvent(new Event("change",{bubbles:!0})),this.getAmount()===parseFloat(e)},getRecurring:function(){return[...t.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]').checked},setRecurring:function(e=!0){const o=[...t.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]'),n=this.getRecurring();return(!n&&e||n&&!e)&&o.click(),this.getRecurring()===e},submit:function(t=this.buttons["Donate Now"]){return t.click()}};e.giftArrayButtons=e.getGiftArrayButtons(),window.NA=window.NA||{},window.NA.MiniDonationForm=e,waitForElement(t.querySelector("button"),init,e=>{window.NA.MiniDonationForm.buttons={"Donate Now":Array.from(t.children).slice(Array.from(t.children).indexOf(t.querySelector(".slds-form-element"))).map(t=>t.querySelector("button")).filter(t=>t)[0],"Add to Basket":Array.from(t.children).slice(Array.from(t.children).indexOf(t.querySelector(".slds-form-element"))).map(t=>t.querySelector("button")).filter(t=>t)[1]},window.NA.MiniDonationForm.cloneSubmitButton=function(t=this.buttons["Donate Now"]){const e=t.cloneNode(!0);return e.attributes=t.attributes,e.style&&(e.style=t.style),t.after(e),e},waitForElement(document.querySelector("dialog.donation-interrupter"),init,t=>{console.log("dialog found:",t);try{const e={dialog:t||document.querySelector("dialog.donation-interrupter"),_tokenName:"DonationInterrupter_",_memoryMode:sessionStorage,status:"ready",getStatus:function(){return this._memoryMode.getItem(this._tokenName+"_status")||void 0},setStatus:function(t){return this._memoryMode.setItem(this._tokenName+"_status",t),this.status=t,this.getStatus()},conditions:!0,newAmount:function(t){return t/12},onShow:function(t){},onHide:function(t){},show:function(t){this.dialog.showModal(),this.dialog.addEventListener("keydown",t=>{"Escape"===t.key&&(t.preventDefault(),t.stopImmediatePropagation())}),this.setStatus("shown"),"function"==typeof this.onShow&&this.onShow.call(null,t)},hide:function(t){this.setStatus("dismissed"),this.dialog.close(),"function"==typeof this.onHide&&this.onHide.call(null,t)},updateDialogData:function(){if(this.dialog){let t=window.NA.MiniDonationForm.getAmount(),e=this.newAmount(t);[...this.dialog.querySelectorAll('span[data="amount_original"]')].forEach(e=>e.textContent=t.toString()),[...this.dialog.querySelectorAll('span[data="amount_suggested"]')].forEach(t=>t.textContent=e.toString())}}};window.NA=window.NA||{},window.NA.DonationInterrupter=e||window.NA.DonationInterrupter,window.NA.MiniDonationForm&&window.NA.DonationInterrupter&&main(window.NA.MiniDonationForm,window.NA.DonationInterrupter)}catch(t){console.error("Failed to interface with donation interrupter.")}},100)},100)})})})})}function main(t,e,o=0){if(!t.buttons)return setTimeout(init,100);if(!e.buttons)return e.buttons={yes:[...e.dialog.querySelectorAll("button")][0],no:[...e.dialog.querySelectorAll("button")][1]},main(t,e,o);window.NA.DonationInterrupter.setStatus(window.NA.DonationInterrupter._memoryMode.getItem(window.NA.DonationInterrupter._tokenName+"_status")||"ready"),window.NA.DonationInterrupter.newAmount=RECURRING_ASK;try{for(const n of Object.values(t.buttons)){const i=n,r=t.cloneSubmitButton(i);i.style.display="none",r.style.setProperty("margin-left","0","important"),setInterval(()=>r.disabled=i.disabled,50),r.addEventListener("click",n=>{let i=t.getAmount(),r=t.getRecurring(),s="shown"===e.status||"dismissed"===e.status;o&&(console.groupCollapsed("Check conditions"),console.info(i,"< 500",i<500),console.info(r,"=== false",!1===r),console.info(s,"=== false",!1===s),console.groupEnd("Check conditions"));const l=[i<500,!1===r,!1===s].every(t=>!!t);o&&console.info("showPopup?",l),n.srcElement.textContent===t.buttons["Add to Basket"].textContent?l?e.show(n):t.submit(t.buttons["Add to Basket"]):l?e.show(n):t.submit()})}}catch(t){console.error("Failed to clone submit button and add event listener.",t)}window.NA.DonationInterrupter.onShow=n=>{window.NA.DonationInterrupter.updateDialogData(),vwoCustomEvent("donationInterrupterShown");try{const i=window.NA.DonationInterrupter.buttons,{yes:r,no:s}=i;n.srcElement.textContent===t.buttons["Add to Basket"].textContent?(r.addEventListener("click",n=>{o&&console.groupCollapsed('"Yes" clicked'),vwoCustomEvent("yes");const i=t.getAmount(),r=window.NA.DonationInterrupter.newAmount(i);o&&console.log(i,"->",r),t.setRecurring(!0),t.setAmount(r),e.hide(),t.submit(t.buttons["Add to Basket"]),o&&console.groupEnd('"Yes" clicked')}),s.addEventListener("click",n=>{o&&console.groupCollapsed('"No" clicked'),vwoCustomEvent("no"),e.hide(),t.submit(t.buttons["Add to Basket"]),o&&console.groupEnd('"No" clicked')})):(r.addEventListener("click",n=>{o&&console.groupCollapsed('"Yes" clicked'),vwoCustomEvent("yes");const i=t.getAmount(),r=window.NA.DonationInterrupter.newAmount(i);o&&console.log(i,"->",r),t.setRecurring(!0),t.setAmount(r),e.hide(),t.submit(),o&&console.groupEnd('"Yes" clicked')}),s.addEventListener("click",n=>{o&&console.groupCollapsed('"No" clicked'),vwoCustomEvent("no"),e.hide(),t.submit(),o&&console.groupEnd('"No" clicked')})),o&&console.log("added handlers to buttons",i)}catch(t){console.error("Failed to attach event listeners to dialog buttons.",t)}}}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(t){return"NaN"!==parseInt(t)&&t>=0?Array.from(this.getSlot().assignedNodes({flatten:!0})).at(t):Array.from(this.getSlot().assignedNodes({flatten:!0}))},window.HTMLElement.prototype.shadowChildren=window.HTMLElement.prototype.shadowChildren||function(t){return"NaN"!==parseInt(t)&&t>=0?Array.from(this.shadowRoot.children).at(t):Array.from(this.shadowRoot.children)},setTimeout(init,500);}catch(e){} ;var _vwo_sel=vwo_$("");vwo_$('head').append(_vwo_sel);return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("HEAD")}}, C_722072_70_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-1715610703351=""]').length&&el.vwoElement({html:'',position:"append"});})("body")}}, 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")}}, C_722072_121_1_2_1:{ fn:function(log,nonce=''){return (function(x) {
try{
var _vwo_sel = vwo_$("`);
!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_0:{ 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="1734023482004"]');
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="1734023482005"]')).remove();
} catch(e) {console.error(e)}
return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("head")}}, 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;t\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")}}, 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_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_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")}}, C_722072_156_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_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_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")}}, 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")}}, 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);
});
}
)()
}}, js_3390e077c52956459a51fd91b769cbc3:{ fn:function() { return window.window.Navigators.donationPageType }}, 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);
});
}
)()
}}},rules:[{"triggers":["4091672"],"tags":[{"metricId":476312,"data":{"campaigns":[{"g":5,"c":158}],"type":"m"},"id":"metric"},{"metricId":476312,"data":{"campaigns":[{"g":3,"c":157}],"type":"m"},"id":"metric"},{"metricId":476312,"data":{"campaigns":[{"g":3,"c":156}],"type":"m"},"id":"metric"},{"metricId":476312,"data":{"campaigns":[{"g":1,"c":79}],"type":"m"},"id":"metric"},{"metricId":476312,"data":{"campaigns":[{"g":1,"c":70}],"type":"m"},"id":"metric"},{"metricId":476312,"data":{"campaigns":[{"g":1,"c":121}],"type":"m"},"id":"metric"}]},{"triggers":["4252292"],"tags":[{"metricId":490094,"data":{"campaigns":[{"g":6,"c":70}],"type":"m"},"id":"metric"}]},{"triggers":["12607155"],"tags":[{"metricId":0,"data":{"campaigns":[{"g":7,"c":79}],"type":"g"},"id":"metric"}]},{"triggers":["1740152"],"tags":[{"metricId":165095,"data":{"campaigns":[{"g":6,"c":158}],"type":"m"},"id":"metric"},{"metricId":165095,"data":{"campaigns":[{"g":1,"c":157}],"type":"m"},"id":"metric"},{"metricId":165095,"data":{"campaigns":[{"g":1,"c":156}],"type":"m"},"id":"metric"},{"metricId":165095,"data":{"campaigns":[{"g":3,"c":79}],"type":"m"},"id":"metric"},{"metricId":165095,"data":{"campaigns":[{"g":3,"c":70}],"type":"m"},"id":"metric"},{"metricId":165095,"data":{"campaigns":[{"g":3,"c":121}],"type":"m"},"id":"metric"}]},{"triggers":["4252295"],"tags":[{"metricId":490097,"data":{"campaigns":[{"g":7,"c":70}],"type":"m"},"id":"metric"}]},{"triggers":["8881173"],"tags":[{"priority":4,"data":"campaigns.70","id":"runCampaign"}]},{"triggers":["1740149"],"tags":[{"metricId":165092,"data":{"campaigns":[{"g":7,"c":158}],"type":"m"},"id":"metric"},{"metricId":165092,"data":{"campaigns":[{"g":2,"c":157}],"type":"m"},"id":"metric"},{"metricId":165092,"data":{"campaigns":[{"g":2,"c":156}],"type":"m"},"id":"metric"},{"metricId":165092,"data":{"campaigns":[{"g":4,"c":79}],"type":"m"},"id":"metric"},{"metricId":165092,"data":{"campaigns":[{"g":4,"c":70}],"type":"m"},"id":"metric"},{"metricId":165092,"data":{"campaigns":[{"g":4,"c":121}],"type":"m"},"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":["1417796"],"tags":[{"metricId":165089,"data":{"campaigns":[{"g":8,"c":158}],"type":"m"},"id":"metric"}]},{"triggers":["13064070"],"tags":[{"metricId":0,"data":{"campaigns":[{"g":9,"c":158}],"type":"g"},"id":"metric"}]},{"triggers":["13290603"],"tags":[{"metricId":0,"data":{"campaigns":[{"g":5,"c":157}],"type":"g"},"id":"metric"}]},{"triggers":["10067944"],"tags":[{"priority":4,"data":"campaigns.79","id":"runCampaign"}]},{"triggers":["13064073"],"tags":[{"metricId":0,"data":{"campaigns":[{"g":10,"c":158}],"type":"g"},"id":"metric"}]},{"triggers":["4252289"],"tags":[{"metricId":490091,"data":{"campaigns":[{"g":1,"c":158}],"type":"m"},"id":"metric"},{"metricId":490091,"data":{"campaigns":[{"g":5,"c":70}],"type":"m"},"id":"metric"}]},{"triggers":["10067839"],"tags":[{"priority":4,"data":"campaigns.121","id":"runCampaign"}]},{"triggers":["12607149"],"tags":[{"metricId":0,"data":{"campaigns":[{"g":5,"c":79}],"type":"g"},"id":"metric"}]},{"triggers":["11807230"],"tags":[{"metricId":0,"data":{"campaigns":[{"g":7,"c":121}],"type":"g"},"id":"metric"}]},{"triggers":["4091675"],"tags":[{"metricId":476318,"data":{"campaigns":[{"g":4,"c":158}],"type":"m"},"id":"metric"},{"metricId":476318,"data":{"campaigns":[{"g":4,"c":157}],"type":"m"},"id":"metric"},{"metricId":476318,"data":{"campaigns":[{"g":4,"c":156}],"type":"m"},"id":"metric"},{"metricId":476318,"data":{"campaigns":[{"g":2,"c":79}],"type":"m"},"id":"metric"},{"metricId":476318,"data":{"campaigns":[{"g":2,"c":70}],"type":"m"},"id":"metric"},{"metricId":476318,"data":{"campaigns":[{"g":2,"c":121}],"type":"m"},"id":"metric"}]},{"triggers":["11807227"],"tags":[{"metricId":0,"data":{"campaigns":[{"g":6,"c":121}],"type":"g"},"id":"metric"}]},{"triggers":["12607152"],"tags":[{"metricId":0,"data":{"campaigns":[{"g":6,"c":79}],"type":"g"},"id":"metric"}]},{"triggers":["11807224"],"tags":[{"metricId":0,"data":{"campaigns":[{"g":5,"c":121}],"type":"g"},"id":"metric"}]},{"triggers":["9"],"tags":[{"priority":2,"id":"visibilityService"}]},{"triggers":["2"],"tags":[{"id":"runTestCampaign"}]},{"triggers":["75"],"tags":[{"id":"urlChange"}]},{"triggers":["5"],"tags":[{"id":"checkEnvironment"}]},{"triggers":["8"],"tags":[{"priority":3,"id":"prePostMutation"},{"priority":2,"id":"groupCampaigns"}]}],pages:{"ec":[{"1551882":{"inc":["o",["url","urlReg","(?i).*"]]}},{"2209614":{"inc":["o",["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?navigators\\.org.*"]],"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.*"]]}}]},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 validationUtils={exists:function(path){try{const parts=path.split(".");let current=window;for(const part of parts){if(current[part]===undefined){return false}current=current[part]}return true}catch(e){return false}},safeExecute:function(path,args=[]){try{const parts=path.split(".");let current=window;for(const part of parts){if(current[part]===undefined){return false}current=current[part]}if(typeof current!=="function"){return false}return current(...args)}catch(e){return false}},validateAll:function(paths){return paths.every(path=>this.exists(path))}};
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(ga4Setup==="gtag"){validationUtils.safeExecute("gtag",["event","VWO",{vwo_campaign_name:window._vwo_exp[expId].name+":"+expId,vwo_variation_name:window._vwo_exp[expId].comb_n[variationId]+":"+variationId}]);validationUtils.safeExecute("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(ga4Setup==="gtm"&&validationUtils.exists(dataVariable)&&Array.isArray(window[dataVariable])){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:"r4.visualwebsiteoptimizer.com",dacdnUrl:"https://dev.visualwebsiteoptimizer.com",accountJSInfo:{"ts":1745533532,"rp":30,"noSS":false,"pc":{"a":0,"t":0},"pvn":0}};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=1745502467;window._VWO._vis_nc_lib=window._vwo_cdn+"edrv/nc-ab70ab7738f68feed2cc99d35fc47820br.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-5a403409a4e3d10eaefb45cee4232ed5br.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-fa5a01e9a825d8179a6f71027d774b6cbr.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-fa5a01e9a825d8179a6f71027d774b6cbr.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-0428db49d442885a04f413f061155223br.js":"edrv/va_gq-fa5a01e9a825d8179a6f71027d774b6cbr.js":"edrv/va_gq-fa5a01e9a825d8179a6f71027d774b6cbr.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
Begin a lifetime of Scripture memory and love for God’s Word with your family! The Topical Memory System has been helping people memorize Scripture for decades, and it will help you and your kids too! The tried-and-true methods of the TMS are the foundation of this fun game.
Begin a lifetime of Scripture memory and love for God’s Word with your family!
The Topical Memory System , published by NavPress, has been helping people memorize Scripture for decades, and it will help you and your kids too! The tried-and-true methods of the TMS are the foundation of this fun game.
Inside you’ll find tear-out memory verse cards (with colorful illustrations) for use in multiple games. Complementing the games is a devotional-style guide for families that helps with understanding the context of each verse in the larger picture of God’s story. There are also discussion questions that provide opportunities to go deeper in Scripture with every verse. Kids will have fun playing the memory games as their faith and understanding of God’s Word grows.
Topical Memory System for Kids – Game Cards
Families can follow the 18-week schedule provided or go at their own pace. Start with the beginner-level matching game and move up to the advanced levels when the kids are ready. With 36 verses to shuffle through, every game is a new challenge!
Also included is a checklist to track memorization progress and a kid-friendly glossary for difficult Bible terms. The cards are in two translations: NIV and The Message.
Thanks for your feedback!
Teresa Roberts, author of Raising Disciples: Guiding Your Kids into a Faith of Their Own, shares her tips for helping them grow spiritually at all ages and stages.
Continue Reading
The Navigators interview author Bill Mowry on his latest book, The Ways of the Leader, and how to gain wisdom.
Continue Reading
×
You 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?
One-time
$35
provides meals for campers
Donate
One-time
$75
provides half a camp scholarship
Donate
One-time
$150
provides 1 camp scholarship
Donate