{"version":3,"file":"taunton-user-consent-2.2.2.js","sources":["../src/events/onReady.js","../src/user/hasDefinedPrefs.js","../src/user/isEUUser.js","../src/utils/readCookieAsBoolean.js","../src/config/config.js","../src/utils/readCookie.js","../src/user/hasAdvertisingConsent.js","../src/user/hasAnalyticsConsent.js","../src/ui/hideToolbar.js","../src/ui/showToolbar.js","../src/user/consent/callbackListener.js","../src/utils/createCookie.js","../src/ui/removeClass.js","../src/ui/addClass.js","../src/ui/toolbarAfterPrefs.js","../src/main.js","../src/ui/insertToolbar.js","../src/ui/handleClose.js","../src/ui/handleOpen.js","../src/ui/formHandler.js","../src/ui/handleDelete.js","../src/utils/eraseCookie.js","../src/user/hasExpiredPrefs.js","../src/user/consent/analytics.js","../src/user/consent/advertising.js","../src/utils/loadScriptSrc.js"],"sourcesContent":["///src/events/onready.js\nexport default (fn) => {\n if (document.attachEvent ? document.readyState === 'complete' : document.readyState !== 'loading'){\n fn();\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n};","///src/user/hasDefinedPrefs.js\nimport { preferencesCookie } from '../config/config';\nimport readCookie from '../utils/readCookie';\n\nexport default () => {\n if( readCookie(preferencesCookie) ) {\n return true;\n } else {\n return false;\n }\n};","///src/user/isEUUser.js\nexport default () => '<%isEUUser%>';","import readCookie from './readCookie';\n\nexport default (name) => {\n var cookie = readCookie(name);\n\n if(cookie) {\n if(cookie === 'true' || cookie === '1') {\n return true;\n }\n\n if(cookie === 'false' || cookie === '0') {\n return false;\n }\n\n return cookie;\n }\n return null;\n};","///src/config/config.js\n\n// :TODO: update URL\nexports.advertisingCheckbox = '#taunton-user-consent-advertising';\nexports.advertisingCookie = 'taunton_user_consent_advertising';\nexports.analyticsCheckbox = '#taunton-user-consent-analytics';\nexports.analyticsCookie = 'taunton_user_consent_analytics';\nexports.apiUrl = 'https://cjgd5n7n2k.execute-api.us-east-1.amazonaws.com/prod/gdpr-logger';\nexports.preferencesCookie = 'taunton_user_consent_submitted';\nexports.toolbarForm = '#taunton-user-consent__toolbar__form';\nexports.toolbarOpenTrigger = '.taunton-user-consent__open';\nexports.toolbarOpenClassname = 'taunton-user-consent-visible';\nexports.toolbarPrefsClassname = 'taunton-user-consent--has-defined-prefs';\nexports.toolbarOverlay = '#taunton-user-consent__overlay';\nexports.toolbarButtonClose = '#taunton-user-consent__button-close';\nexports.userIDCookie = 'taunton_user_consent_user_id';\nexports.consentListeners = [];","///src/utils/readCookie.js\nexport default (name) => {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') {\n c = c.substring(1,c.length);\n }\n if (c.indexOf(nameEQ) == 0) {\n return c.substring(nameEQ.length,c.length);\n }\n }\n return null;\n};","///src/user/previousAdConsent.js\nimport { advertisingCookie } from '../config/config';\nimport isEUUser from './isEUUser';\nimport readCookieAsBoolean from '../utils/readCookieAsBoolean';\n\n// checks for whether or not consent for ads has given at the time of page load\nexport default () => {\n // NON EU - check if there are any preferenes set then default to true if non EU and false if EU\n if( readCookieAsBoolean(advertisingCookie) == null ) {\n if( isEUUser() === false ) {\n return true;\n } else {\n return false;\n }\n } else {\n return readCookieAsBoolean(advertisingCookie);\n }\n};","///src/user/previousAdConsent.js\nimport { analyticsCookie } from '../config/config';\nimport isEUUser from './isEUUser';\nimport readCookieAsBoolean from '../utils/readCookieAsBoolean';\n\n// checks for whether or not consent for analytics has given\nexport default () => {\n // NON EU - check if there are any preferenes set then default to true if non EU and false if EU\n if( readCookieAsBoolean(analyticsCookie) == null ) {\n if( isEUUser() === false ) {\n return true;\n } else {\n return false;\n }\n } else {\n return readCookieAsBoolean(analyticsCookie);\n }\n};","///src/ui/hideToolbar.js\nimport { toolbarOpenClassname, toolbarOverlay } from '../config/config';\nimport removeClass from './removeClass';\n\nexport default () => {\n var el = document.querySelector(toolbarOverlay),\n className = toolbarOpenClassname;\n\n if(el) {\n removeClass(el, className);\n el.setAttribute('aria-hidden', 'true');\n }\n\n};","///src/ui/showToolbar.js\nimport { advertisingCheckbox, analyticsCheckbox, toolbarOpenClassname, toolbarOverlay } from '../config/config';\nimport addClass from './addClass';\nimport hasAdConsent from '../user/hasAdvertisingConsent';\nimport hasAlConsent from '../user/hasAnalyticsConsent';\nimport toolbarAfterPrefs from './toolbarAfterPrefs';\n\nexport default () => {\n var el = document.querySelector(toolbarOverlay),\n className = toolbarOpenClassname;\n\n if(el) {\n addClass(el, className);\n el.removeAttribute('aria-hidden');\n el.focus();\n\n if(hasAdConsent() === true) {\n checkTheBox(advertisingCheckbox);\n }\n\n if(hasAlConsent() === true) {\n checkTheBox(analyticsCheckbox);\n }\n\n toolbarAfterPrefs();\n\n }\n\n function checkTheBox(theCheckbox) {\n let el = document.querySelector(theCheckbox);\n if(el) {\n el.checked = true;\n }\n }\n\n};","// checks for whether or not consent for ads has given at the time of page load\n// Array of callbacks to be executed when consent changes\nimport { consentListeners } from '../../config/config';\nimport hasAdConsent from '../hasAdvertisingConsent';\nimport hasAlConsent from '../hasAnalyticsConsent';\n\nfunction addConsentListener(callback) {\n consentListeners.push(callback);\n}\n\nfunction changeConsentCallback (consent) {\n consentListeners.forEach((callback) => {\n callback(consent);\n });\n}\n\nvar consentState = {\n adconsent: hasAdConsent(),\n analyticsConsent: hasAlConsent()\n};\n\nexport { addConsentListener, changeConsentCallback, consentState};","///src/utils/createCookie.js\nexport default (name, value, days) => {\n var expires = '';\n if (days) {\n var date = new Date();\n date.setTime(date.getTime()+(days*24*60*60*1000));\n expires = '; expires='+date.toGMTString();\n }\n\n var domain = '; domain=.' + \n location.hostname.split('.').reverse()[1] + '.' + \n location.hostname.split('.').reverse()[0];\n \n document.cookie = name+'='+value+domain+expires+'; path=/';\n};","///src/ui/removeClass.js\nexport default (el, className) => {\n if(el) {\n if (el.classList) {\n el.classList.remove(className);\n }\n else {\n el.className = el.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n }\n }\n};","///src/ui/addClass.js\nexport default (el, className) => {\n if (el.classList) {\n el.classList.add(className);\n }\n else {\n el.className += ' ' + className;\n }\n};","///src/ui/toolbarAfterPrefs.js\nimport { toolbarOverlay, toolbarPrefsClassname } from '../config/config';\nimport hasDefinedPrefs from '../user/hasDefinedPrefs';\nimport addClass from './addClass';\nimport removeClass from './removeClass';\n\nexport default () => {\n let el = document.querySelector(toolbarOverlay);\n if (el) {\n if(hasDefinedPrefs() === true) {\n addClass(el, toolbarPrefsClassname);\n } else {\n removeClass(el, toolbarPrefsClassname);\n }\n }\n};","///src/main.js\n// Global polyfills used throughout project\n//import './polyfill/promise';\n//import 'whatwg-fetch';\n//import './polyfill/matches';\n// end polyfills\n\n// events\nimport onReady from './events/onReady';\nimport revokeConsent from './events/revokeConsent';\n\n// user\nimport hasDefinedPrefs from './user/hasDefinedPrefs';\nimport hasExpiredPrefs from './user/hasExpiredPrefs';\nimport hasAdConsent from './user/hasAdvertisingConsent';\nimport hasAlConsent from './user/hasAnalyticsConsent';\nimport isEUUser from './user/isEUUser';\nimport analytics from './user/consent/analytics';\nimport advertising from './user/consent/advertising';\nimport {addConsentListener, consentState } from './user/consent/callbackListener';\n\n// ui\nimport formHandler from './ui/formHandler';\nimport handleClose from './ui/handleClose';\nimport handleDelete from './ui/handleDelete';\nimport handleOpen from './ui/handleOpen';\nimport insertToolbar from './ui/insertToolbar';\nimport showToolbar from './ui/showToolbar';\n\n// Utils\nimport loadScriptSrc from './utils/loadScriptSrc';\nimport readCookieAsBoolean from './utils/readCookieAsBoolean';\n\nonReady(insertToolbar);\nonReady(handleClose);\nonReady(handleOpen);\nonReady(formHandler);\nonReady(handleDelete);\nif(hasDefinedPrefs() === false) {\n try {\n var qs = window.location.search;\n // quick and dirty\n if(qs.indexOf('taunton_user_consent=delete-all') === -1) {\n onReady(showToolbar);\n }\n } catch(e) {\n onReady(showToolbar);\n }\n} else if (hasExpiredPrefs()) {// NON EU - open by default if optin choice was made and has expired\n onReady(showToolbar);\n}\n\nlet analyticsConsent = analytics();\nlet advertisingConsent = advertising();\n\n// selectively expose things to the global namespace\nexport default {\n data: {\n ga_ua_id: undefined\n },\n events: {\n revokeConsent: revokeConsent,\n updateConsentListener: addConsentListener\n },\n user: {\n consent: {\n advertising: advertisingConsent,\n analytics: analyticsConsent\n },\n hasDefinedPrefs: hasDefinedPrefs,\n isEUUser: isEUUser,\n previousAdConsent: hasAdConsent,\n hasAnalyticsConsent: hasAlConsent,\n currentConsent: consentState\n },\n utils: {\n loadScriptSrc: loadScriptSrc,\n readCookieAsBoolean: readCookieAsBoolean\n }\n};","///src/ui/insertToolbar.js\nimport { toolbar } from '../templates/toolbar';\n\nexport default () => {\n var markup = toolbar;\n\n document.body.insertAdjacentHTML('beforeend', markup);\n};","///src/ui/handleClose.js\nimport {toolbarButtonClose, toolbarOverlay} from '../config/config';\nimport hideToolbar from './hideToolbar';\n\nexport default () => {\n const el = document.querySelector(toolbarOverlay);\n const closeButton = document.querySelector(toolbarButtonClose);\n\n if(el) {\n el.addEventListener('click', function(e) {\n console.log(e.target);\n if (e.target.matches(toolbarOverlay)) {\n e.stopPropagation();\n hideToolbar();\n } else if(closeButton && e.target.closest(toolbarButtonClose)) {\n e.stopPropagation();\n hideToolbar();\n }\n });\n }\n};","///src/ui/handleOpen.js\nimport { toolbarOpenTrigger } from '../config/config';\nimport showToolbar from './showToolbar';\n\nexport default () => {\n var triggers = document.querySelectorAll(toolbarOpenTrigger), i;\n\n for (i = 0; i < triggers.length; ++i) {\n triggers[i].addEventListener('click', function(e) {\n e.preventDefault();\n e.stopPropagation();\n showToolbar();\n });\n }\n};\n","///src/ui/formHandler.js\nimport { advertisingCheckbox, advertisingCookie, analyticsCheckbox, analyticsCookie, apiUrl, preferencesCookie, toolbarForm, userIDCookie } from '../config/config';\nimport createCookie from '../utils/createCookie';\nimport hideToolbar from './hideToolbar';\nimport readCookie from '../utils/readCookie';\nimport { changeConsentCallback, consentState } from '../user/consent/callbackListener';\n\n/**\n * ```\n * {\n * \"domain\": \"www.finecooking.com\",\n * \"data\": {\n * \"uid\": \"d15493f7-995f-43b5-b075-04b1e76b23fe\",\n * \"ad\": \"test2\",\n * \"at\": \"test\",\n * \"deletion\": \"1\"\n * }\n * }\n * ```\n\n */\nexport default () => {\n var form = document.querySelector(toolbarForm),\n analytics = document.querySelector(analyticsCheckbox),\n advertising = document.querySelector(advertisingCheckbox);\n\n if(form) {\n form.addEventListener('submit', function(e){\n e.preventDefault();\n\n var url = apiUrl,\n request = {\n domain: window.location.hostname,\n data: {\n deletion: 'false' // this indicates if it's a user click on delete all cookies\n }\n },\n userID = readCookie(userIDCookie);\n\n if(analytics) {\n request.data.at = analytics.checked + '';\n }\n\n if(advertising) {\n request.data.ad = advertising.checked + '';\n }\n\n // :TODO: send GUID if it exists\n if(userID) {\n request.data.uid = userID;\n }\n\n fetch(url, {\n method: 'POST', // or 'PUT'\n body: JSON.stringify(request), // data can be `string` or {object}!\n headers: new Headers({\n 'Content-Type': 'application/json'\n })\n }).then(function(res) {\n return res.json();\n }).catch(function(error) {\n if( window.console && typeof window.console.error === 'function' ) {\n console.error('Error:', error);\n }\n return;\n }).then(function(response) {\n\n hideToolbar();\n createCookie(preferencesCookie, 'true', 365);\n\n //window.dataLayer = window.dataLayer || [];\n\n if(typeof request.data.at !== 'undefined') {\n createCookie(analyticsCookie, request.data.at + '', 365);\n consentState.analyticsConsent = request.data.at + '' === 'true' ? true : false;\n //window.dataLayer.push({'event': 'gdpr_analytics_consent'});\n }\n\n if(typeof request.data.ad !== 'undefined') {\n createCookie(advertisingCookie, request.data.ad + '', 365);\n consentState.adConsent = request.data.ad + '' === 'true' ? true: false;\n //window.dataLayer.push({'event': 'gdpr_advertising_consent'});\n }\n \n // pass new consent status to any callback method that has been requested.\n changeConsentCallback(consentState);\n\n // :TODO: test this when response from API is ready\n if(typeof request.data.uid === 'undefined' && typeof response !== 'undefined' && response.uid) {\n createCookie(userIDCookie, response.uid, 1825); // 5 years\n }\n\n if( window.console && typeof window.console.log === 'function' ) {\n console.log('Success:', response);\n }\n });\n\n });\n }\n};","///src/ui/formHandler.js\nimport { apiUrl, toolbarOverlay, userIDCookie } from '../config/config';\nimport eraseCookie from '../utils/eraseCookie';\nimport hideToolbar from './hideToolbar';\nimport readCookie from '../utils/readCookie';\n\nexport default () => {\n var el = document.querySelector(toolbarOverlay);\n\n if(el) {\n el.addEventListener('click', function(e) {\n if (e.target.matches('#taunton-user-consent__delete-all')) {\n var cookies = document.cookie.split(';'),\n userID = readCookie(userIDCookie);\n e.stopPropagation();\n e.preventDefault();\n\n // erase all cookies\n for (var i = 0; i < cookies.length; i++) {\n eraseCookie(cookies[i].split('=')[0]);\n }\n\n var url = apiUrl,\n request = {\n domain: window.location.hostname,\n data: {\n ad: 'false',\n at: 'false',\n deletion: 'true' // this indicates if it's a user click on delete all cookies\n }\n };\n\n if(userID) {\n request.data.uid = userID;\n }\n\n fetch(url, {\n method: 'POST', // or 'PUT'\n body: JSON.stringify(request), // data can be `string` or {object}!\n headers: new Headers({\n 'Content-Type': 'application/json'\n })\n }).then(function(res) {\n return res.json();\n }).catch(function(error) {\n if( window.console && typeof window.console.error === 'function' ) {\n console.error('Error:', error);\n }\n return;\n }).then(function(response) {\n hideToolbar();\n\n if( window.console && typeof window.console.log === 'function' ) {\n console.log('Success:', response);\n }\n\n try {\n var page_url = window.location.href.split('?'),\n qs = window.location.search;\n\n var result = window.location.href;\n\n if(qs.length) {\n var query_sub = qs.split('?');\n if( query_sub.length === 2) {\n var query_parts = query_sub[1].split('&');\n if( query_parts.indexOf('taunton_user_consent=delete-all') === -1 ) {\n query_parts.push('taunton_user_consent=delete-all');\n }\n qs = '?' + query_parts.join('&');\n }\n } else {\n qs = '?taunton_user_consent=delete-all';\n }\n\n result = page_url[0] + qs;\n window.location.href = result;\n\n } catch(e) {\n if( window.console && typeof window.console.error === 'function' ) {\n console.error('Error:', e);\n }\n }\n });\n\n }\n });\n\n }\n};","///src/utils/eraseCookie.js\nimport createCookie from './createCookie';\n\nexport default (name, domain) => {\n createCookie(name, '', -1, domain);\n};\n","///src/user/hasExpiredPrefs.js\nimport { userIDCookie } from '../config/config';\nimport hasDefinedPrefs from './hasDefinedPrefs';\nimport readCookie from '../utils/readCookie';\n\nexport default () => {\n if(!hasDefinedPrefs() && (readCookie(userIDCookie) != null)) {\n return true;\n } else {\n return false;\n }\n};","///src/user/consent/analytics.js\nimport { analyticsCheckbox, toolbarForm } from '../../config/config';\nimport hasAlConsent from '../hasAnalyticsConsent';\nimport onReady from '../../events/onReady';\n\nexport default() => {\n return new Promise((resolve) => {\n if (hasAlConsent() === true) {//check the cookie\n resolve(true);\n } else { //set the event on the form\n onReady(() => {\n var form = document.querySelector(toolbarForm),\n analytics = document.querySelector(analyticsCheckbox);\n\n if(form) {\n form.addEventListener('submit', function(e) {\n e.preventDefault();\n if(analytics && analytics.checked) {\n resolve(true);\n }\n });\n }\n });\n }\n });\n};","///src/user/consent/advertising.js\nimport { advertisingCheckbox, toolbarForm } from '../../config/config';\nimport hasAdConsent from '../hasAdvertisingConsent';\nimport onReady from '../../events/onReady';\n\nexport default() => {\n return new Promise((resolve) => {\n if (hasAdConsent() === true) {\n resolve(true);\n } else {\n onReady(() => {\n var form = document.querySelector(toolbarForm),\n advertising = document.querySelector(advertisingCheckbox);\n \n if(form) {\n form.addEventListener('submit', function(e) {\n e.preventDefault();\n if(advertising && advertising.checked) {\n resolve(true);\n }\n });\n }\n });\n }\n });\n};","///src/utils/loadScriptSrc.js\n// https://stackoverflow.com/a/7719185\nexport default (src) => {\n return new Promise(function (resolve, reject) {\n var s;\n s = document.createElement('script');\n s.src = src;\n s.onload = resolve;\n s.onerror = reject;\n document.head.appendChild(s);\n });\n};\n"],"names":["fn","document","attachEvent","readyState","addEventListener","readCookie","preferencesCookie","name","cookie","nameEQ","ca","split","i","length","c","charAt","substring","indexOf","readCookieAsBoolean","advertisingCookie","analyticsCookie","el","querySelector","toolbarOverlay","toolbarOpenClassname","setAttribute","checkTheBox","theCheckbox","checked","removeAttribute","focus","hasAdConsent","advertisingCheckbox","hasAlConsent","analyticsCheckbox","consentState","value","days","date","expires","domain","Date","setTime","getTime","toGMTString","location","hostname","reverse","className","classList","remove","replace","RegExp","join","add","hasDefinedPrefs","toolbarPrefsClassname","onReady","body","insertAdjacentHTML","closeButton","toolbarButtonClose","e","log","target","matches","closest","stopPropagation","triggers","querySelectorAll","preventDefault","form","toolbarForm","analytics","advertising","request","window","userID","userIDCookie","data","at","ad","uid","apiUrl","JSON","stringify","Headers","then","res","json","catch","error","console","response","consent","analyticsConsent","adConsent","forEach","callback","cookies","result","query_sub","query_parts","page_url","href","qs","search","push","showToolbar","Promise","resolve","undefined","isEUUser","src","reject","createElement","onload","onerror","head","appendChild","s"],"mappings":"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"}