You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.6 KiB
132 lines
4.6 KiB
define(["dojo/_base/lang", "dojo/_base/declare", "dojo/_base/window", |
|
"dojo/_base/config", "dojo/dom-construct" |
|
], function(lang, declare, window, config, construct){ |
|
|
|
/*===== |
|
lang.mixin(config,{ |
|
// urchin: String |
|
// Used by `dojox.analytics.Urchin` as the default UA-123456-7 account |
|
// number used when being created. Alternately, you can pass an acct:"" |
|
// parameter to the constructor a la: new dojox.analytics.Urchin({ acct:"UA-123456-7" }); |
|
urchin: "" |
|
}); |
|
=====*/ |
|
|
|
return declare("dojox.analytics.Urchin", null, { |
|
// summary: |
|
// A Google-analytics helper, for post-onLoad inclusion of the tracker, and |
|
// dynamic tracking during long-lived page cycles. |
|
// description: |
|
// A small class object will allows for lazy-loading the Google Analytics API |
|
// at any point during a page lifecycle. Most commonly, Google-Analytics is loaded |
|
// via a synchronous script tag in the body, which causes `dojo.addOnLoad` to |
|
// stall until the external API has been completely loaded. The Urchin helper |
|
// will load the API on the fly, and provide a convenient API to use, wrapping |
|
// Analytics for Ajaxy or single page applications. |
|
// |
|
// The class can be instantiated two ways: Programatically, by passing an |
|
// `acct:` parameter, or via Markup / dojoType and defining a djConfig |
|
// parameter `urchin:` |
|
// |
|
// IMPORTANT: |
|
// This module will not work simultaneously with the core dojox.analytics |
|
// package. If you need the ability to run Google Analytics AND your own local |
|
// analytics system, you MUST include dojox.analytics._base BEFORE dojox.analytics.Urchin |
|
// example: |
|
// | // create the tracker programatically: |
|
// | var tracker = new dojox.analytics.Urchin({ acct:"UA-123456-7" }); |
|
// |
|
// example: |
|
// | // define the urchin djConfig option: |
|
// | var djConfig = { urchin: "UA-123456-7" }; |
|
// | |
|
// | // and in markup: |
|
// | <div dojoType="dojox.analytics.Urchin"></div> |
|
// | // or code: |
|
// | new dojox.analytics.Urchin(); |
|
// |
|
// example: |
|
// | // create and define all analytics with one tag. |
|
// | <div dojoType="dojox.analytics.Urchin" acct="UA-12345-67"></div> |
|
|
|
// acct: String |
|
// your GA urchin tracker account number. Overrides `djConfig.urchin` |
|
acct: "", |
|
|
|
constructor: function(args){ |
|
// summary: |
|
// Initialize this Urchin instance. Immediately starts the load |
|
// sequence, so defer construction until (ideally) after onLoad and |
|
// potentially widget parsing. |
|
this.tracker = null; |
|
lang.mixin(this, args); |
|
this.acct = this.acct || config.urchin; |
|
|
|
var re = /loaded|complete/, |
|
gaHost = ("https:" == window.doc.location.protocol) ? "https://ssl." : "http://www.", |
|
h = window.doc.getElementsByTagName("head")[0], |
|
n = construct.create('script', { |
|
src: gaHost + "google-analytics.com/ga.js" |
|
}, h); |
|
|
|
n.onload = n.onreadystatechange = lang.hitch(this, function(e){ |
|
if(e && e.type == "load" || re.test(n.readyState)){ |
|
n.onload = n.onreadystatechange = null; |
|
this._gotGA(); |
|
h.removeChild(n); |
|
} |
|
}); |
|
|
|
}, |
|
|
|
_gotGA: function(){ |
|
// summary: |
|
// initialize the tracker |
|
this.tracker = _gat._getTracker(this.acct); |
|
this.GAonLoad.apply(this, arguments); |
|
}, |
|
|
|
GAonLoad: function(){ |
|
// summary: |
|
// Stub function to fire when urchin is complete |
|
// description: |
|
// This function is executed when the tracker variable is |
|
// complete and initialized. The initial trackPageView (with |
|
// no arguments) is called here as well, so remeber to call |
|
// manually if overloading this method. |
|
// |
|
// example: |
|
// Create an Urchin tracker that will track a specific page on init |
|
// after page load (or parsing, if parseOnLoad is true) |
|
// | dojo.addOnLoad(function(){ |
|
// | new dojox.ananlytics.Urchin({ |
|
// | acct:"UA-12345-67", |
|
// | GAonLoad: function(){ |
|
// | this.trackPageView("/custom-page"); |
|
// | } |
|
// | }); |
|
// | }); |
|
|
|
this.trackPageView(); |
|
}, |
|
|
|
trackPageView: function(/* string */url){ |
|
// summary: |
|
// A public API attached to this widget instance, allowing you |
|
// Ajax-like notification of updates. |
|
// url: String |
|
// A location to tell the tracker to track, eg: "/my-ajaxy-endpoint" |
|
// example: |
|
// Track clicks from a container of anchors and populate a `ContentPane` |
|
// | // 'tracker' is our `Urchin` instance, pane is the `ContentPane` ref. |
|
// | dojo.connect(container, "onclick", function(e){ |
|
// | var ref = dojo.attr(e.target, "href"); |
|
// | tracker.trackPageView(ref); |
|
// | pane.attr("href", ref); |
|
// | }); |
|
|
|
this.tracker._trackPageview.apply(this.tracker, arguments); |
|
} |
|
|
|
}); |
|
});
|
|
|