PageSourceSearch

https://rvliving.com/wp-content/cache/min/1/wp-content/plugins/RVL…/js/newsletter-shortcodes.js?ver=1787646608

js rvliving.com collected 2026-09-28 06:49:23 UTC 11,405 bytes, 67 lines download raw bytes

1jQuery(document).ready(($)=>{'use strict';if(typeof my_plugin==='undefined'){if(window.console){console.error('Required my_plugin configuration object is missing')}
2return}
3const{ajax_url:ajaxUrl,nonces}=my_plugin;const verificationModalHtml=`
4    <div class="verification-modal" style="display: none;">
5        <div class="verification-content">
6            <button class="modal-close" id="verification-close">&times;</button>
7            <h3>Please Verify Your Email</h3>
8            <p>We've sent a verification code to your email. Please enter it below.</p>
9            <div class="verification-form">
10                <input type="text" 
11                       id="verification-code" 
12                       class="newsletter-field"
13                       placeholder="Enter 6-digit code"
14                       maxlength="6"
15                       pattern="[0-9]*"
16                       inputmode="numeric">
17                <button type="button" 
18                        id="verify-code"
19                        class="newsletter-button verification-button">
20                    Verify
21                </button>
22            </div>
23            <p class="verification-error" style="display: none; color: #dc3232;"></p>
24            <a href="#" id="resend-code" class="resend-link">Resend verification code</a>
25        </div>
26    </div>
27`;$('body').append(verificationModalHtml);const validateEmail=(email)=>{const emailRegex=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;return email&&email.length<=254&&emailRegex.test(email)};const createToast=(message,type='success')=>{const sanitizedMessage=DOMPurify.sanitize(message);const toast=$(`
28            <div class="newsletter-toast ${type}">
29                <div class="toast-content">
30                    ${type === 'success' ? '<i class="fas fa-check-circle"></i>' : '<i class="fas fa-exclamation-circle"></i>'}
31                    <span></span>
32                </div>
33            </div>
34        `).appendTo('body');toast.find('span').text(sanitizedMessage);setTimeout(()=>toast.addClass('show'),100);setTimeout(()=>{toast.removeClass('show');setTimeout(()=>toast.remove(),500)},3000)};const setButtonLoading=($button,isLoading,originalText)=>{if(isLoading){if(!$button.data('original-text')){$button.data('original-text',$button.html())}
35const loadingHtml='<span class="button-spinner"></span> Processing...';$button.prop('disabled',!0).addClass('loading').html(loadingHtml)}else{const buttonText=originalText||$button.data('original-text')||'Subscribe';$button.prop('disabled',!1).removeClass('loading').html(buttonText)}};const showThankYou=()=>{const $modal=$('.mnp-thank-you-modal').removeClass('hide').addClass('show no-border');const $newsletterBox=$('.mnp-newsletter-box');if(!$newsletterBox.data('permanent-thank-you')){$newsletterBox.addClass('hide')}
36setupModalCloseHandlers()};const hideThankYou=()=>{$('.mnp-thank-you-modal').removeClass('show').addClass('hide')};const setupModalCloseHandlers=()=>{$('#mnp-modal-close').on('click',(e)=>{e.preventDefault();e.stopPropagation();hideThankYou()});$('.mnp-thank-you-div, .mnp-thank-you-modal').on('click',(event)=>{if(event.target.classList.contains('mnp-thank-you-div')||event.target.classList.contains('mnp-thank-you-modal')){hideThankYou()}})};class FormHandler{constructor(){this.setupFormListener();this.setupModalCloseHandlers();this.setupVerificationHandler()}
37setupFormListener(){const $forms=$('.newsletter-form');if(!$forms.length)return;$forms.each((_,form)=>{const $form=$(form);const $submitButton=$form.find('input[type="submit"]');const $errorMessage=$form.closest('.mnp-newsletter-inner-box').find('.error-occurred');const originalText=$submitButton.val();$form.on('submit',(e)=>{e.preventDefault();this.handleFormSubmit($form,$submitButton,$errorMessage,originalText)})})}
38setupVerificationHandler(){$('#verify-code').on('click',()=>{const code=$('#verification-code').val().trim();const email=$('#manage_email').val().trim();if(!code){$('.verification-error').text('Please enter the verification code').show();return}
39if(!/^\d{6}$/.test(code)){$('.verification-error').text('Please enter a valid 6-digit code').show();return}
40this.submitVerificationCode(email,code)});$('#verification-close').on('click',()=>{this.hideVerificationModal();createToast('Verification cancelled. Try again when ready.','error')});$('#verification-code').on('keypress',(e)=>{if(e.which===13){$('#verify-code').click()}});$('#resend-code').on('click',(e)=>{e.preventDefault();const email=$('#manage_email').val().trim();if(!validateEmail(email)){createToast('Please enter a valid email address.','error');return}
41this.handleSubscriptionCheck(email);createToast('New verification code sent')})}
42async handleFormSubmit($form,$submitButton,$errorMessage,originalText){const $emailInput=$form.find('.email');const email=$emailInput.val().trim();const $newsletterBox=$form.closest('.mnp-newsletter-box');const isPermanentThankYou=$newsletterBox.data('permanent-thank-you');$errorMessage.hide();$emailInput.removeClass('error');if(!validateEmail(email)){$emailInput.addClass('error');createToast('Please enter a valid email address.','error');return}
43setButtonLoading($submitButton,!0);try{const response=await $.ajax({type:'POST',url:ajaxUrl,data:{action:'mnp_subscribe_user',email:email,newsletter_subscribe_nonce:nonces.subscribe}});if(response.success){createToast('Successfully subscribed!');if(isPermanentThankYou){const thankYouMessage=`
44                            <div class="mnp-thank-you-content has-text-align-center no-border">
45                                <img src="${my_plugin.site_logo}" 
46                                     class="align-center logo-thank-you" 
47                                     alt="${my_plugin.site_name} logo"
48                                     loading="lazy">
49                                <h3>${my_plugin.thank_you_message}</h3>
50                            </div>`;$newsletterBox.html(thankYouMessage).addClass('success')}
51$form[0].reset()}else{if(my_plugin.mnp_troubleshooting){console.error('Subscription failed:',response)}
52$errorMessage.show();createToast(response.data?.message||'Subscription failed.','error')}}catch(error){if(my_plugin.mnp_troubleshooting){console.error('Newsletter signup failed:',error)}
53$errorMessage.show();createToast('Failed to process subscription.','error')}finally{setButtonLoading($submitButton,!1,originalText)}}
54showVerificationModal(){$('.verification-modal').fadeIn();$('#verification-code').val('').focus();$('.verification-error').hide()}
55hideVerificationModal(){$('.verification-modal').fadeOut();$('#verification-code').val('');$('.verification-error').hide()}
56async submitVerificationCode(email,code){const $verifyButton=$('#verify-code');const originalText=$verifyButton.text();setButtonLoading($verifyButton,!0,'Verifying...');try{const response=await $.ajax({type:'POST',url:ajaxUrl,data:{action:'verify_newsletter_code',email:email,code:code,newsletter_verify_nonce:nonces.verifyEmail}});if(response.success){this.hideVerificationModal();if(response.data.subscriptions){this.updateSubscriptionToggles(response.data.subscriptions)}
57createToast('Email verified successfully')}else{$('.verification-error').text(response.data?.message||'Verification failed').show();if(response.data?.refreshVerification){$('#verification-code').val('');createToast('New verification code sent','error')}}}catch(error){if(my_plugin.mnp_troubleshooting){console.error('Verification failed:',error)}
58$('.verification-error').text('An error occurred during verification').show()}finally{setButtonLoading($verifyButton,!1,originalText)}}
59updateSubscriptionToggles(subscriptions){const $toggles=$('.newsletter-switch');$toggles.removeClass('active');if(Array.isArray(subscriptions)){$toggles.each(function(){const listId=parseInt($(this).data('list-id'),10);if(subscriptions.includes(listId)){$(this).addClass('active')}})}}
60handleSubscriptionCheck(email){const $checkBtn=$('#main-site-signup-check');const originalText=$checkBtn.text();setButtonLoading($checkBtn,!0);return $.ajax({type:'POST',url:ajaxUrl,data:{action:'check_subscriptions',email:email,newsletter_check_subscription_nonce:nonces.checkSubscription}}).done((response)=>{if(response.success){if(response.data.requires_verification){this.showVerificationModal();createToast('Verification code sent to your email')}else if(Array.isArray(response.data)&&response.data.length===0){createToast('Found 0 content site subscriptions','error')}else{this.updateSubscriptionToggles(response.data)}}
60else{createToast(response.data?.message||'Failed to check subscriptions','error')}}).fail((jqXHR,textStatus)=>{if(my_plugin.mnp_troubleshooting){console.error('Subscription check failed:',textStatus)}
61const message=jqXHR.status===429?'Too many verification attempts. Please wait a few minutes before trying again.':'Failed to fetch subscriptions';createToast(message,'error')}).always(()=>{setButtonLoading($checkBtn,!1,originalText)})}
62handleSubscriptionSave(email,toggledStates){const $saveBtn=$('#save-subscriptions');const originalText=$saveBtn.text();setButtonLoading($saveBtn,!0);$('.subscription-feedback').remove();return $.ajax({type:'POST',url:ajaxUrl,data:{action:'process_subscription_changes',email:email,toggledStates:toggledStates,newsletter_update_subscription_nonce:nonces.updateSubscription}}).done((response)=>{if(response.success){createToast('Successfully updated subscriptions!')}else if(response.data?.requires_verification){this.showVerificationModal();createToast('Please verify your email to make changes')}else{createToast(response.data?.message||'Failed to update subscriptions','error')}}).fail((jqXHR,textStatus)=>{if(my_plugin.mnp_troubleshooting){console.error('Subscription update failed:',textStatus)}
63const message=jqXHR.status===429?'Too many attempts. Please try again later.':'Failed to update subscriptions';createToast(message,'error')}).always(()=>{setButtonLoading($saveBtn,!1,originalText)})}
64setupModalCloseHandlers(){$('.verification-modal').on('click',(event)=>{if(event.target.classList.contains('verification-modal')){this.hideVerificationModal()}});$(document).on('keyup',(event)=>{if(event.key==='Escape'){this.hideVerificationModal()}})}}
65const initNewsletterManager=()=>{const $managerWrapper=$('.newsletter-management-page-wrapper');if(!$managerWrapper.length)return;const formHandler=new FormHandler();const $emailInput=$('#manage_email');const $toggles=$('.newsletter-switch');$toggles.on('click',function(){$(this).toggleClass('active').addClass('pulse').delay(200).queue(function(){$(this).removeClass('pulse').dequeue()})});$('#main-site-signup-check').on('click',(e)=>{e.preventDefault();const email=$emailInput.val().trim();if(!validateEmail(email)){createToast('Please enter a valid email address.','error');return}
66const nonce=my_plugin.nonces.checkSubscription;formHandler.handleSubscriptionCheck(email)});$('#save-subscriptions').on('click',(e)=>{e.preventDefault();const email=$emailInput.val().trim();if(!validateEmail(email)){createToast('Please enter a valid email address.','error');return}
67const toggledStates={};$toggles.each(function(){const listId=$(this).data('list-id');toggledStates[listId]=$(this).hasClass('active')?'on':'off'});formHandler.handleSubscriptionSave(email,toggledStates)})};initNewsletterManager()})

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.