define("dojox/analytics/Urchin", ["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: // |
// | // or code: // | new dojox.analytics.Urchin(); // // example: // | // create and define all analytics with one tag. // | // 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); } }); });