Browse Source

Merge branch 'master' into display-cta-accept-all-with-highPrivacy

Amauri CHAMPEAUX 6 years ago
parent
commit
72bd720177

+ 2 - 1
README.md

@@ -127,7 +127,8 @@ tarteaucitron.init({
     "cookieslist": true, /* Afficher la liste des cookies installés ? */
     "cookieslist": true, /* Afficher la liste des cookies installés ? */
     "removeCredit": false, /* supprimer le lien vers la source ? */
     "removeCredit": false, /* supprimer le lien vers la source ? */
     "handleBrowserDNTRequest": false, /* Répondre au DoNotTrack du navigateur ?*/
     "handleBrowserDNTRequest": false, /* Répondre au DoNotTrack du navigateur ?*/
-    "cookieDomain": ".my-multisite-domaine.fr" /* Nom de domaine sur lequel sera posé le cookie - pour les multisites / sous-domaines - Facultatif */
+    "moreInfoLink": true,
+    //"cookieDomain": ".my-multisite-domaine.fr" /* Nom de domaine sur lequel sera posé le cookie - pour les multisites / sous-domaines - Facultatif */
 });
 });
 </script>
 </script>
 ```
 ```

+ 128 - 12
css/tarteaucitron.css

@@ -1,3 +1,45 @@
+.modal-open{
+    overflow: hidden;
+    height: 100%;
+}
+
+/***
+* Reset CSS
+*/
+#tarteaucitronRoot div, #tarteaucitronRoot span, #tarteaucitronRoot applet, #tarteaucitronRoot object, #tarteaucitronRoot iframe, #tarteaucitronRoot h1, #tarteaucitronRoot h2, #tarteaucitronRoot h3, #tarteaucitronRoot h4, #tarteaucitronRoot h5, #tarteaucitronRoot h6, #tarteaucitronRoot p, #tarteaucitronRoot blockquote, #tarteaucitronRoot pre, #tarteaucitronRoot a, #tarteaucitronRoot abbr, #tarteaucitronRoot acronym, #tarteaucitronRoot address, #tarteaucitronRoot big, #tarteaucitronRoot cite, #tarteaucitronRoot code, #tarteaucitronRoot del, #tarteaucitronRoot dfn, #tarteaucitronRoot em, #tarteaucitronRoot img, #tarteaucitronRoot ins, #tarteaucitronRoot kbd, #tarteaucitronRoot q, #tarteaucitronRoot s, #tarteaucitronRoot samp, #tarteaucitronRoot small, #tarteaucitronRoot strike, #tarteaucitronRoot strong, #tarteaucitronRoot sub, #tarteaucitronRoot sup, #tarteaucitronRoot tt, #tarteaucitronRoot var, #tarteaucitronRoot b, #tarteaucitronRoot u, #tarteaucitronRoot i, #tarteaucitronRoot center, #tarteaucitronRoot dl, #tarteaucitronRoot dt, #tarteaucitronRoot dd, #tarteaucitronRoot ol, #tarteaucitronRoot ul, #tarteaucitronRoot li, #tarteaucitronRoot fieldset, #tarteaucitronRoot form, #tarteaucitronRoot label, #tarteaucitronRoot legend, #tarteaucitronRoot table, #tarteaucitronRoot caption, #tarteaucitronRoot tbody, #tarteaucitronRoot tfoot, #tarteaucitronRoot thead, #tarteaucitronRoot tr, #tarteaucitronRoot th, #tarteaucitronRoot td,article, #tarteaucitronRoot aside, #tarteaucitronRoot canvas, #tarteaucitronRoot details, #tarteaucitronRoot embed, #tarteaucitronRoot figure, #tarteaucitronRoot figcaption, #tarteaucitronRoot footer, #tarteaucitronRoot header, #tarteaucitronRoot hgroup, #tarteaucitronRoot menu, #tarteaucitronRoot nav, #tarteaucitronRoot output, #tarteaucitronRoot ruby, #tarteaucitronRoot section, #tarteaucitronRoot summary, #tarteaucitronRoot time, #tarteaucitronRoot mark, #tarteaucitronRoot audio, #tarteaucitronRoot video {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    font-size: 100%;
+    font: inherit;
+    vertical-align: baseline;
+    background: initial;
+    text-align: initial;
+    text-shadow: initial;
+}
+/* HTML5 display-role reset for older browsers */
+#tarteaucitronRoot article, #tarteaucitronRoot aside, #tarteaucitronRoot details, #tarteaucitronRoot figcaption, #tarteaucitronRoot figure, #tarteaucitronRoot footer, #tarteaucitronRoot header, #tarteaucitronRoot hgroup, #tarteaucitronRoot menu, #tarteaucitronRoot nav, #tarteaucitronRoot section {
+    display: block;
+}
+#tarteaucitronRoot ol, #tarteaucitronRoot ul {
+    list-style: none;
+}
+#tarteaucitronRoot blockquote, #tarteaucitronRoot q {
+    quotes: none;
+}
+#tarteaucitronRoot blockquote:before, #tarteaucitronRoot blockquote:after, #tarteaucitronRoot q:before, #tarteaucitronRoot q:after {
+    content: '';
+    content: none;
+}
+#tarteaucitronRoot table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+#tarteaucitronRoot a:focus, #tarteaucitronRoot button:focus {
+    /*outline: 2px solid #cb3333;*/
+}
+
 /***
 /***
  * Responsive layout for the control panel
  * Responsive layout for the control panel
  */
  */
@@ -37,6 +79,18 @@
     #tarteaucitron #tarteaucitronServices .tarteaucitronTitle {
     #tarteaucitron #tarteaucitronServices .tarteaucitronTitle {
         text-align: left !important;
         text-align: left !important;
     }
     }
+
+    .tarteaucitronName h2 {
+        max-width: 80%;
+    }
+
+    #tarteaucitron #tarteaucitronServices .tarteaucitronLine .tarteaucitronAsk {
+        text-align: center !important;
+    }
+
+        #tarteaucitron #tarteaucitronServices .tarteaucitronLine .tarteaucitronAsk button {
+            margin-bottom: 5px;
+        }
 }
 }
 
 
 @media screen and (min-width:768px) and (max-width:991px) {
 @media screen and (min-width:768px) and (max-width:991px) {
@@ -56,6 +110,16 @@
     zoom: 1;
     zoom: 1;
 }
 }
 
 
+#tarteaucitronRoot div#tarteaucitron {
+    left: 0;
+    right: 0;
+    margin: auto;
+}
+
+#tarteaucitronRoot button#tarteaucitronBack {
+    background: #eee;
+}
+
 #tarteaucitron .clear {
 #tarteaucitron .clear {
     clear: both;
     clear: both;
 }
 }
@@ -67,15 +131,30 @@
     text-decoration: none;
     text-decoration: none;
 }
 }
 
 
+#tarteaucitronRoot button {
+    background: transparent;
+    border: 0;
+}
+
+#tarteaucitronAlertBig strong, #tarteaucitronAlertSmall strong,
 #tarteaucitronAlertBig a, #tarteaucitronAlertSmall a {
 #tarteaucitronAlertBig a, #tarteaucitronAlertSmall a {
     color: #fff;
     color: #fff;
 }
 }
 
 
-#tarteaucitron b {
+#tarteaucitron strong {
     font-size: 22px;
     font-size: 22px;
     font-weight: 500;
     font-weight: 500;
 }
 }
 
 
+#tarteaucitron ul {
+    padding: 0;
+}
+
+.cookie-list {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+}
 /***
 /***
  * Root div added just before </body>
  * Root div added just before </body>
  */
  */
@@ -96,6 +175,23 @@
     vertical-align: initial;
     vertical-align: initial;
 }
 }
 
 
+#tarteaucitronRoot h1 {
+    font-size: 1.5em;
+    text-align: center;
+    color: #fff;
+    margin: 15px 0 28px;
+}
+
+#tarteaucitronRoot h2 {
+    display: inline-block;
+    margin-left: 5px;
+    color: #fff;
+}
+
+h2#tarteaucitronCookiesNumberBis {
+    margin-left: 0;
+}
+
 /***
 /***
  * Control panel
  * Control panel
  */
  */
@@ -163,8 +259,13 @@
     position: relative;
     position: relative;
 }
 }
 
 
-#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesList .tarteaucitronTitle,
-#tarteaucitron #tarteaucitronServices .tarteaucitronTitle,
+#tarteaucitronCookiesList h3.tarteaucitronTitle {
+    width: 100%;
+    box-sizing: border-box;
+}
+
+#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesList .tarteaucitronTitle button,
+#tarteaucitron #tarteaucitronServices .tarteaucitronTitle button,
 #tarteaucitron #tarteaucitronInfo,
 #tarteaucitron #tarteaucitronInfo,
 #tarteaucitron #tarteaucitronServices .tarteaucitronDetails {
 #tarteaucitron #tarteaucitronServices .tarteaucitronDetails {
     background: #333;
     background: #333;
@@ -199,6 +300,7 @@
 
 
 #tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesList .tarteaucitronTitle {
 #tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesList .tarteaucitronTitle {
     padding: 5px 10px;
     padding: 5px 10px;
+    margin: 0;
 }
 }
 
 
 #tarteaucitron #tarteaucitronInfo,
 #tarteaucitron #tarteaucitronInfo,
@@ -250,7 +352,7 @@
     margin-top: 2px;
     margin-top: 2px;
 }
 }
 
 
-#tarteaucitron #tarteaucitronServices .tarteaucitronMainLine .tarteaucitronName b {
+#tarteaucitron #tarteaucitronServices .tarteaucitronMainLine .tarteaucitronName button {
     color: #fff;
     color: #fff;
 }
 }
 
 
@@ -289,6 +391,7 @@
     text-align: center;
     text-align: center;
     text-decoration: none;
     text-decoration: none;
     width: auto;
     width: auto;
+    border: 0;
 }
 }
 
 
 #tarteaucitron #tarteaucitronServices .tarteaucitronLine .tarteaucitronName .tarteaucitronListCookies {
 #tarteaucitron #tarteaucitronServices .tarteaucitronLine .tarteaucitronName .tarteaucitronListCookies {
@@ -296,6 +399,16 @@
     font-size: 12px;
     font-size: 12px;
 }
 }
 
 
+#tarteaucitron h3 {
+    font-size: 18px;
+}
+
+#tarteaucitron #tarteaucitronMainLineOffset .tarteaucitronName {
+    width: auto!important;
+    margin-left: 0!important;
+    font-size: 14px;
+}
+
 /***
 /***
  * Big alert
  * Big alert
  */
  */
@@ -307,7 +420,7 @@
     bottom: 0;
     bottom: 0;
 }
 }
 
 
-#tarteaucitronAlertBig {
+#tarteaucitronRoot #tarteaucitronAlertBig {
     background: #333;
     background: #333;
     color: #fff;
     color: #fff;
     display: none;
     display: none;
@@ -316,18 +429,21 @@
     padding: 5px 5%;
     padding: 5px 5%;
     position: fixed;
     position: fixed;
     text-align: center;
     text-align: center;
-    width: 90%;
     box-sizing: content-box;
     box-sizing: content-box;
     z-index: 2147483645;
     z-index: 2147483645;
+    text-align: center;
+    padding: 10px;
+    margin: auto;
+    width: 100%;
 }
 }
 
 
 #tarteaucitronAlertBig #tarteaucitronDisclaimerAlert,
 #tarteaucitronAlertBig #tarteaucitronDisclaimerAlert,
-#tarteaucitronAlertBig #tarteaucitronDisclaimerAlert b {
+#tarteaucitronAlertBig #tarteaucitronDisclaimerAlert strong {
     font: 15px verdana;
     font: 15px verdana;
     color: #fff;
     color: #fff;
 }
 }
 
 
-#tarteaucitronAlertBig #tarteaucitronDisclaimerAlert b {
+#tarteaucitronAlertBig #tarteaucitronDisclaimerAlert strong {
     font-weight: 700;
     font-weight: 700;
 }
 }
 
 
@@ -461,7 +577,7 @@
     text-align: left;
     text-align: left;
 }
 }
 
 
-#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesList b {
+#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesList strong {
     color: #333;
     color: #333;
 }
 }
 
 
@@ -472,7 +588,7 @@
     text-align: left;
     text-align: left;
 }
 }
 
 
-#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesTitle b {
+#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesTitle strong {
     color: #fff;
     color: #fff;
     font-size: 16px;
     font-size: 16px;
 }
 }
@@ -497,7 +613,7 @@
     width: 50%;
     width: 50%;
 }
 }
 
 
-#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesList .tarteaucitronCookiesListMain .tarteaucitronCookiesListLeft a b {
+#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesList .tarteaucitronCookiesListMain .tarteaucitronCookiesListLeft a strong {
     color: darkred;
     color: darkred;
 }
 }
 
 
@@ -531,7 +647,7 @@
     vertical-align: middle;
     vertical-align: middle;
 }
 }
 
 
-.tac_activate .tac_float b {
+.tac_activate .tac_float strong {
     color: #fff;
     color: #fff;
 }
 }
 
 

+ 8 - 0
lang/tarteaucitron.cs.js

@@ -27,6 +27,14 @@ tarteaucitron.lang = {
     "more": "Dozvědět se více",
     "more": "Dozvědět se více",
     "source": "Zobrazit oficiální stránku",
     "source": "Zobrazit oficiální stránku",
     "credit": "Správce cookies od tarteaucitron.js",
     "credit": "Správce cookies od tarteaucitron.js",
+
+    "toggleInfoBox": "Show/hide informations about cookie storage",
+    "title": "Cookies management panel",
+    "cookieDetail": "Cookie detail for",
+    "ourSite": "on our site",
+    "newWindow": "(new window)",
+    "allowAll": "Allow all cookies",
+    "denyAll": "Deny all cookies",
     
     
     "fallback": "je vypnutý.",
     "fallback": "je vypnutý.",
 
 

+ 8 - 0
lang/tarteaucitron.de.js

@@ -27,6 +27,14 @@ tarteaucitron.lang = {
     "more": "Weiter lesen",
     "more": "Weiter lesen",
     "source": "Zur offiziellen Webseite",
     "source": "Zur offiziellen Webseite",
     "credit": "Cookies manager von tarteaucitron.js",
     "credit": "Cookies manager von tarteaucitron.js",
+
+    "toggleInfoBox": "Show/hide informations about cookie storage",
+    "title": "Cookies management panel",
+    "cookieDetail": "Cookie detail for",
+    "ourSite": "on our site",
+    "newWindow": "(new window)",
+    "allowAll": "Allow all cookies",
+    "denyAll": "Deny all cookies",
     
     
     "fallback": "ist deaktiviert.",
     "fallback": "ist deaktiviert.",
 
 

+ 8 - 0
lang/tarteaucitron.en.js

@@ -27,6 +27,14 @@ tarteaucitron.lang = {
     "more": "Read more",
     "more": "Read more",
     "source": "View the official website",
     "source": "View the official website",
     "credit": "Cookies manager by tarteaucitron.js",
     "credit": "Cookies manager by tarteaucitron.js",
+
+    "toggleInfoBox": "Show/hide informations about cookie storage",
+    "title": "Cookies management panel",
+    "cookieDetail": "Cookie detail for",
+    "ourSite": "on our site",
+    "newWindow": "(new window)",
+    "allowAll": "Allow all cookies",
+    "denyAll": "Deny all cookies",
     
     
     "fallback": "is disabled.",
     "fallback": "is disabled.",
 
 

+ 8 - 0
lang/tarteaucitron.es.js

@@ -27,6 +27,14 @@ tarteaucitron.lang = {
     "more": "Leer más",
     "more": "Leer más",
     "source": "Ver sitio web oficial",
     "source": "Ver sitio web oficial",
     "credit": "Gestor de cookies realizada por tarteaucitron.js",
     "credit": "Gestor de cookies realizada por tarteaucitron.js",
+
+    "toggleInfoBox": "Show/hide informations about cookie storage",
+    "title": "Cookies management panel",
+    "cookieDetail": "Cookie detail for",
+    "ourSite": "on our site",
+    "newWindow": "(new window)",
+    "allowAll": "Allow all cookies",
+    "denyAll": "Deny all cookies",
     
     
     "fallback": "está deshabilitado.",
     "fallback": "está deshabilitado.",
 
 

+ 8 - 0
lang/tarteaucitron.fr.js

@@ -27,6 +27,14 @@ tarteaucitron.lang = {
     "more": "En savoir plus",
     "more": "En savoir plus",
     "source": "Voir le site officiel",
     "source": "Voir le site officiel",
     "credit": "Gestion des cookies par tarteaucitron.js",
     "credit": "Gestion des cookies par tarteaucitron.js",
+
+    "toggleInfoBox": "Afficher/masquer les informations sur le stockage des cookies",
+    "title": "Panneau de gestion des cookies",
+    "cookieDetail": "Détail des cookies",
+    "ourSite": "sur notre site",
+    "newWindow": "(nouvelle fenêtre)",
+    "allowAll": "Autoriser tous les cookies",
+    "denyAll": "Interdire tous les cookies",
     
     
     "fallback": "est désactivé.",
     "fallback": "est désactivé.",
 
 

+ 8 - 0
lang/tarteaucitron.it.js

@@ -27,6 +27,14 @@ tarteaucitron.lang = {
     "more": "Saperne di più",
     "more": "Saperne di più",
     "source": "Vai al sito ufficiale",
     "source": "Vai al sito ufficiale",
     "credit": "Gestione dei cookies da tarteaucitron.js",
     "credit": "Gestione dei cookies da tarteaucitron.js",
+
+    "toggleInfoBox": "Show/hide informations about cookie storage",
+    "title": "Cookies management panel",
+    "cookieDetail": "Cookie detail for",
+    "ourSite": "on our site",
+    "newWindow": "(new window)",
+    "allowAll": "Allow all cookies",
+    "denyAll": "Deny all cookies",
     
     
     "fallback": "è disattivato",
     "fallback": "è disattivato",
     
     

+ 8 - 0
lang/tarteaucitron.nl.js

@@ -30,6 +30,14 @@ tarteaucitron.lang = {
     
     
     "fallback": "is uitgeschakeld.",
     "fallback": "is uitgeschakeld.",
 
 
+    "toggleInfoBox": "Show/hide informations about cookie storage",
+    "title": "Cookies management panel",
+    "cookieDetail": "Cookie detail for",
+    "ourSite": "on our site",
+    "newWindow": "(new window)",
+    "allowAll": "Allow all cookies",
+    "denyAll": "Deny all cookies",
+
     "ads": {
     "ads": {
         "title": "Advertentienetwerk",
         "title": "Advertentienetwerk",
         "details": "Advertentienetwerken kunnen inkomsten genereren door advertentieruimte op de site te verkopen."
         "details": "Advertentienetwerken kunnen inkomsten genereren door advertentieruimte op de site te verkopen."

+ 8 - 0
lang/tarteaucitron.pl.js

@@ -27,6 +27,14 @@ tarteaucitron.lang = {
     "more": "Więcej informacji",
     "more": "Więcej informacji",
     "source": "Zobacz oficjalną stronę internetowa",
     "source": "Zobacz oficjalną stronę internetowa",
     "credit": "Cookies menadżer z tarteaucitron.js",
     "credit": "Cookies menadżer z tarteaucitron.js",
+
+    "toggleInfoBox": "Show/hide informations about cookie storage",
+    "title": "Cookies management panel",
+    "cookieDetail": "Cookie detail for",
+    "ourSite": "on our site",
+    "newWindow": "(new window)",
+    "allowAll": "Allow all cookies",
+    "denyAll": "Deny all cookies",
     
     
     "fallback": "jest nieaktywna.",
     "fallback": "jest nieaktywna.",
 
 

+ 9 - 0
lang/tarteaucitron.pt.js

@@ -25,6 +25,15 @@ tarteaucitron.lang = {
     "more": "Ler mais",
     "more": "Ler mais",
     "source": "Ver o site oficial",
     "source": "Ver o site oficial",
     "credit": "Gerenciador de cookies por tarteaucitron.js",
     "credit": "Gerenciador de cookies por tarteaucitron.js",
+
+    "toggleInfoBox": "Show/hide informations about cookie storage",
+    "title": "Cookies management panel",
+    "cookieDetail": "Cookie detail for",
+    "ourSite": "on our site",
+    "newWindow": "(new window)",
+    "allowAll": "Allow all cookies",
+    "denyAll": "Deny all cookies",
+
     "fallback": "está desativado.",
     "fallback": "está desativado.",
     "ads": {
     "ads": {
         "title": "Rede de anúncios",
         "title": "Rede de anúncios",

+ 8 - 0
lang/tarteaucitron.ru.js

@@ -27,6 +27,14 @@ tarteaucitron.lang = {
     "more": "Подробнее",
     "more": "Подробнее",
     "source": "Посетите официальный сайт",
     "source": "Посетите официальный сайт",
     "credit": "Кукис манаджер tarteaucitron.js",
     "credit": "Кукис манаджер tarteaucitron.js",
+
+    "toggleInfoBox": "Show/hide informations about cookie storage",
+    "title": "Cookies management panel",
+    "cookieDetail": "Cookie detail for",
+    "ourSite": "on our site",
+    "newWindow": "(new window)",
+    "allowAll": "Allow all cookies",
+    "denyAll": "Deny all cookies",
     
     
     "fallback": "Деактивирован.",
     "fallback": "Деактивирован.",
 
 

+ 186 - 85
tarteaucitron.js

@@ -3,7 +3,8 @@
 // define correct path for files inclusion
 // define correct path for files inclusion
 var scripts = document.getElementsByTagName('script'),
 var scripts = document.getElementsByTagName('script'),
     path = scripts[scripts.length - 1].src.split('?')[0],
     path = scripts[scripts.length - 1].src.split('?')[0],
-    cdn = path.split('/').slice(0, -1).join('/') + '/',
+    tarteaucitronForceCDN = (tarteaucitronForceCDN === undefined) ? '' : tarteaucitronForceCDN,
+    cdn = (tarteaucitronForceCDN === '') ? path.split('/').slice(0, -1).join('/') + '/' : tarteaucitronForceCDN,
     alreadyLaunch = (alreadyLaunch === undefined) ? 0 : alreadyLaunch,
     alreadyLaunch = (alreadyLaunch === undefined) ? 0 : alreadyLaunch,
     tarteaucitronForceLanguage = (tarteaucitronForceLanguage === undefined) ? '' : tarteaucitronForceLanguage,
     tarteaucitronForceLanguage = (tarteaucitronForceLanguage === undefined) ? '' : tarteaucitronForceLanguage,
     tarteaucitronForceExpire = (tarteaucitronForceExpire === undefined) ? '' : tarteaucitronForceExpire,
     tarteaucitronForceExpire = (tarteaucitronForceExpire === undefined) ? '' : tarteaucitronForceExpire,
@@ -15,7 +16,7 @@ var scripts = document.getElementsByTagName('script'),
 
 
 
 
 var tarteaucitron = {
 var tarteaucitron = {
-    "version": 323,
+    "version": 20180828,
     "cdn": cdn,
     "cdn": cdn,
     "user": {},
     "user": {},
     "lang": {},
     "lang": {},
@@ -54,7 +55,7 @@ var tarteaucitron = {
                             if (scrollPos > (screen.height * 2)) {
                             if (scrollPos > (screen.height * 2)) {
                                 tarteaucitron.userInterface.respondAll(true);
                                 tarteaucitron.userInterface.respondAll(true);
                             } else if (scrollPos > (screen.height / 2)) {
                             } else if (scrollPos > (screen.height / 2)) {
-                                document.getElementById('tarteaucitronDisclaimerAlert').innerHTML = '<b>' + tarteaucitron.lang.alertBigScroll + '</b> ' + tarteaucitron.lang.alertBig;
+                                document.getElementById('tarteaucitronDisclaimerAlert').innerHTML = '<strong>' + tarteaucitron.lang.alertBigScroll + '</strong> ' + tarteaucitron.lang.alertBig;
                             }
                             }
 
 
                             if (tarteaucitron.orientation === 'top') {
                             if (tarteaucitron.orientation === 'top') {
@@ -66,6 +67,7 @@ var tarteaucitron = {
                         }
                         }
                     }
                     }
                 }, false);
                 }, false);
+
                 window.addEventListener("keydown", function (evt) {
                 window.addEventListener("keydown", function (evt) {
                     if (evt.keyCode === 27) {
                     if (evt.keyCode === 27) {
                         tarteaucitron.userInterface.closePanel();
                         tarteaucitron.userInterface.closePanel();
@@ -109,7 +111,7 @@ var tarteaucitron = {
                             if (scrollPos > (screen.height * 2)) {
                             if (scrollPos > (screen.height * 2)) {
                                 tarteaucitron.userInterface.respondAll(true);
                                 tarteaucitron.userInterface.respondAll(true);
                             } else if (scrollPos > (screen.height / 2)) {
                             } else if (scrollPos > (screen.height / 2)) {
-                                document.getElementById('tarteaucitronDisclaimerAlert').innerHTML = '<b>' + tarteaucitron.lang.alertBigScroll + '</b> ' + tarteaucitron.lang.alertBig;
+                                document.getElementById('tarteaucitronDisclaimerAlert').innerHTML = '<strong>' + tarteaucitron.lang.alertBigScroll + '</strong> ' + tarteaucitron.lang.alertBig;
                             }
                             }
                             if (tarteaucitron.orientation === 'top') {
                             if (tarteaucitron.orientation === 'top') {
                                 document.getElementById('tarteaucitronPercentage').style.top = heightPosition;
                                 document.getElementById('tarteaucitronPercentage').style.top = heightPosition;
@@ -124,6 +126,21 @@ var tarteaucitron = {
                     if (evt.keyCode === 27) {
                     if (evt.keyCode === 27) {
                         tarteaucitron.userInterface.closePanel();
                         tarteaucitron.userInterface.closePanel();
                     }
                     }
+
+                    if ( evt.keyCode === 9 && focusableEls.indexOf(evt.target) >= 0) {
+                        if ( evt.shiftKey ) /* shift + tab */ {
+                            if (document.activeElement === firstFocusableEl) {
+                                lastFocusableEl.focus();
+                                evt.preventDefault();
+                            }
+                        } else /* tab */ {
+                            if (document.activeElement === lastFocusableEl) {
+                                firstFocusableEl.focus();
+                                evt.preventDefault();
+                            }
+                        }
+                    }
+
                 });
                 });
                 window.attachEvent("onhashchange", function () {
                 window.attachEvent("onhashchange", function () {
                     if (document.location.hash === tarteaucitron.hashtag && tarteaucitron.hashtag !== '') {
                     if (document.location.hash === tarteaucitron.hashtag && tarteaucitron.hashtag !== '') {
@@ -191,20 +208,26 @@ var tarteaucitron = {
                 "showAlertSmall": true,
                 "showAlertSmall": true,
                 "cookieslist": true,
                 "cookieslist": true,
                 "handleBrowserDNTRequest": false,
                 "handleBrowserDNTRequest": false,
-                "AcceptAllCta" : false
+                "AcceptAllCta" : false,
+                "moreInfoLink": true
             },
             },
             params = tarteaucitron.parameters;
             params = tarteaucitron.parameters;
 
 
         // Step 0: get params
         // Step 0: get params
         if (params !== undefined) {
         if (params !== undefined) {
-            tarteaucitron.extend(defaults, params);
+
+            for (var k in defaults) {
+                if(!tarteaucitron.parameters.hasOwnProperty(k)) {
+                    tarteaucitron.parameters[k] = defaults[k];
+                }
+            }
         }
         }
 
 
         // global
         // global
-        tarteaucitron.orientation = defaults.orientation;
-        tarteaucitron.hashtag = defaults.hashtag;
-        tarteaucitron.highPrivacy = defaults.highPrivacy;
-        tarteaucitron.handleBrowserDNTRequest = defaults.handleBrowserDNTRequest;
+        tarteaucitron.orientation = tarteaucitron.parameters.orientation;
+        tarteaucitron.hashtag = tarteaucitron.parameters.hashtag;
+        tarteaucitron.highPrivacy = tarteaucitron.parameters.highPrivacy;
+        tarteaucitron.handleBrowserDNTRequest = tarteaucitron.parameters.handleBrowserDNTRequest;
 
 
         // Step 1: load css
         // Step 1: load css
         linkElement.rel = 'stylesheet';
         linkElement.rel = 'stylesheet';
@@ -236,97 +259,95 @@ var tarteaucitron = {
 
 
                 // Step 3: prepare the html
                 // Step 3: prepare the html
                 html += '<div id="tarteaucitronPremium"></div>';
                 html += '<div id="tarteaucitronPremium"></div>';
-                html += '<div id="tarteaucitronBack" onclick="tarteaucitron.userInterface.closePanel();"></div>';
-                html += '<div id="tarteaucitron">';
-                html += '   <div id="tarteaucitronClosePanel" onclick="tarteaucitron.userInterface.closePanel();">';
+                html += '<button id="tarteaucitronBack" onclick="tarteaucitron.userInterface.closePanel();" aria-label="' + tarteaucitron.lang.close + '"></button>';
+                html += '<div id="tarteaucitron" role="dialog" aria-labelledby="dialogTitle">';
+                html += '   <button id="tarteaucitronClosePanel" onclick="tarteaucitron.userInterface.closePanel();">';
                 html += '       ' + tarteaucitron.lang.close;
                 html += '       ' + tarteaucitron.lang.close;
-                html += '   </div>';
+                html += '   </button>';
                 html += '   <div id="tarteaucitronServices">';
                 html += '   <div id="tarteaucitronServices">';
-                html += '      <div class="tarteaucitronLine tarteaucitronMainLine" id="tarteaucitronMainLineOffset">';
+                html += '      <div class="tarteaucitronLine tarteaucitronMainLine" id="tarteaucitronMainLineOffset"><h1 id="dialogTitle">'+ tarteaucitron.lang.title + '</h1>';
                 html += '         <div class="tarteaucitronName">';
                 html += '         <div class="tarteaucitronName">';
-                html += '            <b><a href="#" onclick="tarteaucitron.userInterface.toggle(\'tarteaucitronInfo\', \'tarteaucitronInfoBox\');return false">&#10011;</a> ' + tarteaucitron.lang.all + '</b>';
+                html += '            <button onclick="tarteaucitron.userInterface.toggle(\'tarteaucitronInfo\', \'tarteaucitronInfoBox\');return false" aria-label="' + tarteaucitron.lang.toggleInfoBox + '">&#10011;</button> <h2>' + tarteaucitron.lang.all + '</h2>';
                 html += '         </div>';
                 html += '         </div>';
                 html += '         <div class="tarteaucitronAsk" id="tarteaucitronScrollbarAdjust">';
                 html += '         <div class="tarteaucitronAsk" id="tarteaucitronScrollbarAdjust">';
-                html += '            <div id="tarteaucitronAllAllowed" class="tarteaucitronAllow" onclick="tarteaucitron.userInterface.respondAll(true);">';
-                html += '               &#10003; ' + tarteaucitron.lang.allow;
-                html += '            </div> ';
-                html += '            <div id="tarteaucitronAllDenied" class="tarteaucitronDeny" onclick="tarteaucitron.userInterface.respondAll(false);">';
-                html += '               &#10007; ' + tarteaucitron.lang.deny;
-                html += '            </div>';
+                html += '            <button id="tarteaucitronAllAllowed" class="tarteaucitronAllow" onclick="tarteaucitron.userInterface.respondAll(true);">';
+                html += '               &#10003; ' + tarteaucitron.lang.allowAll;
+                html += '            </button> ';
+                html += '            <button id="tarteaucitronAllDenied" class="tarteaucitronDeny" onclick="tarteaucitron.userInterface.respondAll(false);">';
+                html += '               &#10007; ' + tarteaucitron.lang.denyAll;
+                html += '            </button>';
                 html += '         </div>';
                 html += '         </div>';
                 html += '      </div>';
                 html += '      </div>';
                 html += '      <div id="tarteaucitronInfo" class="tarteaucitronInfoBox">';
                 html += '      <div id="tarteaucitronInfo" class="tarteaucitronInfoBox">';
                 html += '         ' + tarteaucitron.lang.disclaimer;
                 html += '         ' + tarteaucitron.lang.disclaimer;
-                if (defaults.removeCredit === false) {
+                if (tarteaucitron.parameters.removeCredit === false) {
                     html += '        <br/><br/>';
                     html += '        <br/><br/>';
-                    html += '        <a href="https://opt-out.ferank.eu/" rel="nofollow" target="_blank" rel="noopener">' + tarteaucitron.lang.credit + '</a>';
+                    html += '        <a href="https://opt-out.ferank.eu/" rel="nofollow" target="_blank" rel="noopener" title="tarteaucitron ' + tarteaucitron.lang.newWindow + '">' + tarteaucitron.lang.credit + '</a>';
                 }
                 }
                 html += '      </div>';
                 html += '      </div>';
                 html += '      <div class="tarteaucitronBorder" id="tarteaucitronScrollbarParent">';
                 html += '      <div class="tarteaucitronBorder" id="tarteaucitronScrollbarParent">';
-                html += '         <div class="clear"></div>';
+                html += '         <div class="clear"></div><ul>';
                 for (i = 0; i < cat.length; i += 1) {
                 for (i = 0; i < cat.length; i += 1) {
-                    html += '         <div id="tarteaucitronServicesTitle_' + cat[i] + '" class="tarteaucitronHidden">';
+                    html += '         <li id="tarteaucitronServicesTitle_' + cat[i] + '" class="tarteaucitronHidden">';
                     html += '            <div class="tarteaucitronTitle">';
                     html += '            <div class="tarteaucitronTitle">';
-                    html += '               <a href="#" onclick="tarteaucitron.userInterface.toggle(\'tarteaucitronDetails' + cat[i] + '\', \'tarteaucitronInfoBox\');return false">&#10011;</a> ' + tarteaucitron.lang[cat[i]].title;
+                    html += '               <button onclick="tarteaucitron.userInterface.toggle(\'tarteaucitronDetails' + cat[i] + '\', \'tarteaucitronInfoBox\');return false">&#10011; ' + tarteaucitron.lang[cat[i]].title + '</button>';
                     html += '            </div>';
                     html += '            </div>';
                     html += '            <div id="tarteaucitronDetails' + cat[i] + '" class="tarteaucitronDetails tarteaucitronInfoBox">';
                     html += '            <div id="tarteaucitronDetails' + cat[i] + '" class="tarteaucitronDetails tarteaucitronInfoBox">';
                     html += '               ' + tarteaucitron.lang[cat[i]].details;
                     html += '               ' + tarteaucitron.lang[cat[i]].details;
                     html += '            </div>';
                     html += '            </div>';
-                    html += '         </div>';
-                    html += '         <div id="tarteaucitronServices_' + cat[i] + '"></div>';
+                    html += '         <ul id="tarteaucitronServices_' + cat[i] + '"></ul></li>';
                 }
                 }
-                html += '         <div class="tarteaucitronHidden" id="tarteaucitronScrollbarChild" style="height:20px;display:block"></div>';
+                html += '         </ul><div class="tarteaucitronHidden" id="tarteaucitronScrollbarChild" style="height:20px;display:block"></div>';
                 html += '       </div>';
                 html += '       </div>';
                 html += '   </div>';
                 html += '   </div>';
                 html += '</div>';
                 html += '</div>';
 
 
-                if (defaults.orientation === 'bottom') {
+                if (tarteaucitron.parameters.orientation === 'bottom') {
                     orientation = 'Bottom';
                     orientation = 'Bottom';
                 }
                 }
 
 
-                if (defaults.highPrivacy && !defaults.AcceptAllCta) {
-
+                if (tarteaucitron.parameters.highPrivacy && !defaults.AcceptAllCta) {
                     html += '<div id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '">';
                     html += '<div id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '">';
                     html += '   <span id="tarteaucitronDisclaimerAlert">';
                     html += '   <span id="tarteaucitronDisclaimerAlert">';
                     html += '       ' + tarteaucitron.lang.alertBigPrivacy;
                     html += '       ' + tarteaucitron.lang.alertBigPrivacy;
                     html += '   </span>';
                     html += '   </span>';
-                    html += '   <span id="tarteaucitronPersonalize" onclick="tarteaucitron.userInterface.openPanel();">';
+                    html += '   <button id="tarteaucitronPersonalize" onclick="tarteaucitron.userInterface.openPanel();">';
                     html += '       ' + tarteaucitron.lang.personalize;
                     html += '       ' + tarteaucitron.lang.personalize;
-                    html += '   </span>';
+                    html += '   </button>';
                     html += '</div>';
                     html += '</div>';
                 } else {
                 } else {
                     html += '<div id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '">';
                     html += '<div id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '">';
                     html += '   <span id="tarteaucitronDisclaimerAlert">';
                     html += '   <span id="tarteaucitronDisclaimerAlert">';
                     html += '       ' + tarteaucitron.lang.alertBigClick + ' ' + tarteaucitron.lang.alertBig;
                     html += '       ' + tarteaucitron.lang.alertBigClick + ' ' + tarteaucitron.lang.alertBig;
                     html += '   </span>';
                     html += '   </span>';
-                    html += '   <span id="tarteaucitronPersonalize" onclick="tarteaucitron.userInterface.respondAll(true);">';
+                    html += '   <button id="tarteaucitronPersonalize" onclick="tarteaucitron.userInterface.respondAll(true);">';
                     html += '       &#10003; ' + tarteaucitron.lang.acceptAll;
                     html += '       &#10003; ' + tarteaucitron.lang.acceptAll;
-                    html += '   </span>';
-                    html += '   <span id="tarteaucitronCloseAlert" onclick="tarteaucitron.userInterface.openPanel();">';
+                    html += '   </button>';
+                    html += '   <button id="tarteaucitronCloseAlert" onclick="tarteaucitron.userInterface.openPanel();">';
                     html += '       ' + tarteaucitron.lang.personalize;
                     html += '       ' + tarteaucitron.lang.personalize;
-                    html += '   </span>';
+                    html += '   </button>';
                     html += '</div>';
                     html += '</div>';
                     html += '<div id="tarteaucitronPercentage"></div>';
                     html += '<div id="tarteaucitronPercentage"></div>';
                 }
                 }
 
 
-                if (defaults.showAlertSmall === true) {
+                if (tarteaucitron.parameters.showAlertSmall === true) {
                     html += '<div id="tarteaucitronAlertSmall" class="tarteaucitronAlertSmall' + orientation + '">';
                     html += '<div id="tarteaucitronAlertSmall" class="tarteaucitronAlertSmall' + orientation + '">';
-                    html += '   <div id="tarteaucitronManager" onclick="tarteaucitron.userInterface.openPanel();">';
+                    html += '   <button id="tarteaucitronManager" onclick="tarteaucitron.userInterface.openPanel();">';
                     html += '       ' + tarteaucitron.lang.alertSmall;
                     html += '       ' + tarteaucitron.lang.alertSmall;
-                    html += '       <div id="tarteaucitronDot">';
+                    html += '       <span id="tarteaucitronDot">';
                     html += '           <span id="tarteaucitronDotGreen"></span>';
                     html += '           <span id="tarteaucitronDotGreen"></span>';
                     html += '           <span id="tarteaucitronDotYellow"></span>';
                     html += '           <span id="tarteaucitronDotYellow"></span>';
                     html += '           <span id="tarteaucitronDotRed"></span>';
                     html += '           <span id="tarteaucitronDotRed"></span>';
-                    html += '       </div>';
-                    if (defaults.cookieslist === true) {
-                        html += '   </div><!-- @whitespace';
-                        html += '   --><div id="tarteaucitronCookiesNumber" onclick="tarteaucitron.userInterface.toggleCookiesList();">0</div>';
+                    html += '       </span>';
+                    if (tarteaucitron.parameters.cookieslist === true) {
+                        html += '   </button><!-- @whitespace';
+                        html += '   --><button id="tarteaucitronCookiesNumber" onclick="tarteaucitron.userInterface.toggleCookiesList();">0</button>';
                         html += '   <div id="tarteaucitronCookiesListContainer">';
                         html += '   <div id="tarteaucitronCookiesListContainer">';
-                        html += '       <div id="tarteaucitronClosePanelCookie" onclick="tarteaucitron.userInterface.closePanel();">';
+                        html += '       <button id="tarteaucitronClosePanelCookie" onclick="tarteaucitron.userInterface.closePanel();">';
                         html += '           ' + tarteaucitron.lang.close;
                         html += '           ' + tarteaucitron.lang.close;
-                        html += '       </div>';
+                        html += '       </button>';
                         html += '       <div class="tarteaucitronCookiesListMain" id="tarteaucitronCookiesTitle">';
                         html += '       <div class="tarteaucitronCookiesListMain" id="tarteaucitronCookiesTitle">';
-                        html += '            <b id="tarteaucitronCookiesNumberBis">0 cookie</b>';
+                        html += '            <h2 id="tarteaucitronCookiesNumberBis">0 cookie</h2>';
                         html += '       </div>';
                         html += '       </div>';
                         html += '       <div id="tarteaucitronCookiesList"></div>';
                         html += '       <div id="tarteaucitronCookiesList"></div>';
                         html += '    </div>';
                         html += '    </div>';
@@ -337,7 +358,20 @@ var tarteaucitron = {
                 }
                 }
 
 
                 tarteaucitron.addScript(tarteaucitron.cdn + 'advertising.js?v=' + tarteaucitron.version, '', function () {
                 tarteaucitron.addScript(tarteaucitron.cdn + 'advertising.js?v=' + tarteaucitron.version, '', function () {
-                    if (tarteaucitronNoAdBlocker === true || defaults.adblocker === false) {
+                    if (tarteaucitronNoAdBlocker === true || tarteaucitron.parameters.adblocker === false) {
+
+                        // create a wrapper container at the same level than tarteaucitron so we can add an aria-hidden when tarteaucitron is opened
+                        var wrapper = document.createElement('div');
+                        wrapper.id = "contentWrapper";
+                        
+                        while (document.body.firstChild)
+                        {
+                            wrapper.appendChild(document.body.firstChild);
+                        }
+
+                        // Append the wrapper to the body
+                        document.body.appendChild(wrapper);
+
                         div.id = 'tarteaucitronRoot';
                         div.id = 'tarteaucitronRoot';
                         body.appendChild(div, body);
                         body.appendChild(div, body);
                         div.innerHTML = html;
                         div.innerHTML = html;
@@ -381,21 +415,33 @@ var tarteaucitron = {
                         tarteaucitron.cookie.number();
                         tarteaucitron.cookie.number();
                         setInterval(tarteaucitron.cookie.number, 60000);
                         setInterval(tarteaucitron.cookie.number, 60000);
                     }
                     }
-                }, defaults.adblocker);
+                }, tarteaucitron.parameters.adblocker);
 
 
-                if (defaults.adblocker === true) {
+                if (tarteaucitron.parameters.adblocker === true) {
                     setTimeout(function () {
                     setTimeout(function () {
                         if (tarteaucitronNoAdBlocker === false) {
                         if (tarteaucitronNoAdBlocker === false) {
-                            html = '<div id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '" style="display:block">';
-                            html += '   <span id="tarteaucitronDisclaimerAlert">';
+                            html = '<div id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '" style="display:block" role="alert" aria-live="polite">';
+                            html += '   <p id="tarteaucitronDisclaimerAlert">';
                             html += '       ' + tarteaucitron.lang.adblock + '<br/>';
                             html += '       ' + tarteaucitron.lang.adblock + '<br/>';
-                            html += '       <b>' + tarteaucitron.lang.adblock_call + '</b>';
-                            html += '   </span>';
-                            html += '   <span id="tarteaucitronPersonalize" onclick="location.reload();">';
+                            html += '       <strong>' + tarteaucitron.lang.adblock_call + '</strong>';
+                            html += '   </p>';
+                            html += '   <button id="tarteaucitronPersonalize" onclick="location.reload();">';
                             html += '       ' + tarteaucitron.lang.reload;
                             html += '       ' + tarteaucitron.lang.reload;
-                            html += '   </span>';
+                            html += '   </button>';
                             html += '</div>';
                             html += '</div>';
                             html += '<div id="tarteaucitronPremium"></div>';
                             html += '<div id="tarteaucitronPremium"></div>';
+
+                            // create wrapper container
+                            var wrapper = document.createElement('div');
+                            wrapper.id = "contentWrapper";
+                            
+                            while (document.body.firstChild)
+                            {
+                                wrapper.appendChild(document.body.firstChild);
+                            }
+
+                        // Append the wrapper to the body
+                        document.body.appendChild(wrapper);
                             div.id = 'tarteaucitronRoot';
                             div.id = 'tarteaucitronRoot';
                             body.appendChild(div, body);
                             body.appendChild(div, body);
                             div.innerHTML = html;
                             div.innerHTML = html;
@@ -427,27 +473,29 @@ var tarteaucitron = {
         if (tarteaucitron.added[service.key] !== true) {
         if (tarteaucitron.added[service.key] !== true) {
             tarteaucitron.added[service.key] = true;
             tarteaucitron.added[service.key] = true;
 
 
-            html += '<div id="' + service.key + 'Line" class="tarteaucitronLine">';
+            html += '<li id="' + service.key + 'Line" class="tarteaucitronLine">';
             html += '   <div class="tarteaucitronName">';
             html += '   <div class="tarteaucitronName">';
-            html += '       <b>' + service.name + '</b><br/>';
+            html += '       <h3>' + service.name + '</h3><br/>';
             html += '       <span id="tacCL' + service.key + '" class="tarteaucitronListCookies"></span><br/>';
             html += '       <span id="tacCL' + service.key + '" class="tarteaucitronListCookies"></span><br/>';
-            html += '       <a href="https://opt-out.ferank.eu/service/' + service.key + '/" target="_blank" rel="noopener">';
-            html += '           ' + tarteaucitron.lang.more;
-            html += '       </a>';
-            html += '        - ';
-            html += '       <a href="' + service.uri + '" target="_blank" rel="noopener">';
-            html += '           ' + tarteaucitron.lang.source;
-            html += '       </a>';
+            if (tarteaucitron.parameters.moreInfoLink == true) {
+                html += '       <a href="https://opt-out.ferank.eu/service/' + service.key + '/" target="_blank" rel="noopener" title="'+ tarteaucitron.lang.cookieDetail + ' ' + service.name + ' ' + tarteaucitron.lang.ourSite + ' ' + tarteaucitron.lang.newWindow +'">';
+                html += '           ' + tarteaucitron.lang.more;
+                html += '       </a>';
+                html += '        - ';
+                html += '       <a href="' + service.uri + '" target="_blank" rel="noopener" title="' + service.name + ' ' + tarteaucitron.lang.newWindow + '">';
+                html += '           ' + tarteaucitron.lang.source;
+                html += '       </a>';
+            }
             html += '   </div>';
             html += '   </div>';
             html += '   <div class="tarteaucitronAsk">';
             html += '   <div class="tarteaucitronAsk">';
-            html += '       <div id="' + service.key + 'Allowed" class="tarteaucitronAllow" onclick="tarteaucitron.userInterface.respond(this, true);">';
+            html += '       <button id="' + service.key + 'Allowed" class="tarteaucitronAllow" onclick="tarteaucitron.userInterface.respond(this, true);">';
             html += '           &#10003; ' + tarteaucitron.lang.allow;
             html += '           &#10003; ' + tarteaucitron.lang.allow;
-            html += '       </div> ';
-            html += '       <div id="' + service.key + 'Denied" class="tarteaucitronDeny" onclick="tarteaucitron.userInterface.respond(this, false);">';
+            html += '       </button> ';
+            html += '       <button id="' + service.key  + 'Denied" class="tarteaucitronDeny" onclick="tarteaucitron.userInterface.respond(this, false);">';
             html += '           &#10007; ' + tarteaucitron.lang.deny;
             html += '           &#10007; ' + tarteaucitron.lang.deny;
-            html += '       </div>';
+            html += '       </button>';
             html += '   </div>';
             html += '   </div>';
-            html += '</div>';
+            html += '</li>';
 
 
             tarteaucitron.userInterface.css('tarteaucitronServicesTitle_' + service.type, 'display', 'block');
             tarteaucitron.userInterface.css('tarteaucitronServicesTitle_' + service.type, 'display', 'block');
 
 
@@ -651,9 +699,15 @@ var tarteaucitron = {
         },
         },
         "openPanel": function () {
         "openPanel": function () {
             "use strict";
             "use strict";
+
             tarteaucitron.userInterface.css('tarteaucitron', 'display', 'block');
             tarteaucitron.userInterface.css('tarteaucitron', 'display', 'block');
             tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'block');
             tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'block');
             tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'display', 'none');
             tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'display', 'none');
+
+            document.getElementById('tarteaucitronClosePanel').focus();
+            document.getElementById('contentWrapper').setAttribute("aria-hidden", "true");
+            document.getElementsByTagName('body')[0].classList.add('modal-open');
+            tarteaucitron.userInterface.focusTrap();
             tarteaucitron.userInterface.jsSizing('main');
             tarteaucitron.userInterface.jsSizing('main');
         },
         },
         "closePanel": function () {
         "closePanel": function () {
@@ -674,6 +728,52 @@ var tarteaucitron = {
             } else {
             } else {
                 tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'none');
                 tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'none');
             }
             }
+            if (document.getElementById('tarteaucitronCloseAlert') !== null) {
+                document.getElementById('tarteaucitronCloseAlert').focus();
+            }
+            document.getElementById('contentWrapper').setAttribute("aria-hidden", "false");
+            document.getElementsByTagName('body')[0].classList.remove('modal-open');
+            
+        },
+        "focusTrap": function() {
+            "use strict";
+
+            var focusableEls,
+                firstFocusableEl,
+                lastFocusableEl,
+                filtered;
+
+            focusableEls = document.getElementById('tarteaucitron').querySelectorAll('a[href], button');
+            filtered = [];
+
+            // get only visible items
+            for (var i = 0, max = focusableEls.length; i < max; i++) {
+                if (focusableEls[i].offsetHeight > 0) {
+                   filtered.push(focusableEls[i]);
+                }
+            } 
+
+            firstFocusableEl = filtered[0];  
+            lastFocusableEl = filtered[filtered.length - 1];
+
+            //loop focus inside tarteaucitron
+            document.getElementById('tarteaucitron').addEventListener("keydown", function (evt) {
+            
+                if ( evt.key === 'Tab' || evt.keyCode === 9 ) {
+                   
+                    if ( evt.shiftKey ) /* shift + tab */ {
+                        if (document.activeElement === firstFocusableEl) {
+                            lastFocusableEl.focus();
+                            evt.preventDefault();
+                        }
+                    } else /* tab */ {
+                        if (document.activeElement === lastFocusableEl) { 
+                            firstFocusableEl.focus();
+                            evt.preventDefault();
+                        }
+                    }
+                }
+            })
         },
         },
         "openAlert": function () {
         "openAlert": function () {
             "use strict";
             "use strict";
@@ -1024,27 +1124,28 @@ var tarteaucitron = {
                     if (tarteaucitron.cookie.owner[name] !== undefined && tarteaucitron.cookie.owner[name].join(' // ') !== savedname) {
                     if (tarteaucitron.cookie.owner[name] !== undefined && tarteaucitron.cookie.owner[name].join(' // ') !== savedname) {
                         savedname = tarteaucitron.cookie.owner[name].join(' // ');
                         savedname = tarteaucitron.cookie.owner[name].join(' // ');
                         html += '<div class="tarteaucitronHidden">';
                         html += '<div class="tarteaucitronHidden">';
-                        html += '     <div class="tarteaucitronTitle">';
+                        html += '     <h3 class="tarteaucitronTitle">';
                         html += '        ' + tarteaucitron.cookie.owner[name].join(' // ');
                         html += '        ' + tarteaucitron.cookie.owner[name].join(' // ');
-                        html += '    </div>';
-                        html += '</div>';
+                        html += '    </h3>';
+                        html += '</div><ul class="cookie-list">';
                     } else if (tarteaucitron.cookie.owner[name] === undefined && host !== savedname) {
                     } else if (tarteaucitron.cookie.owner[name] === undefined && host !== savedname) {
                         savedname = host;
                         savedname = host;
                         html += '<div class="tarteaucitronHidden">';
                         html += '<div class="tarteaucitronHidden">';
-                        html += '     <div class="tarteaucitronTitle">';
+                        html += '     <h3 class="tarteaucitronTitle">';
                         html += '        ' + host;
                         html += '        ' + host;
-                        html += '    </div>';
-                        html += '</div>';
+                        html += '    </h3>';
+                        html += '</div><ul class="cookie-list">';
                     }
                     }
-                    html += '<div class="tarteaucitronCookiesListMain">';
-                    html += '    <div class="tarteaucitronCookiesListLeft"><a href="#" onclick="tarteaucitron.cookie.purge([\'' + cookies[i].split('=', 1) + '\']);tarteaucitron.cookie.number();tarteaucitron.userInterface.jsSizing(\'cookie\');return false"><b>&times;</b></a> <b>' + name + '</b>';
+                    html += '<li class="tarteaucitronCookiesListMain">';
+                    html += '    <div class="tarteaucitronCookiesListLeft"><button onclick="tarteaucitron.cookie.purge([\'' + cookies[i].split('=', 1) + '\']);tarteaucitron.cookie.number();tarteaucitron.userInterface.jsSizing(\'cookie\');return false"><strong>&times;</strong></button> <strong>' + name + '</strong>';
                     html += '    </div>';
                     html += '    </div>';
                     html += '    <div class="tarteaucitronCookiesListRight">' + cookies[i].split('=').slice(1).join('=') + '</div>';
                     html += '    <div class="tarteaucitronCookiesListRight">' + cookies[i].split('=').slice(1).join('=') + '</div>';
-                    html += '</div>';
+                    html += '</li>';
                 }
                 }
+                html += '</ul>';
             } else {
             } else {
                 html += '<div class="tarteaucitronCookiesListMain">';
                 html += '<div class="tarteaucitronCookiesListMain">';
-                html += '    <div class="tarteaucitronCookiesListLeft"><b>-</b></div>';
+                html += '    <div class="tarteaucitronCookiesListLeft"><strong>-</strong></div>';
                 html += '    <div class="tarteaucitronCookiesListRight"></div>';
                 html += '    <div class="tarteaucitronCookiesListRight"></div>';
                 html += '</div>';
                 html += '</div>';
             }
             }
@@ -1244,10 +1345,10 @@ var tarteaucitron = {
 
 
         html += '<div class="tac_activate">';
         html += '<div class="tac_activate">';
         html += '   <div class="tac_float">';
         html += '   <div class="tac_float">';
-        html += '      <b>' + tarteaucitron.services[id].name + '</b> ' + tarteaucitron.lang.fallback;
-        html += '      <div class="tarteaucitronAllow" id="Eng' + r + 'ed' + id + '" onclick="tarteaucitron.userInterface.respond(this, true);">';
+        html += '      <strong>' + tarteaucitron.services[id].name + '</strong> ' + tarteaucitron.lang.fallback;
+        html += '      <button class="tarteaucitronAllow" id="Eng' + r + 'ed' + id + '" onclick="tarteaucitron.userInterface.respond(this, true);">';
         html += '          &#10003; ' + tarteaucitron.lang.allow;
         html += '          &#10003; ' + tarteaucitron.lang.allow;
-        html += '       </div>';
+        html += '       </button>';
         html += '   </div>';
         html += '   </div>';
         html += '</div>';
         html += '</div>';
 
 

+ 56 - 3
tarteaucitron.services.js

@@ -1020,7 +1020,16 @@ tarteaucitron.services.gajs = {
         "use strict";
         "use strict";
         window._gaq = window._gaq || [];
         window._gaq = window._gaq || [];
         window._gaq.push(['_setAccount', tarteaucitron.user.gajsUa]);
         window._gaq.push(['_setAccount', tarteaucitron.user.gajsUa]);
-        window._gaq.push(['_trackPageview']);
+
+        if (tarteaucitron.user.gajsAnonymizeIp) {
+            window._gaq.push (['_gat._anonymizeIp']);
+        }
+
+        if (tarteaucitron.user.gajsPageView) {
+            window._gaq.push(['_trackPageview, ' + tarteaucitron.user.gajsPageView]);
+        } else {
+            window._gaq.push(['_trackPageview']);
+        }
 
 
         tarteaucitron.addScript('//www.google-analytics.com/ga.js', '', function () {
         tarteaucitron.addScript('//www.google-analytics.com/ga.js', '', function () {
             if (typeof tarteaucitron.user.gajsMore === 'function') {
             if (typeof tarteaucitron.user.gajsMore === 'function') {
@@ -1047,8 +1056,24 @@ tarteaucitron.services.analytics = {
         };
         };
         window.ga.l = new Date();
         window.ga.l = new Date();
         tarteaucitron.addScript('https://www.google-analytics.com/analytics.js', '', function () {
         tarteaucitron.addScript('https://www.google-analytics.com/analytics.js', '', function () {
-            ga('create', tarteaucitron.user.analyticsUa, {'cookieExpires': 34128000});
-            ga('send', 'pageview');
+            var uaCreate = {'cookieExpires': 34128000};
+            tarteaucitron.extend(uaCreate, tarteaucitron.user.analyticsUaCreate || {});
+            ga('create', tarteaucitron.user.analyticsUa, uaCreate);
+
+            if (tarteaucitron.user.analyticsAnonymizeIp) {
+                ga('set', 'anonymizeIp', true);
+            }
+
+            if (typeof tarteaucitron.user.analyticsPrepare === 'function') {
+                tarteaucitron.user.analyticsPrepare();
+            }
+
+            if (tarteaucitron.user.analyticsPageView) {
+                ga('send', 'pageview', tarteaucitron.user.analyticsPageView);
+            } else {
+                ga('send', 'pageview');
+            }
+
             if (typeof tarteaucitron.user.analyticsMore === 'function') {
             if (typeof tarteaucitron.user.analyticsMore === 'function') {
                 tarteaucitron.user.analyticsMore();
                 tarteaucitron.user.analyticsMore();
             }
             }
@@ -2273,3 +2298,31 @@ tarteaucitron.services.matomo = {
         tarteaucitron.addScript(tarteaucitron.user.matomoHost + 'piwik.js', '', '', true, 'defer', true);
         tarteaucitron.addScript(tarteaucitron.user.matomoHost + 'piwik.js', '', '', true, 'defer', true);
     }
     }
 };
 };
+
+// bing ads universal event tracking
+tarteaucitron.services.bingads = {
+    'key': 'bingads',
+    'type': 'ads',
+    'name': 'Bing Ads Universal Event Tracking',
+    'uri': 'https://advertise.bingads.microsoft.com/en-us/resources/policies/personalized-ads',
+    'needConsent': true,
+    'cookies': ['_uetmsclkid'],
+    'js': function () {
+        'use strict';
+        var u = tarteaucitron.user.bingadsTag || 'uetq';
+        window[u] = window[u] || [];
+
+        tarteaucitron.addScript('https://bat.bing.com/bat.js', '', function () {
+            var bingadsCreate = {ti: tarteaucitron.user.bingadsID};
+
+            if ('bingadsStoreCookies' in tarteaucitron.user) {
+                bingadsCreate['storeConvTrackCookies'] = tarteaucitron.user.bingadsStoreCookies;
+            }
+
+            bingadsCreate.q = window[u];
+            window[u] = new UET(bingadsCreate);
+            window[u].push('pageload');
+        });
+    }
+};
+