@absmartly/sdk-plugins 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1101 -0
- package/dist/absmartly-cookie.min.js +1 -0
- package/dist/absmartly-dom-changes-core.min.js +1 -0
- package/dist/absmartly-dom-changes-lite.min.js +1 -0
- package/dist/absmartly-overrides-full.min.js +1 -0
- package/dist/absmartly-overrides-lite.min.js +1 -0
- package/dist/absmartly-sdk-plugins.min.js +1 -0
- package/dist/absmartly-vitals.min.js +1 -0
- package/es/cookies/CookiePlugin.js +410 -0
- package/es/cookies/CookiePlugin.js.map +1 -0
- package/es/cookies/index.js +2 -0
- package/es/cookies/index.js.map +1 -0
- package/es/core/DOMChangesPluginLite.js +1124 -0
- package/es/core/DOMChangesPluginLite.js.map +1 -0
- package/es/core/DOMManipulatorLite.js +410 -0
- package/es/core/DOMManipulatorLite.js.map +1 -0
- package/es/core/ExposureTracker.js +501 -0
- package/es/core/ExposureTracker.js.map +1 -0
- package/es/core/HTMLInjector.js +333 -0
- package/es/core/HTMLInjector.js.map +1 -0
- package/es/core/PendingChangeManager.js +440 -0
- package/es/core/PendingChangeManager.js.map +1 -0
- package/es/core/StyleSheetManager.js +78 -0
- package/es/core/StyleSheetManager.js.map +1 -0
- package/es/entries/cookie-only.js +10 -0
- package/es/entries/cookie-only.js.map +1 -0
- package/es/entries/dom-only.js +13 -0
- package/es/entries/dom-only.js.map +1 -0
- package/es/entries/dom-with-overrides-full.js +19 -0
- package/es/entries/dom-with-overrides-full.js.map +1 -0
- package/es/entries/dom-with-overrides-lite.js +15 -0
- package/es/entries/dom-with-overrides-lite.js.map +1 -0
- package/es/entries/overrides-full-only.js +15 -0
- package/es/entries/overrides-full-only.js.map +1 -0
- package/es/entries/overrides-lite-only.js +12 -0
- package/es/entries/overrides-lite-only.js.map +1 -0
- package/es/entries/vitals-only.js +10 -0
- package/es/entries/vitals-only.js.map +1 -0
- package/es/index.js +17 -0
- package/es/index.js.map +1 -0
- package/es/overrides/BrowserCookieAdapter.js +76 -0
- package/es/overrides/BrowserCookieAdapter.js.map +1 -0
- package/es/overrides/OverridesPlugin.js +903 -0
- package/es/overrides/OverridesPlugin.js.map +1 -0
- package/es/overrides/OverridesPluginFull.js +32 -0
- package/es/overrides/OverridesPluginFull.js.map +1 -0
- package/es/overrides/OverridesPluginLite.js +352 -0
- package/es/overrides/OverridesPluginLite.js.map +1 -0
- package/es/overrides/index.js +4 -0
- package/es/overrides/index.js.map +1 -0
- package/es/overrides/types.js +2 -0
- package/es/overrides/types.js.map +1 -0
- package/es/parsers/VariantExtractor.js +570 -0
- package/es/parsers/VariantExtractor.js.map +1 -0
- package/es/types/index.js +2 -0
- package/es/types/index.js.map +1 -0
- package/es/utils/URLMatcher.js +114 -0
- package/es/utils/URLMatcher.js.map +1 -0
- package/es/utils/debug.js +184 -0
- package/es/utils/debug.js.map +1 -0
- package/es/vitals/WebVitalsPlugin.js +379 -0
- package/es/vitals/WebVitalsPlugin.js.map +1 -0
- package/es/vitals/index.js +2 -0
- package/es/vitals/index.js.map +1 -0
- package/lib/cookies/CookiePlugin.d.ts +55 -0
- package/lib/cookies/CookiePlugin.js +413 -0
- package/lib/cookies/CookiePlugin.js.map +1 -0
- package/lib/cookies/index.d.ts +2 -0
- package/lib/cookies/index.js +6 -0
- package/lib/cookies/index.js.map +1 -0
- package/lib/core/DOMChangesPluginLite.d.ts +89 -0
- package/lib/core/DOMChangesPluginLite.js +1127 -0
- package/lib/core/DOMChangesPluginLite.js.map +1 -0
- package/lib/core/DOMManipulatorLite.d.ts +21 -0
- package/lib/core/DOMManipulatorLite.js +413 -0
- package/lib/core/DOMManipulatorLite.js.map +1 -0
- package/lib/core/ExposureTracker.d.ts +81 -0
- package/lib/core/ExposureTracker.js +504 -0
- package/lib/core/ExposureTracker.js.map +1 -0
- package/lib/core/HTMLInjector.d.ts +19 -0
- package/lib/core/HTMLInjector.js +336 -0
- package/lib/core/HTMLInjector.js.map +1 -0
- package/lib/core/PendingChangeManager.d.ts +31 -0
- package/lib/core/PendingChangeManager.js +443 -0
- package/lib/core/PendingChangeManager.js.map +1 -0
- package/lib/core/StyleSheetManager.d.ts +16 -0
- package/lib/core/StyleSheetManager.js +81 -0
- package/lib/core/StyleSheetManager.js.map +1 -0
- package/lib/entries/cookie-only.d.ts +8 -0
- package/lib/entries/cookie-only.js +12 -0
- package/lib/entries/cookie-only.js.map +1 -0
- package/lib/entries/dom-only.d.ts +9 -0
- package/lib/entries/dom-only.js +29 -0
- package/lib/entries/dom-only.js.map +1 -0
- package/lib/entries/dom-with-overrides-full.d.ts +15 -0
- package/lib/entries/dom-with-overrides-full.js +39 -0
- package/lib/entries/dom-with-overrides-full.js.map +1 -0
- package/lib/entries/dom-with-overrides-lite.d.ts +11 -0
- package/lib/entries/dom-with-overrides-lite.js +32 -0
- package/lib/entries/dom-with-overrides-lite.js.map +1 -0
- package/lib/entries/overrides-full-only.d.ts +11 -0
- package/lib/entries/overrides-full-only.js +33 -0
- package/lib/entries/overrides-full-only.js.map +1 -0
- package/lib/entries/overrides-lite-only.d.ts +8 -0
- package/lib/entries/overrides-lite-only.js +28 -0
- package/lib/entries/overrides-lite-only.js.map +1 -0
- package/lib/entries/vitals-only.d.ts +8 -0
- package/lib/entries/vitals-only.js +12 -0
- package/lib/entries/vitals-only.js.map +1 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.js +34 -0
- package/lib/index.js.map +1 -0
- package/lib/overrides/BrowserCookieAdapter.d.ts +6 -0
- package/lib/overrides/BrowserCookieAdapter.js +79 -0
- package/lib/overrides/BrowserCookieAdapter.js.map +1 -0
- package/lib/overrides/OverridesPlugin.d.ts +33 -0
- package/lib/overrides/OverridesPlugin.js +906 -0
- package/lib/overrides/OverridesPlugin.js.map +1 -0
- package/lib/overrides/OverridesPluginFull.d.ts +9 -0
- package/lib/overrides/OverridesPluginFull.js +35 -0
- package/lib/overrides/OverridesPluginFull.js.map +1 -0
- package/lib/overrides/OverridesPluginLite.d.ts +27 -0
- package/lib/overrides/OverridesPluginLite.js +355 -0
- package/lib/overrides/OverridesPluginLite.js.map +1 -0
- package/lib/overrides/index.d.ts +3 -0
- package/lib/overrides/index.js +23 -0
- package/lib/overrides/index.js.map +1 -0
- package/lib/overrides/types.d.ts +43 -0
- package/lib/overrides/types.js +3 -0
- package/lib/overrides/types.js.map +1 -0
- package/lib/parsers/VariantExtractor.d.ts +49 -0
- package/lib/parsers/VariantExtractor.js +573 -0
- package/lib/parsers/VariantExtractor.js.map +1 -0
- package/lib/types/index.d.ts +177 -0
- package/lib/types/index.js +3 -0
- package/lib/types/index.js.map +1 -0
- package/lib/utils/URLMatcher.d.ts +20 -0
- package/lib/utils/URLMatcher.js +117 -0
- package/lib/utils/URLMatcher.js.map +1 -0
- package/lib/utils/debug.d.ts +41 -0
- package/lib/utils/debug.js +195 -0
- package/lib/utils/debug.js.map +1 -0
- package/lib/vitals/WebVitalsPlugin.d.ts +37 -0
- package/lib/vitals/WebVitalsPlugin.js +382 -0
- package/lib/vitals/WebVitalsPlugin.js.map +1 -0
- package/lib/vitals/index.d.ts +2 -0
- package/lib/vitals/index.js +6 -0
- package/lib/vitals/index.js.map +1 -0
- package/package.json +94 -0
- package/types/cookies/CookiePlugin.d.ts +55 -0
- package/types/cookies/index.d.ts +2 -0
- package/types/core/DOMChangesPluginLite.d.ts +89 -0
- package/types/core/DOMManipulatorLite.d.ts +21 -0
- package/types/core/ExposureTracker.d.ts +81 -0
- package/types/core/HTMLInjector.d.ts +19 -0
- package/types/core/PendingChangeManager.d.ts +31 -0
- package/types/core/StyleSheetManager.d.ts +16 -0
- package/types/entries/cookie-only.d.ts +8 -0
- package/types/entries/dom-only.d.ts +9 -0
- package/types/entries/dom-with-overrides-full.d.ts +15 -0
- package/types/entries/dom-with-overrides-lite.d.ts +11 -0
- package/types/entries/overrides-full-only.d.ts +11 -0
- package/types/entries/overrides-lite-only.d.ts +8 -0
- package/types/entries/vitals-only.d.ts +8 -0
- package/types/index.d.ts +13 -0
- package/types/overrides/BrowserCookieAdapter.d.ts +6 -0
- package/types/overrides/OverridesPlugin.d.ts +33 -0
- package/types/overrides/OverridesPluginFull.d.ts +9 -0
- package/types/overrides/OverridesPluginLite.d.ts +27 -0
- package/types/overrides/index.d.ts +3 -0
- package/types/overrides/types.d.ts +43 -0
- package/types/parsers/VariantExtractor.d.ts +49 -0
- package/types/types/index.d.ts +177 -0
- package/types/utils/URLMatcher.d.ts +20 -0
- package/types/utils/debug.d.ts +41 -0
- package/types/vitals/WebVitalsPlugin.d.ts +37 -0
- package/types/vitals/index.d.ts +2 -0
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
38
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
39
|
+
if (!m) return o;
|
|
40
|
+
var i = m.call(o), r, ar = [], e;
|
|
41
|
+
try {
|
|
42
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
43
|
+
}
|
|
44
|
+
catch (error) { e = { error: error }; }
|
|
45
|
+
finally {
|
|
46
|
+
try {
|
|
47
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
48
|
+
}
|
|
49
|
+
finally { if (e) throw e.error; }
|
|
50
|
+
}
|
|
51
|
+
return ar;
|
|
52
|
+
};
|
|
53
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
54
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
55
|
+
if (ar || !(i in from)) {
|
|
56
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
57
|
+
ar[i] = from[i];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
61
|
+
};
|
|
62
|
+
import { logDebug } from '../utils/debug';
|
|
63
|
+
var ExposureTracker = /** @class */ (function () {
|
|
64
|
+
function ExposureTracker(context, debug) {
|
|
65
|
+
if (debug === void 0) { debug = false; }
|
|
66
|
+
this.context = context;
|
|
67
|
+
this.experiments = new Map();
|
|
68
|
+
this.trackedElements = new Map();
|
|
69
|
+
this.mutationObserver = null;
|
|
70
|
+
this.placeholders = new Map(); // experimentName-selector -> placeholder
|
|
71
|
+
this.debug = debug;
|
|
72
|
+
this.setupIntersectionObserver();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Register an experiment with all its variants' changes for comprehensive tracking
|
|
76
|
+
*/
|
|
77
|
+
ExposureTracker.prototype.registerExperiment = function (experimentName, currentVariant, currentChanges, allVariantsChanges) {
|
|
78
|
+
var _this = this;
|
|
79
|
+
if (this.debug) {
|
|
80
|
+
logDebug("[ABsmartly] Registering experiment ".concat(experimentName, " for exposure tracking"));
|
|
81
|
+
}
|
|
82
|
+
// Collect all unique selectors that need viewport tracking across ALL variants
|
|
83
|
+
var viewportSelectors = new Set();
|
|
84
|
+
var moveParentSelectors = new Set(); // Parent containers for move changes
|
|
85
|
+
// First pass: collect all move changes across all variants
|
|
86
|
+
// We need to track ALL possible positions where elements could be
|
|
87
|
+
var moveElements = new Map(); // selector -> Set of target parent positions
|
|
88
|
+
allVariantsChanges.forEach(function (variantChanges) {
|
|
89
|
+
variantChanges.forEach(function (change) {
|
|
90
|
+
if (change.trigger_on_view) {
|
|
91
|
+
if (change.type === 'move') {
|
|
92
|
+
if (!moveElements.has(change.selector)) {
|
|
93
|
+
moveElements.set(change.selector, new Set());
|
|
94
|
+
}
|
|
95
|
+
// Add the target parent for this move
|
|
96
|
+
if (change.targetSelector) {
|
|
97
|
+
moveElements.get(change.selector).add(change.targetSelector);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// For non-move changes, track the selector directly
|
|
102
|
+
viewportSelectors.add(change.selector);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
// For cross-variant move tracking, we need to track the EXACT POSITION where
|
|
108
|
+
// elements would appear in other variants. We use container-based invisible elements
|
|
109
|
+
// positioned exactly where the element would be, using CSS positioning.
|
|
110
|
+
moveElements.forEach(function (_targetParents, selector) {
|
|
111
|
+
// Collect all move changes for this element across ALL variants
|
|
112
|
+
var allMovesForElement = [];
|
|
113
|
+
allVariantsChanges.forEach(function (variantChanges, variantIndex) {
|
|
114
|
+
var moveChange = variantChanges.find(function (c) { return c.type === 'move' && c.selector === selector && c.trigger_on_view; });
|
|
115
|
+
if (moveChange === null || moveChange === void 0 ? void 0 : moveChange.targetSelector) {
|
|
116
|
+
allMovesForElement.push({
|
|
117
|
+
targetSelector: moveChange.targetSelector,
|
|
118
|
+
position: moveChange.position || 'lastChild',
|
|
119
|
+
variantIndex: variantIndex,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
// Check if current variant has a move for this element
|
|
124
|
+
var currentMoveIndex = allMovesForElement.findIndex(function (m) { return m.variantIndex === currentVariant; });
|
|
125
|
+
if (currentMoveIndex >= 0) {
|
|
126
|
+
// Current variant HAS a move - track the element in its moved position
|
|
127
|
+
viewportSelectors.add(selector);
|
|
128
|
+
// For all OTHER variant positions, create container-based placeholders
|
|
129
|
+
allMovesForElement.forEach(function (move, index) {
|
|
130
|
+
if (index !== currentMoveIndex) {
|
|
131
|
+
// Create placeholder at the position where element WOULD be in another variant
|
|
132
|
+
_this.createContainerPlaceholder(experimentName, selector, move.targetSelector, move.position);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Current variant does NOT have a move - element stays in original position
|
|
138
|
+
viewportSelectors.add(selector);
|
|
139
|
+
// For ALL variant moves, create placeholders at those positions
|
|
140
|
+
allMovesForElement.forEach(function (move) {
|
|
141
|
+
_this.createContainerPlaceholder(experimentName, selector, move.targetSelector, move.position);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
// Determine what triggers are needed by checking ALL variants
|
|
146
|
+
// This ensures experiments are tracked even if the user is in a variant without changes
|
|
147
|
+
var hasImmediateTrigger = false;
|
|
148
|
+
var hasViewportTrigger = false;
|
|
149
|
+
allVariantsChanges.forEach(function (variantChanges) {
|
|
150
|
+
variantChanges.forEach(function (change) {
|
|
151
|
+
if (change.trigger_on_view) {
|
|
152
|
+
hasViewportTrigger = true;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
hasImmediateTrigger = true;
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
// Store experiment tracking info
|
|
160
|
+
var tracking = {
|
|
161
|
+
experimentName: experimentName,
|
|
162
|
+
variant: currentVariant,
|
|
163
|
+
changes: currentChanges,
|
|
164
|
+
allPossibleSelectors: new Set(__spreadArray(__spreadArray([], __read(viewportSelectors), false), __read(moveParentSelectors), false)),
|
|
165
|
+
triggered: false,
|
|
166
|
+
hasImmediateTrigger: hasImmediateTrigger,
|
|
167
|
+
hasViewportTrigger: hasViewportTrigger,
|
|
168
|
+
};
|
|
169
|
+
this.experiments.set(experimentName, tracking);
|
|
170
|
+
if (this.debug) {
|
|
171
|
+
logDebug("[ABsmartly] Experiment ".concat(experimentName, " will track selectors:"), Array.from(tracking.allPossibleSelectors));
|
|
172
|
+
}
|
|
173
|
+
// Trigger immediately if needed
|
|
174
|
+
if (hasImmediateTrigger) {
|
|
175
|
+
// Don't await here to avoid blocking the tracking setup
|
|
176
|
+
this.triggerExposure(experimentName).catch(function (error) {
|
|
177
|
+
logDebug("[ABsmartly] Failed to trigger exposure for ".concat(experimentName, ":"), error);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
else if (hasViewportTrigger) {
|
|
181
|
+
// Only set up viewport observers if there's NO immediate trigger
|
|
182
|
+
// If there's an immediate trigger, the experiment will be triggered and cleaned up right away
|
|
183
|
+
this.observeSelectors(experimentName, tracking.allPossibleSelectors);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Create a container-based placeholder at the hypothetical position
|
|
188
|
+
* Uses inline-block with minimal dimensions to be observable but not affect layout
|
|
189
|
+
*/
|
|
190
|
+
ExposureTracker.prototype.createContainerPlaceholder = function (experimentName, originalSelector, targetSelector, position) {
|
|
191
|
+
var _a, _b;
|
|
192
|
+
if (position === void 0) { position = 'lastChild'; }
|
|
193
|
+
var targetElement = document.querySelector(targetSelector);
|
|
194
|
+
if (!targetElement)
|
|
195
|
+
return;
|
|
196
|
+
var placeholderKey = "".concat(experimentName, "-").concat(originalSelector, "-").concat(targetSelector, "-").concat(position);
|
|
197
|
+
// Check if placeholder already exists
|
|
198
|
+
if (this.placeholders.has(placeholderKey)) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// Create minimal placeholder using inline styles
|
|
202
|
+
// This will be observable by IntersectionObserver but won't affect layout
|
|
203
|
+
var placeholder = document.createElement('span');
|
|
204
|
+
placeholder.style.cssText = "\n display: inline-block;\n width: 1px;\n height: 1px;\n position: relative;\n left: -1px;\n visibility: hidden;\n pointer-events: none;\n font-size: 0;\n line-height: 0;\n overflow: hidden;\n ";
|
|
205
|
+
placeholder.setAttribute('data-absmartly-placeholder', 'true');
|
|
206
|
+
placeholder.setAttribute('data-absmartly-original-selector', originalSelector);
|
|
207
|
+
placeholder.setAttribute('data-absmartly-experiment', experimentName);
|
|
208
|
+
placeholder.setAttribute('aria-hidden', 'true');
|
|
209
|
+
// Insert placeholder at the hypothetical position
|
|
210
|
+
switch (position) {
|
|
211
|
+
case 'firstChild':
|
|
212
|
+
targetElement.insertBefore(placeholder, targetElement.firstChild);
|
|
213
|
+
break;
|
|
214
|
+
case 'lastChild':
|
|
215
|
+
targetElement.appendChild(placeholder);
|
|
216
|
+
break;
|
|
217
|
+
case 'before':
|
|
218
|
+
(_a = targetElement.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(placeholder, targetElement);
|
|
219
|
+
break;
|
|
220
|
+
case 'after':
|
|
221
|
+
(_b = targetElement.parentElement) === null || _b === void 0 ? void 0 : _b.insertBefore(placeholder, targetElement.nextSibling);
|
|
222
|
+
break;
|
|
223
|
+
default:
|
|
224
|
+
targetElement.appendChild(placeholder);
|
|
225
|
+
}
|
|
226
|
+
this.placeholders.set(placeholderKey, placeholder);
|
|
227
|
+
// Track the placeholder for viewport visibility
|
|
228
|
+
this.trackElement(placeholder, experimentName);
|
|
229
|
+
if (this.debug) {
|
|
230
|
+
logDebug("[ABsmartly] Created placeholder for ".concat(originalSelector, " at ").concat(targetSelector, " (").concat(position, ")"));
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* Get the original parent selector for move changes
|
|
235
|
+
* This should be called BEFORE the move is applied
|
|
236
|
+
*/
|
|
237
|
+
ExposureTracker.prototype.getOriginalParentForMove = function (selector) {
|
|
238
|
+
var element = document.querySelector(selector);
|
|
239
|
+
if (!(element === null || element === void 0 ? void 0 : element.parentElement))
|
|
240
|
+
return null;
|
|
241
|
+
return this.getStableParentSelector(element.parentElement);
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Get a stable selector for a parent element
|
|
245
|
+
*/
|
|
246
|
+
ExposureTracker.prototype.getStableParentSelector = function (element) {
|
|
247
|
+
// Try to get a good selector for the parent
|
|
248
|
+
if (element.id) {
|
|
249
|
+
return "#".concat(element.id);
|
|
250
|
+
}
|
|
251
|
+
if (element.className) {
|
|
252
|
+
var classes = element.className.split(' ').filter(function (c) { return c && !c.startsWith('absmartly'); });
|
|
253
|
+
if (classes.length > 0) {
|
|
254
|
+
return ".".concat(classes[0]);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Fallback to tag name with positional info
|
|
258
|
+
var parent = element.parentElement;
|
|
259
|
+
if (parent) {
|
|
260
|
+
var siblings = Array.from(parent.children);
|
|
261
|
+
var index = siblings.indexOf(element);
|
|
262
|
+
return "".concat(element.tagName.toLowerCase(), ":nth-child(").concat(index + 1, ")");
|
|
263
|
+
}
|
|
264
|
+
return null;
|
|
265
|
+
};
|
|
266
|
+
/**
|
|
267
|
+
* Set up observers for the given selectors
|
|
268
|
+
*/
|
|
269
|
+
ExposureTracker.prototype.observeSelectors = function (experimentName, selectors) {
|
|
270
|
+
var _this = this;
|
|
271
|
+
selectors.forEach(function (selector) {
|
|
272
|
+
// Try to find existing elements
|
|
273
|
+
var elements = document.querySelectorAll(selector);
|
|
274
|
+
if (elements.length > 0) {
|
|
275
|
+
elements.forEach(function (element) {
|
|
276
|
+
_this.trackElement(element, experimentName);
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
// Element doesn't exist yet, set up mutation observer to watch for it
|
|
281
|
+
_this.watchForSelector(selector, experimentName);
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
};
|
|
285
|
+
/**
|
|
286
|
+
* Track an element for viewport visibility
|
|
287
|
+
*/
|
|
288
|
+
ExposureTracker.prototype.trackElement = function (element, experimentName) {
|
|
289
|
+
if (!this.trackedElements.has(element)) {
|
|
290
|
+
this.trackedElements.set(element, {
|
|
291
|
+
element: element,
|
|
292
|
+
experiments: new Set([experimentName]),
|
|
293
|
+
isPlaceholder: element.hasAttribute('data-absmartly-placeholder'),
|
|
294
|
+
});
|
|
295
|
+
this.observer.observe(element);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
this.trackedElements.get(element).experiments.add(experimentName);
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
/**
|
|
302
|
+
* Watch for elements matching a selector to appear
|
|
303
|
+
*/
|
|
304
|
+
ExposureTracker.prototype.watchForSelector = function (_selector, _experimentName) {
|
|
305
|
+
if (!this.mutationObserver) {
|
|
306
|
+
this.setupMutationObserver();
|
|
307
|
+
}
|
|
308
|
+
// Store pending selector (implementation would need a Map for this)
|
|
309
|
+
// For now, we'll rely on checking in mutation callback
|
|
310
|
+
};
|
|
311
|
+
/**
|
|
312
|
+
* Set up the IntersectionObserver for viewport tracking
|
|
313
|
+
*/
|
|
314
|
+
ExposureTracker.prototype.setupIntersectionObserver = function () {
|
|
315
|
+
var _this = this;
|
|
316
|
+
this.observer = new IntersectionObserver(function (entries) {
|
|
317
|
+
entries.forEach(function (entry) {
|
|
318
|
+
if (entry.isIntersecting) {
|
|
319
|
+
_this.handleElementVisible(entry.target);
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
}, {
|
|
323
|
+
threshold: 0.01, // Trigger when even 1% is visible
|
|
324
|
+
rootMargin: '0px',
|
|
325
|
+
});
|
|
326
|
+
};
|
|
327
|
+
/**
|
|
328
|
+
* Set up MutationObserver for dynamic elements
|
|
329
|
+
*/
|
|
330
|
+
ExposureTracker.prototype.setupMutationObserver = function () {
|
|
331
|
+
var _this = this;
|
|
332
|
+
this.mutationObserver = new MutationObserver(function (mutations) {
|
|
333
|
+
mutations.forEach(function (mutation) {
|
|
334
|
+
mutation.addedNodes.forEach(function (node) {
|
|
335
|
+
if (node instanceof Element) {
|
|
336
|
+
// Check if this element or its children match any tracked selectors
|
|
337
|
+
_this.checkNewElement(node);
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
this.mutationObserver.observe(document.body, {
|
|
343
|
+
childList: true,
|
|
344
|
+
subtree: true,
|
|
345
|
+
});
|
|
346
|
+
};
|
|
347
|
+
/**
|
|
348
|
+
* Check if a newly added element needs tracking
|
|
349
|
+
*/
|
|
350
|
+
ExposureTracker.prototype.checkNewElement = function (element) {
|
|
351
|
+
var _this = this;
|
|
352
|
+
this.experiments.forEach(function (tracking, experimentName) {
|
|
353
|
+
tracking.allPossibleSelectors.forEach(function (selector) {
|
|
354
|
+
if (element.matches(selector)) {
|
|
355
|
+
_this.trackElement(element, experimentName);
|
|
356
|
+
}
|
|
357
|
+
// Also check children
|
|
358
|
+
element.querySelectorAll(selector).forEach(function (child) {
|
|
359
|
+
_this.trackElement(child, experimentName);
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
});
|
|
363
|
+
};
|
|
364
|
+
/**
|
|
365
|
+
* Handle when an element becomes visible
|
|
366
|
+
*/
|
|
367
|
+
ExposureTracker.prototype.handleElementVisible = function (element) {
|
|
368
|
+
var _this = this;
|
|
369
|
+
var tracked = this.trackedElements.get(element);
|
|
370
|
+
if (!tracked)
|
|
371
|
+
return;
|
|
372
|
+
tracked.experiments.forEach(function (experimentName) {
|
|
373
|
+
var experiment = _this.experiments.get(experimentName);
|
|
374
|
+
if (experiment && !experiment.triggered) {
|
|
375
|
+
// Don't await here to avoid blocking the visibility handler
|
|
376
|
+
_this.triggerExposure(experimentName).catch(function (error) {
|
|
377
|
+
logDebug("[ABsmartly] Failed to trigger exposure for ".concat(experimentName, ":"), error);
|
|
378
|
+
});
|
|
379
|
+
if (_this.debug) {
|
|
380
|
+
var selector = tracked.isPlaceholder
|
|
381
|
+
? element.getAttribute('data-absmartly-original-selector')
|
|
382
|
+
: _this.getElementSelector(element);
|
|
383
|
+
logDebug("[ABsmartly] Triggering exposure for ".concat(experimentName, " via ").concat(selector));
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* Trigger exposure for an experiment
|
|
390
|
+
*/
|
|
391
|
+
ExposureTracker.prototype.triggerExposure = function (experimentName) {
|
|
392
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
393
|
+
var experiment;
|
|
394
|
+
return __generator(this, function (_a) {
|
|
395
|
+
switch (_a.label) {
|
|
396
|
+
case 0:
|
|
397
|
+
experiment = this.experiments.get(experimentName);
|
|
398
|
+
if (!experiment || experiment.triggered)
|
|
399
|
+
return [2 /*return*/];
|
|
400
|
+
// Ensure context is ready before calling treatment
|
|
401
|
+
return [4 /*yield*/, this.context.ready()];
|
|
402
|
+
case 1:
|
|
403
|
+
// Ensure context is ready before calling treatment
|
|
404
|
+
_a.sent();
|
|
405
|
+
// Call treatment to trigger exposure
|
|
406
|
+
this.context.treatment(experimentName);
|
|
407
|
+
experiment.triggered = true;
|
|
408
|
+
if (this.debug) {
|
|
409
|
+
logDebug("[ABsmartly] Exposure triggered for experiment: ".concat(experimentName));
|
|
410
|
+
}
|
|
411
|
+
// Clean up tracking for this experiment
|
|
412
|
+
this.cleanupExperiment(experimentName);
|
|
413
|
+
return [2 /*return*/];
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
});
|
|
417
|
+
};
|
|
418
|
+
/**
|
|
419
|
+
* Clean up tracking for an experiment that has been triggered
|
|
420
|
+
*/
|
|
421
|
+
ExposureTracker.prototype.cleanupExperiment = function (experimentName) {
|
|
422
|
+
var _this = this;
|
|
423
|
+
// Remove from tracked elements
|
|
424
|
+
this.trackedElements.forEach(function (tracked, element) {
|
|
425
|
+
tracked.experiments.delete(experimentName);
|
|
426
|
+
if (tracked.experiments.size === 0) {
|
|
427
|
+
_this.observer.unobserve(element);
|
|
428
|
+
_this.trackedElements.delete(element);
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
// Remove placeholders
|
|
432
|
+
this.placeholders.forEach(function (placeholder, key) {
|
|
433
|
+
if (key.startsWith("".concat(experimentName, "-"))) {
|
|
434
|
+
placeholder.remove();
|
|
435
|
+
_this.placeholders.delete(key);
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
// Don't delete the experiment - keep it in the map so isTriggered() can still return true
|
|
439
|
+
// Just clear the selectors since we don't need to track them anymore
|
|
440
|
+
var experiment = this.experiments.get(experimentName);
|
|
441
|
+
if (experiment) {
|
|
442
|
+
experiment.allPossibleSelectors.clear();
|
|
443
|
+
}
|
|
444
|
+
// Clean up mutation observer if no experiments left
|
|
445
|
+
if (this.experiments.size === 0 && this.mutationObserver) {
|
|
446
|
+
this.mutationObserver.disconnect();
|
|
447
|
+
this.mutationObserver = null;
|
|
448
|
+
}
|
|
449
|
+
};
|
|
450
|
+
/**
|
|
451
|
+
* Get a selector string for an element (for debugging)
|
|
452
|
+
*/
|
|
453
|
+
ExposureTracker.prototype.getElementSelector = function (element) {
|
|
454
|
+
if (element.id)
|
|
455
|
+
return "#".concat(element.id);
|
|
456
|
+
if (element.className) {
|
|
457
|
+
var classes = element.className.split(' ').filter(function (c) { return c && !c.startsWith('absmartly'); });
|
|
458
|
+
if (classes.length > 0)
|
|
459
|
+
return ".".concat(classes.join('.'));
|
|
460
|
+
}
|
|
461
|
+
return element.tagName.toLowerCase();
|
|
462
|
+
};
|
|
463
|
+
/**
|
|
464
|
+
* Check if an experiment needs viewport tracking
|
|
465
|
+
*/
|
|
466
|
+
ExposureTracker.prototype.needsViewportTracking = function (experimentName) {
|
|
467
|
+
var _a;
|
|
468
|
+
var experiment = this.experiments.get(experimentName);
|
|
469
|
+
return (_a = experiment === null || experiment === void 0 ? void 0 : experiment.hasViewportTrigger) !== null && _a !== void 0 ? _a : false;
|
|
470
|
+
};
|
|
471
|
+
/**
|
|
472
|
+
* Check if an experiment has been triggered
|
|
473
|
+
*/
|
|
474
|
+
ExposureTracker.prototype.isTriggered = function (experimentName) {
|
|
475
|
+
var _a;
|
|
476
|
+
var experiment = this.experiments.get(experimentName);
|
|
477
|
+
return (_a = experiment === null || experiment === void 0 ? void 0 : experiment.triggered) !== null && _a !== void 0 ? _a : false;
|
|
478
|
+
};
|
|
479
|
+
/**
|
|
480
|
+
* Clean up all resources
|
|
481
|
+
*/
|
|
482
|
+
ExposureTracker.prototype.destroy = function () {
|
|
483
|
+
// Disconnect observers
|
|
484
|
+
this.observer.disconnect();
|
|
485
|
+
if (this.mutationObserver) {
|
|
486
|
+
this.mutationObserver.disconnect();
|
|
487
|
+
}
|
|
488
|
+
// Remove all placeholders
|
|
489
|
+
this.placeholders.forEach(function (placeholder) { return placeholder.remove(); });
|
|
490
|
+
// Clear all tracking
|
|
491
|
+
this.experiments.clear();
|
|
492
|
+
this.trackedElements.clear();
|
|
493
|
+
this.placeholders.clear();
|
|
494
|
+
if (this.debug) {
|
|
495
|
+
logDebug('[ABsmartly] ExposureTracker destroyed');
|
|
496
|
+
}
|
|
497
|
+
};
|
|
498
|
+
return ExposureTracker;
|
|
499
|
+
}());
|
|
500
|
+
export { ExposureTracker };
|
|
501
|
+
//# sourceMappingURL=ExposureTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExposureTracker.js","sourceRoot":"","sources":["../../src/core/ExposureTracker.ts"],"names":[],"mappings":"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"}
|