UNPKG

@metadonors/gatsby-plugin-gtag

Version:

Gatsby plugin to add Google Analytics gtag.js (replacement for analytics.js) to a site. Includes Outbound Links.

52 lines (37 loc) 2.08 kB
'use strict'; var _react = require('react'); var _react2 = _interopRequireDefault(_react); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var GTAG_SRC = 'https://www.googletagmanager.com/gtag/js'; exports.onRenderBody = function (_ref, pluginOptions) { var setHeadComponents = _ref.setHeadComponents, setPostBodyComponents = _ref.setPostBodyComponents; var isPluginEnabled = stringToBool(process.env.GATSBY_GTAG_DEBUG) || process.env.NODE_ENV === 'production'; if (!pluginOptions.trackingId || !isPluginEnabled) { return null; } var anonymize = pluginOptions.anonymize || false; var optimizeId = pluginOptions.optimizeId || false; var gtagScript = _react2.default.createElement('script', { async: true, key: 'gatsby-plugin-gtag-gtag-js', src: GTAG_SRC + '?id=' + pluginOptions.trackingId }); var scriptStr = '\n window.GATSBY_GTAG_PLUGIN_GA_TRACKING_ID = (\n \'' + pluginOptions.trackingId + '\'\n );\n window.GATSBY_GTAG_PLUGIN_GA_OPTIMIZE_ID = (\n \'' + pluginOptions.optimizeId + '\'\n );\n window.GATSBY_GTAG_PLUGIN_ANONYMIZE = ' + anonymize + ';\n\n var options = {\n send_page_view: false,\n optimizeId: \'' + optimizeId + '\'\n };\n if (' + anonymize + ') {\n options.anonymize_ip = true;\n }\n\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n window.gtag = gtag;\n gtag(\'js\', new Date());\n gtag(\'config\', \'' + pluginOptions.trackingId + '\', options);\n '; var trackScript = _react2.default.createElement('script', { key: 'gatsby-plugin-gtag-inline-script', dangerouslySetInnerHTML: { __html: scriptStr } }); var setComponents = pluginOptions.head ? setHeadComponents : setPostBodyComponents; return setComponents([gtagScript, trackScript]); }; function stringToBool(s) { if (!s) { return false; } var sNorm = s.trim().toLowerCase(); if (!sNorm.length) { return false; } return sNorm === 'true' || sNorm === '1'; }