Skip to content

Instantly share code, notes, and snippets.

@jchild3rs
Last active September 7, 2017 05:30
Show Gist options
  • Save jchild3rs/4d636e4d6e8242f7543f to your computer and use it in GitHub Desktop.
Save jchild3rs/4d636e4d6e8242f7543f to your computer and use it in GitHub Desktop.
Simple abstraction for working with Omniture
var O = (function() {
var account = s_account || '', // <== fill this in with default s_account
instance = s || s_gi(account);
/**
* Description
* @method init
* @return
*/
function init() {
// if you need to do anything on init, add it here.
}
/**
* Clears the tracking vars to prevent double tracking on instances when the page doesn't reload
*/
function clearVars() {
for (var i=0; i < 75; i++) {
s['prop'+i]='';
s['eVar'+i]='';
if(i<=5)
s['hier'+i]='';
}
var svarArr = ['pageName','channel','products','events','campaign','purchaseID','state','zip','server','linkName'];
for (var i=0; i < svarArr.length ; i++) {
s[svarArr[i]]='';
}
}
/**
* Sets values to local instance of `s`.
* @method set
* @param {String} key
* @param {String} [val]
* @return
*/
function set(key, val) {
if (typeof key === 'object' && typeof val === 'undefined') {
val = key;
for (var prop in val) {
if (val.hasOwnProperty(prop)) {
set(prop, val[prop]);
}
}
} else {
instance[key] = val;
}
}
/**
* Retrieves values stored on local instance of `s`.
* @method get
* @param {String} key
* @return MemberExpression
*/
function get(key) {
return instance[key];
}
/**
* Trigger for s.t();
* @method trackPageLoad
* @return
*/
function trackPageLoad() {
console.groupCollapsed('[Omniture] page loaded');
console.log('s object: ', s);
console.groupEnd();
instance.t();
}
/**
* Trigger for s.tl();
* @method trackClick
* @param el
* @param event
* @return
*/
function trackClick(el, event, callback) {
console.groupCollapsed('[Omniture] click tracked');
if (typeof el === 'string') {
el = $('[href="' + el + '"]').get(0);
}
set('referrer', window.location.href);
if (!!callback) {
instance.tl(el, 'o', event, null, callback);
} else {
instance.tl(el, 'o', event);
}
console.log('Element: ', el);
console.log('Event/LinkName: ', event);
console.log('External link: ', utils.isExternalLink($(el).attr('href')));
console.log('s_objectID: ', data('s_objectID'));
console.log(s);
console.groupEnd();
}
/**
* Overrides local instance with new a `s` variable.
* @method clearProps
* @return
*/
function clearProps() {
instance = s_gi(account);
}
return {
init: init,
s: instance,
set: set,
get: get,
trackPageLoad: trackPageLoad,
trackClick: trackClick,
clearProps: clearProps,
clearVars: clearVars
};
})();
// Usages
// Init
O.init();
// Set values
O.set('event', 'event5'); // single value
O.set({ // multi value
'prop1': 'foo',
'prop2': 'bar'
});
// Get values
var prop2 = O.get('prop2');
// Click tracking
$('a.foo').click(function(e) {
omniture.set({
eVar1: 'Expert Blogs',
eVar3: location.pathname,
linkTrackVars: 'events,eVar1,eVar2,eVar3,eVar8,eVar17,eVar18,eVar31,eVar32,eVar34,eVar39,eVar56,eVar60,eVar62,eVar63,eVar68,channel',
events: 'event3',
linkTrackEvents: 'event3'
});
omniture.trackClick(e.currentTarget, 'event3');
});
// Track page loaad
O.trackPageLoad();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment