{"version":3,"file":"taunton-user-consent-eu-1.0.0.js","sources":["../src/polyfill/promise.js","../node_modules/whatwg-fetch/fetch.js","../src/polyfill/matches.js","../src/events/onReady.js","../src/config/config.js","../src/utils/readCookie.js","../src/user/hasDefinedPrefs.js","../src/user/isEUUser.js","../src/utils/readCookieAsBoolean.js","../src/utils/createCookie.js","../src/ui/removeClass.js","../src/ui/hideToolbar.js","../src/ui/addClass.js","../src/ui/showToolbar.js","../src/ui/toolbarAfterPrefs.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/main.js","../src/user/consent/analytics.js","../src/user/consent/advertising.js","../src/user/previousAdConsent.js","../src/utils/loadScriptSrc.js"],"sourcesContent":["/* eslint-disable */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(factory());\n}(this, (function () { 'use strict';\n\nvar promiseFinally = function(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n return constructor.resolve(callback()).then(function() {\n return constructor.reject(reason);\n });\n }\n );\n};\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(values) {\n return new Promise(function(resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n (typeof setImmediate === 'function' &&\n function(fn) {\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nvar globalNS = (function() {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n})();\n\nif (!globalNS.Promise) {\n globalNS.Promise = Promise;\n} else if (!globalNS.Promise.prototype['finally']) {\n globalNS.Promise.prototype['finally'] = promiseFinally;\n}\n\n})));\n","(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue+','+value : value\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n var xhr = new XMLHttpRequest()\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n","/**\n * Polyfill for Element.prototype.matches\n * from https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n */\n/* eslint-disable */\nmodule.exports = (function() {\n if (Element && !Element.prototype.matches) {\n Element.prototype.matches =\n Element.prototype.matchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.oMatchesSelector ||\n Element.prototype.webkitMatchesSelector ||\n function(s) {\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n }\n})();","///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/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.userIDCookie = 'taunton_user_consent_user_id';","///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/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/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 document.cookie = name+'='+value+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/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 }\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/showToolbar.js\nimport { advertisingCheckbox, advertisingCookie, analyticsCheckbox, analyticsCookie, toolbarOpenClassname, toolbarOverlay } from '../config/config';\nimport addClass from './addClass';\nimport readCookieAsBoolean from '../utils/readCookieAsBoolean';\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\n if(readCookieAsBoolean(advertisingCookie) === true) {\n let el = document.querySelector(advertisingCheckbox);\n if(el) {\n el.checked = true;\n }\n }\n\n if(readCookieAsBoolean(analyticsCookie) === true) {\n let el = document.querySelector(analyticsCheckbox);\n if(el) {\n el.checked = true;\n }\n }\n\n toolbarAfterPrefs();\n\n }\n\n};","///src/ui/toolbarAfterPrefs.js\nimport { toolbarOverlay, toolbarPrefsClassname } from '../config/config';\nimport hasDefinedPrefs from '../user/hasDefinedPrefs';\nimport addClass from './addClass';\n\nexport default () => {\n if(hasDefinedPrefs() === true) {\n let el = document.querySelector(toolbarOverlay);\n if(el) {\n addClass(el, toolbarPrefsClassname);\n }\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 { toolbarOverlay } from '../config/config';\nimport hideToolbar from './hideToolbar';\n\nexport default () => {\n var el = document.querySelector(toolbarOverlay);\n\n if(el) {\n el.addEventListener('click', function(e) {\n if (e.target.matches(toolbarOverlay)) {\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 trigger = document.querySelector(toolbarOpenTrigger);\n\n if(trigger) {\n trigger.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';\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 if(typeof request.data.at !== 'undefined') {\n createCookie(analyticsCookie, request.data.at + '', 365);\n }\n\n if(typeof request.data.ad !== 'undefined') {\n createCookie(advertisingCookie, request.data.ad + '', 365);\n }\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/main.js\n// Global polyfills used throughout project\nimport './polyfill/promise';\nimport 'whatwg-fetch';\nimport './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 previousAdConsent from './user/previousAdConsent';\nimport isEUUser from './user/isEUUser';\nimport analytics from './user/consent/analytics';\nimport advertising from './user/consent/advertising';\n\n// ui\nimport formHandler from './ui/formHandler';\nimport handleClose from './ui/handleClose';\nimport handleDelete from './ui/handleDelete';\nimport handleOpen from './ui/handleOpen';\nimport hideTrigger from './ui/hideTrigger';\nimport insertToolbar from './ui/insertToolbar';\nimport showToolbar from './ui/showToolbar';\n\n// Utils\nimport loadScriptSrc from './utils/loadScriptSrc';\nimport readCookieAsBoolean from './utils/readCookieAsBoolean';\n\n// add everything to the page for EU users\nif(isEUUser()) {\n onReady(insertToolbar);\n onReady(handleClose);\n onReady(handleOpen);\n onReady(formHandler);\n onReady(handleDelete);\n if(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\n } catch(e) {\n onReady(showToolbar);\n }\n }\n}\n\n// hide the trigger for non-EU users since it won't do anything\nif(isEUUser() === false) {\n onReady(hideTrigger);\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 },\n user: {\n consent: {\n advertising: advertisingConsent,\n analytics: analyticsConsent\n },\n hasDefinedPrefs: hasDefinedPrefs,\n isEUUser: isEUUser,\n previousAdConsent: previousAdConsent\n },\n utils: {\n loadScriptSrc: loadScriptSrc,\n readCookieAsBoolean: readCookieAsBoolean\n }\n};","///src/user/consent/analytics.js\nimport { analyticsCookie, analyticsCheckbox, toolbarForm } from '../../config/config';\nimport isEUUser from '../isEUUser';\nimport onReady from '../../events/onReady';\nimport readCookieAsBoolean from '../../utils/readCookieAsBoolean';\n\nexport default() => {\n return new Promise((resolve) => {\n\n // non-EU users get immediate consent for analytics\n if(isEUUser() === false) {\n resolve(true);\n }\n else if(isEUUser() === true && readCookieAsBoolean(analyticsCookie) === true) {\n resolve(true);\n }\n else {\n onReady(() => {\n var form = document.querySelector(toolbarForm),\n analytics = document.querySelector(analyticsCheckbox);\n\n if(form) {\n\n form.addEventListener('submit', function(e) {\n e.preventDefault();\n if(analytics && analytics.checked) {\n resolve(true);\n }\n });\n }\n });\n }\n\n });\n};","///src/user/consent/advertising.js\nimport { advertisingCookie, advertisingCheckbox, toolbarForm } from '../../config/config';\nimport isEUUser from '../isEUUser';\nimport onReady from '../../events/onReady';\nimport readCookieAsBoolean from '../../utils/readCookieAsBoolean';\n\nexport default() => {\n return new Promise((resolve) => {\n\n // non-EU users get immediate consent for advertising\n if(isEUUser() === false) {\n resolve(true);\n }\n else if(isEUUser() === true && readCookieAsBoolean(advertisingCookie) === true) {\n resolve(true);\n }\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\n });\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 if( isEUUser() === false ) {\n return true;\n }\n else if( readCookieAsBoolean(advertisingCookie) === true ) {\n return true;\n }\n else {\n return false;\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":["promiseFinally","callback","constructor","this","then","value","resolve","reason","reject","setTimeoutFunc","setTimeout","noop","Promise","fn","TypeError","_state","_handled","_value","undefined","_deferreds","handle","self","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","e","promise","push","newValue","thisArg","apply","arguments","finale","length","_unhandledRejectionFn","i","len","Handler","doResolve","done","ex","prototype","prom","all","arr","args","Array","slice","call","remaining","res","val","race","values","setImmediate","err","console","warn","globalNS","window","global","Error","fetch","support","Symbol","Blob","viewClasses","isDataView","obj","DataView","isPrototypeOf","isArrayBufferView","ArrayBuffer","isView","indexOf","Object","toString","Headers","append","name","normalizeName","normalizeValue","oldValue","map","get","has","hasOwnProperty","set","forEach","keys","items","iteratorFor","entries","iterator","methods","Request","clone","body","_bodyInit","Body","Response","status","statusText","headers","url","error","response","type","redirectStatuses","redirect","RangeError","location","input","init","request","xhr","XMLHttpRequest","onload","rawHeaders","options","getAllResponseHeaders","replace","split","line","parts","key","shift","trim","join","responseURL","responseText","onerror","ontimeout","open","method","credentials","withCredentials","responseType","setRequestHeader","send","polyfill","String","test","toLowerCase","next","isArray","header","getOwnPropertyNames","consumed","bodyUsed","fileReaderReady","reader","result","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","bufferClone","buf","view","Uint8Array","byteLength","buffer","_initBody","_bodyText","_bodyBlob","FormData","_bodyFormData","URLSearchParams","_bodyArrayBuffer","rejected","arrayBuffer","text","readAsText","chars","fromCharCode","readArrayBufferAsText","formData","decode","json","JSON","parse","upcased","mode","toUpperCase","referrer","form","bytes","decodeURIComponent","bodyInit","ok","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","s","document","ownerDocument","querySelectorAll","item","attachEvent","readyState","addEventListener","nameEQ","ca","cookie","c","charAt","substring","readCookie","preferencesCookie","days","expires","date","Date","setTime","getTime","toGMTString","el","className","querySelector","toolbarOverlay","toolbarOpenClassname","classList","remove","RegExp","add","readCookieAsBoolean","advertisingCookie","advertisingCheckbox","checked","analyticsCookie","analyticsCheckbox","hasDefinedPrefs","insertAdjacentHTML","target","stopPropagation","trigger","toolbarOpenTrigger","preventDefault","toolbarForm","analytics","advertising","hostname","userID","userIDCookie","data","at","ad","uid","apiUrl","stringify","catch","log","cookies","page_url","href","qs","search","query_sub","query_parts","showToolbar","analyticsConsent","isEUUser","src","createElement","head","appendChild"],"mappings":"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"}