@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
JavaScript
'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';
}