From d4ce942373bd51ac5f73b9167f0fbfecd5de1b01 Mon Sep 17 00:00:00 2001 From: Pat Kujawa Date: Mon, 13 Oct 2014 12:48:24 -0600 Subject: [PATCH 1/4] Add universal google analytics. Modify typedef for 'ga' variable. --- google.analytics/ga-tests.ts | 32 +++++++++++--------------------- google.analytics/ga.d.ts | 17 ++++++++++++----- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/google.analytics/ga-tests.ts b/google.analytics/ga-tests.ts index 03d5c2ed5..23edc0fe8 100644 --- a/google.analytics/ga-tests.ts +++ b/google.analytics/ga-tests.ts @@ -1,25 +1,15 @@ /// /// -describe("tester Google Analytics Tracker _gat object", () => { - - it("can set ga script element", () => { - ga = document.createElement("script"); +describe('UniversalGoogleAnalytics', () => { + it('should be a function', () => { + ga('create', 'UA-65432-1'); + ga('send', 'pageview'); }); - - it("can set aync to true", () => { - ga.async = true; + it('should have methods', () => { + ga.getAll(); + ga.getByName('aNamedTracker'); }); - - it("can set src to string url", () => { - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';; - }); - - it("can set type", () => { - ga.type = 'text/javascript'; - }); - - }); describe("tester Google Analytics Tracker _gat object", () => { @@ -27,7 +17,7 @@ describe("tester Google Analytics Tracker _gat object", () => { _gat._createTracker('UA-65432-1'); _gat._createTracker('UA-65432-2', 't2'); }); - + it("can create _getTrackerByName", () => { _gat._getTrackerByName(); _gat._getTrackerByName('t2'); @@ -36,7 +26,7 @@ describe("tester Google Analytics Tracker _gat object", () => { it("can create _anonymizeIp", () => { _gat._anonymizeIp(); }); - + }); describe("tester Google Analytics Code _gaq object", () => { @@ -50,12 +40,12 @@ describe("tester Google Analytics Code _gaq object", () => { tracker._trackPageview(); } ); - }); + }); }); describe("tester Google Analytics Code Tracker object", () => { - it("can create Tracker object and call methods", () => { + it("can create Tracker object and call methods", () => { var tracker = _gat._getTrackerByName('UA-65432-1'); tracker._trackPageview(); tracker._getName(); diff --git a/google.analytics/ga.d.ts b/google.analytics/ga.d.ts index 032e236ee..f711f894e 100644 --- a/google.analytics/ga.d.ts +++ b/google.analytics/ga.d.ts @@ -30,12 +30,19 @@ interface GoogleAnalyticsTracker { _anonymizeIp(): void; } -interface GoogleAnalytics { - type: string; - src: string; - async: boolean; +interface UniversalGoogleAnalytics { + (command: string, trackingId:string, opt_configObject?: {}): UniversalTracker; + (command: string, ...rest): void; + getAll(): UniversalTracker[]; + getByName(trackerName: string): UniversalTracker; } -declare var ga: GoogleAnalytics; +interface UniversalTracker { + get(...any): any; + send(...any): any; + set(...any): any; +} + +declare var ga: UniversalGoogleAnalytics; declare var _gaq: GoogleAnalyticsCode; declare var _gat: GoogleAnalyticsTracker; From b2eabd187381dd62e2a9f9cf0464af8616902479 Mon Sep 17 00:00:00 2001 From: Pat Kujawa Date: Mon, 13 Oct 2014 14:28:08 -0600 Subject: [PATCH 2/4] Add tests and scope new universal analytics to its own module. Fix errors from npm test and include all top-level APIs. --- google.analytics/ga-tests.ts | 25 ++++++++++++++++++----- google.analytics/ga.d.ts | 39 +++++++++++++++++++++++------------- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/google.analytics/ga-tests.ts b/google.analytics/ga-tests.ts index 23edc0fe8..4b5f200c4 100644 --- a/google.analytics/ga-tests.ts +++ b/google.analytics/ga-tests.ts @@ -1,15 +1,30 @@ /// /// -describe('UniversalGoogleAnalytics', () => { - it('should be a function', () => { - ga('create', 'UA-65432-1'); +describe('UniversalAnalytics', () => { + it('should exercise all ga APIs', () => { + ga('create', 'UA-65432-1', 'auto'); + ga('create', 'UA-65432-1', {some: 'config'}); + ga('create', 'UA-65432-1', 'auto', {some: 'config'}); ga('send', 'pageview'); - }); - it('should have methods', () => { + ga('send', 'pageview', {some: 'details'}); + ga.create('UA-65432-1', 'auto'); + ga.create('UA-65432-1', {some: 'config'}); + ga.create('UA-65432-1', 'auto', {some: 'config'}); ga.getAll(); ga.getByName('aNamedTracker'); }); + it('should excercise Tracker APIs', () => { + var tracker: UniversalAnalytics.Tracker = ga('create', 'UA-65432-1', 'auto'); + var aString: string = tracker.get('aString'); + var aNumber: number = tracker.get('aNumber'); + var anObject: {} = tracker.get<{}>('anObject'); + tracker.send('pageview'); + tracker.send('pageview', {some: 'details'}); + tracker.set('aString', aString); + tracker.set('aNumber', aNumber); + tracker.set('anObject', anObject); + }); }); describe("tester Google Analytics Tracker _gat object", () => { diff --git a/google.analytics/ga.d.ts b/google.analytics/ga.d.ts index f711f894e..e58074bb4 100644 --- a/google.analytics/ga.d.ts +++ b/google.analytics/ga.d.ts @@ -1,6 +1,6 @@ -// Type definitions for Google Analytics +// Type definitions for Google Analytics (Classic and Universal) // Project: https://developers.google.com/analytics/devguides/collection/gajs/ -// Definitions by: Ronnie Haakon Hegelund +// Definitions by: Ronnie Haakon Hegelund , Pat Kujawa // Definitions: https://github.com/borisyankov/DefinitelyTyped declare class Tracker { @@ -30,19 +30,30 @@ interface GoogleAnalyticsTracker { _anonymizeIp(): void; } -interface UniversalGoogleAnalytics { - (command: string, trackingId:string, opt_configObject?: {}): UniversalTracker; - (command: string, ...rest): void; - getAll(): UniversalTracker[]; - getByName(trackerName: string): UniversalTracker; +declare module UniversalAnalytics { + // https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference + + interface ga { + (command: string, trackingId: string, opt_configObject?: {}): UniversalAnalytics.Tracker; + (command: string, trackingId: string, auto: string, opt_configObject?: {}): UniversalAnalytics.Tracker; + (command: string, hitDetails: {}): void; + (command: string, hitType: string, hitDetails?: {}): void; + create(trackingId: string, opt_configObject?: {}): UniversalAnalytics.Tracker; + create(trackingId: string, auto: string, opt_configObject?: {}): UniversalAnalytics.Tracker; + getAll(): UniversalAnalytics.Tracker[]; + getByName(name: string): UniversalAnalytics.Tracker; + } + + interface Tracker { + get(fieldName: string): T; + send(hitType: string, opt_fieldObject?: {}): void; + set(fieldName: string, value: string): void; + set(fieldName: string, value: {}): void; + set(fieldName: string, value: number): void; + set(fieldName: string, value: boolean): void; + } } -interface UniversalTracker { - get(...any): any; - send(...any): any; - set(...any): any; -} - -declare var ga: UniversalGoogleAnalytics; +declare var ga: UniversalAnalytics.ga; declare var _gaq: GoogleAnalyticsCode; declare var _gat: GoogleAnalyticsTracker; From 7cf312b5367aa368d37fcbb6e4ed42a3d85f6e00 Mon Sep 17 00:00:00 2001 From: Pat Kujawa Date: Mon, 13 Oct 2014 14:40:26 -0600 Subject: [PATCH 3/4] Restore old ga code and tests. Fix overload definition. --- google.analytics/ga-tests.ts | 18 +++++++++++++++--- google.analytics/ga.d.ts | 10 ++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/google.analytics/ga-tests.ts b/google.analytics/ga-tests.ts index 4b5f200c4..ba4f80dea 100644 --- a/google.analytics/ga-tests.ts +++ b/google.analytics/ga-tests.ts @@ -1,6 +1,21 @@ /// /// +describe("tester Google Analytics Tracker _gat object", () => { + it("can set ga script element", () => { + gaClassic = document.createElement("script"); + }); + it("can set aync to true", () => { + gaClassic.async = true; + }); + it("can set src to string url", () => { + gaClassic.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + }); + it("can set type", () => { + gaClassic.type = 'text/javascript'; + }); +}); + describe('UniversalAnalytics', () => { it('should exercise all ga APIs', () => { ga('create', 'UA-65432-1', 'auto'); @@ -76,6 +91,3 @@ describe("tester Google Analytics Code Tracker object", () => { tracker._trackPageLoadTime(); }); }); - - - diff --git a/google.analytics/ga.d.ts b/google.analytics/ga.d.ts index e58074bb4..33074b7fe 100644 --- a/google.analytics/ga.d.ts +++ b/google.analytics/ga.d.ts @@ -30,14 +30,19 @@ interface GoogleAnalyticsTracker { _anonymizeIp(): void; } +interface GoogleAnalytics { + type: string; + src: string; + async: boolean; +} + declare module UniversalAnalytics { // https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference interface ga { - (command: string, trackingId: string, opt_configObject?: {}): UniversalAnalytics.Tracker; + (command: string, poly: string, opt_poly?: {}): UniversalAnalytics.Tracker; (command: string, trackingId: string, auto: string, opt_configObject?: {}): UniversalAnalytics.Tracker; (command: string, hitDetails: {}): void; - (command: string, hitType: string, hitDetails?: {}): void; create(trackingId: string, opt_configObject?: {}): UniversalAnalytics.Tracker; create(trackingId: string, auto: string, opt_configObject?: {}): UniversalAnalytics.Tracker; getAll(): UniversalAnalytics.Tracker[]; @@ -54,6 +59,7 @@ declare module UniversalAnalytics { } } +declare var gaClassic: GoogleAnalytics; declare var ga: UniversalAnalytics.ga; declare var _gaq: GoogleAnalyticsCode; declare var _gat: GoogleAnalyticsTracker; From a8e26993d03f4d75a45cccbe235745e502162b51 Mon Sep 17 00:00:00 2001 From: Pat Kujawa Date: Mon, 13 Oct 2014 14:51:24 -0600 Subject: [PATCH 4/4] Add new GA url to Project line. --- google.analytics/ga.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google.analytics/ga.d.ts b/google.analytics/ga.d.ts index 33074b7fe..96ba12bf9 100644 --- a/google.analytics/ga.d.ts +++ b/google.analytics/ga.d.ts @@ -1,5 +1,5 @@ // Type definitions for Google Analytics (Classic and Universal) -// Project: https://developers.google.com/analytics/devguides/collection/gajs/ +// Project: https://developers.google.com/analytics/devguides/collection/gajs/, https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference // Definitions by: Ronnie Haakon Hegelund , Pat Kujawa // Definitions: https://github.com/borisyankov/DefinitelyTyped