summaryrefslogtreecommitdiffstats
path: root/assets/javascript
diff options
context:
space:
mode:
Diffstat (limited to 'assets/javascript')
-rw-r--r--assets/javascript/app.js6
-rw-r--r--assets/javascript/core/exercise.js5
-rw-r--r--assets/javascript/utils/analytic.js15
3 files changed, 24 insertions, 2 deletions
diff --git a/assets/javascript/app.js b/assets/javascript/app.js
index 55e3546..7d044ab 100644
--- a/assets/javascript/app.js
+++ b/assets/javascript/app.js
@@ -1,14 +1,18 @@
require([
"jQuery",
+ "utils/analytic",
"core/state",
"core/exercise",
"core/progress",
"core/sidebar"
-], function($, _state, exercise, progress, sidebar){
+], function($, analytic, _state, exercise, progress, sidebar){
$(document).ready(function() {
var state = _state();
var $book = state.$book;
+ // Tract page view
+ analytic.track("View");
+
// Init sidebar
sidebar.init();
diff --git a/assets/javascript/core/exercise.js b/assets/javascript/core/exercise.js
index 153f544..c181732 100644
--- a/assets/javascript/core/exercise.js
+++ b/assets/javascript/core/exercise.js
@@ -1,8 +1,9 @@
define([
"jQuery",
"utils/execute",
+ "utils/analytic",
"core/state"
-], function($, execute, state){
+], function($, execute, analytic, state){
// Bind an exercise
var prepareExercise = function($exercise) {
var codeSolution = $exercise.find(".code-solution").html();
@@ -16,6 +17,8 @@ define([
$exercise.find(".action-submit").click(function(e) {
e.preventDefault();
+ analytic.track("exercise.submit");
+
execute(editor.getValue(), codeValidation, function(err, result) {
$exercise.toggleClass("return-error", err != null);
$exercise.toggleClass("return-success", err == null);
diff --git a/assets/javascript/utils/analytic.js b/assets/javascript/utils/analytic.js
new file mode 100644
index 0000000..2f9e2f1
--- /dev/null
+++ b/assets/javascript/utils/analytic.js
@@ -0,0 +1,15 @@
+define([], function() {
+ var isAvailable = function() {
+ return (typeof mixpanel === "undefined");
+ };
+
+ var track = function(event, data) {
+ if (!isAvailable()) return;
+ mixpanel.track(event, data);
+ };
+
+ return {
+ isAvailable: isAvailable,
+ track: track
+ };
+}); \ No newline at end of file