angulartics-rails 0.15.19
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/angulartics-rails.gemspec +22 -0
- data/lib/angulartics/rails.rb +8 -0
- data/lib/angulartics/rails/version.rb +5 -0
- data/vendor/assets/javascript/angulartics-adobe.js +46 -0
- data/vendor/assets/javascript/angulartics-chartbeat.js +29 -0
- data/vendor/assets/javascript/angulartics-flurry.js +29 -0
- data/vendor/assets/javascript/angulartics-ga-cordova.js +91 -0
- data/vendor/assets/javascript/angulartics-ga.js +61 -0
- data/vendor/assets/javascript/angulartics-gtm.js +57 -0
- data/vendor/assets/javascript/angulartics-kissmetrics.js +33 -0
- data/vendor/assets/javascript/angulartics-mixpanel.js +47 -0
- data/vendor/assets/javascript/angulartics-piwik.js +50 -0
- data/vendor/assets/javascript/angulartics-scroll.js +47 -0
- data/vendor/assets/javascript/angulartics-segmentio.js +36 -0
- data/vendor/assets/javascript/angulartics-splunk.js +34 -0
- data/vendor/assets/javascript/angulartics-woopra.js +26 -0
- data/vendor/assets/javascript/angulartics.js +213 -0
- metadata +117 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Ben Augarten
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Angulartics::Rails
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'angulartics-rails'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install angulartics-rails
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'angulartics/rails/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "angulartics-rails"
|
8
|
+
spec.version = Angulartics::Rails::VERSION
|
9
|
+
spec.authors = ["Ben Augarten"]
|
10
|
+
spec.email = ["b.augarten@gmail.com"]
|
11
|
+
spec.description = %q{angulartics packaged in gem form}
|
12
|
+
spec.summary = %q{Add analytics to your angularjs application}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.require_paths = ["lib", "vendor"]
|
18
|
+
|
19
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
20
|
+
spec.add_development_dependency "rake"
|
21
|
+
spec.add_dependency "railties", "~> 4.1"
|
22
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2014 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Adobe analytics(Omniture) update contributed by http://github.com/ajayk
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.adobe.analytics
|
13
|
+
* Enables analytics support for Adobe Analytics (http://adobe.com/analytics)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.adobe.analytics', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
|
18
|
+
$analyticsProvider.settings.trackRelativePath = true;
|
19
|
+
|
20
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
21
|
+
if (window.s) s.t([path]);
|
22
|
+
});
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Track Event in Adobe Analytics
|
26
|
+
* @name eventTrack
|
27
|
+
*
|
28
|
+
* @param {string} action Required 'action' (string) associated with the event
|
29
|
+
*
|
30
|
+
*
|
31
|
+
*/
|
32
|
+
$analyticsProvider.registerEventTrack(function (action) {
|
33
|
+
if (window.s) {
|
34
|
+
if(action) {
|
35
|
+
if(action.toUpperCase() === "DOWNLOAD")
|
36
|
+
s.tl(this,'d',action);
|
37
|
+
else if(action.toUpperCase() === "EXIT")
|
38
|
+
s.tl(this,'e',action);
|
39
|
+
}
|
40
|
+
else
|
41
|
+
s.tl(this,'o',action);
|
42
|
+
}
|
43
|
+
});
|
44
|
+
|
45
|
+
}]);
|
46
|
+
})(angular);
|
@@ -0,0 +1,29 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Contributed by http://github.com/chechoacosta
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.chartbeat
|
13
|
+
* Enables analytics support for Chartbeat (http://chartbeat.com)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.chartbeat', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
|
18
|
+
angulartics.waitForVendorApi('pSUPERFLY', 500, function (pSUPERFLY) {
|
19
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
20
|
+
pSUPERFLY.virtualPage(path);
|
21
|
+
});
|
22
|
+
});
|
23
|
+
|
24
|
+
$analyticsProvider.registerEventTrack(function () {
|
25
|
+
console.warn('Chartbeat doesn\'t support event tracking -- silently ignored.');
|
26
|
+
});
|
27
|
+
|
28
|
+
}]);
|
29
|
+
})(angular);
|
@@ -0,0 +1,29 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Contributed by http://github.com/samanbarghi
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
|
8
|
+
(function(angular) {
|
9
|
+
'use strict';
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @ngdoc overview
|
13
|
+
* @name angulartics.flurry
|
14
|
+
* Enables analytics support for flurry (http://flurry.com)
|
15
|
+
*/
|
16
|
+
angular.module('angulartics.flurry', ['angulartics'])
|
17
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
18
|
+
|
19
|
+
|
20
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
21
|
+
//No separate track page functionality
|
22
|
+
});
|
23
|
+
|
24
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
25
|
+
FlurryAgent.logEvent(action, properties);
|
26
|
+
});
|
27
|
+
|
28
|
+
}]);
|
29
|
+
})(angular);
|
@@ -0,0 +1,91 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.google.analytics
|
12
|
+
* Enables analytics support for Google Analytics (http://google.com/analytics)
|
13
|
+
*/
|
14
|
+
angular.module('angulartics.google.analytics.cordova', ['angulartics'])
|
15
|
+
|
16
|
+
.provider('googleAnalyticsCordova', function () {
|
17
|
+
var GoogleAnalyticsCordova = [
|
18
|
+
'$q', '$log', 'ready', 'debug', 'trackingId', 'period',
|
19
|
+
function ($q, $log, ready, debug, trackingId, period) {
|
20
|
+
var deferred = $q.defer();
|
21
|
+
var deviceReady = false;
|
22
|
+
|
23
|
+
window.addEventListener('deviceReady', function () {
|
24
|
+
deviceReady = true;
|
25
|
+
deferred.resolve();
|
26
|
+
});
|
27
|
+
|
28
|
+
setTimeout(function () {
|
29
|
+
if (!deviceReady) {
|
30
|
+
deferred.resolve();
|
31
|
+
}
|
32
|
+
}, 3000);
|
33
|
+
|
34
|
+
function success() {
|
35
|
+
if (debug) {
|
36
|
+
$log.info(arguments);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
function failure(err) {
|
41
|
+
if (debug) {
|
42
|
+
$log.error(err);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
this.init = function () {
|
47
|
+
return deferred.promise.then(function () {
|
48
|
+
var analytics = window.plugins && window.plugins.gaPlugin;
|
49
|
+
if (analytics) {
|
50
|
+
analytics.init(function onInit() {
|
51
|
+
ready(analytics, success, failure);
|
52
|
+
}, failure, trackingId, period || 10);
|
53
|
+
} else if (debug) {
|
54
|
+
$log.error('Google Analytics for Cordova is not available');
|
55
|
+
}
|
56
|
+
});
|
57
|
+
};
|
58
|
+
}];
|
59
|
+
|
60
|
+
return {
|
61
|
+
$get: ['$injector', function ($injector) {
|
62
|
+
return $injector.instantiate(GoogleAnalyticsCordova, {
|
63
|
+
ready: this._ready || angular.noop,
|
64
|
+
debug: this.debug,
|
65
|
+
trackingId: this.trackingId,
|
66
|
+
period: this.period
|
67
|
+
});
|
68
|
+
}],
|
69
|
+
ready: function (fn) {
|
70
|
+
this._ready = fn;
|
71
|
+
}
|
72
|
+
};
|
73
|
+
})
|
74
|
+
|
75
|
+
.config(['$analyticsProvider', 'googleAnalyticsCordovaProvider', function ($analyticsProvider, googleAnalyticsCordovaProvider) {
|
76
|
+
googleAnalyticsCordovaProvider.ready(function (analytics, success, failure) {
|
77
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
78
|
+
analytics.trackPage(success, failure, path);
|
79
|
+
});
|
80
|
+
|
81
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
82
|
+
analytics.trackEvent(success, failure, properties.category, action, properties.label, properties.value);
|
83
|
+
});
|
84
|
+
});
|
85
|
+
}])
|
86
|
+
|
87
|
+
.run(['googleAnalyticsCordova', function (googleAnalyticsCordova) {
|
88
|
+
googleAnalyticsCordova.init();
|
89
|
+
}]);
|
90
|
+
|
91
|
+
})(angular);
|
@@ -0,0 +1,61 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Universal Analytics update contributed by http://github.com/willmcclellan
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.google.analytics
|
13
|
+
* Enables analytics support for Google Analytics (http://google.com/analytics)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.google.analytics', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
|
18
|
+
// GA already supports buffered invocations so we don't need
|
19
|
+
// to wrap these inside angulartics.waitForVendorApi
|
20
|
+
|
21
|
+
$analyticsProvider.settings.trackRelativePath = true;
|
22
|
+
|
23
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
24
|
+
if (window._gaq) _gaq.push(['_trackPageview', path]);
|
25
|
+
if (window.ga) ga('send', 'pageview', path);
|
26
|
+
});
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Track Event in GA
|
30
|
+
* @name eventTrack
|
31
|
+
*
|
32
|
+
* @param {string} action Required 'action' (string) associated with the event
|
33
|
+
* @param {object} properties Comprised of the mandatory field 'category' (string) and optional fields 'label' (string), 'value' (integer) and 'noninteraction' (boolean)
|
34
|
+
*
|
35
|
+
* @link https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide#SettingUpEventTracking
|
36
|
+
*
|
37
|
+
* @link https://developers.google.com/analytics/devguides/collection/analyticsjs/events
|
38
|
+
*/
|
39
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
40
|
+
// GA requires that eventValue be an integer, see:
|
41
|
+
// https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#eventValue
|
42
|
+
// https://github.com/luisfarzati/angulartics/issues/81
|
43
|
+
if(properties.value) {
|
44
|
+
var parsed = parseInt(properties.value, 10);
|
45
|
+
properties.value = isNaN(parsed) ? 0 : parsed;
|
46
|
+
}
|
47
|
+
|
48
|
+
if (window._gaq) {
|
49
|
+
_gaq.push(['_trackEvent', properties.category, action, properties.label, properties.value, properties.noninteraction]);
|
50
|
+
}
|
51
|
+
else if (window.ga) {
|
52
|
+
if (properties.noninteraction) {
|
53
|
+
ga('send', 'event', properties.category, action, properties.label, properties.value, {nonInteraction: 1});
|
54
|
+
} else {
|
55
|
+
ga('send', 'event', properties.category, action, properties.label, properties.value);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
});
|
59
|
+
|
60
|
+
}]);
|
61
|
+
})(angular);
|
@@ -0,0 +1,57 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Google Tag Manager Plugin Contributed by http://github.com/danrowe49
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
|
8
|
+
(function(angular){
|
9
|
+
'use strict';
|
10
|
+
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @ngdoc overview
|
14
|
+
* @name angulartics.google.analytics
|
15
|
+
* Enables analytics support for Google Tag Manager (http://google.com/tagmanager)
|
16
|
+
*/
|
17
|
+
|
18
|
+
angular.module('angulartics.google.tagmanager', ['angulartics'])
|
19
|
+
.config(['$analyticsProvider', function($analyticsProvider){
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Send content views to the dataLayer
|
23
|
+
*
|
24
|
+
* @param {string} path Required 'content name' (string) describes the content loaded
|
25
|
+
*/
|
26
|
+
|
27
|
+
$analyticsProvider.registerPageTrack(function(path){
|
28
|
+
var dataLayer = window.dataLayer = window.dataLayer || [];
|
29
|
+
dataLayer.push({
|
30
|
+
'event': 'content-view',
|
31
|
+
'content-name': path
|
32
|
+
});
|
33
|
+
});
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Send interactions to the dataLayer, i.e. for event tracking in Google Analytics
|
37
|
+
* @name eventTrack
|
38
|
+
*
|
39
|
+
* @param {string} action Required 'action' (string) associated with the event
|
40
|
+
* @param {object} properties Comprised of the mandatory field 'category' (string) and optional fields 'label' (string), 'value' (integer) and 'noninteraction' (boolean)
|
41
|
+
*/
|
42
|
+
|
43
|
+
$analyticsProvider.registerEventTrack(function(action, properties){
|
44
|
+
var dataLayer = window.dataLayer = window.dataLayer || [];
|
45
|
+
dataLayer.push({
|
46
|
+
'event': 'interaction',
|
47
|
+
'target': properties.category,
|
48
|
+
'action': action,
|
49
|
+
'target-properties': properties.label,
|
50
|
+
'value': properties.value,
|
51
|
+
'interaction-type': properties.noninteraction
|
52
|
+
});
|
53
|
+
|
54
|
+
});
|
55
|
+
}]);
|
56
|
+
|
57
|
+
})(angular);
|
@@ -0,0 +1,33 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.kissmetrics
|
12
|
+
* Enables analytics support for KISSmetrics (http://kissmetrics.com)
|
13
|
+
*/
|
14
|
+
angular.module('angulartics.kissmetrics', ['angulartics'])
|
15
|
+
.config(['$analyticsProvider', '$window', function ($analyticsProvider, $window) {
|
16
|
+
|
17
|
+
// KM already supports buffered invocations so we don't need
|
18
|
+
// to wrap these inside angulartics.waitForVendorApi
|
19
|
+
|
20
|
+
// Creates the _kqm array if it doesn't exist already
|
21
|
+
// Useful if you want to load angulartics before kissmetrics
|
22
|
+
$window._kmq = _kmq || [];
|
23
|
+
|
24
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
25
|
+
$window._kmq.push(['record', 'Pageview', { 'Page': path }]);
|
26
|
+
});
|
27
|
+
|
28
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
29
|
+
$window._kmq.push(['record', action, properties]);
|
30
|
+
});
|
31
|
+
|
32
|
+
}]);
|
33
|
+
})(angular);
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Contributed by http://github.com/L42y
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.mixpanel
|
13
|
+
* Enables analytics support for Mixpanel (http://mixpanel.com)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.mixpanel', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
angulartics.waitForVendorApi('mixpanel', 500, '__loaded', function (mixpanel) {
|
18
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
19
|
+
mixpanel.track( "Page Viewed", { "page": path } );
|
20
|
+
});
|
21
|
+
});
|
22
|
+
|
23
|
+
angulartics.waitForVendorApi('mixpanel', 500, '__loaded', function (mixpanel) {
|
24
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
25
|
+
mixpanel.track(action, properties);
|
26
|
+
});
|
27
|
+
});
|
28
|
+
|
29
|
+
angulartics.waitForVendorApi('mixpanel', 500, function (mixpanel) {
|
30
|
+
$analyticsProvider.registerSetUsername(function (userId) {
|
31
|
+
mixpanel.identify(userId);
|
32
|
+
});
|
33
|
+
});
|
34
|
+
|
35
|
+
angulartics.waitForVendorApi('mixpanel', 500, function (mixpanel) {
|
36
|
+
$analyticsProvider.registerSetUserProperties(function (properties) {
|
37
|
+
mixpanel.people.set(properties);
|
38
|
+
});
|
39
|
+
});
|
40
|
+
|
41
|
+
angulartics.waitForVendorApi('mixpanel', 500, function (mixpanel) {
|
42
|
+
$analyticsProvider.registerSetUserPropertiesOnce(function (properties) {
|
43
|
+
mixpanel.people.set_once(properties);
|
44
|
+
});
|
45
|
+
});
|
46
|
+
}]);
|
47
|
+
})(angular);
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* Piwik 2.1.x update contributed by http://github.com/highskillz
|
5
|
+
* License: MIT
|
6
|
+
*/
|
7
|
+
(function(angular) {
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* @ngdoc overview
|
12
|
+
* @name angulartics.piwik
|
13
|
+
* Enables analytics support for Piwik (http://piwik.org/docs/tracking-api/)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.piwik', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider',
|
17
|
+
function($analyticsProvider) {
|
18
|
+
|
19
|
+
// Piwik seems to suppors buffered invocations so we don't need
|
20
|
+
// to wrap these inside angulartics.waitForVendorApi
|
21
|
+
|
22
|
+
$analyticsProvider.settings.trackRelativePath = true;
|
23
|
+
|
24
|
+
$analyticsProvider.registerPageTrack(function(path) {
|
25
|
+
if (window._paq) {
|
26
|
+
_paq.push(['setCustomUrl', path]);
|
27
|
+
_paq.push(['trackPageView']);
|
28
|
+
}
|
29
|
+
});
|
30
|
+
|
31
|
+
$analyticsProvider.registerEventTrack(function(action, properties) {
|
32
|
+
// GA requires that eventValue be an integer, see:
|
33
|
+
// https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#eventValue
|
34
|
+
// https://github.com/luisfarzati/angulartics/issues/81
|
35
|
+
if (properties.value) {
|
36
|
+
var parsed = parseInt(properties.value, 10);
|
37
|
+
properties.value = isNaN(parsed) ? 0 : parsed;
|
38
|
+
}
|
39
|
+
console.warn('Piwik doesn\'t support event tracking -- silently ignored.');
|
40
|
+
console.warn('\t action\t[%s]', action);
|
41
|
+
console.warn('\t category\t[%s]', properties.category);
|
42
|
+
console.warn('\t label\t[%s]', properties.label);
|
43
|
+
console.warn('\t value\t[%s]', properties.value);
|
44
|
+
console.warn('\t noninteraction\t[%s]', properties.noninteraction);
|
45
|
+
console.warn('');
|
46
|
+
});
|
47
|
+
|
48
|
+
}
|
49
|
+
]);
|
50
|
+
})(angular);
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function (angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.scroll
|
12
|
+
* Provides an implementation of jQuery Waypoints (http://imakewebthings.com/jquery-waypoints/)
|
13
|
+
* for use as a valid DOM event in analytics-on.
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.scroll', ['angulartics'])
|
16
|
+
.directive('analyticsOn', ['$analytics', function ($analytics) {
|
17
|
+
function isProperty(name) {
|
18
|
+
return name.substr(0, 8) === 'scrollby';
|
19
|
+
}
|
20
|
+
function cast(value) {
|
21
|
+
if (['', 'true', 'false'].indexOf(value) > -1) {
|
22
|
+
return value.replace('', 'true') === 'true';
|
23
|
+
}
|
24
|
+
return value;
|
25
|
+
}
|
26
|
+
|
27
|
+
return {
|
28
|
+
restrict: 'A',
|
29
|
+
priority: 5,
|
30
|
+
scope: false,
|
31
|
+
link: function ($scope, $element, $attrs) {
|
32
|
+
if ($attrs.analyticsOn !== 'scrollby') return;
|
33
|
+
|
34
|
+
var properties = { continuous: false, triggerOnce: true };
|
35
|
+
angular.forEach($attrs.$attr, function(attr, name) {
|
36
|
+
if (isProperty(attr)) {
|
37
|
+
properties[name.slice(8,9).toLowerCase()+name.slice(9)] = cast($attrs[name]);
|
38
|
+
}
|
39
|
+
});
|
40
|
+
|
41
|
+
$element.waypoint(function () {
|
42
|
+
$element.triggerHandler('scrollby');
|
43
|
+
}, properties);
|
44
|
+
}
|
45
|
+
};
|
46
|
+
}]);
|
47
|
+
})(angular);
|
@@ -0,0 +1,36 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.segment.io
|
12
|
+
* Enables analytics support for Segment.io (http://segment.io)
|
13
|
+
*/
|
14
|
+
angular.module('angulartics.segment.io', ['angulartics'])
|
15
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
16
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
17
|
+
try {
|
18
|
+
analytics.page(path);
|
19
|
+
} catch (e) {
|
20
|
+
if (!(e instanceof ReferenceError)) {
|
21
|
+
throw e;
|
22
|
+
}
|
23
|
+
}
|
24
|
+
});
|
25
|
+
|
26
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
27
|
+
try {
|
28
|
+
analytics.track(action, properties);
|
29
|
+
} catch (e) {
|
30
|
+
if (!(e instanceof ReferenceError)) {
|
31
|
+
throw e;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
});
|
35
|
+
}]);
|
36
|
+
})(angular);
|
@@ -0,0 +1,34 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function (angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.splunk
|
12
|
+
* Enables analytics support for with custom collection backend API
|
13
|
+
* using (sp.js as described in http://blogs.splunk.com/2013/10/17/still-using-3rd-party-web-analytics-providers-build-your-own-using-splunk/)
|
14
|
+
*/
|
15
|
+
angular.module('angulartics.splunk', ['angulartics'])
|
16
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
17
|
+
|
18
|
+
var errorFunction = function(){
|
19
|
+
throw "Define sp ";
|
20
|
+
};
|
21
|
+
|
22
|
+
var _sp = window.sp || { pageview: errorFunction, track :errorFunction};
|
23
|
+
|
24
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
25
|
+
_sp.pageview(path);
|
26
|
+
});
|
27
|
+
|
28
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
29
|
+
_sp.track(action, properties);
|
30
|
+
});
|
31
|
+
|
32
|
+
}]);
|
33
|
+
})(angular);
|
34
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* @ngdoc overview
|
11
|
+
* @name angulartics.woopra
|
12
|
+
* Enables analytics support for Woopra (http://www.woopra.com)
|
13
|
+
*/
|
14
|
+
angular.module('angulartics.woopra', ['angulartics'])
|
15
|
+
.config(['$analyticsProvider', function ($analyticsProvider) {
|
16
|
+
$analyticsProvider.registerPageTrack(function (path) {
|
17
|
+
woopra.track('pv', {
|
18
|
+
url: path
|
19
|
+
});
|
20
|
+
});
|
21
|
+
|
22
|
+
$analyticsProvider.registerEventTrack(function (action, properties) {
|
23
|
+
woopra.track(action, properties);
|
24
|
+
});
|
25
|
+
}]);
|
26
|
+
})(angular);
|
@@ -0,0 +1,213 @@
|
|
1
|
+
/**
|
2
|
+
* @license Angulartics v0.15.19
|
3
|
+
* (c) 2013 Luis Farzati http://luisfarzati.github.io/angulartics
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
(function(angular, analytics) {
|
7
|
+
'use strict';
|
8
|
+
|
9
|
+
var angulartics = window.angulartics || (window.angulartics = {});
|
10
|
+
angulartics.waitForVendorApi = function (objectName, delay, containsField, registerFn) {
|
11
|
+
if (!registerFn) { registerFn = containsField; containsField = undefined; }
|
12
|
+
if (!Object.prototype.hasOwnProperty.call(window, objectName) || (containsField !== undefined && window[objectName][containsField] === undefined)) {
|
13
|
+
setTimeout(function () { angulartics.waitForVendorApi(objectName, delay, containsField, registerFn); }, delay);
|
14
|
+
}
|
15
|
+
else {
|
16
|
+
registerFn(window[objectName]);
|
17
|
+
}
|
18
|
+
};
|
19
|
+
|
20
|
+
/**
|
21
|
+
* @ngdoc overview
|
22
|
+
* @name angulartics
|
23
|
+
*/
|
24
|
+
angular.module('angulartics', [])
|
25
|
+
.provider('$analytics', function () {
|
26
|
+
var settings = {
|
27
|
+
pageTracking: {
|
28
|
+
autoTrackFirstPage: true,
|
29
|
+
autoTrackVirtualPages: true,
|
30
|
+
trackRelativePath: false,
|
31
|
+
autoBasePath: false,
|
32
|
+
basePath: '',
|
33
|
+
bufferFlushDelay: 1000
|
34
|
+
},
|
35
|
+
eventTracking: {
|
36
|
+
bufferFlushDelay: 1000
|
37
|
+
}
|
38
|
+
};
|
39
|
+
|
40
|
+
var cache = {
|
41
|
+
pageviews: [],
|
42
|
+
events: [],
|
43
|
+
setUsername: [],
|
44
|
+
setUserProperties: [],
|
45
|
+
setUserPropertiesOnce: []
|
46
|
+
};
|
47
|
+
|
48
|
+
var bufferedPageTrack = function (path) {
|
49
|
+
cache.pageviews.push(path);
|
50
|
+
};
|
51
|
+
var bufferedEventTrack = function (event, properties) {
|
52
|
+
cache.events.push({name: event, properties: properties});
|
53
|
+
};
|
54
|
+
var bufferedSetUsername = function (name) {
|
55
|
+
cache.setUsername.push(name);
|
56
|
+
};
|
57
|
+
var bufferedSetUserProperties = function (properties) {
|
58
|
+
cache.setUserProperties.push(properties);
|
59
|
+
};
|
60
|
+
var bufferedSetUserPropertiesOnce = function (properties) {
|
61
|
+
cache.setUserPropertiesOnce.push(properties);
|
62
|
+
};
|
63
|
+
|
64
|
+
var api = {
|
65
|
+
settings: settings,
|
66
|
+
pageTrack: bufferedPageTrack,
|
67
|
+
eventTrack: bufferedEventTrack,
|
68
|
+
setUsername: bufferedSetUsername,
|
69
|
+
setUserProperties: bufferedSetUserProperties,
|
70
|
+
setUserPropertiesOnce: bufferedSetUserPropertiesOnce
|
71
|
+
};
|
72
|
+
|
73
|
+
var registerPageTrack = function (fn) {
|
74
|
+
api.pageTrack = fn;
|
75
|
+
angular.forEach(cache.pageviews, function (path, index) {
|
76
|
+
setTimeout(function () { api.pageTrack(path); }, index * settings.pageTracking.bufferFlushDelay);
|
77
|
+
});
|
78
|
+
};
|
79
|
+
var registerEventTrack = function (fn) {
|
80
|
+
api.eventTrack = fn;
|
81
|
+
angular.forEach(cache.events, function (event, index) {
|
82
|
+
setTimeout(function () { api.eventTrack(event.name, event.properties); }, index * settings.eventTracking.bufferFlushDelay);
|
83
|
+
});
|
84
|
+
};
|
85
|
+
var registerSetUsername = function (fn) {
|
86
|
+
api.setUsername = fn;
|
87
|
+
angular.forEach(cache.setUsername, function (name, index) {
|
88
|
+
setTimeout(function () { api.setUsername(name); }, index * settings.pageTracking.bufferFlushDelay);
|
89
|
+
});
|
90
|
+
};
|
91
|
+
var registerSetUserProperties = function (fn) {
|
92
|
+
api.setUserProperties = fn;
|
93
|
+
angular.forEach(cache.setUserProperties, function (properties, index) {
|
94
|
+
setTimeout(function () { api.setUserProperties(properties); }, index * settings.pageTracking.bufferFlushDelay);
|
95
|
+
});
|
96
|
+
};
|
97
|
+
var registerSetUserPropertiesOnce = function (fn) {
|
98
|
+
api.setUserPropertiesOnce = fn;
|
99
|
+
angular.forEach(cache.setUserPropertiesOnce, function (properties, index) {
|
100
|
+
setTimeout(function () { api.setUserPropertiesOnce(properties); }, index * settings.pageTracking.bufferFlushDelay);
|
101
|
+
});
|
102
|
+
};
|
103
|
+
|
104
|
+
return {
|
105
|
+
$get: function() { return api; },
|
106
|
+
settings: settings,
|
107
|
+
virtualPageviews: function (value) { this.settings.pageTracking.autoTrackVirtualPages = value; },
|
108
|
+
firstPageview: function (value) { this.settings.pageTracking.autoTrackFirstPage = value; },
|
109
|
+
withBase: function (value) { this.settings.pageTracking.basePath = (value) ? angular.element('base').attr('href').slice(0, -1) : ''; },
|
110
|
+
withAutoBase: function (value) { this.settings.pageTracking.autoBasePath = value; },
|
111
|
+
registerPageTrack: registerPageTrack,
|
112
|
+
registerEventTrack: registerEventTrack,
|
113
|
+
registerSetUsername: registerSetUsername,
|
114
|
+
registerSetUserProperties: registerSetUserProperties,
|
115
|
+
registerSetUserPropertiesOnce: registerSetUserPropertiesOnce
|
116
|
+
};
|
117
|
+
})
|
118
|
+
|
119
|
+
.run(['$rootScope', '$location', '$window', '$analytics', '$injector', function ($rootScope, $location, $window, $analytics, $injector) {
|
120
|
+
|
121
|
+
|
122
|
+
if ($analytics.settings.pageTracking.autoTrackFirstPage) {
|
123
|
+
/* Only track the 'first page' if there are no routes or states on the page */
|
124
|
+
var noRoutesOrStates = true;
|
125
|
+
if ($injector.has('$route')) {
|
126
|
+
var $route = $injector.get('$route');
|
127
|
+
for (var route in $route.routes) {
|
128
|
+
noRoutesOrStates = false;
|
129
|
+
break;
|
130
|
+
}
|
131
|
+
} else if ($injector.has('$state')) {
|
132
|
+
var $state = $injector.get('$state');
|
133
|
+
for (var state in $state.states) {
|
134
|
+
noRoutesOrStates = false;
|
135
|
+
break;
|
136
|
+
}
|
137
|
+
} else {
|
138
|
+
noRoutesOrStates = false;
|
139
|
+
}
|
140
|
+
if (noRoutesOrStates) {
|
141
|
+
if ($analytics.settings.pageTracking.autoBasePath) {
|
142
|
+
$analytics.settings.pageTracking.basePath = $window.location.pathname;
|
143
|
+
}
|
144
|
+
if ($analytics.settings.trackRelativePath) {
|
145
|
+
var url = $analytics.settings.pageTracking.basePath + $location.url();
|
146
|
+
$analytics.pageTrack(url);
|
147
|
+
} else {
|
148
|
+
$analytics.pageTrack($location.absUrl());
|
149
|
+
}
|
150
|
+
}
|
151
|
+
}
|
152
|
+
if ($analytics.settings.pageTracking.autoTrackVirtualPages) {
|
153
|
+
if ($analytics.settings.pageTracking.autoBasePath) {
|
154
|
+
/* Add the full route to the base. */
|
155
|
+
$analytics.settings.pageTracking.basePath = $window.location.pathname + "#";
|
156
|
+
}
|
157
|
+
if ($injector.has('$route')) {
|
158
|
+
$rootScope.$on('$routeChangeSuccess', function (event, current) {
|
159
|
+
if (current && (current.$$route||current).redirectTo) return;
|
160
|
+
var url = $analytics.settings.pageTracking.basePath + $location.url();
|
161
|
+
$analytics.pageTrack(url);
|
162
|
+
});
|
163
|
+
}
|
164
|
+
if ($injector.has('$state')) {
|
165
|
+
$rootScope.$on('$stateChangeSuccess', function (event, current) {
|
166
|
+
var url = $analytics.settings.pageTracking.basePath + $location.url();
|
167
|
+
$analytics.pageTrack(url);
|
168
|
+
});
|
169
|
+
}
|
170
|
+
}
|
171
|
+
}])
|
172
|
+
|
173
|
+
.directive('analyticsOn', ['$analytics', function ($analytics) {
|
174
|
+
function isCommand(element) {
|
175
|
+
return ['a:','button:','button:button','button:submit','input:button','input:submit'].indexOf(
|
176
|
+
element.tagName.toLowerCase()+':'+(element.type||'')) >= 0;
|
177
|
+
}
|
178
|
+
|
179
|
+
function inferEventType(element) {
|
180
|
+
if (isCommand(element)) return 'click';
|
181
|
+
return 'click';
|
182
|
+
}
|
183
|
+
|
184
|
+
function inferEventName(element) {
|
185
|
+
if (isCommand(element)) return element.innerText || element.value;
|
186
|
+
return element.id || element.name || element.tagName;
|
187
|
+
}
|
188
|
+
|
189
|
+
function isProperty(name) {
|
190
|
+
return name.substr(0, 9) === 'analytics' && ['On', 'Event'].indexOf(name.substr(9)) === -1;
|
191
|
+
}
|
192
|
+
|
193
|
+
return {
|
194
|
+
restrict: 'A',
|
195
|
+
scope: false,
|
196
|
+
link: function ($scope, $element, $attrs) {
|
197
|
+
var eventType = $attrs.analyticsOn || inferEventType($element[0]);
|
198
|
+
|
199
|
+
angular.element($element[0]).bind(eventType, function () {
|
200
|
+
var eventName = $attrs.analyticsEvent || inferEventName($element[0]);
|
201
|
+
var properties = {};
|
202
|
+
angular.forEach($attrs.$attr, function(attr, name) {
|
203
|
+
if (isProperty(name)) {
|
204
|
+
properties[name.slice(9).toLowerCase()] = $attrs[name];
|
205
|
+
}
|
206
|
+
});
|
207
|
+
|
208
|
+
$analytics.eventTrack(eventName, properties);
|
209
|
+
});
|
210
|
+
}
|
211
|
+
};
|
212
|
+
}]);
|
213
|
+
})(angular);
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: angulartics-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.15.19
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ben Augarten
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-06-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: railties
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '4.1'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.1'
|
62
|
+
description: angulartics packaged in gem form
|
63
|
+
email:
|
64
|
+
- b.augarten@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- .gitignore
|
70
|
+
- Gemfile
|
71
|
+
- LICENSE.txt
|
72
|
+
- README.md
|
73
|
+
- Rakefile
|
74
|
+
- angulartics-rails.gemspec
|
75
|
+
- lib/angulartics/rails.rb
|
76
|
+
- lib/angulartics/rails/version.rb
|
77
|
+
- vendor/assets/javascript/angulartics-adobe.js
|
78
|
+
- vendor/assets/javascript/angulartics-chartbeat.js
|
79
|
+
- vendor/assets/javascript/angulartics-flurry.js
|
80
|
+
- vendor/assets/javascript/angulartics-ga-cordova.js
|
81
|
+
- vendor/assets/javascript/angulartics-ga.js
|
82
|
+
- vendor/assets/javascript/angulartics-gtm.js
|
83
|
+
- vendor/assets/javascript/angulartics-kissmetrics.js
|
84
|
+
- vendor/assets/javascript/angulartics-mixpanel.js
|
85
|
+
- vendor/assets/javascript/angulartics-piwik.js
|
86
|
+
- vendor/assets/javascript/angulartics-scroll.js
|
87
|
+
- vendor/assets/javascript/angulartics-segmentio.js
|
88
|
+
- vendor/assets/javascript/angulartics-splunk.js
|
89
|
+
- vendor/assets/javascript/angulartics-woopra.js
|
90
|
+
- vendor/assets/javascript/angulartics.js
|
91
|
+
homepage: ''
|
92
|
+
licenses:
|
93
|
+
- MIT
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
- vendor
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 1.8.24
|
114
|
+
signing_key:
|
115
|
+
specification_version: 3
|
116
|
+
summary: Add analytics to your angularjs application
|
117
|
+
test_files: []
|