You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by dg...@apache.org on 2018/10/30 16:47:53 UTC

[2/4] incubator-unomi git commit: UNOMI-187 fix referrer

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