UNPKG

optinout.js

Version:

a simple js framework for handling opt-in and opt-out for tracking & cookies

2 lines 6.7 kB
/* optinout.js - v1.1.2 | Copyright: fabian todt and other contributors | License: https://gitlab.com/optinout/optinout.js */ "use strict";var defineProperty=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},_extends=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},toConsumableArray=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)},Storage=function(e){var t=_extends({},{namespace:"optInOut",expiration:1/0,domain:!1,path:!1,secure:!1},e),n=function(e){return t.namespace+"."+e},r=function(e){return!(!e||/^(?:expires|max-age|path|domain|secure)$/i.test(e))&&decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(n(e)).replace(/[-.+*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))},o=function(e,t){if(!e)return null;var n=r(e)||null,o=void 0;try{o=JSON.parse(n)}catch(e){o=null}return t?o[t]||null:o||null},a=function(e,n,r){document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(JSON.stringify(n))+function(e){var n=e||t.expiration,r=void 0;switch(n.constructor){case Number:r=n===1/0?"; expires=Fri, 31 Dec 9999 23:59:59 GMT":"; max-age="+n;break;case String:r="; expires="+n;break;case Date:r="; expires="+n.toUTCString();break;default:r=""}return r}(r)+(t.domain?"; domain="+t.domain:"")+(t.path?"; path="+t.path:"")+(t.secure?"; secure":"")},i=function(e,t){if(!e||!function(e){return Boolean(r(e))}(e))return!1;if(t){var i=o(e);return delete i[t],a(n(e),i),!0}return a(n(e),"",new Date("01 Jan 1970")),!0};return{get:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o(e,t)},set:function(e,t,r){return function(e,t,r,i){if(!e||/^(?:expires|max-age|path|domain|secure)$/i.test(e))return!1;var u=void 0;if(i){var c=defineProperty({},t,r),d=o(e);u=_extends({},d,c)}else u=defineProperty({},t,r);return a(n(e),u),!0}(e,t,r,!(arguments.length>3&&void 0!==arguments[3])||arguments[3])},delete:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i(e,t)}}},Storage$1=function(e){var t=_extends({},{namespace:"optInOut"},e),n=function(e){return e?t.namespace+"."+e:t.namespace},r=function(){try{var e="__storage_test__";return localStorage.setItem(e,"__storage_test__"),localStorage.removeItem(e),!0}catch(e){return e instanceof DOMException&&(22===e.code||1014===e.code||"QuotaExceededError"===e.name||"NS_ERROR_DOM_QUOTA_REACHED"===e.name)&&0!==localStorage.length}}(),o=function(e,t){if(r){var o=void 0;try{o=JSON.parse(localStorage.getItem(n(e)))}catch(e){o=null}return t?o[t]||null:o||null}return null},a=function(e,t){return!!r&&(localStorage.setItem(e,t),!0)};return{get:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o(e,t)},set:function(e,t,i){return function(e,t,i,u){if(r){var c=o(e)||{},d=void 0;if(u){var s=defineProperty({},t,i);d=_extends(c,s)}else(d=c)[t]=i;return a(n(e),JSON.stringify(d))}return!1}(e,t,i,!(arguments.length>3&&void 0!==arguments[3])||arguments[3])},delete:function(e){return function(e,t){if(r){if(t){var i=o(e)||{};delete i[t],a(n(e),JSON.stringify(i))}else localStorage.removeItem(n(e));return!0}return!1}(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}}},doNotTrack=function(){return Boolean(window&&("1"===window.doNotTrack||window.navigator&&("1"===window.navigator.doNotTrack||"yes"===window.navigator.doNotTrack||"1"===window.navigator.msDoNotTrack)))},optInOut=function(e){var t={},n={storages:{cookie:Storage(),localStorage:Storage$1()},services:{},plugins:[],doNotTrack:!1,language:{undefined:"undefined",optedIn:"opted in",optedOut:"opted out",defaults:{}}},r=void 0,o=void 0,a=void 0,i=void 0,u=void 0,c=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];if(!a[e])throw new Error("service "+e+" is not configured for optInOut");r&&o[r]?o[r].set(e,t,n):Object.keys(o).forEach(function(r){o[r].set(e,t,n,i)})},d=function(e,n){var r=i[e];!r||r.length<1||r.forEach(function(r){r.call(t,n,e)})},s=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=void 0,r=void 0;if(!e||!a[e])throw new Error("service "+e+" does not exist/is not configured");if(n=a[e],t&&o[t]){var i=_extends({},o);delete i[t],r=[t].concat(toConsumableArray(Object.keys(i)))}else r=Object.keys(o);var u=null;return r.every(function(t){var r=o[t].get(e);return void 0===r||null==r||("optIn"===n.mode?!1===r.optedIn?u=!1:r.optedIn&&!r.optedOut?u=!0:r.optedOut&&!r.optedIn?u=!1:Date.parse(r.optedOut)<Date.parse(r.optedIn)?u=!0:Date.parse(r.optedOut)>Date.parse(r.optedIn)&&(u=!1):"optOut"===n.mode&&(void 0!==r.optedIn&&r.optedIn?r.optedIn&&!r.optedOut?u=!0:Date.parse(r.optedIn)>Date.parse(r.optedOut)?u=!0:Date.parse(r.optedIn)<Date.parse(r.optedOut)&&(u=!1):u=!r.optedOut),null===u)}),u};return t.optIn=function(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=new Date;c(e,"optedIn",r,n),d("optIn",{service:e,storage:n,date:r,status:t.getStatus(e,!0)})},t.optOut=function(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=new Date;c(e,"optedOut",r,n),d("optOut",{service:e,storage:n,date:r,status:t.getStatus(e,!1)})},t.getOption=function(e){return r[e]},t.getStorage=function(e){return o[e]},t.getService=function(e){return a[e]},t.getStorages=function(){return o},t.getServices=function(){return a},t.getOptions=function(){return r},t.getPlugins=function(){return r.plugins},t.on=function(e,t){var n=i[e]||[];n.push(t),i[e]=n},t.isAllowed=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=s(e,t),o=a[e],i=o.default?o.default:"optIn"!==o.mode;return null===n&&(n=r.doNotTrack?!doNotTrack()&&i:i),n},t.isSet=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return null!==s(e,t)||!(!r.doNotTrack||!doNotTrack())},t.getStatus=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=null!==t?t:s(e);return!0===n?u.optedIn:!1===n?u.optedOut:[u.undefined,u.defaults[e]||null]},r=_extends({},n,e),o={},Object.keys(r.storages).forEach(function(e){var t=r.storages[e];return"function"==typeof t.get&&"function"==typeof t.set&&(o[e]=r.storages[e]),!0}),delete r.storages,a={},Object.keys(r.services).forEach(function(e){void 0!==r.services[e].mode&&(a[e]=r.services[e])}),delete r.services,i={},r.plugins.forEach(function(e){"function"==typeof e?e(t):"function"==typeof e.setup&&e.setup(t)}),u=_extends({},n.language,e.language),d("init",t),t};module.exports=optInOut;