in src/apache-unomi-tracker.js [191:266]
registerPersonalizationObject: function (personalization, variants, ajax, resultCallback) {
var target = personalization.id;
wem._registerPersonalizationCallback(personalization, function (result, additionalResultInfos) {
var selectedFilter = null;
var successfulFilters = [];
var inControlGroup = additionalResultInfos && additionalResultInfos.inControlGroup;
// In case of control group Unomi is not resolving any strategy or fallback for us. So we have to do the fallback here.
if (inControlGroup && personalization.strategyOptions && personalization.strategyOptions.fallback) {
selectedFilter = variants[personalization.strategyOptions.fallback];
successfulFilters.push(selectedFilter);
} else {
for (var i = 0; i < result.length; i++) {
successfulFilters.push(variants[result[i]]);
}
if (successfulFilters.length > 0) {
selectedFilter = successfulFilters[0];
var minPos = successfulFilters[0].position;
if (minPos >= 0) {
for (var j = 1; j < successfulFilters.length; j++) {
if (successfulFilters[j].position < minPos) {
selectedFilter = successfulFilters[j];
}
}
}
}
}
if (resultCallback) {
// execute callback
resultCallback(successfulFilters, selectedFilter);
} else {
if (selectedFilter) {
var targetFilters = /** @type {HTMLElement} */(document.getElementById(target)).children;
for (var fIndex in targetFilters) {
// @ts-expect-error The indexing is unsafe
var filter = /** @type {HTMLElement | null} */(targetFilters.item(fIndex));
if (filter) {
filter.style.display = (filter.id === selectedFilter.content) ? '' : 'none';
}
}
if (selectedFilter.event) {
// we now add control group information to event if the user is in the control group.
if (inControlGroup) {
console.debug('[WEM] Profile is in control group for target: ' + target + ', adding to personalization event...');
// @ts-expect-error The properties are not defined
selectedFilter.event.target.properties.inControlGroup = true;
// @ts-expect-error The properties are not defined
if (selectedFilter.event.target.properties.variants) {
// @ts-expect-error The properties are not defined
selectedFilter.event.target.properties.variants.forEach(variant => variant.inControlGroup = true);
}
}
// send event to unomi
wem.collectEvent(wem._completeEvent(selectedFilter.event), function () {
console.debug('[WEM] Personalization event successfully collected.');
}, function () {
console.error('[WEM] Could not send personalization event.');
});
//Trigger variant display event for personalization
wem._dispatchJSExperienceDisplayedEvent(selectedFilter.event);
}
} else {
var elements = /** @type {HTMLElement} */(document.getElementById(target)).children;
for (var eIndex in elements) {
// @ts-expect-error The indexing is unsafe
var el = /** @type {HTMLElement} */(elements.item(eIndex));
el.style.display = 'none';
}
}
}
});
},