blob: b634387260f15ed269542590acfcb2e2235ad666 [file] [log] [blame]
<script type="text/javascript">
/*!
* Entourage 1.1.2 - Automatic Download Tracking for Asynchronous Google Analytics
*
* Copyright (c) 2011 by Tian Valdemar Davis (http://techoctave.com/c7)
* Licensed under the MIT (http://en.wikipedia.org/wiki/MIT_License) license.
*
* Learn More: http://techoctave.com/c7/posts/58-entourage-js-automatic-download-tracking-for-asynchronous-google-analytics
*
* 2012-04-24 Mod by robweir to whitelist additional file extensions as used in AOO project
* 2012-04-25 Mod by robweir to remove trailing "/download" from SourceForge file names, a hack we can hopefully remove someday
*/
/*jshint strict:false */
(function() {
var entourage = new (function() {
var version = "1.1.2";
var whitelist = /\.pdf$|\.zip$|\.gz$|\.gz\/download$|\.bz2$|\.bz2\/download$|\.od*|\.doc*|\.xls*|\.ppt*|\.exe$|\.exe\/download$|\.dmg$|\.dmg\/download$|\.mov$|\.avi$|\.mp3$/i;
//Get true FileName from link pathname
var getFileName = function(pathname) {
//Remove the anchor at the end (if one exists)
pathname = pathname.substring(0, (pathname.indexOf("#") === -1) ? pathname.length : pathname.indexOf("#"));
//Removes the query after the file pathname (if one exists)
pathname = pathname.substring(0, (pathname.indexOf("?") === -1) ? pathname.length : pathname.indexOf("?"));
//Remove trailing /download
if (/\/download$/.test(pathname))
pathname = pathname.substring(0, pathname.length-"/download".length);
//Removes everything before the last slash in the path
pathname = pathname.substring(pathname.lastIndexOf("/") + 1, pathname.length);
return pathname;
};
var autograph = function() {
var fileName, associate;
//Get the file name
fileName = getFileName(this.pathname); //The link object is now available in "this"
//Add file to the Google Analytics Queue
associate = '/download/' + fileName;
//Track download using Asynchronous Google Analytics
_gaq.push(['_trackPageview', associate]);
};
var initialize = function() {
var links = document.links;
for (var i = 0, l = links.length; i < l; i++) {
//Compare the fileType to the whitelist
var match = links[i].pathname.match(whitelist);
//If the link is for a file download . . .
if (typeof match !== "undefined" && match !== null) {
//Call Entourage whenever the link is clicked
links[i].onclick = autograph;
}
}
};
return {
version: version,
initialize: initialize
};
})(); //Entourage.js
//Add entourage to the global namespace
window.entourage = entourage;
//Execute entourage onload - ensuring links are present in the DOM
window.onload = entourage.initialize;
})();
</script>