{"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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"}