PageSourceSearch

https://wprobo.com/wp-content/plugins/wprobo-engage-pro/assets/js/ab-testing.js

js wprobo.com collected 2026-10-01 10:12:18 UTC 4,245 bytes, 167 lines download raw bytes

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.