This repository has been archived by the owner on Apr 4, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
119 changed files
with
21,625 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
User-agent: * | ||
Disallow: /*/print | ||
# Don't allow indexing of search results | ||
Disallow: /search? | ||
# We only allow indexing of the licence-finder landing page | ||
Disallow: /licence-finder/ | ||
Allow: /licence-finder | ||
# We only allow indexing of the finance finder landing page | ||
Disallow: /business-finance-support-finder/* | ||
Allow: /business-finance-support-finder | ||
Disallow: /apply-for-a-licence | ||
Sitemap: https://www.gov.uk/sitemap.xml | ||
Crawl-delay: 0.5 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
|
||
|
||
|
80 changes: 80 additions & 0 deletions
80
bold-testing/static.dev.gov.uk/static/analytics/events-cookie-handler.js
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
var GOVUK = GOVUK || {}; | ||
GOVUK.Analytics = GOVUK.Analytics || {}; | ||
|
||
GOVUK.Analytics.internalSiteEvents = function () { | ||
|
||
var COOKIE_NAME = "GDS_successEvents"; | ||
var eventQueue = []; | ||
|
||
var loadCookie = function () { | ||
var value = Alphagov.read_cookie(COOKIE_NAME); | ||
if (value) { | ||
value = jQuery.parseJSON(jQuery.base64Decode(value)); | ||
} else { | ||
value = []; | ||
} | ||
eventQueue = value; | ||
}; | ||
|
||
var sendCookieEvents = function () { | ||
loadCookie(); | ||
$(eventQueue).each(function () { | ||
GOVUK.sendToAnalytics(this); | ||
}); | ||
eventQueue = []; | ||
Alphagov.delete_cookie(COOKIE_NAME); | ||
}; | ||
|
||
var pushCookieEvent = function (event) { | ||
eventQueue.push(event); | ||
Alphagov.write_cookie(COOKIE_NAME, jQuery.base64Encode(JSON.stringify(eventQueue))); | ||
}; | ||
|
||
return { | ||
push:pushCookieEvent, | ||
sendAll:sendCookieEvents | ||
}; | ||
}(); | ||
|
||
GOVUK.Analytics.entryTokens = function () { | ||
|
||
var COOKIE_NAME = "GDS_analyticsTokens"; | ||
|
||
var valueIsInArray = function (value, arr) { | ||
return $.inArray(value, arr) !== -1; | ||
}; | ||
|
||
var uniqueIdentifierOfArtifact = function () { | ||
return GOVUK.Analytics.getSlug(document.URL, GOVUK.Analytics.Trackers[GOVUK.Analytics.Format].slugLocation); | ||
}; | ||
|
||
var assignToken = function () { | ||
var tokens = JSON.parse(Alphagov.read_cookie(COOKIE_NAME)); | ||
if (!tokens) tokens = []; | ||
if (!valueIsInArray(uniqueIdentifierOfArtifact(), tokens)) | ||
{ | ||
tokens.push(uniqueIdentifierOfArtifact()); | ||
Alphagov.write_cookie(COOKIE_NAME, JSON.stringify(tokens)); | ||
} | ||
}; | ||
|
||
var revokeToken = function () { | ||
var tokens = JSON.parse(Alphagov.read_cookie(COOKIE_NAME)); | ||
var positionOfToken = $.inArray(uniqueIdentifierOfArtifact(),tokens); | ||
if (positionOfToken !== -1) { | ||
tokens.splice(positionOfToken,1); | ||
Alphagov.write_cookie(COOKIE_NAME, JSON.stringify(tokens)); | ||
} | ||
}; | ||
|
||
var tokenExists = function () { | ||
var tokens = JSON.parse(Alphagov.read_cookie(COOKIE_NAME)); | ||
return valueIsInArray(uniqueIdentifierOfArtifact(), tokens); | ||
}; | ||
|
||
return { | ||
assignToken:assignToken, | ||
revokeToken:revokeToken, | ||
tokenExists:tokenExists | ||
}; | ||
}(); |
141 changes: 141 additions & 0 deletions
141
bold-testing/static.dev.gov.uk/static/analytics/tracking-strategies.js
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
var GOVUK = GOVUK || {}; | ||
GOVUK.Analytics = GOVUK.Analytics || {}; | ||
GOVUK.Analytics.Trackers = {}; | ||
|
||
/* | ||
* Available methods on control: | ||
* - trackTimeBasedSuccess(millisecondsUntilSuccess) | ||
* - trackLinks(linkSelector) | ||
* - trackSuccess(isNonInteraction) (see: https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide#non-interaction) | ||
* | ||
* Additional methods: | ||
* Trackers can optionally add functions to override control over whether we fire | ||
* entry or success events. | ||
* | ||
* - shouldTrackEntry() bool | ||
* - shouldTrackSuccess() bool | ||
*/ | ||
|
||
GOVUK.Analytics.trackingPrefixes = { | ||
MAINSTREAM: 'MS_', | ||
INSIDE_GOV: 'IG_' | ||
}; | ||
|
||
GOVUK.Analytics.Tracker = function (prefix, slugLocation, trackingSpecification) { | ||
var tracker = trackingSpecification; | ||
tracker.prefix = prefix; | ||
tracker.slugLocation = slugLocation; | ||
return tracker; | ||
}; | ||
|
||
/* Guide */ | ||
GOVUK.Analytics.Trackers.guide = new GOVUK.Analytics.Tracker( | ||
GOVUK.Analytics.trackingPrefixes.MAINSTREAM, | ||
0, | ||
function (trackingApi) { | ||
trackingApi.trackTimeBasedSuccess(7000); | ||
trackingApi.trackInternalLinks($("#content a")); | ||
}); | ||
|
||
/* Transaction (services) */ | ||
GOVUK.Analytics.Trackers.transaction = new GOVUK.Analytics.Tracker( | ||
GOVUK.Analytics.trackingPrefixes.MAINSTREAM, | ||
0, | ||
function (trackingApi) { | ||
trackingApi.trackInternalLinks($("#content a")); | ||
trackingApi.trackLinks($("#get-started a")); | ||
}); | ||
|
||
/* Benefit */ | ||
GOVUK.Analytics.Trackers.programme = new GOVUK.Analytics.Tracker( | ||
GOVUK.Analytics.trackingPrefixes.MAINSTREAM, | ||
0, | ||
function (trackingApi) { | ||
trackingApi.trackTimeBasedSuccess(7000); | ||
trackingApi.trackInternalLinks($("#content a")); | ||
}); | ||
|
||
/* Quick answer */ | ||
GOVUK.Analytics.Trackers.answer = new GOVUK.Analytics.Tracker( | ||
GOVUK.Analytics.trackingPrefixes.MAINSTREAM, | ||
0, | ||
function (trackingApi) { | ||
trackingApi.trackTimeBasedSuccess(7000); | ||
trackingApi.trackInternalLinks($("#content a")); | ||
}); | ||
|
||
/* Smart Answer */ | ||
/** | ||
* The Entry event should only be fired on the first page of the smart answer (the one with the get started button). | ||
* The Success event should only be fired if the user is coming from the first page and the 'smartanswerOutcome' custom | ||
* event has been fired. | ||
* | ||
*/ | ||
GOVUK.Analytics.Trackers.smart_answer = new GOVUK.Analytics.Tracker( | ||
GOVUK.Analytics.trackingPrefixes.MAINSTREAM, | ||
0, | ||
function (trackingApi) { | ||
if (GOVUK.Analytics.Trackers.smart_answer.isAjaxNavigation()) { | ||
// For AJAX navigation we expect an event on success | ||
$(document).bind("smartanswerOutcome", trackingApi.trackSuccessFunc(false)); | ||
} else { | ||
// For multi-page navigation, we need to check if this page has an outcome | ||
$(function () { | ||
if ($("article.outcome").length === 1) { | ||
trackingApi.trackSuccess(true); | ||
} | ||
}); | ||
} | ||
}); | ||
|
||
var browserSupportsHtml5HistoryApi = browserSupportsHtml5HistoryApi || function () { | ||
return !!(history && history.replaceState && history.pushState); | ||
}; | ||
|
||
GOVUK.Analytics.Trackers.smart_answer.isAjaxNavigation = browserSupportsHtml5HistoryApi; | ||
|
||
GOVUK.Analytics.Trackers.smart_answer.shouldTrackEntry = function () { | ||
return GOVUK.Analytics.isRootOfArtefact(document.URL, GOVUK.Analytics.Trackers.smart_answer.slugLocation); | ||
}; | ||
|
||
GOVUK.Analytics.Trackers.smart_answer.shouldTrackSuccess = function () { | ||
if (GOVUK.Analytics.Trackers.smart_answer.isAjaxNavigation()) { | ||
// For AJAX navigation we should track success on the smart answers flow page (non-root page) | ||
return GOVUK.Analytics.entryTokens.tokenExists() && !GOVUK.Analytics.isRootOfArtefact(document.URL, GOVUK.Analytics.Trackers.smart_answer.slugLocation); | ||
} else { | ||
// For multi-page navigation, we should track success if entry event has been fired (token exists) | ||
return GOVUK.Analytics.entryTokens.tokenExists() && $("article.outcome").length === 1; | ||
} | ||
}; | ||
|
||
|
||
GOVUK.Analytics.Trackers.policy = | ||
new GOVUK.Analytics.Tracker( | ||
GOVUK.Analytics.trackingPrefixes.INSIDE_GOV, | ||
2, | ||
function (trackingApi) { | ||
trackingApi.trackTimeBasedSuccess(30000); | ||
|
||
trackingApi.trackInternalLinks($("#page a").filter(function () { | ||
return !GOVUK.Analytics.isLinkToFragmentInCurrentDocument(this); | ||
})); | ||
|
||
} | ||
); | ||
|
||
GOVUK.Analytics.Trackers.detailed_guidance = | ||
new GOVUK.Analytics.Tracker( | ||
GOVUK.Analytics.trackingPrefixes.INSIDE_GOV, | ||
0, | ||
function (trackingApi) { | ||
trackingApi.trackTimeBasedSuccess(30000); | ||
trackingApi.trackInternalLinks($("#page a")); | ||
}); | ||
|
||
GOVUK.Analytics.Trackers.news = new GOVUK.Analytics.Tracker( | ||
GOVUK.Analytics.trackingPrefixes.INSIDE_GOV, | ||
2, | ||
function (trackingApi) { | ||
trackingApi.trackInternalLinks($("#page a")); | ||
trackingApi.trackTimeBasedSuccess(30000); | ||
}); |
148 changes: 148 additions & 0 deletions
148
bold-testing/static.dev.gov.uk/static/analytics/tracking.js
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,148 @@ | ||
var GOVUK = GOVUK || {}; | ||
GOVUK.Analytics = GOVUK.Analytics || {}; | ||
var _gaq = _gaq || []; | ||
|
||
GOVUK.sendToAnalytics = function (analyticsData) { | ||
_gaq.push(analyticsData); | ||
}; | ||
|
||
GOVUK.Analytics.isTheSameArtefact = function(currentUrl, previousUrl, slugLocation) { | ||
var rootOfArtefact = function(url) { | ||
return url.split("/").slice(0, 4 + slugLocation).join("/"); | ||
}; | ||
|
||
var currentSlug = rootOfArtefact(currentUrl).replace(/#.*$/, ''); | ||
var previousSlug = rootOfArtefact(previousUrl).replace(/#.*$/, ''); | ||
return currentSlug === previousSlug; | ||
}; | ||
|
||
GOVUK.Analytics.getSlug = function(url, slugLocation) { | ||
return url.split('/')[3 + slugLocation].split("#")[0].split("?")[0]; | ||
}; | ||
|
||
GOVUK.Analytics.isRootOfArtefact = function(url, slugLocation) { | ||
return url.replace(/\/$/, "").split("/").slice(3 + slugLocation).length === 1; | ||
}; | ||
|
||
GOVUK.Analytics.isLinkToFragmentInCurrentDocument = function(anchorElement) { | ||
var linksToCurrentDocument = anchorElement.href.split("#")[0] === document.URL.split("#")[0]; | ||
var hasFragment = anchorElement.hash !== ""; | ||
return linksToCurrentDocument && hasFragment; | ||
} | ||
|
||
GOVUK.Analytics.startAnalytics = function () { | ||
var ENTER_KEYCODE = 13; | ||
var success = false; | ||
var prefix = 'none'; | ||
var format = GOVUK.Analytics.Format, | ||
trackingStrategy = GOVUK.Analytics.Trackers[format]; | ||
|
||
/** | ||
* Decide whether we should track an event based on a condition function. | ||
* If the condition function isn't defined then the default condition is used. | ||
* | ||
* @param condition, an optional function that returns a boolean | ||
* @return bool | ||
*/ | ||
var shouldTrackEvent = function(condition, defaultValue) { | ||
if (typeof condition === "function") { | ||
return condition(); | ||
} else { | ||
return defaultValue; | ||
} | ||
}; | ||
|
||
var createEvent = function(type, isNonInteraction) { | ||
var slug = GOVUK.Analytics.getSlug(document.URL, trackingStrategy.slugLocation); | ||
return ['_trackEvent', prefix + GOVUK.Analytics.Format, slug, type, 0, isNonInteraction]; | ||
}; | ||
|
||
var handleExternalLink = function() { | ||
if (success) return; | ||
success = true; | ||
var slug = encodeURIComponent(GOVUK.Analytics.getSlug(document.URL, trackingStrategy.slugLocation)), | ||
exitLink = '/exit?slug=' + slug + '&format=' + GOVUK.Analytics.Format; | ||
|
||
$(this).prop('href', exitLink); | ||
}; | ||
|
||
var handleInternalLink = function () { | ||
if (success) return; | ||
success = true; | ||
var event = createEvent("Success", false); | ||
if (GOVUK.Analytics.isLinkToFragmentInCurrentDocument(this)) { | ||
GOVUK.sendToAnalytics(event); | ||
} else { | ||
GOVUK.Analytics.internalSiteEvents.push(event); | ||
} | ||
}; | ||
|
||
var trackLinks = function(selection, trackExternal) { | ||
// TODO: refactor this to use jQuery("#content").on("click", "a", fireFunction) | ||
selection.each(function () { | ||
var linkToTrack = $(this), | ||
trackingFunction; | ||
|
||
if (this.hostname === window.location.hostname) { | ||
trackingFunction = handleInternalLink; | ||
} else if (trackExternal) { | ||
trackingFunction = handleExternalLink; | ||
} | ||
if (trackingFunction) { | ||
linkToTrack.click(trackingFunction); | ||
linkToTrack.keydown(function(e) { | ||
if (e.which === ENTER_KEYCODE) { | ||
trackingFunction.call(this, e); | ||
} | ||
}); | ||
} | ||
}); | ||
}; | ||
|
||
var trackingApi = { | ||
trackSuccessFunc: function(isNonInteraction) { | ||
if (isNonInteraction === undefined) { | ||
isNonInteraction = false; | ||
} | ||
return function() { | ||
trackingApi.trackSuccess(isNonInteraction); | ||
}; | ||
}, | ||
trackSuccess: function (isNonInteraction) { | ||
if (isNonInteraction === undefined) { | ||
isNonInteraction = false; | ||
} | ||
if (success) return; | ||
success = true; | ||
GOVUK.sendToAnalytics(createEvent("Success", isNonInteraction)); | ||
}, | ||
trackInternalLinks: function(selection) { | ||
trackLinks(selection, false); | ||
}, | ||
trackLinks:function (selection) { | ||
trackLinks(selection, true); | ||
}, | ||
trackTimeBasedSuccess:function (time) { | ||
setTimeout(trackingApi.trackSuccessFunc(true), time); | ||
} | ||
}; | ||
|
||
if (GOVUK.Analytics.Trackers[format] !== undefined) prefix = GOVUK.Analytics.Trackers[format].prefix; | ||
if (typeof trackingStrategy === "function") { | ||
var isTheSameArtefact = GOVUK.Analytics.isTheSameArtefact(document.URL, document.referrer, trackingStrategy.slugLocation); | ||
if (shouldTrackEvent(trackingStrategy.shouldTrackEntry, !isTheSameArtefact)) { | ||
GOVUK.sendToAnalytics(createEvent("Entry", true)); | ||
GOVUK.Analytics.entryTokens.assignToken(); | ||
} | ||
if (shouldTrackEvent(trackingStrategy.shouldTrackSuccess, !isTheSameArtefact)) { | ||
trackingStrategy(trackingApi); | ||
GOVUK.Analytics.entryTokens.revokeToken(); | ||
} | ||
} | ||
|
||
GOVUK.Analytics.internalSiteEvents.sendAll(); | ||
|
||
return trackingApi; | ||
}; | ||
|
||
$(GOVUK.Analytics.startAnalytics); |
Oops, something went wrong.