in src/apache-unomi-tracker.js [169:238]
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 = document.getElementById(target).children;
for (var fIndex in targetFilters) {
var filter = targetFilters.item(fIndex);
if (filter) {
filter.style.display = (filter.id === selectedFilter.content) ? '' : 'none';
}
}
// we now add control group information to event if the user is in the control group.
if (inControlGroup) {
console.info('[WEM] Profile is in control group for target: ' + target + ', adding to personalization event...');
selectedFilter.event.target.properties.inControlGroup = true;
if (selectedFilter.event.target.properties.variants) {
selectedFilter.event.target.properties.variants.forEach(variant => variant.inControlGroup = true);
}
}
// send event to unomi
wem.collectEvent(wem._completeEvent(selectedFilter.event), function () {
console.info('[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 = document.getElementById(target).children;
for (var eIndex in elements) {
var el = elements.item(eIndex);
el.style.display = 'none';
}
}
}
});
},