Created
January 23, 2015 15:04
-
-
Save daleyjem/ee61ff8e285f3ed3f198 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$(function(){ | |
/** Constants **/ | |
var ATTRIBUTE_PREFIX = 'track'; | |
var ATTRIBUTE_EVENT_TYPE = "event-type" | |
var RESERVED_ATTRIBUTES = [ | |
'events', // Reserved for Omniture | |
'eventType', // Reserved for client-side event type | |
'linkType', // Reserved for Omniture | |
'vars' // Reserved for Omniture | |
]; | |
var JQUERY_PSEUDOS = { | |
'attr': pseudoAttr | |
}; | |
registerPseudos(); | |
init(); | |
/** | |
* Scrubs DOM and attaches appropriate event listeners for triggering Omniture tracking | |
*/ | |
function init() { | |
$(":attr('^data-track')").each(function(idx,el){ | |
var $el = $(el); | |
$el.on($el.data(ATTRIBUTE_PREFIX + '-' + ATTRIBUTE_EVENT_TYPE), doTrack); | |
}); | |
} | |
/** | |
* Gets appropriate 'track' attributes and sends them to Omniture | |
*/ | |
function doTrack(evt) { | |
var $el = $(evt.target); | |
var attr = getTrackAttributes($el); | |
console.log(attr); | |
omnitureTrack(attr); | |
} | |
function omnitureTrack(attr){ | |
//s.clearVars(); | |
jQuery.each(attr, function (key, val){ | |
}); | |
//s.tl('', 'o'); | |
} | |
/** | |
* Finds and separates reserved [ATTRIBUTE_PREFIX] data attributes | |
*/ | |
function getTrackAttributes($el) { | |
var dataAttr = $el.data(); | |
var attr = { | |
props: {}, | |
reserved: {} | |
}; | |
jQuery.each(dataAttr, function(key, val) { | |
var reg = new RegExp("^" + ATTRIBUTE_PREFIX + "([^\S]+)"); | |
var eqDirty = reg.exec(key)[1]; | |
var eq = eqDirty.substr(0,1).toLowerCase() + eqDirty.substr(1); | |
if (RESERVED_ATTRIBUTES.indexOf(eq) == -1) | |
attr.props[eq] = val; | |
else | |
attr.reserved[eq] = val; | |
}); | |
return attr; | |
} | |
/** | |
* Register special jQuery selectors (i.e. ":attr()") | |
*/ | |
function registerPseudos(){ | |
jQuery.each(JQUERY_PSEUDOS, function(key, val){ | |
if (jQuery.expr.pseudos[key] == undefined){ | |
val(); | |
} else { | |
console.log('jQuery pseudo: "' + key + '" already set', "hey"); | |
} | |
}); | |
} | |
/** | |
* Allow for advanced attribute selectors (with wildcards) | |
*/ | |
function pseudoAttr(){ | |
jQuery.expr.pseudos.attr = $.expr.createPseudo(function(arg) { | |
var regexp = new RegExp(arg); | |
return function(elem) { | |
for(var i = 0; i < elem.attributes.length; i++) { | |
var attr = elem.attributes[i]; | |
if(regexp.test(attr.name)) { | |
return true; | |
} | |
} | |
return false; | |
}; | |
}); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment