Repository: incubator-unomi Updated Branches: refs/heads/master 45b04c2f0 -> ac325f945
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/ac325f94/extensions/web-tracker/javascript/package.json ---------------------------------------------------------------------- diff --git a/extensions/web-tracker/javascript/package.json b/extensions/web-tracker/javascript/package.json index 39698b9..50149ef 100644 --- a/extensions/web-tracker/javascript/package.json +++ b/extensions/web-tracker/javascript/package.json @@ -21,7 +21,8 @@ }, "dependencies": { "@segment/analytics.js-core": "^3.7.2", - "@segment/analytics.js-integration": "^2.1.1" + "@segment/analytics.js-integration": "^2.1.1", + "extend": "^3.0.2" }, "devDependencies": { "@segment/eslint-config": "^3.1.1", http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/ac325f94/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 2553dfa..a619263 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 @@ -17,6 +17,7 @@ 'use strict'; var integration = require('@segment/analytics.js-integration'); +var extend = require('extend'); var Unomi = module.exports = integration('Apache Unomi') .assumesPageview() @@ -111,7 +112,7 @@ Unomi.prototype.fillPageData = function(unomiPage, props) { unomiPage.attributes = []; unomiPage.consentTypes = []; unomiPage.interests = props.interests || {}; - unomiPage.pageInfo = unomiPage.pageInfo || props.pageInfo || {}; + unomiPage.pageInfo = extend({}, unomiPage.pageInfo, props.pageInfo); unomiPage.pageInfo.pageName = unomiPage.pageInfo.pageName || props.title; unomiPage.pageInfo.pageID = unomiPage.pageInfo.pageID || props.path; unomiPage.pageInfo.pagePath = unomiPage.pageInfo.pagePath || props.path; @@ -592,6 +593,8 @@ Unomi.prototype.extractFormData = function (form) { } } break; + default: + console.log("unomiTracker: " + e.nodeName + " form element type not implemented and will not be tracked."); } } } http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/ac325f94/extensions/web-tracker/javascript/yarn.lock ---------------------------------------------------------------------- diff --git a/extensions/web-tracker/javascript/yarn.lock b/extensions/web-tracker/javascript/yarn.lock index 9054ee1..d0362d3 100644 --- a/extensions/web-tracker/javascript/yarn.lock +++ b/extensions/web-tracker/javascript/yarn.lock @@ -1055,6 +1055,10 @@ extend@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/ac325f94/extensions/web-tracker/wab/src/main/webapp/index.html ---------------------------------------------------------------------- diff --git a/extensions/web-tracker/wab/src/main/webapp/index.html b/extensions/web-tracker/wab/src/main/webapp/index.html index 85437c7..9809a34 100644 --- a/extensions/web-tracker/wab/src/main/webapp/index.html +++ b/extensions/web-tracker/wab/src/main/webapp/index.html @@ -14,10 +14,8 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<!doctype html> +<html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Apache Unomi Web Tracker Test Page</title> @@ -43,62 +41,95 @@ </style> <script type="text/javascript"> + var path = location.pathname + location.hash; var unomiOption = { scope: 'realEstateManager', - url: 'http://localhost:8181' - }; - window.unomiTracker || (window.unomiTracker = {}), function () { - function e(e) { - for (unomiTracker.initialize({"Apache Unomi": unomiOption}); n.length > 0;) { - var r = n.shift(), t = r.shift(); - unomiTracker[t] && unomiTracker[t].apply(unomiTracker, r) + url: '', // we use an empty URL to make it relative to this page. + initialPageProperties: { + path: path, + pageInfo: { + destinationURL: location.href, + tags: ["tag1", "tag2", "tag3"], + categories: ["category1", "category2", "category3"] /*, + language: "en" */ + }, + interests: { + "interest1": 1, + "interest2": 2, + "interest3": 3 } } + }; + window.unomiTracker || (window.unomiTracker = {}); + (function () { + var unomiTracker_queue = []; + + var methods = ['trackSubmit', 'trackClick', 'trackLink', 'trackForm', 'initialize', 'pageview', 'identify', 'reset', 'group', 'track', 'ready', 'alias', 'debug', 'page', 'once', 'off', 'on', 'personalize']; + + var factory = function (method) { + return function () { + var args = Array.prototype.slice.call(arguments); + args.unshift(method); + unomiTracker_queue.push(args); + return window.unomiTracker; + }; + }; + + // For each of our methods, generate a queueing stub. + for (var i = 0; i < methods.length; i++) { + var method = methods[i]; + window.unomiTracker[method] = factory(method); + } - for (var n = [], r = ["trackSubmit", "trackClick", "trackLink", "trackForm", "initialize", "pageview", "identify", "reset", "group", "track", "ready", "alias", "debug", "page", "once", "off", "on", "personalize"], t = 0; t < r.length; t++) { - var i = r[t]; - window.unomiTracker[i] = function (e) { - return function () { - var r = Array.prototype.slice.call(arguments); - return r.unshift(e), n.push(r), window.unomiTracker + function callback(e) { + unomiTracker.initialize({ + 'Apache Unomi': unomiOption + }); + + // Loop through the interim analytics queue and reapply the calls to their + // proper analytics.js method. + while (unomiTracker_queue.length > 0) { + var item = unomiTracker_queue.shift(); + var method = item.shift(); + if (unomiTracker[method]) { + unomiTracker[method].apply(unomiTracker, item); } - }(i) + } } + + // Define a method to load Analytics.js from our CDN, + // and that will be sure to only ever load it once. unomiTracker.load = function () { - var n = document.createElement("script"); - n.type = "text/javascript", n.async = !0, n.src = unomiOption.url + "/tracker/unomi-tracker.js", n.addEventListener ? n.addEventListener("load", function (n) { - "function" == typeof e && e(n) - }, !1) : n.onreadystatechange = function () { - "complete" !== this.readyState && "loaded" !== this.readyState || e(window.event) - }; - var r = document.getElementsByTagName("script")[0]; - r.parentNode.insertBefore(n, r) - }, document.addEventListener("DOMContentLoaded", unomiTracker.load), unomiTracker.page() - }(); - </script> + // Create an async script element based on your key. + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.async = true; + // TODO we might want to add a check on the url to see if it ends with / or not + script.src = unomiOption.url + '/tracker/unomi-tracker.js'; + + if (script.addEventListener) { + script.addEventListener('load', function (e) { + if (typeof callback === 'function') { + callback(e); + } + }, false); + } else { + script.onreadystatechange = function () { + if (this.readyState === 'complete' || this.readyState === 'loaded') { + callback(window.event); + } + }; + } - <script type="text/javascript"> - // This is an example of how to provide more details page properties to the view event. This can be useful - // in the case of an SPA that wants to provide information about a view that has metadata such as categories, - // tags or interests. - path = location.pathname + location.hash; - properties = { - path: path, - pageInfo: { - destinationURL: location.href, - tags: ["tag1", "tag2", "tag3"], - categories: ["category1", "category2", "category3"], - language: "en" - }, - interests: { - "interest1": 1, - "interest2": 2, - "interest3": 3 - } - }; - console.log(properties); - // this will trigger a second page view for the same page (the first page view is in the tracker snippet). - window.unomiTracker.page(properties); + // Insert our script next to the first script element. + var first = document.getElementsByTagName('script')[0]; + first.parentNode.insertBefore(script, first); + }; + + document.addEventListener('DOMContentLoaded', unomiTracker.load); + + unomiTracker.page(unomiOption.initialPageProperties); + })(); </script> </head> <body> @@ -161,5 +192,11 @@ }); </script> +<p> + You can find more information about how this tracker works and how to integrate it into your pages in the + <a href="http://unomi.apache.org/manual/latest/index.html#_web_tracker" target="_blank">Apache Unomi manual tracker + documentation</a> +</p> + </body> </html> http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/ac325f94/wab/src/main/webapp/index.html ---------------------------------------------------------------------- diff --git a/wab/src/main/webapp/index.html b/wab/src/main/webapp/index.html index 9651690..dec81a4 100644 --- a/wab/src/main/webapp/index.html +++ b/wab/src/main/webapp/index.html @@ -64,6 +64,9 @@ <div class="container" id="where-to-go"> <h2>Where to go from here</h2> <ul> + <li> + Try Apache Unomi's <a href="/tracker/">integrated tracker</a> + </li> <li>Checkout some cool <a href="http://unomi.apache.org/resources.html" target="_blank">videos & tutorials</a> </li> <li>Read <a href="http://unomi.apache.org/manual/latest/index.html" target="_blank">Apache Unomi's manual</a>