|
1 | | -/* Simple Analytics - Privacy friendly analytics (docs.simpleanalytics.com/script; 2022-09-05; 9974; v10) */ |
| 1 | +/* Simple Analytics - Privacy friendly analytics (docs.simpleanalytics.com/script; 2023-05-03; 0dec; v11) */ |
2 | 2 | /* eslint-env browser */ |
3 | 3 |
|
4 | 4 | (function ( |
|
59 | 59 | var platformText = "platform"; |
60 | 60 | var platformVersionText = "platformVersion"; |
61 | 61 | var docsUrl = "https://docs.simpleanalytics.com"; |
| 62 | + var pages = 0; |
62 | 63 | var isBotAgent = |
63 | 64 | /(bot|spider|crawl)/i.test(userAgent) && !/(cubot)/i.test(userAgent); |
64 | 65 | var screen = window.screen; |
65 | 66 |
|
| 67 | + // Skip server side rendered pages on Cloudflare |
| 68 | + if (typeof window == "" + undefinedVar) return; |
| 69 | + |
66 | 70 | // Find the script element where options can be set on |
67 | 71 | var scriptElement = |
68 | 72 | doc.currentScript || doc.querySelector('script[src*="' + baseUrl + '"]'); |
|
77 | 81 | var args = [].slice.call(arguments); |
78 | 82 |
|
79 | 83 | // 2. Prepend log prefix |
80 | | - args.unshift("Simple Analytics: "); |
| 84 | + args.unshift("Simple Analytics:"); |
81 | 85 |
|
82 | 86 | // 3. Pass along arguments to console.warn |
83 | | - // Function.prototype.bind.call is needed for Internet Explorer |
84 | | - var log = Function.prototype.bind.call(con.warn, con); |
85 | | - log.apply(con, args); |
| 87 | + // Function.prototype.apply.call is needed for Internet Explorer |
| 88 | + return Function.prototype.apply.call(con.warn, con, args); |
86 | 89 | }; |
87 | 90 |
|
88 | 91 | var warnInFunction = function (name, error) { |
|
133 | 136 | return to; |
134 | 137 | }; |
135 | 138 |
|
| 139 | + var settings = window.sa_settings; |
| 140 | + var logSettings = settings || Object.keys(overwriteOptions).length; |
| 141 | + |
136 | 142 | // Merge overwriteOptions with sa_settings |
137 | | - overwriteOptions = assign(overwriteOptions, window.sa_settings); |
| 143 | + overwriteOptions = assign(overwriteOptions, settings); |
| 144 | + |
| 145 | + if (logSettings) warn("Settings", overwriteOptions); |
138 | 146 |
|
139 | 147 | // Customers can skip data points |
140 | 148 | var ignoreMetrics = convertCommaSeparatedToArray( |
|
280 | 288 | data = onlyThisData ? data : assign(payload, page, data); |
281 | 289 |
|
282 | 290 | if (nav.brave && !onlyThisData) data.brave = trueVar; |
| 291 | + if (nav._duckduckgoloader_ && !onlyThisData) data.duck = trueVar; |
283 | 292 |
|
284 | 293 |
|
285 | 294 | var image = new Image(); |
|
432 | 441 | window.phantom || |
433 | 442 | window.__polypane || |
434 | 443 | window._bot || |
435 | | - isBotAgent; |
| 444 | + isBotAgent || |
| 445 | + Math.random() == Math.random(); |
436 | 446 |
|
437 | 447 | // t = timeonpage, scro = scrolled |
438 | 448 | var collectDataOnLeave = |
|
501 | 511 | var page = {}; |
502 | 512 | var lastSendPath; |
503 | 513 |
|
| 514 | + var getReferrer = function () { |
| 515 | + return ( |
| 516 | + (doc.referrer || "") |
| 517 | + .replace(locationHostname, definedHostname) |
| 518 | + .replace(/^https?:\/\/((m|l|w{2,3}([0-9]+)?)\.)?([^?#]+)(.*)$/, "$4") |
| 519 | + .replace(/^([^/]+)$/, "$1") || undefinedVar |
| 520 | + ); |
| 521 | + }; |
| 522 | + |
504 | 523 | // We don't want to end up with sensitive data so we clean the referrer URL |
505 | | - var referrer = |
506 | | - (doc.referrer || "") |
507 | | - .replace(locationHostname, definedHostname) |
508 | | - .replace(/^https?:\/\/((m|l|w{2,3}([0-9]+)?)\.)?([^?#]+)(.*)$/, "$4") |
509 | | - .replace(/^([^/]+)$/, "$1") || undefinedVar; |
| 524 | + var referrer = getReferrer(); |
510 | 525 |
|
511 | 526 | ///////////////////// |
512 | 527 | // TIME ON PAGE AND SCROLLED LOGIC |
|
629 | 644 | return path; |
630 | 645 | }; |
631 | 646 |
|
| 647 | + var previousReferrer; |
| 648 | + |
632 | 649 | // Send page view and append data to it |
633 | 650 | var sendPageView = function ( |
634 | 651 | isPushState, |
|
650 | 667 | metadata: stringify(metadata), |
651 | 668 | }); |
652 | 669 |
|
| 670 | + previousReferrer = referrer; |
653 | 671 | referrer = currentPage; |
| 672 | + |
| 673 | + pages++; |
654 | 674 | }; |
655 | 675 |
|
| 676 | + var sameSite, userNavigated; |
| 677 | + |
656 | 678 | var pageview = function (isPushState, pathOverwrite, metadata) { |
657 | 679 | // Obfuscate personal data in URL by dropping the search and hash |
658 | 680 | var path = getPath(pathOverwrite); |
|
698 | 720 | warn(error); |
699 | 721 | } |
700 | 722 |
|
701 | | - var userNavigated = performaceEntryType |
| 723 | + userNavigated = performaceEntryType |
702 | 724 | ? ["reload", "back_forward"].indexOf(performaceEntryType) > -1 |
703 | 725 | : // Check if back, forward or reload buttons are being use in older browsers |
704 | 726 | // 1: TYPE_RELOAD, 2: TYPE_BACK_FORWARD |
|
707 | 729 | [1, 2].indexOf(perf[navigationText].type) > -1; |
708 | 730 |
|
709 | 731 | // Check if referrer is the same as current real hostname (not the defined hostname!) |
710 | | - var currentReferrerHostname = doc.referrer.split(slash)[2]; |
711 | | - var sameSite = referrer |
| 732 | + var currentReferrerHostname = referrer |
| 733 | + ? referrer.split(slash)[0] |
| 734 | + : undefinedVar; |
| 735 | + sameSite = referrer |
712 | 736 | ? nonUniqueHostnames.indexOf(currentReferrerHostname) > -1 || |
713 | 737 | currentReferrerHostname == locationHostname |
714 | 738 | : falseVar; |
|
861 | 885 | event = ("" + event).replace(/[^a-z0-9]+/gi, "_").replace(/(^_|_$)/g, ""); |
862 | 886 |
|
863 | 887 | var eventParams = { type: eventText, event: event }; |
| 888 | + var firstPage = !userNavigated && pages < 2; |
864 | 889 |
|
865 | 890 | metadata = appendMetadata(metadata, eventParams); |
866 | 891 |
|
867 | 892 | if (event) { |
868 | 893 | sendData( |
869 | 894 | assign(eventParams, { |
870 | | - query: getQueryParams(), |
| 895 | + id: uuid(), |
| 896 | + query: getQueryParams(!firstPage), |
| 897 | + referrer: |
| 898 | + (firstPage || sameSite) && collectMetricByString("r") |
| 899 | + ? previousReferrer |
| 900 | + : null, |
871 | 901 |
|
872 | 902 | metadata: stringify(metadata), |
873 | 903 | }), |
|
905 | 935 | } |
906 | 936 | })( |
907 | 937 | window, |
908 | | - {"saGlobal":INSTALL_OPTIONS.sa_global,"mode":INSTALL_OPTIONS.hash_mode ? 'hash' : null,"collectDnt":INSTALL_OPTIONS.collect_dnt}, |
| 938 | + {"hostname":INSTALL_OPTIONS.hostname,"collectDnt":typeof INSTALL_OPTIONS.collect_dnt === 'boolean' ? INSTALL_OPTIONS.collect_dnt : null,"mode":INSTALL_OPTIONS.hash_mode ? 'hash' : 'normal',"strictUtm":INSTALL_OPTIONS.advanced_settings_toggle && INSTALL_OPTIONS.strict_utm,"allowParams":INSTALL_OPTIONS.advanced_settings_toggle && INSTALL_OPTIONS.allow_url_parameters,"nonUniqueHostnames":INSTALL_OPTIONS.advanced_settings_toggle && INSTALL_OPTIONS.non_unique_hostnames,"ignorePages":INSTALL_OPTIONS.advanced_settings_toggle && INSTALL_OPTIONS.ignore_pages,"namespace":INSTALL_OPTIONS.overwrite_namespace && INSTALL_OPTIONS.namespace}, |
909 | 939 | INSTALL_OPTIONS.custom_domain || "queue.simpleanalyticscdn.com", |
910 | 940 | "", |
911 | | - "cloudflare_10", |
| 941 | + "cloudflare_11", |
912 | 942 | "sa" |
913 | 943 | ); |
0 commit comments