npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@kevinbaubet/cookienotice

v4.0.5

Published

* Dependency: jQuery, PHP (to generate json config, but you can use an other way to build json configuration data)

Downloads

7

Readme

Documentation CookieNotice

  • Dependency: jQuery, PHP (to generate json config, but you can use an other way to build json configuration data)

Featuring

First step: a notice is displayed to inform the user of cookies for a listing of services. The choice is mandatory to continue the navigation.

Second step: a choice is made if the user:

  • clicks on the notice button "I accept", which will accept all cookies
  • clicks on the notice button "I deny", which will deny all cookies
  • clicks on the notice button "I customize", to customize the services one by one
  • clicks on the service button "Allow" after deny all services, which will accept only the wanted service

Third step: the deposit of one cookie to save user consent:

  • for a maximum duration of 13 months
  • there is a possibility of changing to return to customized services

Initialisation

<?php require_once '../src/CookieNotice/Config.php'; // To configure ?>

<div id="notice-cookie" data-config="<?php echo htmlspecialchars(\CookieNotice\Config::get()); ?>"></div>

$('#notice-cookie').cookieNotice([options]);

<a href="#" class="cookienotice-customize">Customize the cookies</a>

Service handler

You could allow each service during the navigation. An overlay "service handler" will be added to the container for allowing the service.

Initialisation

<a data-cookienotice data-cookienotice-service="youtube" href="#">
    My video service contents
</a>

PHP side

Configuration (mandatory)

The configuration of CookieNotice is in this file CookieNotice/Config.php in method Config::set(). You can translate texts in this file.

notice: Notice configuration

  • description: Notice contents
  • summary: Summary of notice contents showed in mobile
  • agree: Button label to customize services
  • disagree: Button label to accept all services
  • customize: Button label to deny all services

(optional) modal: Modal configuration to customize services

  • label: Modal title
  • labelTag: (optional) Tag used for modal title. If hN, the subtitles will be increase automatically
  • description: (optional) Modal description
  • close: Button label to close modal

groups: Groups list of services

  • group_id: Default: none. For example: video
    • label: Group title
    • description: (optional) Group description

services: Services list associated to groups

  • all: for all services

    • label: Service title
    • customize: Button label to customize service
    • agree: Button label to accept service
    • disagree: Button label to deny service
    • disabled: Text displayed if the service is disabled
    • allow: Button label to allow service under disabled text
    • position: Position of the line "all services": before, after or both
  • service_id: for example: youtube or video

    • label: Service title

    • description: (optional) Service description

    • url: (optional) External Url to cookies privacy-policy

    • group: Associated group id

Methods

  • namespace: CookieNotice
  • class: Service

| Method | Arguments | Description | |--------------------|------------------------------------------------------------------|---------------------------------------------------------------------------------------| | getState | service string Service identifier, for example: "youtube" | Return true if the service is allowed |
| isAllowed | service string Service identifier, for example: "youtube" | Return the state of service. If there is no choice, the returned state is "undefined" |
| hasConsent | - | Return true if there is a saved consent |

Test allowed services

I recommend to test in JS side to exempt cache issues

if (\CookieNotice\Service::isAllowed('facebook'))) {
    // OK
}

// or

$state = \CookieNotice\Service::getState('facebook');
if ($state === true) {
    // OK
}

// Saved consent?
if (\CookieNotice\Service::hasConsent()) {
    // OK
}

JS side

Options

| Option | Type | Default value | Description | |------------------------------------------|----------|----------------------------|--------------------------------------------------------------------| | classes | object | See below | Object for below options | |     prefix | string | 'cookienotice' | Prefix class name | |     notice | string | 'notice notice--cookie' | Class for notice | |     noticeOpen | string | 'is-{prefix}-notice-open' | Class for notice when is opened | |     modal | string | 'modal modal--cookie' | Class for modal | |     modalOpen | string | 'is-{prefix}-modal-open' | Class for modal when is opened | |     serviceHandler | string | '{prefix}-service-handler' | Class for service handler wrapper | |     serviceAgreed | string | 'is-agreed' | Class for the service which is agreed | |     serviceDisagreed | string | 'is-disagreed' | Class for the service which is disagreed | |     btnAgree | string | '{prefix}-agree' | Class for agree button | |     btnDisagree | string | '{prefix}-disagree' | Class for disagree button | |     btnCustomize | string | '{prefix}-customize' | Class for customize button | | reload | boolean | false | Enable reloading current url after a change of service state | | summary | int/bool | 767 | Max witdh in pixel to show the summary of notice. False to disable | | cookieDuration | integer | 13*30 | Consent storage duration | | tabindexStart | integer | 0 | Value of tabindex attribute at CookieNotice initialisation | | afterWrapNotice | function | undefined | Callback after the notice added to DOM | | afterWrapModal | function | undefined | Callback after the modal added to DOM | | afterWrapServiceHandler | function | undefined | Callback after the service handler added to DOM | | afterEventsHandler | function | undefined | Callback after register events | | onChangeState | function | undefined | Callback on change service state (all or service) |

Methods

| Method | Arguments | Description | |--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| | notice | action string Action "show" or "hide" | Show/hide notice | | modal | action string Action "show" or "hide" | Show/hide modal | | agree | service string Service identifier | Agree a service | | disagree | service string Service identifier | Disagree a service | | setState | service string Service identifier, state mixed true, false or "undefined" to define the service state | Set the state of service | | loadStates | - | Load services state from cookie storage | | getState | service string Service identifier | Return the state of service. If there is no choice, the returned state is "undefined" |
| isAllowed | service string Service identifier | Return true if the service is allowed |
| hasConsent | - | Return true if there is a saved consent | | reload | - | Reload current url | | getCookie | name string Cookie name | Get cookie value | | setCookie | name string Cookie name, value string Cookie value, duration int Duration in day, path string="/" Storage path, secure bool=true Secure mode | Set cookie value | | removeCookie | name string Cookie name, path string Storage path | Remove a cookie | | destroy | - | Remove CookieNotice from DOM |

Events

changestate.cookienotice

On change state To register on CookieNotice container

$('#notice-cookie').cookieNotice();

$('#notice-cookie').on('changestate.cookienotice', function (event, data) {
    console.log(data);
});

agree.cookienotice

On agree service in service handler To register on service handler

$('#notice-cookie').cookieNotice();

$('[data-cookienotice-service="youtube"]').on('agree.cookienotice', function (event, data) {
    console.log(data);
});

Test allowed services

let cookieNotice = $('#notice-cookie').cookieNotice();

if (cookieNotice.isAllowed('facebook')) {
    // OK
}

// or

if ($.CookieNotice.services['facebook'] === true) {
    // OK
}

// or

var state = cookieNotice.getState('facebook');
if (state === true) {
    // OK
}

// Savec consent?
if (cookieNotice.hasConsent()) {
    // OK
}