Skip to content

Instantly share code, notes, and snippets.

@Danny-Driscoll
Created February 8, 2017 02:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Danny-Driscoll/e49f011d5fc41905b03e0d92fe213e42 to your computer and use it in GitHub Desktop.
Save Danny-Driscoll/e49f011d5fc41905b03e0d92fe213e42 to your computer and use it in GitHub Desktop.
/*define handler function to be executed when each campaign is decided as the page loads.
From that event.data object, pull in Experiment Name: variation Name for A/B Tests, Campaign:experiment:Variation:Holdback/treatment for Campaigns
Then push values as strings to optimizelyMoat array*/
var campaignDecided = function(event) {
var campaign = event.data.campaign;
var campaignName = campaign.name;
var holdback = (event.data.decision.isCampaignHoldback ? "holdback" : "treatment");
var experienceId = event.data.decision.experimentId;
var experienceName;
var variationId = event.data.decision.variationId;
var variationName;
// get the Experience Name
for (var e = 0; e < campaign.experiments.length; e++) {
if (experienceId === campaign.experiments[e].id) {
if (campaign.experiments[e].name == null) {
experienceName = campaign.experiments[e].audienceName;
//if it's not named, just call it by the audience it targets
}
else {
experienceName = campaign.experiments[e].name;
}
experienceIndex = e;
}
}
// get the Variation Name
for (var v = 0; v < campaign.experiments[experienceIndex].variations.length; v++) {
if (variationId === campaign.experiments[experienceIndex].variations[v].id) {
variationName = campaign.experiments[experienceIndex].variations[v].name;
}
}
// Format: campaign_name:experience_name:variation_name:holdback
if(campaign.policy === "equal_priority"){
var campaignData = campaignName + ":" + experienceName + ":" + variationName + ":" + holdback;
}
else{
var campaignData = experienceName + ":" + variationName;
}
// Use this window level string and plug it into the appropriate Marketo hidden field/API.
window.optimizelyMoat.push(campaignData);
};
window["optimizely"].push({
type: "addListener",
filter: {
type: "lifecycle",
name: "campaignDecided"
},
handler: campaignDecided
});
/* Define a handler to check whether a visitor has been redirected by an experiment or campaign as they will not get a campaignDecided Event
Then do the same Experiment/variation name check and push to optimizelyMoat
*/
var redirectExperiment = function(){
var state = optimizely.get('state');
if(state.getRedirectInfo() != null){
var redirect_campaign = state.getCampaignStates({visitorRedirected:true});
for(key in redirect_campaign){
var campaignName = redirect_campaign[key].campaignName;
var holdback = (redirect_campaign[key].isCampaignHoldback ? "holdback" : "treatment");
var experimentId = redirect_campaign[key].experiment.id;
var experimentName = redirect_campaign[key].experiment.name;
var variationId = redirect_campaign[key].variation.id;
var variationName = redirect_campaign[key].variation.name;
if(redirect_campaign[key].priority === 'equal_priority'){
var campaignData = campaignName + ":" + experimentName + ":" + variationName + ":" + holdback;
}
else{
var campaignData = experimentName + ":" + variationName;
}
if(window.optimizelyMoat.indexOf(campaignData) === -1){
window.optimizelyMoat.push(campaignData);
}
}
}
};
console.log('Calling function to add intialize for redirect');
window["optimizely"].push({
type: "addListener",
filter: {
type: "lifecycle",
name: "pageActivated"
},
handler: redirectExperiment
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment