PageSourceSearch

https://www.12mesi.it/wp-content/plugins/dadasuite-365/assets/front/js/dadalytics.js?ver=1790258067

js 12mesi.it collected 2026-10-02 20:56:06 UTC 3,746 bytes, 123 lines download raw bytes

1/**
2 * Dadalytics — apre la connessione che segnala la pagina vista.
3 *
4 * Era stampato dentro `wp_footer` di ogni pagina: uno `<script>` inline con
5 * dentro il codice di tracciamento e l'indirizzo del server, diverso a ogni
6 * URL e quindi non riutilizzabile da nessuna cache. Ora è un file solo e i
7 * valori arrivano da `wp_localize_script`.
8 *
9 * ## Due cose che rompevano altro
10 *
11 * `dadaCheckIdle()` assegnava `window.onload`, `window.onmousemove`,
12 * `window.onmousedown`, `window.ontouchstart`, `window.ontouchmove`,
13 * `window.onclick` e `window.onkeydown`. Quelle proprietà tengono **un solo**
14 * gestore: qualunque cosa il tema o un altro plugin ci avesse messo prima
15 * veniva buttata via, in silenzio. Qui si usa `addEventListener`, che si
16 * aggiunge invece di sostituire.
17 *
18 * E la connessione, una volta chiusa per inattività, non veniva più riaperta:
19 * chi tornava sulla scheda dopo dieci secondi smetteva di essere contato per
20 * il resto della visita. Ora torna su alla prima attività.
21 */
22( function () {
23	'use strict';
24
25	var cfg = window.dadasuiteDadalytics;
26
27	if ( ! cfg || ! cfg.server || ! cfg.trackCode ) {
28		return;
29	}
30
31	var IDLE_MS = 10000;
32	var socket = null;
33	var idleTimer = null;
34
35	/**
36	 * Codifica il minimo indispensabile: solo i caratteri che dentro il valore
37	 * di un parametro cambiano il significato dell'indirizzo.
38	 *
39	 * Non si usa `encodeURIComponent` di proposito. Quella funzione codifica
40	 * anche le barre, e trasformerebbe `/articolo/` in `%2Farticolo%2F`: un
41	 * server che non decodifica come ci aspettiamo comincerebbe a registrare
42	 * percorsi di forma diversa da tutti quelli raccolti finora. Qui invece un
43	 * percorso normale esce identico a come lo mandava la 1.x, e cambia solo
44	 * quando contiene qualcosa che prima rompeva davvero i parametri.
45	 *
46	 * L'ordine conta: il segno di percentuale va per primo, altrimenti
47	 * andrebbe a codificare gli `%` introdotti dalle sostituzioni dopo.
48	 */
49	function param( value ) {
50		return String( value )
51			.replace( /%/g, '%25' )
52			.replace( /&/g, '%26' )
53			.replace( /#/g, '%23' )
54			.replace( / /g, '%20' );
55	}
56
57	function address() {
58		var params = [
59			'tc=' + param( cfg.trackCode ),
60			'r=' + param( document.referrer || '' ),
61			'c=' + param( cfg.path || location.pathname ),
62			// Arriva già codificato da PHP, come nella 1.x: non si tocca.
63			't=' + ( cfg.titleEncoded || '' )
64		];
65
66		return cfg.server + '/?' + params.join( '&' );
67	}
68
69	function open() {
70		if ( socket && ( socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING ) ) {
71			return;
72		}
73
74		try {
75			socket = new WebSocket( address() );
76		} catch ( e ) {
77			// Indirizzo non valido: si smette, senza far cadere il resto della
78			// pagina come faceva l'eccezione non catturata di prima.
79			socket = null;
80
81			return;
82		}
83
84		socket.addEventListener( 'close', function () {
85			socket = null;
86		} );
87
88		socket.addEventListener( 'error', function () {
89			socket = null;
90		} );
91	}
92
93	function close() {
94		if ( socket && socket.readyState === WebSocket.OPEN ) {
95			socket.close();
96		}
97	}
98
99	function onActivity() {
100		open();
101
102		window.clearTimeout( idleTimer );
103		idleTimer = window.setTimeout( close, IDLE_MS );
104	}
105
106	[ 'load', 'mousemove', 'mousedown', 'touchstart', 'touchmove', 'click', 'keydown', 'scroll' ]
107		.forEach( function ( event ) {
108			window.addEventListener( event, onActivity, { passive: true } );
109		} );
110
111	// La scheda in secondo piano non è una visita: si chiude subito invece di
112	// aspettare i dieci secondi di inattività.
113	document.addEventListener( 'visibilitychange', function () {
114		if ( document.hidden ) {
115			window.clearTimeout( idleTimer );
116			close();
117		} else {
118			onActivity();
119		}
120	} );
121
122	onActivity();
123}() );

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.