annotate sites/all/modules/google_analytics/googleanalytics.js @ 11:b0ee71395280

deleted .DS_Store files
author danieleb <danielebarchiesi@me.com>
date Mon, 28 Oct 2013 16:12:13 +0000
parents b74b41bb73f0
children 134d4b2e75f6
rev   line source
danielebarchiesi@2 1 (function ($) {
danielebarchiesi@2 2
danielebarchiesi@2 3 $(document).ready(function() {
danielebarchiesi@2 4
danielebarchiesi@2 5 // Expression to check for absolute internal links.
danielebarchiesi@2 6 var isInternal = new RegExp("^(https?):\/\/" + window.location.host, "i");
danielebarchiesi@2 7
danielebarchiesi@2 8 // Attach onclick event to document only and catch clicks on all elements.
danielebarchiesi@2 9 $(document.body).click(function(event) {
danielebarchiesi@2 10 // Catch the closest surrounding link of a clicked element.
danielebarchiesi@2 11 $(event.target).closest("a,area").each(function() {
danielebarchiesi@2 12
danielebarchiesi@2 13 var ga = Drupal.settings.googleanalytics;
danielebarchiesi@2 14 // Expression to check for special links like gotwo.module /go/* links.
danielebarchiesi@2 15 var isInternalSpecial = new RegExp("(\/go\/.*)$", "i");
danielebarchiesi@2 16 // Expression to check for download links.
danielebarchiesi@2 17 var isDownload = new RegExp("\\.(" + ga.trackDownloadExtensions + ")$", "i");
danielebarchiesi@2 18
danielebarchiesi@2 19 // Is the clicked URL internal?
danielebarchiesi@2 20 if (isInternal.test(this.href)) {
danielebarchiesi@2 21 // Skip 'click' tracking, if custom tracking events are bound.
danielebarchiesi@2 22 if ($(this).is('.colorbox')) {
danielebarchiesi@2 23 // Do nothing here. The custom event will handle all tracking.
danielebarchiesi@2 24 }
danielebarchiesi@2 25 // Is download tracking activated and the file extension configured for download tracking?
danielebarchiesi@2 26 else if (ga.trackDownload && isDownload.test(this.href)) {
danielebarchiesi@2 27 // Download link clicked.
danielebarchiesi@2 28 var extension = isDownload.exec(this.href);
danielebarchiesi@2 29 _gaq.push(["_trackEvent", "Downloads", extension[1].toUpperCase(), this.href.replace(isInternal, '')]);
danielebarchiesi@2 30 }
danielebarchiesi@2 31 else if (isInternalSpecial.test(this.href)) {
danielebarchiesi@2 32 // Keep the internal URL for Google Analytics website overlay intact.
danielebarchiesi@2 33 _gaq.push(["_trackPageview", this.href.replace(isInternal, '')]);
danielebarchiesi@2 34 }
danielebarchiesi@2 35 }
danielebarchiesi@2 36 else {
danielebarchiesi@2 37 if (ga.trackMailto && $(this).is("a[href^='mailto:'],area[href^='mailto:']")) {
danielebarchiesi@2 38 // Mailto link clicked.
danielebarchiesi@2 39 _gaq.push(["_trackEvent", "Mails", "Click", this.href.substring(7)]);
danielebarchiesi@2 40 }
danielebarchiesi@2 41 else if (ga.trackOutbound && this.href.match(/^\w+:\/\//i)) {
danielebarchiesi@2 42 if (ga.trackDomainMode == 2 && isCrossDomain($(this).attr('hostname'), ga.trackCrossDomains)) {
danielebarchiesi@2 43 // Top-level cross domain clicked. document.location is handled by _link internally.
danielebarchiesi@2 44 event.preventDefault();
danielebarchiesi@2 45 _gaq.push(["_link", this.href]);
danielebarchiesi@2 46 }
danielebarchiesi@2 47 else {
danielebarchiesi@2 48 // External link clicked.
danielebarchiesi@2 49 _gaq.push(["_trackEvent", "Outbound links", "Click", this.href]);
danielebarchiesi@2 50 }
danielebarchiesi@2 51 }
danielebarchiesi@2 52 }
danielebarchiesi@2 53 });
danielebarchiesi@2 54 });
danielebarchiesi@2 55
danielebarchiesi@2 56 // Colorbox: This event triggers when the transition has completed and the
danielebarchiesi@2 57 // newly loaded content has been revealed.
danielebarchiesi@2 58 $(document).bind("cbox_complete", function() {
danielebarchiesi@2 59 var href = $.colorbox.element().attr("href");
danielebarchiesi@2 60 if (href) {
danielebarchiesi@2 61 _gaq.push(["_trackPageview", href.replace(isInternal, '')]);
danielebarchiesi@2 62 }
danielebarchiesi@2 63 });
danielebarchiesi@2 64
danielebarchiesi@2 65 });
danielebarchiesi@2 66
danielebarchiesi@2 67 /**
danielebarchiesi@2 68 * Check whether the hostname is part of the cross domains or not.
danielebarchiesi@2 69 *
danielebarchiesi@2 70 * @param string hostname
danielebarchiesi@2 71 * The hostname of the clicked URL.
danielebarchiesi@2 72 * @param array crossDomains
danielebarchiesi@2 73 * All cross domain hostnames as JS array.
danielebarchiesi@2 74 *
danielebarchiesi@2 75 * @return boolean
danielebarchiesi@2 76 */
danielebarchiesi@2 77 function isCrossDomain(hostname, crossDomains) {
danielebarchiesi@2 78 /**
danielebarchiesi@2 79 * jQuery < 1.6.3 bug: $.inArray crushes IE6 and Chrome if second argument is
danielebarchiesi@2 80 * `null` or `undefined`, http://bugs.jquery.com/ticket/10076,
danielebarchiesi@2 81 * https://github.com/jquery/jquery/commit/a839af034db2bd934e4d4fa6758a3fed8de74174
danielebarchiesi@2 82 *
danielebarchiesi@2 83 * @todo: Remove/Refactor in D8
danielebarchiesi@2 84 */
danielebarchiesi@2 85 if (!crossDomains) {
danielebarchiesi@2 86 return false;
danielebarchiesi@2 87 }
danielebarchiesi@2 88 else {
danielebarchiesi@2 89 return $.inArray(hostname, crossDomains) > -1 ? true : false;
danielebarchiesi@2 90 }
danielebarchiesi@2 91 }
danielebarchiesi@2 92
danielebarchiesi@2 93 })(jQuery);