Skip to content
This repository has been archived by the owner on May 26, 2022. It is now read-only.

Commit

Permalink
Merge pull request #92 from Osmose/ga-tracking
Browse files Browse the repository at this point in the history
Fix bug 936127: Add new tracking events across site.
  • Loading branch information
alexgibson committed Nov 12, 2013
2 parents cfe0d4d + 1bdb6ac commit 7383d6c
Show file tree
Hide file tree
Showing 9 changed files with 152 additions and 182 deletions.
4 changes: 2 additions & 2 deletions careers/base/static/js/base.js
Expand Up @@ -173,7 +173,7 @@ Mozilla.Test = (function(w, $) {
*/

$(function() {
$('a[href*=#]:not([href=#])').not('.nosmoothscroll').click(function() {
$('a[href*=#]:not([href=#])').not('.nosmoothscroll').click(function(e) {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') || location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
Expand All @@ -185,7 +185,7 @@ Mozilla.Test = (function(w, $) {
// give target keyboard focus
target.attr('tabindex', -1);
target.focus();
return false;
e.preventDefault();
}
}
});
Expand Down
134 changes: 97 additions & 37 deletions careers/base/static/js/ga_event-tracking.js
@@ -1,41 +1,101 @@
// All click based event tracking should go here

$(function() {
/**
* Google Analytics Event Tracking
*/
;(function($) {
'use strict';

function trackClick(className, trackEvent) {
$(className).click(function() {
_gaq.push(trackEvent);
});
var $root = $(':root');
function trackClick(selector, trackEventArgs) {
trackEventArgs.unshift('_trackEvent');
$root.on('click', selector, function() {
_gaq.push(trackEventArgs);
});
}

/* Nav */
trackClick('.ga-nav-home', ['_trackEvent', 'Top Navigation', 'Click', 'Home']);
trackClick('.ga-nav-home-logo', ['_trackEvent', 'Top Navigation', 'Click', 'Home Logo']);
trackClick('.ga-nav-team', ['_trackEvent', 'Top Navigation', 'Click', 'Teams Roles']);
trackClick('.ga-nav-life', ['_trackEvent', 'Top Navigation', 'Click', 'Life At Mozilla']);
trackClick('.ga-nav-locations', ['_trackEvent', 'Top Navigation', 'Click', 'Locations']);
trackClick('.ga-nav-university', ['_trackEvent', 'Top Navigation', 'Click', 'University']);
trackClick('.ga-nav-listing', ['_trackEvent', 'Top Navigation', 'Click', 'Job Listing']);

/* Careers Click Tracking */
trackClick('.ga-career-banner-listings', ['_trackEvent', 'Career Banner', 'Click', 'Job Listing']);
trackClick('.ga-career-banner-internship', ['_trackEvent', 'Career Banner', 'Click', 'University']);
trackClick('.ga-career-banner-volunteer', ['_trackEvent', 'Career Banner', 'Click', 'Volunteer']);

trackClick('.ga-career-banner-listings-bottom', ['_trackEvent', 'Career Banner Bottom', 'Click', 'Job Listing']);
trackClick('.ga-career-banner-internship-bottom', ['_trackEvent', 'Career Banner Bottom', 'Click', 'University']);
trackClick('.ga-career-banner-volunteer-bottom', ['_trackEvent', 'Career Banner Bottom', 'Click', 'Volunteer']);

/* University Click Tracking */
trackClick('.ga-apply-banner', ['_trackEvent', 'University Banner', 'Click', 'Apply Now']);
trackClick('.ga-want-to-know', ['_trackEvent', 'University Want To Know', 'Click', 'Apply Now']);
trackClick('.ga-apply-now', ['_trackEvent', 'University Apply Now', 'Click', 'Apply Now']);


/* Listings Click Tracking */
trackClick('.ga-job-listing', ['_trackEvent', 'Job List', 'Click', 'Job Detail']);
trackClick('.ga-job-listing-detail', ['_trackEvent', 'Job Detail', 'Click', 'Job Detail']);
trackClick('.ga-job-listing-apply', ['_trackEvent', 'Jobvite Apply Now', 'Click', 'Job Apply']);

});
/* Nav
***************************************************************************/
trackClick('.ga-nav-home', ['Top Navigation', 'Click', 'Home']);
trackClick('.ga-nav-home-logo', ['Top Navigation', 'Click', 'Home Logo']);
trackClick('.ga-nav-team', ['Top Navigation', 'Click', 'Teams Roles']);
trackClick('.ga-nav-life', ['Top Navigation', 'Click', 'Life At Mozilla']);
trackClick('.ga-nav-locations', ['Top Navigation', 'Click', 'Locations']);
trackClick('.ga-nav-university', ['Top Navigation', 'Click', 'University']);
trackClick('.ga-nav-listing', ['Top Navigation', 'Click', 'Job Listing']);


/* Careers
***************************************************************************/
trackClick('.ga-career-banner-listings', ['Career Banner Interactions', 'Top Banner Click', 'Job Listing']);
trackClick('.ga-career-banner-internship', ['Career Banner Interactions', 'Top Banner Click', 'University']);
trackClick('.ga-career-banner-volunteer', ['Career Banner Interactions', 'Top Banner Click', 'Volunteer']);

trackClick('.ga-career-banner-listings-bottom', ['Career Banner Interactions', 'Bottom Banner Click', 'Job Listing']);
trackClick('.ga-career-banner-internship-bottom', ['Career Banner Interactions', 'Bottom Banner Click', 'University']);
trackClick('.ga-career-banner-volunteer-bottom', ['Career Banner Interactions', 'Bottom Banner Click', 'Volunteer']);


/* Careers > Teams & Roles
***************************************************************************/
// Primary hex navigation
$root.on('click', '#teams-intro .teams-nav a', function() {
var name = $(this).find('strong').text();
_gaq.push(['_trackEvent', 'Teams & Roles Interactions', 'Primary Nav Click', name]);
});

// Secondary hex navigation
$root.on('click', '#teams-nav-second a', function() {
var name = $(this).find('strong').text();
_gaq.push(['_trackEvent', 'Teams & Roles Interactions', 'Secondary Left Side Nav Click', name]);
});

// View Open Position buttons
$root.on('click', '.teams-team a.cta', function() {
var name = $(this).siblings('.team-head').text();
_gaq.push(['_trackEvent', 'Teams & Roles Interactions', 'View Open Positions', name]);
});

// Secondary hex nav menu button
trackClick('.teams-back', ['Teams & Roles Interactions', 'Menu Back Button']);


/* Careers > Community & Culture
***************************************************************************/
$root.on('click', '.community-box a', function() {
var href = $(this).attr('href');
_gaq.push(['_trackEvent', 'Community & Culture Interactions', 'Link Click', href]);
});


/* Careers > Locations
***************************************************************************/
$root.on('click', 'a.location-link', function() {
var city = $(this).text();
_gaq.push(['_trackEvent', 'Mozilla Location Map Interactions', 'Click', city]);
});


/* Careers > Life Gallery
***************************************************************************/
trackClick('#life-blocks-prev', ['What Makes Us Interactions', 'Left Carousel Click']);
trackClick('#life-blocks-next', ['What Makes Us Interactions', 'Right Carousel Click']);


/* University
***************************************************************************/
trackClick('.ga-apply-banner', ['/university/ Interactions', 'Apply Now Clicks', 'Apply Now: Once a Mozillian']);
trackClick('.ga-want-to-know', ['/university/ Interactions', 'Apply Now Clicks', 'Apply Now: Things You\'ll Want to Know']);
trackClick('.ga-apply-now', ['/university/ Interactions', 'Apply Now Clicks', 'Apply Now: Ready to Start']);
trackClick('.meet-us-on-campus', ['/university/ Interactions', 'Clicks', 'Meet Us On Campus']);


/* Listings
***************************************************************************/
trackClick('.ga-job-listing', ['Job List', 'Click', 'Job Detail']);
trackClick('.ga-job-listing-detail', ['Job Detail', 'Click', 'Job Detail']);

// Apply for this job button
$root.on('click', '.ga-job-listing-apply', function() {
var jobName = $('.job-post-title').text();
_gaq.push(['_trackEvent', 'Job Description Page Interactions', 'Apply for this Job', jobName]);
});
})(jQuery);
144 changes: 14 additions & 130 deletions careers/careers/static/js/careers.js
Expand Up @@ -245,7 +245,7 @@
var currentTeam = $('.team-current');

if (currentTeam.length) {
var requestingCurrent = false
var requestingCurrent = false;
// if there is a current team(s) hide it
currentTeam.each( function(){
var currentTeamId = this.id;
Expand Down Expand Up @@ -347,133 +347,6 @@
secondNav.insertAfter('.teams-head');
}


/*
* Locations
* - two ways to show details:
* - on mobile a select box can be used to pick one
* - on desktop the user can click the link
* - both ways are initialized and the associated form controls are hidden by media queries
* - details can be hidden by:
* - selecting a new location details
* - pressing escape
* - on mobile: navgigating to the empty form option
*/

function locationsEscapeWatch(e) {
// if escape key is pressed, hide all modals
if (e.keyCode === 27) {
locationsHide(null);
}
}

function locationsShow(locationId) {
// remove class from any current one
$('.location-current').removeClass('location-current');

// add class to the one with matching ID
$('#' + locationId).addClass('location-current');

// add watcher for escape key
$(document).on('keyup', locationsEscapeWatch);
}

function locationsHide() {
// remove class from currently visible
$('.location-current').removeClass('location-current');

// remove watcher for escape key
$(document).off('keyup', locationsEscapeWatch);
}

function locationsToggle(locationId) {
if(locationId){
locationsShow(locationId);
} else {
locationsHide();
}
}

function locationsModalInit() {
var locations = $('.locations-location');

// loop through locations links
$(locations).each( function() {
var location = $(this);

// create close button
var locationsModalClose = $('<button class="location-close">&times;</button>');
locationsModalClose.on('click', locationsHide);

// add close button
var locationDetails = location.find('.location-details');
locationDetails.prepend(locationsModalClose);

// hijack links
var locationLink = location.find('.location-link');
var locationId = this.id;
$(locationLink).on('click', function(e) {
e.preventDefault();
locationsToggle(locationId);
});
});

}

function locationsParallaxInit() {
// TODO: parallax being left for last
}

function locationsMenuInit() {
// create container, select, and label
var locationMenuContain = $('<div class="locations-menu"></div>');
var locationsLabel = $('<label class="locations-label" for="locations-select">Select Location</label>');
var locationsMenu = $('<select id="locations-select"></select>');
var locationsDefaultOption = $('<option />');
locationsDefaultOption.appendTo(locationsMenu);

// get locations
var locations = $('.locations-location');

// create option tag for each location
$(locations).each(function() {
// get name
var locationName = $(this).find('.location-link').text();

// get id of location
var locationId = this.id;

// create option
var locationOption = $('<option value="' + locationId + '">' + locationName + '</option>');

// attach option
locationOption.appendTo(locationsMenu);

});

// when contents of select change, change the visible location
locationsMenu.on('change', function(e){
var locationNew = $(e.target).val();
locationsToggle(locationNew);
});

// attach menu to page
locationsMenu.appendTo(locationMenuContain);
locationsLabel.appendTo(locationMenuContain);
locationMenuContain.insertBefore('.locations-list');
}

function locationsInit() {
// create drop down for mobile
locationsMenuInit();
// create modal for larger
locationsModalInit();

if(Mozilla.Test.isParallax){
locationsParallaxInit();
}
}

/*
* Gallery
* - gallery images are all sprites, loaded in phases
Expand Down Expand Up @@ -690,8 +563,16 @@

// add listener for escape key
$(document).on('keyup', communityEscapeWatch);

// Track video opening.
_gaq.push(['_trackEvent', 'Community & Culture Interactions', 'Open', 'Creative Interns Video']);
}

function videoEvent(state) {
return function() {
_gaq.push(['_trackEvent', 'Community & Culture Interactions', state, 'Creative Interns Video']);
};
}

function communityVideoInit() {
if(!Mozilla.Test.isSmallScreen) {
Expand Down Expand Up @@ -726,7 +607,7 @@
videoModal.appendTo('#community');

// initialize video
videojs('#video-interns');
var video = videojs('#video-interns');

// create button to open modal & begin playing video
var videoModalOpen = $('<button class="community-modal-open" type="button"></button>');
Expand All @@ -740,6 +621,10 @@
communityVideoShow();
});

// Event Tracking
video.on('play', videoEvent('Play'));
video.on('pause', videoEvent('Pause'));
video.on('ended', videoEvent('Finish'));
}

}
Expand Down Expand Up @@ -894,7 +779,6 @@
}
}


/*
* Next / ...and you?
*/
Expand Down
3 changes: 3 additions & 0 deletions careers/careers/static/js/listings.js
Expand Up @@ -8,9 +8,12 @@
// updates spans that appear instead of select box or labels on larger secreens
function filtersMaskUpdate(e) {
var filterSelect = $(e.target);
var filterName = filterSelect.siblings('label').text();
var filterText = filterSelect.find('option:selected').text();
var filterMask = filterSelect.siblings('.listings-filter-mask');
filterMask.text(filterText);

_gaq.push(['_trackEvent', 'Listings Filter', filterName, filterText]);
}

// hides or shows filters on mobile
Expand Down
5 changes: 5 additions & 0 deletions careers/careers/static/js/position.js
Expand Up @@ -34,6 +34,11 @@
if(Mozilla.Test.isParallax) {
positionPinInit();
}

// Create custom tracking vars for the current position being viewed.
_gaq.push(['_setCustomVar', 1, 'Team', $('.job-post-team').text(), 3]);
_gaq.push(['_setCustomVar', 2, 'Location of Job', $('#job-post').data('locationFilter'), 3]);
_gaq.push(['_trackEvent', 'CV Dummy', 'on load', undefined, undefined, true]);
});

})(window, window.jQuery);

0 comments on commit 7383d6c

Please sign in to comment.