cacert-testmgr/external/ZendFramework-1.9.5/externals/dojo/dojox/analytics/Urchin.js
Markus Warg 8398c9048d initially import ZendFramework-1.9.5 into repository
code was modified slightly, so the code differs from the original downloadable 1.9.5 version
2010-03-31 10:12:32 +02:00

148 lines
5.2 KiB
JavaScript

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: dojo.config.urchin,
// loadInterval: Integer
// Time (in ms) to wait before checking for a ready Analytics API
loadInterval: 42,
// decay: Float
// Multipler for the interval loadInterval to ensure timer does not
// run amok in the event our _gat object is never defined. This
// is multiplied against the last `loadInterval` and added, causing
// the interval to continuosly become longer, until a `timeout`
// limit is reached.
decay: 0.5,
// timeout: Integer
// Time (in ms) for the load interval to reach before giving up
// all together. Note: this isn't an overall time, this is the
// time of the interval being adjusted by the `decay` property.
timeout: 4200,
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._loadGA();
},
_loadGA: function(){
// summary: load the ga.js file and begin initialization process
var gaHost = ("https:" == document.location.protocol) ? "https://ssl." : "http://www.";
dojo.create('script', {
src: gaHost + "google-analytics.com/ga.js"
}, dojo.doc.getElementsByTagName("head")[0]);
setTimeout(dojo.hitch(this, "_checkGA"), this.loadInterval);
},
_checkGA: function(){
// summary: sniff the global _gat variable Google defines and either check again
// or fire onLoad if ready.
if(this.loadInterval > this.timeout){ return; }
setTimeout(dojo.hitch(this, !window["_gat"] ? "_checkGA" : "_gotGA"), this.loadInterval);
this.loadInterval *= (this.decay + 1);
},
_gotGA: function(){
// summary: initialize the tracker
this.tracker = _gat._getTracker(this.acct);
this.tracker._initData();
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);
}
});