diff --git a/README.md b/README.md index cbf9617..6180faf 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,15 @@ module.exports = { hjsv: 'YOUR_HOTJAR_SNIPPET_VERSION', cookieName: 'gatsby-gdpr-hotjar', // default }, + dynamicsMarketing: { + id: "YOUR_ID_FROM_DYNAMICS_MARKETING", //leave empty if you want to disable the tracker + script: "YOUR_DYNAMICS_MARKETING_TRACKING_SCRIPT", + formScript: "YOUR_DYNAMICS_MARKETING_FORM_SCRIPT", + className: "d365-mkt-config", // default + websiteId: "YOUR_DYNAMICS_MARKETING_DATA_WEBSITE_ID", + dataHostName: "YOUR_DYNAMICS_MARKETING_DATA_HOSTNAME", + cookieName: "gatsby-gdpr-dynamics-marketing", // default + } // defines the environments where the tracking should be available - default is ["production"] environments: ['production', 'development'] }, @@ -182,6 +191,49 @@ Stands for 'Hotjar Snippet Version' - The version of the Tracking Code you are u You can use a custom cookie name if you need to! +### Dynamics Marketing + +Add the following div tags to all pages that are to be tracked +Replace values with parameters from gatsby.config file: + +``` +
+ +``` + +#### `id` + +Your Marketing site's ID. + +#### `script` + +Your tracking script from dynamics marketing. + +#### `formScript` + +Your script for Marketing forms. + +#### `className` + +Default is 'd365-mkt-config hidden'. Div class + +#### `websiteId` + +Your Marketing data-website-id. + +#### `dataHostName` + +Your Marketing data-hostName. + +#### `cookieName` + +You can use a custom cookie name if you need to! + + ## Initialize and track This gatsby plugin now supports initializing and tracking right after a user accepts the cookie consent. diff --git a/src/default-options.js b/src/default-options.js index 4351f61..4169439 100644 --- a/src/default-options.js +++ b/src/default-options.js @@ -18,5 +18,9 @@ export const defaultOptions = { }, hotjar: { cookieName: `gatsby-gdpr-hotjar` + }, + dynamicsMarketing: { + cookieName: `gatsby-gdpr-dynamics-marketing`, + className: `d365-mkt-config hidden` } } diff --git a/src/gatsby-browser.js b/src/gatsby-browser.js index c758bab..8392caf 100644 --- a/src/gatsby-browser.js +++ b/src/gatsby-browser.js @@ -9,12 +9,14 @@ export const onClientEntry = (_, pluginOptions = {}) => { window.gatsbyPluginGDPRCookiesFacebookPixelAdded = false window.gatsbyPluginGDPRCookiesTikTokPixelAdded = false window.gatsbyPluginGDPRCookiesHotjarAdded = false + window.gatsbyPluginGDPRCookiesDynamicsMarketingAdded = false window.gatsbyPluginGDPRCookiesGoogleAnalyticsInitialized = false window.gatsbyPluginGDPRCookiesGoogleTagManagerInitialized = false window.gatsbyPluginGDPRCookiesFacebookPixelInitialized = false window.gatsbyPluginGDPRCookiesTikTokPixelInitialized = false window.gatsbyPluginGDPRCookiesHotjarInitialized = false + window.gatsbyPluginGDPRCookiesDynamicsMarketingInitialized = false // google tag manager setup const { googleTagManager } = pluginOptions diff --git a/src/helper.js b/src/helper.js index 4ba06c6..8902ad5 100644 --- a/src/helper.js +++ b/src/helper.js @@ -20,6 +20,12 @@ exports.validHotjarId = options => options.hjsv && options.hjsv.trim() !== `` +exports.validDMId = options => + options.id && + options.id.trim() !== `` && + options.websiteId && + options.websiteId.trim() !== `` + exports.getCookie = name => { var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); return v ? v[2] : null; diff --git a/src/index.js b/src/index.js index 49f0f56..91b9fd0 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,8 @@ const { initializeAndTrackGoogleTagManager, initializeAndTrackFacebookPixel, initializeAndTrackTikTokPixel, - initializeAndTrackHotjar + initializeAndTrackHotjar, + initializeAndTrackDynamicsMarketing } = require('./services') const { isEnvironmentValid } = require('./helper') @@ -20,6 +21,7 @@ exports.initializeAndTrack = (location) => { initializeAndTrackFacebookPixel(options.facebookPixel) initializeAndTrackTikTokPixel(options.tikTokPixel) initializeAndTrackHotjar(options.hotjar) + initializeAndTrackDynamicsMarketing(options.dynamicsMarketing) } } } diff --git a/src/services/dynamics-marketing.js b/src/services/dynamics-marketing.js new file mode 100644 index 0000000..8029a88 --- /dev/null +++ b/src/services/dynamics-marketing.js @@ -0,0 +1,48 @@ +const { + validDMId, + getCookie +} = require("../helper") + +exports.addDynamicsMarketing = ( options ) => { + return new Promise((resolve, reject) => { + if (window.gatsbyPluginGDPRCookiesDynamicsMarketingAdded) + return resolve(true) + + /* eslint disable */ + const head = document.getElementsByTagName('head')[0] + const script = document.createElement(`script`) + script.type = `text/javascript` + script.src = options.script + head.appendChild(script); + + const formScript = document.createElement(`script`) + formScript.type = `text/javascript` + formScript.src = options.formScript + head.appendChild(formScript); + + ( + window, + document, + 'script', + options.script + ) + + /* eslint-enable */ + + window.gatsbyPluginGDPRCookiesDynamicsMarketingAdded = true + resolve(true) + }); +} + +exports.initializeDynamicsMarketing = (options) => { + if ( + !window.gatsbyPluginGDPRCookiesDynamicsMarketingInitialized && + getCookie(options.cookieName) === `true` && + validDMId(options) + ) { + window.gatsbyPluginGDPRCookiesDynamicsMarketingInitialized = true + } +} +exports.trackDynamicsMarketing = (options) => { + // -- +} \ No newline at end of file diff --git a/src/services/index.js b/src/services/index.js index e576fd7..89dd92e 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -4,6 +4,7 @@ const { validFbPixelId, validTikTokPixelId, validHotjarId, + validDMId, getCookie } = require('../helper') @@ -37,6 +38,12 @@ const { trackHotjar } = require('./hotjar') +const { + addDynamicsMarketing, + initializeDynamicsMarketing, + trackDynamicsMarketing +} = require('./dynamics-marketing') + exports.initializeAndTrackGoogleAnalytics = (options, location) => { if ( getCookie(options.cookieName) === `true` && @@ -111,3 +118,17 @@ exports.initializeAndTrackHotjar = (options) => { }) } } + +exports.initializeAndTrackDynamicsMarketing = (options) => { + if( + getCookie(options.cookieName) === `true` && + validDMId(options) + ) { + addDynamicsMarketing(options).then((status) => { + if(status) { + initializeDynamicsMarketing(options) + trackDynamicsMarketing(options) + } + }) + } +}