PageSourceSearch

https://www.mango.org/wp-content/plugins/click-tracker/assets/tracker.js?ver=1.1.0

js mango.org collected 2026-10-02 07:10:19 UTC 1,389 bytes, 50 lines download raw bytes

1( function () {
2	'use strict';
3
4	if ( typeof CKTR === 'undefined' || ! CKTR.trackers || ! CKTR.trackers.length ) {
5		return;
6	}
7
8	var lastFired = {}; // tracker_id -> timestamp (ms) for client-side rate limit.
9	var rateMs = ( parseInt( CKTR.rateLimit, 10 ) || 0 ) * 1000;
10
11	function send( trackerId ) {
12		var now = Date.now();
13		if ( rateMs > 0 && lastFired[ trackerId ] && ( now - lastFired[ trackerId ] ) < rateMs ) {
14			return;
15		}
16		lastFired[ trackerId ] = now;
17
18		var body = new URLSearchParams();
19		body.append( 'action', 'cktr_record' );
20		body.append( 'nonce', CKTR.nonce );
21		body.append( 'tracker_id', trackerId );
22		body.append( 'page_url', window.location.href );
23
24		// Fire and forget; keepalive so it survives navigation.
25		fetch( CKTR.ajax, {
26			method: 'POST',
27			headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
28			body: body.toString(),
29			keepalive: true,
30			credentials: 'same-origin'
31		} ).catch( function () {} );
32	}
33
34	// Event delegation: works for dynamically added elements too.
35	document.addEventListener( 'click', function ( e ) {
36		for ( var i = 0; i < CKTR.trackers.length; i++ ) {
37			var t = CKTR.trackers[ i ];
38			var selector = t.selector;
39			var target;
40			try {
41				target = e.target.closest( selector );
42			} catch ( err ) {
43				continue; // invalid selector, skip.
44			}
45			if ( target ) {
46				send( t.id );
47			}
48		}
49	}, true );
50} )();

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.