New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

storm-cookie-banner

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

storm-cookie-banner - npm Package Compare versions

Comparing version 1.0.2 to 1.1.0

babel.config.js

24

__tests__/form.js
import CookieBanner from '../src';
import defaults from '../src/lib/defaults';
const init = () => {
const defaultSuggestedValues = {
test: false,
performance: false
}
const init = (suggestedValues = defaultSuggestedValues) => {
// Set up our document body

@@ -11,2 +16,3 @@ document.body.innerHTML = `<div class="privacy-banner__form-container"></div>`;

'test': {
suggested: suggestedValues["test"],
title: 'Test title',

@@ -23,2 +29,3 @@ description: 'Test description',

'performance': {
suggested: suggestedValues["performance"],
title: 'Performance preferences',

@@ -38,3 +45,2 @@ description: 'Performance cookies are used to measure the performance of our website and make improvements. Your personal data is not identified.',

describe(`Privacy banner > DOM > form > render`, () => {

@@ -56,2 +62,15 @@ beforeAll(init);

// describe('Privacy banner > DOM > form > pre-select', () => {
// beforeAll(init);
// it('Test type should be pre-selected', async () => {
// expect(document.querySelector('input[name="privacy-test"][value="1"]').checked).toEqual(true);
// });
// it('Performance type should not be pre-selected', async () => {
// expect(document.querySelector('input[name="privacy-performance"][value="1"]').checked).toEqual(false);
// expect(document.querySelector('input[name="privacy-performance"][value="0"]').checked).toEqual(false);
// });
// });
describe(`Privacy banner > DOM > form interactions`, () => {

@@ -82,2 +101,1 @@ beforeAll(init);

});

@@ -1,2 +0,2 @@

import { groupValueReducer } from '../src/lib/utils'
import { groupValueReducer, removeSubdomain } from '../src/lib/utils';

@@ -44,2 +44,32 @@ describe('Validate > Unit > Utils > groupValueReducer', () => {

});
});
});
// describe('Cookie > Utils > removeSubdomain', () => {
// it('should return the same vaule for a root domain', async () => {
// expect(removeSubdomain('stormid.com')).toEqual('stormid.com');
// });
// it('should remove www from a url', async () => {
// expect(removeSubdomain('www.stormid.com')).toEqual('stormid.com');
// });
// it('should remove sub sub domains from a domain', async () => {
// expect(removeSubdomain('test.demo.stormid.com')).toEqual('stormid.com');
// });
// it('should remove subsub sub domains from a domain', async () => {
// expect(removeSubdomain('cookie.test.demo.stormid.com')).toEqual('stormid.com');
// });
// it('should handle URLs with multi dot tdls', async () => {
// expect(removeSubdomain('cookie.test.demo.stormid.co.uk')).toEqual('stormid.co.uk');
// });
// it('should add handle for azurewebsites.net as a multi dot tdl', async () => {
// expect(removeSubdomain('cookie-test-wip.azurewebsites.net')).toEqual('cookie-test-wip.azurewebsites.net');
// });
// it('should add handle for stormid.site as a multi dot tdl', async () => {
// expect(removeSubdomain('cookie-test.stormid.site')).toEqual('stormid.site');
// });
// });

17

dist/index.js

@@ -1,15 +0,2 @@

/**
* @name storm-cookie-banner:
* @version 0.4.0: Thu, 26 Sep 2019 12:02:08 GMT
* @author stormid
* @license MIT
*/
import defaults from './lib/defaults';
import factory from './lib/factory';
import { composeTypes } from './lib/utils';
export default {
init: opts => factory(Object.assign({}, defaults, opts, {
types: Object.keys(opts.types).reduce(composeTypes(opts), defaults.types)
}))
};
var t=window.PointerEvent?["pointerup","keydown"]:["ontouchstart"in window?"touchstart":"click","keydown"],e=[13,32],n=function(t){document.cookie=[t.settings.name+"="+JSON.stringify(t.consent)+";","expires="+new Date((new Date).getTime()+24*t.settings.expiry*60*60*1e3).toGMTString()+";",t.settings.path?"path="+t.settings.path+";":"",t.settings.domain?"domain="+t.settings.domain+";":"",t.settings.secure?"secure;":""].join("")},s=function(t){document.cookie.split("; ").map(function(t){return{name:t.split("=")[0],value:t.split("=")[1],expiry:"Thu, 01 Jan 1970 00:00:01 GMT"}}).map(function(t){return function(e){return document.cookie=[e.name+"="+e.value+";","expires="+e.expiry+";","path="+t.settings.path+";",t.settings.domain?"domain="+t.settings.domain+";":"",t.settings.secure?"secure":""].join("")}}(t))},i=function(t){return function(e,n){return e[n]=e[n]?Object.assign({},e[n],{fns:e[n].fns.concat(t.types[n].fns)}):t.types[n],e}},a=function(){},r=function(t){return/radio|checkbox/i.test(t.type)},c=function(t,e){return!r(e)&&function(t){return null!=t.value&&t.value.length>0}(e)&&(t=e.value),r(e)&&e.checked&&(Array.isArray(t)?t.push(e.value):t=[e.value]),t},o="ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|be|bf|bg|bh|bi|bj|bm|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|cl|cm|cn|co|cr|cu|cv|cw|cx|cz|de|dj|dk|dm|do|dz|ec|ee|eg|es|et|eu|fi|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|im|in|io|iq|ir|is|it|je|jo|jp|kg|ki|km|kn|kp|kr|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|na|nc|ne|nf|ng|nl|no|nr|nu|nz|om|pa|pe|pf|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|yt".split("|"),l="azurewebsites|com|edu|gov|net|mil|org|nom|sch|caa|res|off|gob|int|tur|ip6|uri|urn|asn|act|nsw|qld|tas|vic|pro|biz|adm|adv|agr|arq|art|ato|bio|bmd|cim|cng|cnt|ecn|eco|emp|eng|esp|etc|eti|far|fnd|fot|fst|g12|ggf|imb|ind|inf|jor|jus|leg|lel|mat|med|mus|not|ntr|odo|ppg|psc|psi|qsl|rec|slg|srv|teo|tmp|trd|vet|zlg|web|ltd|sld|pol|fin|k12|lib|pri|aip|fie|eun|sci|prd|cci|pvt|mod|idv|rel|sex|gen|nic|abr|bas|cal|cam|emr|fvg|laz|lig|lom|mar|mol|pmn|pug|sar|sic|taa|tos|umb|vao|vda|ven|mie|北海道|和歌山|神奈川|鹿児島|ass|rep|tra|per|ngo|soc|grp|plc|its|air|and|bus|can|ddr|jfk|mad|nrw|nyc|ski|spy|tcm|ulm|usa|war|fhs|vgs|dep|eid|fet|fla|flå|gol|hof|hol|sel|vik|cri|iwi|ing|abo|fam|gok|gon|gop|gos|aid|atm|gsm|sos|elk|waw|est|aca|bar|cpa|jur|law|sec|plo|www|bir|cbg|jar|khv|msk|nov|nsk|ptz|rnd|spb|stv|tom|tsk|udm|vrn|cmw|kms|nkz|snz|pub|fhv|red|ens|nat|rns|rnu|bbs|tel|bel|kep|nhs|dni|fed|isa|nsn|gub|e12|tec|орг|обр|упр|alt|nis|jpn|mex|ath|iki|nid|gda|inc".split("|"),u={name:".CookiePreferences",path:"",domain:"localhost"===window.location.hostname?"":"."+function(t){for(var e=(t=t.replace(/^www\./,"")).split(".");e.length>3;)e.shift();return 3===e.length&&-1===l.indexOf(e[1])&&-1===o.indexOf(e[2])&&e.shift(),e.join(".")}(window.location.hostname),secure:!0,expiry:365,types:{},necessary:[],bannerTrigger:!1,policyURL:"/cookie-policy",classNames:{banner:"privacy-banner",acceptBtn:"privacy-banner__accept",submitBtn:"privacy-banner__submit",field:"privacy-banner__field",form:"privacy-banner__form",fieldset:"privacy-banner__fieldset",legend:"privacy-banner__legend",formContainer:"privacy-banner__form-container",formMessage:"privacy-banner__form-msg",title:"privacy-banner__form-title",description:"privacy-banner__form-description"},savedMessage:"Your settings have been saved.",bannerTemplate:function(t){return'<section role="dialog" aria-live="polite" aria-label="You privacy" class="'+t.classNames.banner+'">\n\t\t\t<div class="privacy-content">\n\t\t\t\t<div class="wrap">\n\t\t\t\t\t<div class="row">\n\t\t\t\t\t\t\x3c!--googleoff: all--\x3e\n\t\t\t\t\t\t<div class="privacy-banner__title">Cookies</div>\n\t\t\t\t\t\t<p>We use cookies to improve your experience on our site and show you personalised advertising.</p>\n\t\t\t\t\t\t<p>Find out more from our <a class="privacy-banner__link" rel="noopener noreferrer nofollow" href="/privacy-policy">privacy policy</a> and <a class="privacy-banner__link" rel="noopener noreferrer nofollow" href="'+t.policyURL+'">cookie policy</a>.</p>\n\t\t\t\t\t\t<button class="btn btn--primary '+t.classNames.acceptBtn+'">Accept and close</button>\n\t\t\t\t\t\t<a class="privacy-banner__link" rel="noopener noreferrer nofollow" href="'+t.policyURL+'">Your options</a>\n\t\t\t\t\t\t\x3c!--googleon: all--\x3e\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>'},messageTemplate:function(t){return'<div class="'+t.settings.classNames.formMessage+'" aria-role="alert">'+t.settings.savedMessage+"</div>"},formTemplate:function(t){return'<form class="'+t.settings.classNames.form+'" novalidate>\n\t\t\t\t'+Object.keys(t.settings.types).map(function(e){return'<fieldset class="'+t.settings.classNames.fieldset+'">\n\t\t\t\t<legend class="'+t.settings.classNames.legend+'">\n\t\t\t\t\t<span class="'+t.settings.classNames.title+'">'+t.settings.types[e].title+'</span>\n\t\t\t\t\t<span class="'+t.settings.classNames.description+'">'+t.settings.types[e].description+'</span>\n\t\t\t\t</legend>\n\t\t\t\t<div class="form-row">\n\t\t\t\t\t<div class="relative">\n\t\t\t\t\t\t<label class="privacy-banner__label">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass="'+t.settings.classNames.field+'"\n\t\t\t\t\t\t\t\ttype="radio"\n\t\t\t\t\t\t\t\tname="privacy-'+e.split(" ")[0].replace(" ","-")+'"\n\t\t\t\t\t\t\t\tvalue="1"\n\t\t\t\t\t\t\t\t'+(1===t.consent[e]?" checked":"")+'>\n\t\t\t\t\t\t\t<span class="privacy-banner__label-text">I am OK with this</span>\n\t\t\t\t\t\t\t<span class="privacy-banner__label-description">'+t.settings.types[e].labels.yes+'</span>\n\t\t\t\t\t\t</label> \n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="form-row">\n\t\t\t\t\t<div class="relative">\n\t\t\t\t\t\t<label class="privacy-banner__label">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass="'+t.settings.classNames.field+'"\n\t\t\t\t\t\t\t\ttype="radio"\n\t\t\t\t\t\t\t\tname="privacy-'+e.split(" ")[0].replace(" ","-")+'"\n\t\t\t\t\t\t\t\tvalue="0"\n\t\t\t\t\t\t\t\t'+(0===t.consent[e]?" checked":"")+'>\n\t\t\t\t\t\t\t<span class="privacy-banner__label-text">No thank you</span>\n\t\t\t\t\t\t\t<span class="privacy-banner__label-description">'+t.settings.types[e].labels.no+"</span>\n\t\t\t\t\t\t</label> \n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</fieldset>"}).join("")+'\n\t\t\t<button class="'+t.settings.classNames.submitBtn+'"'+(0===Object.keys(t.consent).length?" disabled":"")+">Save my settings</button>\n\t\t</form>"}},p=function(t,e){return Object.assign({},t,e)},d=function(t,e){return Object.assign({},t,{consent:Object.assign({},t.consent,e)})},m=function(t,e){return Object.assign({},t,{settings:Object.assign({},t.settings,{types:Object.assign({},t.settings.types,e)})})},g=function(t){return function(e){Object.keys(e.consent).forEach(function(t){!0!==e.settings.types[t].executed&&e.consent[t]&&Boolean(e.consent[t])&&e.settings.types[t].fns.forEach(function(t){return t(e)})}),t.update(m,Object.keys(e.settings.types).reduce(function(t,n){return t[n]=Object.assign({},e.settings.types[n],{executed:e.settings.types[n].executed||e.consent[n]&&Boolean(e.consent[n])}),t},{}))}},f=function(t){t.settings.necessary.forEach(function(e){return e(t)})},b=function(s){return function(i){document.body.firstElementChild.insertAdjacentHTML("beforebegin",i.settings.bannerTemplate(i.settings));var a=document.querySelector("."+i.settings.classNames.banner),r=document.querySelector("."+i.settings.classNames.acceptBtn);t.forEach(function(t){r.addEventListener(t,function(t){(function(t){return!!t.keyCode&&!~e.indexOf(t.keyCode)||t.which&&3===t.which})(t)||s.update(d,Object.keys(i.settings.types).reduce(function(t,e){return t[e]=1,t},{}),[n,g(s),v(a),y(s)])})})}},v=function(t){return function(){return t&&t.parentNode&&t.parentNode.removeChild(t)}},y=function(t){return function(e){var i=document.querySelector("."+e.settings.classNames.formContainer);if(i){i.innerHTML=e.settings.formTemplate(function(t){return Object.keys(t.consent).length>0?t:Object.assign({},t,{consent:Object.keys(t.settings.types).reduce(function(e,n){return t.settings.types[n].suggested&&(e[n]=1),e},{})})}(e));var a=document.querySelector("."+e.settings.classNames.form),r=document.querySelector("."+e.settings.classNames.banner),o=document.querySelector("."+e.settings.classNames.submitBtn),l=[].slice.call(document.querySelectorAll("."+e.settings.classNames.field)).reduce(function(t,e){var n=e.getAttribute("name").replace("privacy-","");return t[n]?t[n].push(e):t[n]=[e],t},{}),u=function(){return Object.keys(l).reduce(function(t,e){var n=l[e].reduce(c,"");return n&&(t[e]=parseInt(n)),t},{})},p=function(t){Object.keys(u()).length===Object.keys(l).length&&(o.removeAttribute("disabled"),a.removeEventListener("change",p))};o.hasAttribute("disabled")&&a.addEventListener("change",p),a.addEventListener("submit",function(e){e.preventDefault(),t.update(d,u(),[s,n,g(t),v(r),h(o)])})}}},h=function(t){return function(e){t.insertAdjacentHTML("afterend",e.settings.messageTemplate(e)),t.setAttribute("disabled","disabled"),window.setTimeout(function(){t.parentNode.removeChild(t.nextElementSibling),t.removeAttribute("disabled")},3e3)}};module.exports={init:function(t){return function(t){if(function(){try{document.cookie="cookietest=1";var t=-1!==document.cookie.indexOf("cookietest=");return document.cookie="cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT",t}catch(t){return!1}}()){var e,n=(e={},{update:function(t,n,s){e=t(e,n),s&&s.forEach(function(t){t(e)})},getState:function(){return e}}),s=function(t){var e=document.cookie.split("; ").map(function(t){return{name:t.split("=")[0],value:t.split("=")[1]}}).filter(function(e){return e.name===t.name})[0];return void 0!==e&&e}(t);return n.update(p,{settings:t,consent:s?JSON.parse(s.value):{}},[f,g(n),s?a:b(n),y(n)]),{getState:n.getState}}}(Object.assign({},u,t,{types:Object.keys(t.types).reduce(i(t),u.types)}))}};
//# sourceMappingURL=index.js.map
{
"name": "storm-cookie-banner",
"version": "1.0.2",
"version": "1.1.0",
"description": "",

@@ -15,3 +15,6 @@ "author": "stormid",

"main": "dist/index.js",
"browser": "dist/storm-cookie-banner.standalone.js",
"source": "src/index.js",
"module": "dist/index.modern.mjs",
"unpkg": "dist/index.umd.js",
"browser": "dist/index.umd.js",
"keywords": [

@@ -24,49 +27,24 @@ "stormid",

"scripts": {
"build": "node_modules/.bin/gulp build",
"serve": "node_modules/.bin/gulp server",
"start": "node_modules/.bin/gulp server",
"test": "node_modules/.bin/jest"
"build": "microbundle --name CookieBanner",
"test": "node_modules/.bin/jest --coverage",
"dev": "webpack-dev-server --config example/webpack.config.js --mode development",
"prod": "webpack --config example/webpack.config.js --mode production"
},
"jest": {
"testURL": "http://localhost"
},
"browserify": {
"transform": [
[
"babelify",
{
"presets": [
"env"
]
}
]
]
},
"devDependencies": {
"babel": "^6.5.2",
"babel-core": "^6.7.2",
"babel-plugin-add-module-exports": "^0.2.1",
"babel-preset-env": "^1.6.0",
"babelify": "^7.3.0",
"browser-sync": "^2.17.5",
"browserify": "^13.1.0",
"gulp": "^3.9.1",
"gulp-babel": "^6.1.2",
"gulp-gh-pages": "^0.5.4",
"gulp-header": "^1.2.2",
"gulp-notify": "^2.2.0",
"gulp-plumber": "^1.1.0",
"gulp-rename": "^1.2.2",
"gulp-rollup": "^2.11.0",
"gulp-uglify": "^2.0.0",
"gulp-wrap-umd": "^0.2.1",
"@babel/core": "^7.7.4",
"@babel/node": "^7.7.4",
"@babel/preset-env": "^7.7.4",
"babel-core": "^7.0.0-bridge.0",
"babel-eslint": "^10.0.3",
"babel-jest": "^24.9.0",
"babel-loader": "^8.0.6",
"clean-webpack-plugin": "^1.0.0",
"html-webpack-plugin": "^3.2.0",
"isomorphic-fetch": "^2.2.1",
"jest": "^24.9.0",
"object-assign": "^4.0.1",
"rollup": "^0.41.6",
"rollup-plugin-commonjs": "^8.0.2",
"rollup-plugin-node-resolve": "^3.0.0",
"run-sequence": "^1.1.0",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0"
"microbundle": "^0.11.0",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.10",
"webpack-dev-server": "^3.9.0"
}
}

@@ -64,14 +64,4 @@ # Storm cookie banner

```
or aynchronous browser loading (use the .standalone version in the /dist folder)
```
import Load from 'storm-load';
Load('/content/js/async/storm-cookie-banner.standalone.js')
.then(() => {
StormCookieBanner.init({
types: { ... as es6 example }
});
```
## Default options

@@ -78,0 +68,0 @@ No cookie types are included by default, you must configure that yourself

@@ -13,3 +13,3 @@ import { shouldReturn, writeCookie, groupValueReducer, deleteCookies } from './utils';

acceptBtn.addEventListener(ev, e => {
if(shouldReturn(e)) return;
if (shouldReturn(e)) return;

@@ -35,7 +35,16 @@ Store.update(

const suggestedConsent = state => Object.keys(state.consent).length > 0
? state
: Object.assign({}, state, {
consent: Object.keys(state.settings.types).reduce((acc, type) => {
if (state.settings.types[type].suggested) acc[type] = 1;
return acc;
}, {})
});
export const initForm = Store => state => {
const formContainer = document.querySelector(`.${state.settings.classNames.formContainer}`);
if(!formContainer) return;
if (!formContainer) return;
formContainer.innerHTML = state.settings.formTemplate(state);
formContainer.innerHTML = state.settings.formTemplate(suggestedConsent(state));

@@ -47,3 +56,3 @@ const form = document.querySelector(`.${state.settings.classNames.form}`);

const groupName = field.getAttribute('name').replace('privacy-', '');
if(groups[groupName]) groups[groupName].push(field);
if (groups[groupName]) groups[groupName].push(field);
else groups[groupName] = [field];

@@ -55,3 +64,3 @@ return groups;

const value = groups[key].reduce(groupValueReducer, '');
if(value) acc[key] = parseInt(value);
if (value) acc[key] = parseInt(value);
return acc;

@@ -61,3 +70,3 @@ }, {});

const enableButton = e => {
if(Object.keys(extractConsent()).length !== Object.keys(groups).length) return;
if (Object.keys(extractConsent()).length !== Object.keys(groups).length) return;
button.removeAttribute('disabled');

@@ -67,3 +76,3 @@ form.removeEventListener('change', enableButton);

button.hasAttribute('disabled') && form.addEventListener('change', enableButton);
form.addEventListener('submit', e => {

@@ -70,0 +79,0 @@ e.preventDefault();

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc