diff --git a/app/assets/javascripts/google-universal-analytics.js b/app/assets/javascripts/google-universal-analytics.js index 5a70da09f57..b0e06a51c69 100644 --- a/app/assets/javascripts/google-universal-analytics.js +++ b/app/assets/javascripts/google-universal-analytics.js @@ -1,23 +1,21 @@ // discourse-skip-module +/* eslint-disable */ +// prettier-ignore +(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'); +/* eslint-enable */ + (function () { const gaDataElement = document.getElementById("data-ga-universal-analytics"); + const gaJson = JSON.parse(gaDataElement.dataset.json); - window.dataLayer = window.dataLayer || []; - function gtag() { - window.dataLayer.push(arguments); - } - gtag("js", new Date()); - - let autoLinkConfig = {}; - + window.ga("create", gaDataElement.dataset.trackingCode, gaJson); if (gaDataElement.dataset.autoLinkDomains.length) { const autoLinkDomains = gaDataElement.dataset.autoLinkDomains.split("|"); - autoLinkConfig = { - linker: { - accept_incoming: true, - domains: autoLinkDomains, - }, - }; + + window.ga("require", "linker"); + window.ga("linker:autoLink", autoLinkDomains); } - gtag("config", gaDataElement.dataset.trackingCode, autoLinkConfig); })(); diff --git a/app/views/common/_google_universal_analytics.html.erb b/app/views/common/_google_universal_analytics.html.erb index 8a855aef65f..81d7a96db94 100644 --- a/app/views/common/_google_universal_analytics.html.erb +++ b/app/views/common/_google_universal_analytics.html.erb @@ -4,6 +4,4 @@ auto_link_domains: SiteSetting.ga_universal_auto_link_domains } %> - - <%= preload_script "google-universal-analytics" %> diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 870d2174390..d885ac331ee 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1551,9 +1551,9 @@ en: pending_users_reminder_delay: "Notify moderators if new users have been waiting for approval for longer than this many hours. Set to -1 to disable notifications." persistent_sessions: "Users will remain logged in when the web browser is closed" maximum_session_age: "User will remain logged in for n hours since last visit" - ga_universal_tracking_code: "Google Universal Analytics (gtm.js) tracking code ID, eg: UA-12345678-9; see https://google.com/analytics" - ga_universal_domain_name: "Google Universal Analytics (gtm.js) domain name, eg: mysite.com; see https://google.com/analytics" - ga_universal_auto_link_domains: "Enable Google Universal Analytics (gtm.js) cross-domain tracking. Outgoing links to these domains will have the client id added to them. See Google's Cross-Domain Tracking guide." + ga_universal_tracking_code: "Google Universal Analytics (analytics.js) tracking code ID, eg: UA-12345678-9; see https://google.com/analytics" + ga_universal_domain_name: "Google Universal Analytics (analytics.js) domain name, eg: mysite.com; see https://google.com/analytics" + ga_universal_auto_link_domains: "Enable Google Universal Analytics (analytics.js) cross-domain tracking. Outgoing links to these domains will have the client id added to them. See Google's Cross-Domain Tracking guide." gtm_container_id: "Google Tag Manager container id. eg: GTM-ABCDEF.
Note: Third-party scripts loaded by GTM may need to be allowlisted in 'content security policy script src'." enable_escaped_fragments: "Fall back to Google's Ajax-Crawling API if no webcrawler is detected. See https://developers.google.com/webmasters/ajax-crawling/docs/learn-more" moderators_manage_categories_and_groups: "Allow moderators to manage categories and groups" diff --git a/lib/content_security_policy/default.rb b/lib/content_security_policy/default.rb index e8ff3bfea3d..29c59c44d9b 100644 --- a/lib/content_security_policy/default.rb +++ b/lib/content_security_policy/default.rb @@ -56,7 +56,7 @@ class ContentSecurityPolicy ].tap do |sources| sources << :report_sample if SiteSetting.content_security_policy_collect_reports sources << :unsafe_eval if Rails.env.development? # TODO remove this once we have proper source maps in dev - sources << 'https://www.googletagmanager.com/gtag/js' if SiteSetting.ga_universal_tracking_code.present? + sources << 'https://www.google-analytics.com/analytics.js' if SiteSetting.ga_universal_tracking_code.present? sources << 'https://www.googletagmanager.com/gtm.js' if SiteSetting.gtm_container_id.present? end end diff --git a/spec/lib/content_security_policy_spec.rb b/spec/lib/content_security_policy_spec.rb index be2d46227ad..04557e3900b 100644 --- a/spec/lib/content_security_policy_spec.rb +++ b/spec/lib/content_security_policy_spec.rb @@ -74,7 +74,7 @@ describe ContentSecurityPolicy do SiteSetting.gtm_container_id = 'GTM-ABCDEF' script_srcs = parse(policy)['script-src'] - expect(script_srcs).to include('https://www.googletagmanager.com/gtag/js') + expect(script_srcs).to include('https://www.google-analytics.com/analytics.js') expect(script_srcs).to include('https://www.googletagmanager.com/gtm.js') end