Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 5th, 2012  |  syntax: None  |  size: 2.53 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /*globals pageTracker: true */
  2. (function () {
  3.     "use strict";
  4.  
  5.     var delegate, clickCallback, handleLink, track;
  6.  
  7.     // generic delegate function
  8.     delegate = function (element, tagName, eventName, callback) {
  9.         var eventListener;
  10.  
  11.         tagName = tagName.toLowerCase();
  12.  
  13.         eventListener = function (event) {
  14.             var target = event.target;
  15.  
  16.             while (target !== document.body && target !== element) {
  17.                 if (target.tagName && target.tagName.toLowerCase() === tagName) {
  18.                     callback.call(target, event);
  19.                     break;
  20.                 }
  21.                 target = target.parentNode;
  22.             }
  23.         };
  24.  
  25.         if ("function" === typeof element.addEventListener) {
  26.             element.addEventListener(eventName, eventListener);
  27.         } else if ("function" === typeof element.attachEvent) {
  28.             element.attachEvent("on" + eventName, eventListener);
  29.         }
  30.  
  31.     };
  32.  
  33.     track = function (page) {
  34.         if ("object" === typeof(pageTracker) && "function" === typeof pageTracker._trackPageview) {
  35.             pageTracker._trackPageview(page);
  36.         }
  37.     };
  38.  
  39.     handleLink = function (element) {
  40.         var page;
  41.  
  42.         page = (element.pathname.charAt(0) === "/") ? element.pathname : "/" + element.pathname;
  43.  
  44.         if (element.search && element.pathname.indexOf(element.search) === -1) {
  45.             page += element.search;
  46.         }
  47.  
  48.         if (element.hostname !== location.host) {
  49.             page = "/external/" + element.hostname + page;
  50.         }
  51.  
  52.         track(page);
  53.     };
  54.  
  55.     clickCallback = function (event) {
  56.         var page, path, isDoc;
  57.         if (this.protocol === "mailto:") {
  58.             // handle mailto links
  59.             page = "/mailto/" + this.href.substring(7);
  60.             track(page);
  61.         } else if (this.hostname === location.host) {
  62.             // handle document downloads
  63.             path = this.pathname + this.search;
  64.             isDoc = path.match(/\.(?:doc|eps|jpg|png|svg|xls|ppt|pdf|xls|zip|txt|vsd|vxd|js|css|rar|exe|wma|mov|avi|wmv|mp3|docx|pptx|xlsx)($|\&|\?)/);
  65.             if (isDoc) {
  66.                 handleLink(this);
  67.             }
  68.         } else if (!this.href.match(/^javascript:/)) {
  69.             // handle external links
  70.             handleLink(this);
  71.         }
  72.     };
  73.  
  74.     // use event delegation to track clicks.
  75.     // this makes it possible to track links that are added with AJAX
  76.     // and has a positive effect on performance, as there is only one eventhandler
  77.     delegate(document.body, "a", "click", clickCallback);
  78. }());