Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/philippg777/cookieyesno
Easy to use GDPR-compliant cookie-banner
https://github.com/philippg777/cookieyesno
banner consent cookie-banner cookie-banner-javascript cookie-banners cookie-consent cookie-law gdpr gdpr-compliant gdpr-consent gdpr-cookie gdpr-cookies hacktoberfest
Last synced: about 2 months ago
JSON representation
Easy to use GDPR-compliant cookie-banner
- Host: GitHub
- URL: https://github.com/philippg777/cookieyesno
- Owner: philippG777
- License: other
- Created: 2019-12-21T16:46:25.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2022-11-10T18:26:33.000Z (about 2 years ago)
- Last Synced: 2024-10-28T04:49:11.638Z (about 2 months ago)
- Topics: banner, consent, cookie-banner, cookie-banner-javascript, cookie-banners, cookie-consent, cookie-law, gdpr, gdpr-compliant, gdpr-consent, gdpr-cookie, gdpr-cookies, hacktoberfest
- Language: JavaScript
- Homepage:
- Size: 271 KB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CookieYesNo
## An easy to use GDPR-compliant cookie-banner
![Cookiebanner Screenshot](screenshot.png)
✅ GDPR-complient✅ Easy to Use
✅ Mobile friendly
✅ Small memory footprint
✅ Highly customizable
## Usage
The banner on the screenshot above has been created using only the 14 lines you can see below.```js
var cyn = new CookieYesNo({
categories: {
required: {
name: 'Required cookies',
description: 'These cookies are necessary for the website to function properly',
accepted: true,
changeable: false
},
analytics: {
name: 'Web analytics',
description: 'These cookies are used to analyze the user\'s behavior.'
}
}
});
```## Documentation
### Configuration
The configuration is the only argument of `new CookieYesNo(config)` and is a map, The following things can / have to be configured:* `categories` *(Map)* **Required » Take a look at the [category configuration](#category-configuration)**
* `text` *(Map) [optional]* [Link placeholders](#link-placeholders) can be used
* `above` *(String) [optional]* Text above the section where the user can select specific cookie-categories
* `below` *(String) [optional]* Text below the section where the user can select specific cookies
* `title` *(String) [optional - by default "Cookie Settings"]* Title of the banner
* `acceptAllButtonText` *(String) [optional - by default "Accept all cookies"]* Text of the button that's for accepting all cookies
* `acceptSelectionButtonText` *(String) [optional - by default "Accept selected cookies"]* Text of the button that's for accepting only selected cookie categories
* `privacyPolicy` *(Map) [optional]*
* `url` *(String)* URL of your privacy policy (in case the banner covers the link on the actual page)
* `text` *(String)* Text of the link
* `cookiePolicy` *(Map) [optional]*
* `url` *(String)* URL of your cookie policy (String)
* `text` *(String)* Text of the link
* `imprint` *(Map) [optional]*
* `url` *(String)* URL of your imprint (required in case that the banner covers the link on the actual page)
* `text` *(String)* Text of the link
* `version` *(String) [optional]* Version of the configuration - if you change the version - the user has to consent again (for the case that you change something in the categories) - Use any text you like to, I recommed the date of the change. If not version has been set before, the user also give his consent again.### Category configuration
Each cookie category is an item in the `categories`-Map.
Here a short example:
```js
categories: {
required: {
name: 'Required cookies',
accepted: true, // preselected
description: 'These cookies are necessary for the website to function properly.',
changeable: false // user can not change this option
},
analytics: {
name: 'Web Analytics',
description: 'These cookies are used to analyze the user\'s behavior.'
}
}
```#### Configuration possibilities of a category
* `name` *(String)* **Required** Name/Title of the cookie category
* `description` *(String)* **Required** Description of the cookie category
* `accepted` *(Boolean) [optional - by default false]* If the category is preselected
* `changeable` *(Boolean) [optional - by default true]* If the user can change the value
* `reloadOnReject` *(Boolean) [optional - by default true]* If the page is reloaded if the cookie category gets rejected - We need to do this to stop scripts from running that would set cookies.
* `onAccept` *(Array) [optional - by default []]* Shortcut for [Events](#events)
* `onReject` *(Array) [optional - by default []]* Shortcut for [Events](#events)
* `onChange` *(Array) [optional - by default []]* Shortcut for [Events](#events)### Script blocking
#### Blocking external scripts
You have to replace `src` with `data-cyn-src` and have to set the `type` to `text/plain`. The `data-cyn-require` attribute specifies which cookie category has to be allowed to run the script. So `analytics` has to be the key of the Web Analytics category in the `categories` map.
```html```
#### Blocking inline scripts
**Caution: May not block the execution of the script in older Firefox versions! External script blocking (above) is safe to use as well as Events (below). Use these medthods instead.**
The `type` attribute has to be set to `text/plain`. The script will be executed when the category with the key `analytics` is allowed.
```html// YOUR CODE HERE
```
### Events
Note: the `category` argument in the methods below is the key of the specific category in the `categories` map in the configuration map.
#### `onAccept(category, callback)`
Callback function gets executed when the specified category gets acceped.
#### `onReject(category, callback)`
Callback function gets executed when the specified category gets rejected. Explicitly return `false` if you don't want to reload the site. This can also be done by the config. If you like to reload the page either return nothing or return `true`.
#### `onChange(category, callback)`
Callback function gets executed when the specified category gets changed. The first argument of the `callback` function is a *Boolean* that states if the category has been accepted *(true)* or rejected *(false)*.First the `onChange` callbacks are executed, then the scripts are activated if necessary and then `onAccept` and `onReject` callbacks are executed.
### Other methods
#### `getSettings()`
Get the current cookie settings as a *map*.
#### `reviewSettings()`
Let the user review his consent.
#### `show()`
Show the cookie banner.
#### `hide()`
Hide the cookie banner.### Link placeholders
Link placeholders can be used in the `text.above` and `text.below`.
Simply put `PRIVACY_POLICY`, `COOKIE_POLICY`, or `IMPRINT` in the String.
These will be replaced with the matching links. Note: In order to use this feature you have to specify the links in the configuration.### Modify the banner
It's pretty simple: just use CSS-rules.
The following classes are available:* `.cyn-banner`: main banner element
* `.cyn-categories`: table containing the different cookie categories
* `.cyn-btn-save`: save settings button
* `.cyn-btn-accept-all`: accept all button---
Based on https://github.com/rollup/rollup-starter-app and https://github.com/rollup/rollup-starter-lib (both MIT License) Take a look at LICENSE_ROLLUP_STARTER_APP and LICENSE_ROLLUP_STARTER_LIB.