Created
February 8, 2017 02:14
-
-
Save Danny-Driscoll/e49f011d5fc41905b03e0d92fe213e42 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*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