klaro-gridsome
Version:
Wrapper for Klaro! cookie consent manager for easy use in Gridsome projects
137 lines (111 loc) • 3.75 kB
Markdown
# klaro-gridsome
Wrapper for [Klaro! cookie consent manager](https://github.com/KIProtect/klaro) for easy use in [Gridsome](https://github.com/gridsome/gridsome) projects.
## Install
```npm install klaro-gridsome```
## Usage
Include in `plugins` in gridsome.config.js
```js
module.exports = {
plugins: [
{
use: 'klaro-gridsome',
options: {
// your klaro configuration here
}
}
]
}
```
Populates klaroConfig and accepts the same configuration. See [klaro's config.js](https://github.com/KIProtect/klaro/blob/master/dist/config.js) for a sample configuration.
### Example
```js
module.exports = {
plugins: [
{
use: 'klaro-gridsome',
options: {
privacyPolicy: '/privacy-policy/',
cookieName: 'consent',
translations: {
en: {
consentModal: {
description: 'Here you can see and customize the information that we collect about you.',
},
googleAnalytics: {
description: 'Website analytics powered by Google Analytics, allowing us to see how visitors use our website.'
},
purposes: {
analytics: 'Analytics'
},
},
},
apps: [
{
name: 'googleAnalytics',
default: true,
title: 'Google Analytics',
purposes: ['analytics'],
cookies: [
'_ga',
'_gcl_au',
'_gid',
'_gat'
],
required: false,
optOut: true,
onlyOnce: false
}
]
}
}
]
}
```
### Reading Consent
Klaro normally handles opting in/out of tracking by relying upon new page loads and by replacing the type of script elements. With a framework like Vue, this has to be handled manually.
Whenever consent is changed the `consentUpdate` event is fired on the document with the update. You can use this to listen to a change and respond accordingly. The `event.detail` object will include the app name changed, and a boolean consent property showing the current opt-in/opt-out value.
#### Example
```js
export default {
mounted() {
document.addEventListener('consentUpdate', this.consentToggle)
},
beforeDestroy() {
document.removeEventListener('consentUpdate', this.consentToggle)
},
methods: {
consentToggle(event) {
// only is app is google analytics
if (event.detail.app === 'googleAnalytics') {
if (event.detail.consent) {
// if user consent is true
this.$ga.enable()
} else {
// if user consent is false
this.$ga.disable()
}
}
}
}
}
```
### Reading consent on first load
As the `consentUpdate` event is only fired on a change, you will need to make sure you check Klaro consent before enabling any tracking. This can be done with `window.klaro.getManager().consents`, which includes the current state of all consents.
#### Example
```js
Vue.use(VueAnalytics, {
disabled: () => {
return !window.klaro.getManager().consents.googleAnalytics
}
})
```
## Version History
- v1.0.3 - Reverted process.isClient check, still seems to be required in certain cases
- v1.0.1 - Removed redundant process.isClient check
- v1.0.0 - Initial public release, based on Klaro v0.3.2
## Credits
- [Gridsome Static Site Generator](https://github.com/gridsome/gridsome)
- [Klaro! Cookie Consent Manager](https://github.com/KIProtect/klaro)
## License
Klaro copyright and License in klaro/LICENSE.
Copyright © 2020 [Alistair Shepherd](https://alistairshepherd.uk). Licensed under the [MPL-2.0 License](https://www.mozilla.org/en-US/MPL/2.0/).