Difference between revisions of "MediaWiki:Common.js"
Jump to navigation
Jump to search
('hitCallback': function(){ window.open(url); }) |
(Add event listener via JS.) |
||
| Line 2: | Line 2: | ||
// == Google Analytics ========================================================= | // == Google Analytics ========================================================= | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
function cyrb53(str) { | function cyrb53(str) { | ||
| Line 47: | Line 34: | ||
ga('send', 'pageview'); | ga('send', 'pageview'); | ||
| + | |||
| + | /** | ||
| + | * Function that captures a click on an outbound link in Analytics. | ||
| + | * This function takes a valid URL string as an argument, and uses that URL string | ||
| + | * as the event label. Setting the transport method to 'beacon' lets the hit be sent | ||
| + | * using 'navigator.sendBeacon' in browser that support it. | ||
| + | */ | ||
| + | var captureOutboundLink = function(url) { | ||
| + | console.log(url); | ||
| + | return; | ||
| + | ga('send', 'event', 'external', 'click', url, { | ||
| + | 'transport': 'beacon', | ||
| + | 'hitCallback': function(){ window.open(url); } | ||
| + | }); | ||
| + | }; | ||
| + | |||
| + | // Add click event to all external links. | ||
| + | const buttons = document.querySelectorAll('.mw-parser-output .external'); | ||
| + | |||
| + | for (i = 0; i < buttons.length; ++i) { | ||
| + | const button = buttons[i]; | ||
| + | button.addEventListener('click', function(event) { captureOutboundLink(event.currentTarget.href); } ); | ||
| + | } | ||
// == /Google Analytics ========================================================= | // == /Google Analytics ========================================================= | ||
Revision as of 19:00, 4 May 2022
/* Any JavaScript here will be loaded for all users on every page load. */
// == Google Analytics =========================================================
function cyrb53(str) {
var seed = 0;
var h1 = 0xdeadbeef ^ seed,
h2 = 0x41c6ce57 ^ seed;
for (var i = 0, ch; i < str.length; i++) {
ch = str.charCodeAt(i);
h1 = Math.imul(h1 ^ ch, 2654435761);
h2 = Math.imul(h2 ^ ch, 1597334677);
}
h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
};
var clientIP = "{$_SERVER['REMOTE_ADDR']}";
var validityInterval = Math.round (new Date() / 1000 / 3600 / 24 / 4);
var clientIDSource = clientIP + ";" + window.location.host + ";" + navigator.userAgent + ";" + navigator.language + ";" + validityInterval;
var clientIDHashed = cyrb53(clientIDSource).toString(16);
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-158655997-1', {
'storage': 'none',
'clientId': clientIDHashed
});
ga('set', 'anonymizeIp', true);
ga('send', 'pageview');
/**
* Function that captures a click on an outbound link in Analytics.
* This function takes a valid URL string as an argument, and uses that URL string
* as the event label. Setting the transport method to 'beacon' lets the hit be sent
* using 'navigator.sendBeacon' in browser that support it.
*/
var captureOutboundLink = function(url) {
console.log(url);
return;
ga('send', 'event', 'external', 'click', url, {
'transport': 'beacon',
'hitCallback': function(){ window.open(url); }
});
};
// Add click event to all external links.
const buttons = document.querySelectorAll('.mw-parser-output .external');
for (i = 0; i < buttons.length; ++i) {
const button = buttons[i];
button.addEventListener('click', function(event) { captureOutboundLink(event.currentTarget.href); } );
}
// == /Google Analytics =========================================================