PageSourceSearch

https://www.calacademy.org/sites/default/files/js/js__WoFXkg9rS_kybmI70ju_s8GzOZTT92-NfL8DVtRogA.js

js calacademy.org collected 2026-10-01 06:43:38 UTC 6,243 bytes, 259 lines download raw bytes

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.