Skip to content

Instantly share code, notes, and snippets.

@daleyjem
Created January 23, 2015 15:04
Show Gist options
  • Save daleyjem/ee61ff8e285f3ed3f198 to your computer and use it in GitHub Desktop.
Save daleyjem/ee61ff8e285f3ed3f198 to your computer and use it in GitHub Desktop.
$(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