http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/19532afd/extensions/web-tracker/javascript/package.json ---------------------------------------------------------------------- diff --git a/extensions/web-tracker/javascript/package.json b/extensions/web-tracker/javascript/package.json index 342de5b..10bcf38 100644 --- a/extensions/web-tracker/javascript/package.json +++ b/extensions/web-tracker/javascript/package.json @@ -1,6 +1,6 @@ { "name": "unomi-analytics", - "version": "1.0.3", + "version": "1.0.4", "description": "The Apache Unomi analytics.js integration.", "main": "dist/unomi-tracker.js", "keywords": [
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/19532afd/extensions/web-tracker/javascript/src/analytics.js-integration-apache-unomi.js ---------------------------------------------------------------------- diff --git a/extensions/web-tracker/javascript/src/analytics.js-integration-apache-unomi.js b/extensions/web-tracker/javascript/src/analytics.js-integration-apache-unomi.js index 7de7475..2f90277 100644 --- a/extensions/web-tracker/javascript/src/analytics.js-integration-apache-unomi.js +++ b/extensions/web-tracker/javascript/src/analytics.js-integration-apache-unomi.js @@ -115,7 +115,49 @@ Unomi.prototype.fillPageData = function(unomiPage, props) { unomiPage.pageInfo.pagePath = unomiPage.pageInfo.pagePath || props.path; unomiPage.pageInfo.destinationURL = unomiPage.pageInfo.destinationURL || props.url; unomiPage.pageInfo.referringURL = unomiPage.pageInfo.referringURL || props.referrer; -} + this.processReferrer(); +}; + +Unomi.prototype.processReferrer = function() { + var referrerURL = document.referrer; + if (referrerURL) { + // parse referrer URL + var referrer = document.createElement('a'); + referrer.href = referrerURL; + + // only process referrer if it's not coming from the same site as the current page + var local = document.createElement('a'); + local.href = document.URL; + if (referrer.host !== local.host) { + // get search element if it exists and extract search query if available + var search = referrer.search; + var query = undefined; + if (search && search != '') { + // parse parameters + var queryParams = [], param; + var queryParamPairs = search.slice(1).split('&'); + for (var i = 0; i < queryParamPairs.length; i++) { + param = queryParamPairs[i].split('='); + queryParams.push(param[0]); + queryParams[param[0]] = param[1]; + } + + // try to extract query: q is Google-like (most search engines), p is Yahoo + query = queryParams.q || queryParams.p; + query = decodeURIComponent(query).replace(/\+/g, ' '); + } + + // add data to digitalData + if (window.digitalData && window.digitalData.page && window.digitalData.page.pageInfo) { + window.digitalData.page.pageInfo.referrerHost = referrer.host; + window.digitalData.page.pageInfo.referrerQuery = query; + } + + // register referrer event + this.registerEvent(this.buildEvent('viewFromReferrer', this.buildTargetPage())); + } + } +}; /** @@ -221,7 +263,7 @@ Unomi.prototype.onpersonalize = function (msg) { }; window.digitalData.personalizationCallback = window.digitalData.personalizationCallback || []; window.digitalData.personalizationCallback.push({personalization: msg.personalization, callback: msg.callback}); -}, +}; /** * This function return the basic structure for an event, it must be adapted to your need