/******************************************************************************* uBlock Origin - a browser extension to block requests. Copyright (C) 2019-present Raymond Hill This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see {http://www.gnu.org/licenses/}. Home: https://github.com/gorhill/uBlock */ (function() { 'use strict'; // https://developers.google.com/analytics/devguides/collection/analyticsjs/ const noopfn = function() { }; // const Tracker = function() { }; const p = Tracker.prototype; p.get = noopfn; p.set = noopfn; p.send = noopfn; // const w = window; const gaName = w.GoogleAnalyticsObject || 'ga'; const gaQueue = w[gaName]; // https://github.com/uBlockOrigin/uAssets/pull/4115 const ga = function() { const len = arguments.length; if ( len === 0 ) { return; } const args = Array.from(arguments); let fn; let a = args[len-1]; if ( a instanceof Object && a.hitCallback instanceof Function ) { fn = a.hitCallback; } else if ( a instanceof Function ) { fn = ( ) => { a(ga.create()); }; } else { const pos = args.indexOf('hitCallback'); if ( pos !== -1 && args[pos+1] instanceof Function ) { fn = args[pos+1]; } } if ( fn instanceof Function === false ) { return; } try { fn(); } catch (ex) { } }; ga.create = function() { return new Tracker(); }; ga.getByName = function() { return new Tracker(); }; ga.getAll = function() { return [new Tracker()]; }; ga.remove = noopfn; // https://github.com/uBlockOrigin/uAssets/issues/2107 ga.loaded = true; w[gaName] = ga; // https://github.com/gorhill/uBlock/issues/3075 const dl = w.dataLayer; if ( dl instanceof Object ) { if ( dl.hide instanceof Object && typeof dl.hide.end === 'function' ) { dl.hide.end(); dl.hide.end = ()=>{}; } if ( typeof dl.push === 'function' ) { const doCallback = function(item) { if ( item instanceof Object === false ) { return; } if ( typeof item.eventCallback !== 'function' ) { return; } setTimeout(item.eventCallback, 1); item.eventCallback = ()=>{}; }; dl.push = new Proxy(dl.push, { apply: function(target, thisArg, args) { doCallback(args[0]); return Reflect.apply(target, thisArg, args); } }); if ( Array.isArray(dl) ) { const q = dl.slice(); for ( const item of q ) { doCallback(item); } } } } // empty ga queue if ( gaQueue instanceof Function && Array.isArray(gaQueue.q) ) { const q = gaQueue.q.slice(); gaQueue.q.length = 0; for ( const entry of q ) { ga(...entry); } } })();