1/** 2 * WPRobo Engage - A/B Testing Client 3 * 4 * Handles variation assignment and tracking for A/B tests 5 */ 6 7(function() { 8 'use strict'; 9 10 /** 11 * Get or assign variation for a campaign 12 */ 13 window.wprGetVariation = function(campaignId, callback) { 14 // Check localStorage for existing assignment 15 var storageKey = 'wpr_ab_variation_' + campaignId; 16 var assignedVariationId = localStorage.getItem(storageKey); 17 18 // Prepare AJAX request 19 var formData = new FormData(); 20 formData.append('action', 'wprobo_engage_get_variation'); 21 formData.append('campaign_id', campaignId); 22 23 if (assignedVariationId) { 24 formData.append('assigned_variation_id', assignedVariationId); 25 } 26 27 // Make request 28 var ajaxUrl = window.wprEngagePublic?.ajaxUrl || '/wp-admin/admin-ajax.php'; 29 30 fetch(ajaxUrl, { 31 method: 'POST', 32 body: formData 33 }) 34 .then(function(response) { 35 return response.json(); 36 }) 37 .then(function(data) { 38 if (data.success && data.data.has_test) { 39 // Store assignment 40 localStorage.setItem(storageKey, data.data.variation_id); 41 42 // Return variation data 43 callback(data.data); 44 } else { 45 // No active test, return null 46 callback(null); 47 } 48 }) 49 .catch(function(error) { 50 // Silently fail â no active test or network error. 51 callback(null); 52 }); 53 }; 54 55 /** 56 * Track impression for a variation 57 */ 58 window.wprTrackVariationImpression = function(variationId) { 59 if (!variationId) return; 60 61 // Track in analytics system 62 var formData = new FormData(); 63 formData.append('action', 'wprobo_engage_track_variation_impression'); 64 formData.append('variation_id', variationId); 65 66 var ajaxUrl = window.wprEngagePublic?.ajaxUrl || '/wp-admin/admin-ajax.php'; 67 68 fetch(ajaxUrl, { 69 method: 'POST', 70 body: formData 71 }).catch(function(error) { 72 // Silently fail â impression tracking is non-critical. 73 }); 74 }; 75 76 /** 77 * Track conversion for a variation 78 */ 79 window.wprTrackVariationConversion = function(variationId) { 80 if (!variationId) return; 81 82 var formData = new FormData(); 83 formData.append('action', 'wprobo_engage_track_variation_conversion'); 84 formData.append('variation_id', variationId); 85 86 var ajaxUrl = window.wprEngagePublic?.ajaxUrl || '/wp-admin/admin-ajax.php'; 87 88 fetch(ajaxUrl, { 89 method: 'POST', 90 body: formData 91 }).catch(function(error) { 92 // Silently fail â conversion tracking is non-critical. 93 }); 94 }; 95 96 /** 97 * Apply variation settings to a campaign 98 */ 99 window.wprApplyVariationSettings = function(campaignElement, settings) { 100 if (!settings || !campaignElement) return; 101 102 // Apply headline 103 if (settings.headline) { 104 var headlineEl = campaignElement.querySelector('.wpr-headline'); 105 if (headlineEl) { 106 headlineEl.textContent = settings.headline; 107 } 108 } 109 110 // Apply content 111 if (settings.content) { 112 var contentEl = campaignElement.querySelector('.wpr-content'); 113 if (contentEl) { 114 contentEl.innerHTML = settings.content; 115 } 116 } 117 118 // Apply button text 119 if (settings.button_text) { 120 var buttonEl = campaignElement.querySelector('.wpr-submit-btn'); 121 if (buttonEl) { 122 buttonEl.textContent = settings.button_text; 123 } 124 } 125 126 // Apply button color 127 if (settings.button_bg_color) { 128 var buttonEl = campaignElement.querySelector('.wpr-submit-btn'); 129 if (buttonEl) { 130 buttonEl.style.backgroundColor = settings.button_bg_color; 131 } 132 } 133 134 // Apply button text color 135 if (settings.button_text_color) { 136 var buttonEl = campaignElement.querySelector('.wpr-submit-btn'); 137 if (buttonEl) { 138 buttonEl.style.color = settings.button_text_color; 139 } 140 } 141 142 // Apply background color 143 if (settings.bg_color) { 144 var containerEl = campaignElement.querySelector('.wpr-campaign-container'); 145 if (containerEl) { 146 containerEl.style.backgroundColor = settings.bg_color; 147 } 148 } 149 150 // Apply headline color 151 if (settings.headline_color) { 152 var headlineEl = campaignElement.querySelector('.wpr-headline'); 153 if (headlineEl) { 154 headlineEl.style.color = settings.headline_color; 155 } 156 } 157 158 // Apply content color 159 if (settings.content_color) { 160 var contentEl = campaignElement.querySelector('.wpr-content'); 161 if (contentEl) { 162 contentEl.style.color = settings.content_color; 163 } 164 } 165 }; 166 167})();
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.