1var CalAcademyAnalytics = function () { 2 var $ = jQuery; 3 var _sessionIdStorageKey = 'calacademyanalytics_session_id'; 4 5 var _getRandomString = function (length) { 6 var result = ''; 7 8 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 9 var i = length; 10 11 while (i--) { 12 result += chars.charAt(Math.floor(Math.random() * chars.length)); 13 } 14 15 return result; 16 }; 17 18 this.getSessionId = function () { 19 var id = sessionStorage.getItem(_sessionIdStorageKey); 20 21 if (id === null) { 22 // generate session id 23 id = _getRandomString(24); 24 25 // try setting 26 try { 27 sessionStorage.setItem(_sessionIdStorageKey, id); 28 } catch (e) { 29 return null; 30 } 31 } 32 33 return id; 34 } 35 36 this.track = function (obj, callback) { 37 if (typeof(obj) != 'object') { 38 if (typeof(callback) == 'function') { 39 callback(); 40 } 41 42 return; 43 } 44 45 var config = false; 46 47 try { 48 config = JSON.parse(window.calacademyExperimentConfig); 49 } catch (e) { 50 console.error(e); 51 return; 52 } 53 54 if (!config) return; 55 56 // add some standard tracking data 57 obj.href = window.location.href; 58 obj.userAgent = navigator.userAgent; 59 obj.referrer = document.referrer; 60 obj.session_id = this.getSessionId(); 61 62 console.log(obj); 63 64 $.ajax({ 65 type: 'POST', 66 namespace: 'track', 67 data: JSON.stringify(obj), 68 url: config.endpoint, 69 complete: function () { 70 if (typeof(callback) == 'function') { 71 callback(); 72 } 73 }, 74 success: function (response) {
75 console.log('CalAcademyAnalytics.track', obj); 76 } 77 }); 78 } 79 80 this.initialize = function () { 81 // 82 } 83 84 this.initialize(); 85} 86 87// Usage example: 88/* 89 90 <div id="experiment_container"> 91 <a variant="variant_v1" href="/foo">v1</a> 92 <a variant="variant_v2" href="/foo">v2</a> 93 <a variant="variant_v3" href="/foo">v3</a> 94 </div> 95 96 <script> 97 98 (function ($) { 99 $('#experiment_container a').on('click', function () { 100 var href = $(this).attr('href'); 101 102 $(this).trigger('track.calacademy', { 103 data: { 104 clickthru: true 105 }, 106 callback: function () { 107 window.location = href; 108 } 109 }); 110 111 return false; 112 }); 113 114 new CalAcademyExperiment($('#experiment_container a'), 'experiment_12345'); 115 })(jQuery); 116 117 </script> 118 119*/ 120 121/* 122 123Usage example with code variants: 124 125 new CalAcademyExperiment( 126 [ 127 { 128 label: 'variant_code_1', 129 code: function () { 130 console.log('This is variant 1'); 131 } 132 }, 133 { 134 label: 'variant_code_2', 135 code: function () { 136 console.log('This is variant 2'); 137 } 138 } 139 ], 'experiment_12345'); 140 141*/ 142 143var CalAcademyExperiment = function (variants, experimentID) { 144 var $ = jQuery; 145 var _analytics = new CalAcademyAnalytics(); 146 var _activeVariant = null; 147 148 var _track = function (v) { 149 var myVariant = !v ? _activeVariant.attr('variant') : v; 150 151 // dataLayer push 152 var trackingObj = { 153 'event': 'experience_impression', 154 'event_data': { 155 'exp_variant_string': myVariant 156 } 157 }; 158 159 window.dataLayer = window.dataLayer || []; 160 window.dataLayer.push(trackingObj); 161 console.log('push to window.dataLayer', trackingObj); 162 163 // AWS logging 164 _analytics.track({ 165 'experiment_id': experimentID, 166 'experience_impression': myVariant 167 }); 168 } 169 170 var _start = function () { 171 _activeVariant.addClass('experiment_variant'); 172 173 // add trigger listener to active variant 174 _activeVariant.on('track.calacademy', function (e, params) { 175 var obj = { 176 'experiment_id': experimentID, 177 'experience_impression': $(this).attr('variant') 178 }; 179 180 $.extend(true, obj, params.data); 181 _analytics.track(obj, params.callback); 182 }); 183 184 // show active variant 185 _activeVariant.show(); 186 187 // send data 188 _track(); 189 } 190 191 this.initialize = function () { 192 if (variants.length == 0) return; 193 194 var randomIndex = Math.floor(Math.random() * variants.length); 195 _activeVariant = typeof(variants.eq) == 'function' ? variants.eq(randomIndex) : variants[randomIndex]; 196 197 if (typeof(_activeVariant.code) == 'function' && typeof(_activeVariant.label) == 'string') { 198 // not jQuery objects 199 _activeVariant.code(); 200 _track(_activeVariant.label); 201 return; 202 } 203 204 // hide all 205 variants.hide(); 206 207 _start(); 208 } 209 210 this.initialize(); 211} 212; 213var CalAcademyInlineMp3 = function () { 214 var $ = jQuery; 215 216 var _addPlayer = function (el, href) { 217 // pause 218 $('.calacademy_audio').trigger('pause'); 219 220 // remove 221 $('.calacademy_mp3').remove(); 222 223 // insert 224 var div = $('<div />'); 225 div.addClass('calacademy_mp3'); 226 227 var audio = $('<audio controls src="' + href + '"></audio>'); 228 audio.addClass('calacademy_audio'); 229 div.append(audio); 230 231 el.parent().append(div); 232 audio.trigger('play'); 233 } 234 235 var _initInteraction = function (el) { 236 var ev = Modernizr.touch ? 'touchend' : 'click'; 237 238 el.on(ev, function (e) { 239 var href = $(this).attr('href'); 240 _addPlayer($(this), href); 241 return false; 242 }); 243 } 244 245 this.initialize = function () { 246 $('a').each(function () { 247 var href = $(this).attr('href'); 248 if (!href) return true; 249 250 var ext = calacademy.Utils.getFileExtension(href); 251 if (ext != 'mp3') return true; 252 253 _initInteraction($(this)); 254 }); 255 } 256 257 this.initialize(); 258} 259;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.