1(function () { 2 'use strict'; 3 4 document.addEventListener( 'submit', function ( e ) { 5 var form = e.target; 6 if ( ! form.classList || ! form.classList.contains( 'letterness-widget-form' ) ) { 7 return; 8 } 9 e.preventDefault(); 10 11 var card = form.closest( '.letterness-widget-card' ); 12 var emailEl = form.querySelector( '.letterness-widget-email' ); 13 var msgEl = card.querySelector( '.letterness-widget-message' ); 14 var consent = form.querySelector( '.letterness-consent-input' ); 15 16 if ( consent && consent.hasAttribute( 'required' ) && ! consent.checked ) { 17 msgEl.style.display = 'block'; 18 msgEl.classList.add( 'letterness-error' ); 19 msgEl.textContent = LTRN_WidgetConfig.consentError; 20 return; 21 } 22 23 var formData = new FormData(); 24 formData.append( 'action', 'letterness_subscribe' ); 25 formData.append( 'nonce', LTRN_WidgetConfig.nonce ); 26 formData.append( 'email', emailEl.value ); 27 formData.append( 'source', 'widget' ); 28 formData.append( 'consent', consent && consent.checked ? '1' : '0' ); 29 30 var wFields = form.querySelectorAll( '.letterness-field' ); 31 for ( var wi = 0; wi < wFields.length; wi++ ) { 32 var wEl = wFields[ wi ]; 33 if ( wEl.hasAttribute( 'required' ) && ! wEl.value.trim() ) { 34 msgEl.style.display = 'block'; 35 msgEl.classList.add( 'letterness-error' ); 36 msgEl.textContent = LTRN_WidgetConfig.fieldError || 'Please fill in the required fields.'; 37 return; 38 } 39 formData.append( 'fields[' + wEl.getAttribute( 'data-field' ) + ']', wEl.value.trim() ); 40 } 41 42 fetch( LTRN_WidgetConfig.ajaxUrl, { method: 'POST', body: formData } ) 43 .then( function ( r ) { return r.json(); } ) 44 .then( function ( res ) { 45 msgEl.style.display = 'block'; 46 if ( res.success ) { 47 form.style.display = 'none'; 48 msgEl.classList.remove( 'letterness-error' ); 49 msgEl.textContent = LTRN_WidgetConfig.successText; 50 } else { 51 msgEl.classList.add( 'letterness-error' ); 52 msgEl.textContent = ( res.data && res.data.message ) ? res.data.message : LTRN_WidgetConfig.errorText; 53 } 54 } ) 55 .catch( function () { 56 msgEl.style.display = 'block'; 57 msgEl.classList.add( 'letterness-error' ); 58 msgEl.textContent = LTRN_WidgetConfig.networkError; 59 } ); 60 } ); 61})();
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.