UNPKG

gatsby-plugin-google-gtag-optin

Version:
64 lines (52 loc) 3.72 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _react = _interopRequireDefault(require("react")); var _minimatch = require("minimatch"); var _index = require("./index"); exports.onRenderBody = function (_ref, pluginOptions) { var setHeadComponents = _ref.setHeadComponents, setPostBodyComponents = _ref.setPostBodyComponents; if (process.env.NODE_ENV !== "production" && process.env.NODE_ENV !== "test") return null; // Lighthouse recommends pre-connecting to google tag manager setHeadComponents([/*#__PURE__*/_react.default.createElement("link", { rel: "preconnect", key: "preconnect-google-gtag", href: "https://www.googletagmanager.com" }), /*#__PURE__*/_react.default.createElement("link", { rel: "dns-prefetch", key: "dns-prefetch-google-gtag", href: "https://www.googletagmanager.com" })]); var gtagConfig = pluginOptions.gtagConfig || {}; var pluginConfig = pluginOptions.pluginConfig || {}; var OPTIN_KEY = pluginConfig.optinKey || _index.GTAG_OPTIN_KEY; // Prevent duplicate or excluded pageview events being emitted on initial load of page by the `config` command // https://developers.google.com/analytics/devguides/collection/gtagjs/#disable_pageview_tracking gtagConfig.send_page_view = false; var firstTrackingId = pluginOptions.trackingIds && pluginOptions.trackingIds.length ? pluginOptions.trackingIds[0] : ""; var excludeGtagPaths = []; if (typeof pluginConfig.exclude !== "undefined") { pluginConfig.exclude.map(function (exclude) { var mm = new _minimatch.Minimatch(exclude); excludeGtagPaths.push(mm.makeRe()); }); } var setComponents = pluginConfig.head ? setHeadComponents : setPostBodyComponents; var renderHtml = function renderHtml() { return "\n " + (excludeGtagPaths.length ? "window.excludeGtagPaths=[" + excludeGtagPaths.join(",") + "];" : "") + "\n " + (typeof gtagConfig.anonymize_ip !== "undefined" && gtagConfig.anonymize_ip === true ? "function gaOptout(){document.cookie=disableStr+'=true; expires=Thu, 31 Dec 2099 23:59:59 UTC;path=/',window[disableStr]=!0}var gaProperty='" + firstTrackingId + "',disableStr='ga-disable-'+gaProperty;document.cookie.indexOf(disableStr+'=true')>-1&&(window[disableStr]=!0);" : "") + "\n if(" + (pluginConfig.respectDNT ? "!(navigator.doNotTrack == \"1\" || window.doNotTrack == \"1\")" : "true") + ") {\n window.dataLayer = window.dataLayer || [];\n function gtag(){window.dataLayer && window.dataLayer.push(arguments);}\n gtag('js', new Date());\n " + pluginOptions.trackingIds.map(function (trackingId) { return "gtag('config', '" + trackingId + "', " + JSON.stringify(gtagConfig) + ");"; }).join("") + "\n }\n "; }; var loadFunction = function loadFunction() { return "\n function loadGtag() {\n const gtagScript = document.createElement(\"script\")\n gtagScript.type = 'text/javascript'\n gtagScript.async = true\n gtagScript.src = \"https://www.googletagmanager.com/gtag/js?id=" + firstTrackingId + "\"\n const tag = document.getElementsByTagName('script')[0];\n tag.parentNode.insertBefore(gtagScript, tag)\n }\n if (localStorage.getItem(\"" + OPTIN_KEY + "\") === \"true\") window.loadGtag()"; }; return setComponents([/*#__PURE__*/_react.default.createElement("script", { key: "gatsby-plugin-google-gtag", dangerouslySetInnerHTML: { __html: loadFunction() } }), /*#__PURE__*/_react.default.createElement("script", { key: "gatsby-plugin-google-gtag-config", dangerouslySetInnerHTML: { __html: renderHtml() } })]); };