/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.analytics.Urchin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.analytics.Urchin"] = true;
dojo.provide("dojox.analytics.Urchin");
/*=====
dojo.mixin(djConfig,{
// 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: ""
});
=====*/
dojo.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;
dojo.mixin(this, args);
this.acct = this.acct || dojo.config.urchin;
var re = /loaded|complete/,
gaHost = ("https:" == dojo.doc.location.protocol) ? "https://ssl." : "http://www.",
h = dojo.doc.getElementsByTagName("head")[0],
n = dojo.create('script', {
src: gaHost + "google-analytics.com/ga.js"
}, h);
n.onload = n.onreadystatechange = dojo.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, arguments);
}
});
}