diff --git a/angular.json b/angular.json index eb49900d0b3b8a838190bf9338aaf4bdff1d3f33..69763a2c2458c35006c180f403f91311f456b8fc 100644 --- a/angular.json +++ b/angular.json @@ -29,12 +29,23 @@ "assets": [ "src/assets", "src/favicon.ico", - "src/robots.txt" + "src/robots.txt", + { + "glob": "**/*", + "input":"./node_modules/tarteaucitronjs", + "output":"/" + } + ], "styles": [ - "src/styles.scss" + "src/styles.scss", + "node_modules/tarteaucitronjs/css/tarteaucitron.css" ], - "scripts": [] + "scripts": [ + "node_modules/tarteaucitronjs/tarteaucitron.js", + "node_modules/tarteaucitronjs/lang/tarteaucitron.fr.js", + "node_modules/tarteaucitronjs/tarteaucitron.services.js" + ] }, "configurations": { "aot-fr": { diff --git a/nginx.conf.template b/nginx.conf.template index 817b4220811ae11099af94a3cc2eca07dad45a42..1c02c2c59bc332747577a67fec238a672295a6cd 100644 --- a/nginx.conf.template +++ b/nginx.conf.template @@ -4,39 +4,21 @@ server { server_name _; root /usr/share/nginx/html/; - set $matomo_script - "<script type='text/javascript'> - var _paq = _paq || []; - var siteId = <MATOMO_SITE_ID>; - window['siteId'] = siteId; - - _paq.push(['enableLinkTracking']); - (function() { - var u='<MATOMO_SERVER_URL>/'; - - _paq.push(['setTrackerUrl', u+'piwik.php']); - _paq.push(['setSiteId', siteId]); - var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); - })(); - </script>"; # rule serving the fr build location / { try_files $uri$args /index.html; - sub_filter '</head>' '$matomo_script</head>'; - sub_filter '<html lang="en">' '<html lang="fr">'; + sub_filter '<html lang="en">' '<html lang="fr">'; } # Rule serving the en build location /en { try_files $uri$args /en/index.html; - sub_filter '</head>' '$matomo_script</head>'; } # redirecting the /fr url to the new location of the fr build location ~ ^/fr(.*)$ { - return 301 $scheme://$http_host$1$is_args$args; + return 301 $scheme://$http_host$1$is_args$args; } #location /robots.txt { diff --git a/package.json b/package.json index ec169e0a86c5122a77e685042bb6eb38324465a8..5e761b9259433f52803f9bc8283e65bef80a1acf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webapp", - "version": "2.7.8", + "version": "2.7.9", "license": "GNU Affero General Public License v3.0", "scripts": { "ng": "ng", @@ -54,6 +54,7 @@ "ngx-infinite-scroll": "^10.0.0", "node-rsa": "^1.0.3", "rxjs": "^6.5.4", + "tarteaucitronjs": "^1.9.5", "tslib": "^2.0.0", "xml2js": "^0.4.19", "zone.js": "~0.10.2" diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 330754000933f2cedd9c31712fc48993b90c11fa..0eb2bccedb9f920c46ee3c7317640256c74b4b37 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -9,6 +9,8 @@ import { AppRoutes } from './routes'; import { SeoSErvice } from './editorialisation/services'; import { pageTitles } from '../i18n/traductions'; +declare var tarteaucitron: any; + @Component({ selector: 'app-root', templateUrl: './app.component.html', @@ -26,7 +28,8 @@ export class AppComponent implements OnInit { this._angulartics2Piwik.startTracking(); } - ngOnInit() { + ngOnInit() + { this._router.events.pipe( filter(e => e instanceof NavigationEnd), ).subscribe((e) => { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 9cdf667c81171257bb501855afc7c3245cd560e4..e564d46e27e0b9d0f4628e36838432adb6888d51 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -10,13 +10,13 @@ import { EditorialisationModule } from './editorialisation/editorialisation.modu import { Angulartics2Module } from 'angulartics2'; import { UserModule } from './user/user.module'; import { UserService } from './user/services'; -import { AppConfigService, NotificationService } from './core/services'; +import { AppConfigService, NotificationService, TarteAuCitronService } from './core/services'; import { timeout } from 'rxjs/operators'; import { notificationMessages } from '../i18n/traductions'; // Function used by APP_INITIALIZER before the app start: init user info / statut (expect a promise) export function initUserService(authService: UserService, notificationService: NotificationService) { - return (): Promise<any> => { + return (): Promise<void> => { return new Promise<void>((resolve, reject) => { authService.initializeService().pipe(timeout(3000)).subscribe( () => { @@ -35,8 +35,17 @@ export function initUserService(authService: UserService, notificationService: N }; } +export function initTarteaucitronService(tarteaucitronService: TarteAuCitronService) { + return (): Promise<void> => { + return new Promise((resolve, reject) => { + tarteaucitronService.load(); + resolve(); + }); + }; +} + export function initAppConfig(appConfigService: AppConfigService) { - return (): Promise<any> => { + return (): Promise<void> => { return new Promise<void>((resolve, reject) => { appConfigService.load(); resolve(); @@ -66,6 +75,12 @@ export function initAppConfig(appConfigService: AppConfigService) { deps: [AppConfigService], multi: true, }, + { + provide: APP_INITIALIZER, + useFactory: initTarteaucitronService, + deps: [TarteAuCitronService], + multi: true, + }, { provide: APP_INITIALIZER, useFactory: initUserService, diff --git a/src/app/core/components/contact/contact.component.html b/src/app/core/components/contact/contact.component.html index 76358d70a12e98d5f646c7a211a5faa51248cd57..063a8b554dd7a5dc6251ccefc5aeef9af47629e7 100644 --- a/src/app/core/components/contact/contact.component.html +++ b/src/app/core/components/contact/contact.component.html @@ -228,18 +228,20 @@ respond to your request. </div> </div> - <p class="consent-text" i18n="@@consent.text"> - Fields with an asterisk (*) are mandatory. Information in these fields will be processed to respond to - your request. The data is kept for a period of 12 months. Recipients of this - information are the metropolitan departments in charge of processing your request. In compliance with - the - “Digital Technology and Freedom” law dated January 6, 1978, you have the right to access and rectify - information that concerns you. To exercise this right, please contact the service of the Data Protection - Officer (DPD): Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires - Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 or use the - following form https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. You may also oppose - processing of your personal data for a legitimate reason. In this case, we will - not be able to process the request submitted using this form. + <p class="consent-text" i18n="@@consent.contact.text"> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil </p> </div> </div> diff --git a/src/app/core/components/cookie-banner/cookie-banner.component.html b/src/app/core/components/cookie-banner/cookie-banner.component.html deleted file mode 100644 index 13467410fef9fa99c91b243ecbc3b8fee750e03d..0000000000000000000000000000000000000000 --- a/src/app/core/components/cookie-banner/cookie-banner.component.html +++ /dev/null @@ -1,80 +0,0 @@ -<div class="cookie-baner-container" *ngIf="displayCookieBanner"> - <div class="cross" (click)="hideCookieBanner()"> - <svg color="white" width="14" height="15" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path d="M1 13.0144L7 7.00723L0.999999 1.00006" stroke="white" stroke-width="2" stroke-linecap="round" - stroke-linejoin="round" /> - <path d="M13 1L7 7.00717L13 13.0143" stroke="white" stroke-width="2" stroke-linecap="round" - stroke-linejoin="round" /> - </svg> - </div> - <div class="cookie-icon"> - <svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path - d="M26.9018 6.53255L27.7391 7.07925L28.4427 6.00157L27.2246 5.58609L26.9018 6.53255ZM23.303 1.52707L24.303 1.52213L24.2984 0.576451L23.3539 0.528362L23.303 1.52707ZM32.2251 14.6798L33.225 14.6928L33.2405 13.4994L32.0628 13.693L32.2251 14.6798ZM40.3328 19.2742L41.2178 18.8087L40.7186 17.8597L39.8067 18.4238L40.3328 19.2742ZM42.8507 21.6482L43.8504 21.6258L43.8364 20.9966L43.263 20.7372L42.8507 21.6482ZM27.2246 5.58609C25.5304 5.00824 24.3123 3.40671 24.303 1.52213L22.3031 1.53201C22.3167 4.2941 24.1026 6.63438 26.579 7.47901L27.2246 5.58609ZM27.0403 9.43481C27.0403 8.56391 27.2972 7.75606 27.7391 7.07925L26.0644 5.98585C25.4167 6.97791 25.0403 8.16392 25.0403 9.43481H27.0403ZM31.356 13.7505C28.9725 13.7505 27.0403 11.8183 27.0403 9.43481H25.0403C25.0403 12.9229 27.8679 15.7505 31.356 15.7505V13.7505ZM32.0628 13.693C31.8334 13.7308 31.5974 13.7505 31.356 13.7505V15.7505C31.7065 15.7505 32.0511 15.7218 32.3873 15.6665L32.0628 13.693ZM33.2246 14.7502C33.2246 14.731 33.2247 14.7119 33.225 14.6928L31.2252 14.6668C31.2248 14.6946 31.2246 14.7224 31.2246 14.7502H33.2246ZM37.5403 19.0659C35.1568 19.0659 33.2246 17.1337 33.2246 14.7502H31.2246C31.2246 18.2383 34.0522 21.0659 37.5403 21.0659V19.0659ZM39.8067 18.4238C39.1487 18.8308 38.3735 19.0659 37.5403 19.0659V21.0659C38.7557 21.0659 39.8938 20.7216 40.8588 20.1247L39.8067 18.4238ZM43.263 20.7372C42.3862 20.3403 41.6644 19.6577 41.2178 18.8087L39.4477 19.7398C40.1008 20.9812 41.1544 21.9781 42.4383 22.5592L43.263 20.7372ZM43.856 22.1187C43.856 21.954 43.8541 21.7897 43.8504 21.6258L41.8509 21.6706C41.8543 21.8195 41.856 21.9689 41.856 22.1187H43.856ZM22.2373 43.7373C34.177 43.7373 43.856 34.0583 43.856 22.1187H41.856C41.856 32.9537 33.0724 41.7373 22.2373 41.7373V43.7373ZM0.618652 22.1187C0.618652 34.0583 10.2977 43.7373 22.2373 43.7373V41.7373C11.4022 41.7373 2.61865 32.9537 2.61865 22.1187H0.618652ZM22.2373 0.5C10.2977 0.5 0.618652 10.179 0.618652 22.1187H2.61865C2.61865 11.2836 11.4022 2.5 22.2373 2.5V0.5ZM23.3539 0.528362C22.984 0.509527 22.6117 0.5 22.2373 0.5V2.5C22.5778 2.5 22.9161 2.50866 23.2522 2.52577L23.3539 0.528362Z" - fill="white" /> - <circle cx="11.9937" cy="14.875" r="1.375" fill="white" /> - <circle cx="22.2373" cy="35.125" r="1.375" fill="white" /> - <circle cx="12.8374" cy="27.0312" r="2.71875" fill="white" /> - <circle cx="25.1748" cy="19.9375" r="1.5625" fill="white" /> - <circle cx="31.356" cy="31.75" r="2" fill="white" /> - <circle cx="19.4873" cy="9.5" r="2" fill="white" /> - </svg> - </div> - <p class="banner-text"><span i18n="@@cookieBanner.message">We care about your personal data and we use cookies in - order to improve your experience.</span> - <div class="button-wrapper"> - <button class="button" i18n="@@cookieBanner.close" (click)="hideCookieBanner();">Close</button> - <button class="button button-white" i18n="@@cookieBanner.more" (click)="showMore();hideCookieBanner();">Learn - more</button> - </div> -</div> -<div class="modal" *ngIf="modalOpen"> - <div class="box"> - <div> - <p class="title" i18n="@@cookieModal.title">Cookies manager</p> - <svg class="cross" (click)="hideModal()" color="white" width="14" height="15" viewBox="0 0 14 15" fill="none" - xmlns="http://www.w3.org/2000/svg"> - <path d="M1 13.0144L7 7.00723L0.999999 1.00006" stroke="white" stroke-width="2" stroke-linecap="round" - stroke-linejoin="round" /> - <path d="M13 1L7 7.00717L13 13.0143" stroke="white" stroke-width="2" stroke-linecap="round" - stroke-linejoin="round" /> - </svg> - </div> - - - <div class="content"> - <div class="tabs"> - <div class="tab" (click)='toggleTab(0)' [ngClass]="{'tab-active' : tab === 0}"> - <p i18n="@@cookieModal.tab1title">Why do we use cookies?</p> - </div> - <div class="tab" (click)='toggleTab(1)' [ngClass]="{'tab-active' : tab === 1}"> - <p i18n="@@cookieModal.tab2title">Necessary cookies</p> - </div> - </div> - <div class="description"> - <div class="tab-description" [ngClass]="{'hidden' : tab !== 0}"> - <p class="tab-title" i18n="@@cookieModal.tab1">Why do we use cookies?</p> - <div class="tab-content"> - <p i18n="@@cookieModal.tab1.p1">We use cookies to learn about how you interact with us, improve your - experience on our site and personalize your relationship with the platform data.grandlyon.com.</p> - <p i18n="@@cookieModal.tab1.p2">Cookies are not used for commercial purposes.</p> - <p i18n="@@cookieModal.tab1.p3">Click on the « Necessary cookies » tab to find out more.</p> - </div> - </div> - <div class="tab-description" [ngClass]="{'hidden' : tab !== 1}"> - <p class="tab-title" i18n="@@cookieModal.tab2">Necessary cookies</p> - <div class="tab-content"> - <p i18n="@@cookieModal.tab2.p1">Active cookies allow to :</p> - <p i18n="@@cookieModal.tab2.p2">- save your awareness of how cookies are managed, so that you will not have - to go through it at each visit.</p> - <p i18n="@@cookieModal.tab2.p3">- save your awareness and acceptance of the Terms of use, so that we will - not have to ask you to renew this acceptance at each visit.</p> - <p i18n="@@cookieModal.tab2.p4">- avoid, during authenticated sessions, to systematically prompt you for - your credentials at each visit or new page</p> - <p i18n="@@cookieModal.tab2.p5">- measure the data.grandlyon.com platform's traffic</p> - </div> - </div> - </div> - </div> - </div> -</div> \ No newline at end of file diff --git a/src/app/core/components/cookie-banner/cookie-banner.component.scss b/src/app/core/components/cookie-banner/cookie-banner.component.scss deleted file mode 100644 index 8eae3a3cc1922eca8008a6904082ef8961d67934..0000000000000000000000000000000000000000 --- a/src/app/core/components/cookie-banner/cookie-banner.component.scss +++ /dev/null @@ -1,253 +0,0 @@ -@import '../../../../scss/variables.scss'; -@import '../../../../../node_modules/bulma/sass/utilities/_all.sass'; - -.cookie-baner-container { - background: rgba(36, 43, 63, 0.9); - position: fixed; - border: 1px solid #FFFFFF; - box-sizing: border-box; - border-radius: 4px; - z-index: 5; - min-height: 200px; - right: 0; - max-width: 300px; - margin: 1rem; - bottom: 0; - - @media screen and(max-width: $tablet) { - right: 0; - max-width: 700px; - margin: auto; - bottom: 0; - left: 0; - width: 100%; - background: rgba(36, 43, 63, 1); - } - - .cross { - float: right; - color: white; - cursor: pointer; - margin: 0.8rem; - } - - .cookie-icon { - margin: 1rem 0 0.7rem 2rem; - text-align: center; - - } - - .banner-text, - .banner-text span { - color: white; - font-size: 15px; - margin: auto; - } - - span { - display: block; - text-align: center; - padding: 0 1rem; - } - - - a { - color: $tomato-color; - font-weight: 600; - display: inline-block; - } - - .button-wrapper { - display: flex; - justify-content: space-evenly; - - @media screen and (max-width: $tablet) { - justify-content: center; - margin-top: 0.4rem; - - button:first-of-type { - margin-right: 1rem; - } - } - } - - button.button { - width: 120px; - height: 36px; - border: 1px solid white; - border-radius: 4px; - font-size: 12px; - font-weight: bold; - background-color: #242B3F; - color: white; - display: block; - margin-top: 1rem; - padding: 0.5rem 1.5rem; - - &:hover { - border-color: $tomato-color; - } - } - - button.button.button-white { - background-color: white; - color: #242B3F; - } -} - -.modal { - width: 100%; - height: 100vh; - position: fixed; - top: 0; - left: 0; - background: rgba(36, 43, 63, 0.8); - z-index: 10; - display: flex; - align-items: center; - overflow: hidden; - - .box { - width: 100%; - max-width: 600px; - min-height: 400px; - background: #FFFFFF; - box-shadow: 0px 4px 28px rgba(0, 0, 0, 0.55); - position: relative; - - @media screen and(max-width: $tablet) { - width: calc(100% - 50px); - height: 450px; - max-width: unset; - } - - .title { - background: #242B3F; - color: white; - text-align: left; - margin-bottom: 0; - font-size: 1.2rem; - padding: 1rem; - } - - .cross { - position: absolute; - top: 0; - right: 0; - margin: 1.2rem 1rem; - color: white; - cursor: pointer; - } - - .content { - display: flex; - height: calc(450px - 53px); // minus the height of the popup header - - @media screen and(max-width: $tablet) { - flex-direction: column; - } - - .tabs { - width: 35%; - background: #EBEBEB; - color: #242B3F; - - @media screen and(max-width: $tablet) { - width: 100%; - display: flex; - } - - .tab { - cursor: pointer; - padding: 1rem; - border-bottom: 1px solid #B4B4B4; - position: relative; - - @media screen and(max-width: $tablet) { - width: 50%; - - &:not(:last-of-type) { - border-right: 1px solid $grey-super-light-color; - } - } - - p { - display: inline-block; - } - - .circle { - margin-right: 8px; - display: inline-block; - } - } - - .tab-active { - background: white; - - @media screen and(max-width: $tablet) { - - //remove border - &:after { - content: ''; - height: 2px; - width: 100%; - position: absolute; - bottom: -2px; - left: 0; - background: white; - } - } - - @media screen and(min-width: $tablet) { - - //remove border - &:after { - content: ''; - height: 100%; - width: 2px; - position: absolute; - right: -2px; - top: 0; - background: white; - } - } - } - } - - .description { - width: 65%; - border-left: 1px solid #B4B4B4; - padding: 1.3rem 1rem; - background-color: #fff; - overflow: auto; - - @media screen and(max-width: $tablet) { - width: 100%; - border: none; - } - - .tab-description { - color: #242B3F; - text-align: left; - - .tab-title { - font-weight: bold; - font-size: 1.2rem; - } - - .tab-content { - margin-top: 1rem; - - p { - margin-bottom: 0.7rem; - } - } - } - - .hidden { - display: none; - } - } - } - } -} diff --git a/src/app/core/components/cookie-banner/cookie-banner.component.ts b/src/app/core/components/cookie-banner/cookie-banner.component.ts deleted file mode 100644 index 9afc3586037edc50c7c15a26236787c1acd8a736..0000000000000000000000000000000000000000 --- a/src/app/core/components/cookie-banner/cookie-banner.component.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; -import { CookieService } from 'ngx-cookie-service'; -import { Subscription } from 'rxjs'; -import { AppRoutes } from '../../../routes'; -import { AppStateService } from '../../services'; - -@Component({ - selector: 'app-cookie-banner', - templateUrl: './cookie-banner.component.html', - styleUrls: ['./cookie-banner.component.scss'], -}) -export class CookieBannerComponent implements OnInit, OnDestroy { - modalOpen: boolean; - tab = 0; - - AppRoutes = AppRoutes; - private cookiesAccepted: boolean; - private cookiesAcceptedKey = 'COOKIES_ACCEPTED'; - private sub: Subscription; - - constructor( - private _cookieService: CookieService, - private _appStateService: AppStateService, - ) { } - - ngOnInit() { - this.cookiesAccepted = (this._cookieService.get(this.cookiesAcceptedKey) === 'true'); - - this.modalOpen = this._appStateService.cookieModalOpened; - - this.sub = this._appStateService.cookieModalStateChanged$.subscribe((state) => { - this.modalOpen = state; - }); - } - - hideCookieBanner() { - if (!this.cookiesAccepted) { - this._cookieService.set( - this.cookiesAcceptedKey, // Key - 'true', // Value - new Date(new Date().setFullYear(new Date().getFullYear() + 1)), // Expiration date now + 1 year - '/', - document.location.hostname, - false, - 'Strict', - ); - this.cookiesAccepted = true; - } - } - - hideModal() { - this._appStateService.changeCookieModalState(false); - } - - showMore() { - this._appStateService.changeCookieModalState(true); - } - - toggleTab(tabNumber) { - this.tab = tabNumber; - } - - get displayCookieBanner() { - return !this.cookiesAccepted; - } - - ngOnDestroy() { - this.sub.unsubscribe(); - } -} diff --git a/src/app/core/components/feedback/feedback.component.html b/src/app/core/components/feedback/feedback.component.html index ecc7eed871068342dcb4ab46c291784ffcca2a35..0a3961f8c8225a6dd5e47fb7e8259025be4c8fc0 100644 --- a/src/app/core/components/feedback/feedback.component.html +++ b/src/app/core/components/feedback/feedback.component.html @@ -107,7 +107,7 @@ </button> </div> - <p class="is-small consent-text" i18n="@@consent.text" *ngIf="feedbackHasEmail"> + <p class="is-small consent-text" i18n="@@consent.feedback.text" *ngIf="feedbackHasEmail"> Fields with an asterisk (*) are mandatory. Information in these fields will be processed to respond to your request. The data is kept for a period of 12 months. Recipients of this information are the metropolitan departments in charge of processing your request. In compliance with diff --git a/src/app/core/components/index.ts b/src/app/core/components/index.ts index ecbaefc324cb3dca8c56ed4fc829bfb71cae5152..2ac86af347f909cfa67cd50bbb5be6d0bfaa741d 100644 --- a/src/app/core/components/index.ts +++ b/src/app/core/components/index.ts @@ -5,7 +5,6 @@ import { NotificationsComponent } from './notifications/notifications.component' import { ContactComponent } from './contact/contact.component'; import { SideMenuComponent } from './main/side-menu/side-menu.component'; import { FeedbackComponent } from './feedback/feedback.component'; -import { CookieBannerComponent } from './cookie-banner/cookie-banner.component'; import { PageNotFoundComponent } from './page-not-found/page-not-found.component'; export { @@ -15,7 +14,6 @@ export { NotificationsComponent, ContactComponent, FeedbackComponent, - CookieBannerComponent, PageNotFoundComponent }; @@ -28,6 +26,5 @@ export const CoreComponents = [ ContactComponent, SideMenuComponent, FeedbackComponent, - CookieBannerComponent, PageNotFoundComponent, ]; diff --git a/src/app/core/components/main/footer/footer.component.html b/src/app/core/components/main/footer/footer.component.html index 09c0043cb32ec14792ce4a7b85a06743f620db83..b604103994ab8b590dd7bae8e26a13bc9d56749f 100644 --- a/src/app/core/components/main/footer/footer.component.html +++ b/src/app/core/components/main/footer/footer.component.html @@ -50,6 +50,10 @@ <a class="legal-mentions-link" [routerLink]="['/', AppRoutes.legalNotices.uri]" i18n="@@footer.notices">Legal Notices</a> </div> + <div> + <span class="bullet">•</span> + <a class="personal-data-link" [routerLink]="['/', AppRoutes.personalData.uri]" i18n="@@footer.personalData">Personal data</a> + </div> <div *ngIf="APP_CONFIG.theFunctionalitiesInterruptor.credits"> <span class="bullet">•</span> <a [routerLink]="['/', AppRoutes.credits.uri]" i18n="@@footer.credits">Credits</a> @@ -60,7 +64,7 @@ </div> <div> <span class="bullet">•</span> - <a href preventDefault (click)="openCookieModal()">Cookies</a> + <a href preventDefault (click)="openCookieModal()" i18n="@@footer.manageCookies">Manage cookies</a> </div> </div> </div> @@ -73,9 +77,6 @@ <span i18n="@@footer.metropole.site">A Lyon Metropolis website</span> </a> </li> - <li> - - </li> </ul> </div> </div> diff --git a/src/app/core/components/main/footer/footer.component.ts b/src/app/core/components/main/footer/footer.component.ts index 968bc6a618caf9a44d40140881a00b570b9afadc..d4dda2c9c1bd061162d4d4172c716772a2a286bf 100644 --- a/src/app/core/components/main/footer/footer.component.ts +++ b/src/app/core/components/main/footer/footer.component.ts @@ -3,6 +3,8 @@ import { AppRoutes } from '../../../../routes'; import { AppStateService } from '../../../services'; import { APP_CONFIG } from '../../../services/app-config.service'; +declare var tarteaucitron: any; + @Component({ selector: 'app-footer', templateUrl: './footer.component.html', @@ -21,7 +23,7 @@ export class FooterComponent implements OnInit { ngOnInit() { } openCookieModal() { - this._appStateService.changeCookieModalState(true); + tarteaucitron.userInterface.openPanel(); } } diff --git a/src/app/core/components/main/main.component.html b/src/app/core/components/main/main.component.html index fb6b7cbe1efc7cece13b32ee5a1c8b33477c30de..9d0a081166f4e694a88ccd8ef7fdb86df3295f84 100644 --- a/src/app/core/components/main/main.component.html +++ b/src/app/core/components/main/main.component.html @@ -14,8 +14,6 @@ <router-outlet></router-outlet> <app-notifications></app-notifications> - - <app-cookie-banner></app-cookie-banner> </main> <a id="site-footer" tabindex="-1"></a> diff --git a/src/app/core/components/main/side-menu/side-menu.component.ts b/src/app/core/components/main/side-menu/side-menu.component.ts index 85bd9a7478da2cb3e3aac972d7491541eb627e2b..8bdaadacc2752c70eea5ed11e9b1bc44b95a3fe7 100644 --- a/src/app/core/components/main/side-menu/side-menu.component.ts +++ b/src/app/core/components/main/side-menu/side-menu.component.ts @@ -8,6 +8,8 @@ import { UserService } from '../../../../user/services'; import { AppStateService } from '../../../services'; import { APP_CONFIG } from '../../../services/app-config.service'; +declare var tarteaucitronForceLanguage: any; + @Component({ selector: 'app-side-menu', templateUrl: './side-menu.component.html', @@ -76,6 +78,7 @@ export class SideMenuComponent implements OnInit, OnDestroy { } changeLanguage(lang: string) { + tarteaucitronForceLanguage = lang; window.location.href = environment.angularAppHost[lang] + this._router.url; } diff --git a/src/app/core/services/app-config.service.ts b/src/app/core/services/app-config.service.ts index f6932d7e9f217b8fe359615f045f3bc6f7ae0938..f9e894f40356379b86519721da79c07f229ee1cc 100644 --- a/src/app/core/services/app-config.service.ts +++ b/src/app/core/services/app-config.service.ts @@ -18,6 +18,10 @@ export class AppConfig { seo: string; datasetUsageStatistics: string; }; + statistics: { + matomoHost: string; + matomoId: string; + }; layer3d: { url: string; }; @@ -46,7 +50,7 @@ export class AppConfigService { constructor() { } public load() { - return new Promise((resolve, reject) => { + return new Promise<void>((resolve, reject) => { const conf = new AppConfig(); APP_CONFIG = Object.assign(conf, window['portailDataEnvConfig']); resolve(); diff --git a/src/app/core/services/index.ts b/src/app/core/services/index.ts index dfd0f3ab0eb4d04e39f9cad93a373d4c79a0f5dd..559306ab20af5ac644221ca41f27d39b1e37dc11 100644 --- a/src/app/core/services/index.ts +++ b/src/app/core/services/index.ts @@ -7,10 +7,11 @@ import { MatomoService } from './matomo.service'; import { NavigationHistoryService } from './navigation-history.service'; import { NotificationService } from './notification.service'; import { StorageService } from './storage.service'; +import { TarteAuCitronService } from './tarteaucitron.service'; import { ToolsService } from './tools.service'; // tslint:disable-next-line: max-line-length -export { ErrorService, NotificationService, MatomoService, NavigationHistoryService, EmailService, FileService, AppConfigService, AppStateService, }; +export { ErrorService, NotificationService, MatomoService, TarteAuCitronService, NavigationHistoryService, EmailService, FileService, AppConfigService, AppStateService, }; // tslint:disable-next-line:variable-name export const CoreServices = [ @@ -22,6 +23,7 @@ export const CoreServices = [ EmailService, FileService, AppConfigService, + TarteAuCitronService, AppStateService, ToolsService, ]; diff --git a/src/app/core/services/tarteaucitron.service.ts b/src/app/core/services/tarteaucitron.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..55b7f511d423b970862a6cf8738cf0c6f4697330 --- /dev/null +++ b/src/app/core/services/tarteaucitron.service.ts @@ -0,0 +1,82 @@ +import { Injectable } from "@angular/core"; +import { APP_CONFIG } from "./app-config.service"; +import { environment } from "../../../environments/environment"; + +declare var tarteaucitron: any; +declare var tarteaucitronForceLanguage: any; +declare var tarteaucitronForceExpire: any; + +@Injectable() +export class TarteAuCitronService { + + public load () { + return new Promise<void>((resolve, reject) => { + tarteaucitronForceLanguage = this.getCurrentLanguageKey(); + tarteaucitronForceExpire = '365'; + + tarteaucitron.init({ + "privacyUrl":"", + + "hashtag" : "#tarteaucitron", + "cookieName" : "tarteaucitron", + + "orientation" : "bottom", + + "showAlertSmall" : false, + "cookieslist" : true, + "iconPosition": "BottomLeft", + "showIcon": false, + + "AcceptAllCta" : true, + "DenyAllCta": true, + "highPrivacy" : true, + + "adblocker" : false, + + "handleBrowserDNTRequest" : false, + + "removeCredit" : true, + "moreInfoLink": false, + + "useExternalCss" : false, + "readmoreLink": "", + + }); + tarteaucitron.user.matomoId = APP_CONFIG.statistics.matomoId; + tarteaucitron.user.matomoHost = APP_CONFIG.statistics.matomoHost; + + (tarteaucitron.job = tarteaucitron.job || []).push('matomo'); + (tarteaucitron.job = tarteaucitron.job || []).push('youtube'); + + tarteaucitron.load(); + resolve(); + }); + } + + public initEvents() { + if (tarteaucitron) { + tarteaucitron.initEvents.loadEvent(); + } + } + + public triggerTarteaucitronYoutube(): void { + if (undefined !== tarteaucitron.services.youtube) { + if ( + typeof tarteaucitron.state.youtube !== 'undefined' + && tarteaucitron.state.youtube + && typeof tarteaucitron.services['youtube'] !== 'undefined' + ) { + tarteaucitron.services['youtube'].js(); + } else { + tarteaucitron.services['youtube'].fallback(); + tarteaucitron.triggerJobsAfterAjaxCall(); + } + } + } + + protected getCurrentLanguageKey() { + return window.location.href.includes(environment.angularAppHost.en) ? + 'en' : + 'fr'; + } +} diff --git a/src/app/dataset-detail/services/dataset-detail.service.ts b/src/app/dataset-detail/services/dataset-detail.service.ts index 77b82930e5e91818872c6e6a0aa8ff5d47c50b40..63980fe616db0710e6bb897c42e3d2fe3ffaede1 100644 --- a/src/app/dataset-detail/services/dataset-detail.service.ts +++ b/src/app/dataset-detail/services/dataset-detail.service.ts @@ -62,7 +62,7 @@ export class DatasetDetailService { }); // Get the metadata return this._elasticsearchService.getDatasetMetadata(slugOrUuid).pipe( - map((e) => { + map((e:any) => { if (e.hits.hits.length > 0) { const metadata = new Metadata(e.hits.hits[0]._source['metadata-fr']); this._dataset.uuid = metadata.geonet.uuid; diff --git a/src/app/editorialisation/components/cms-page/cms-page.component.scss b/src/app/editorialisation/components/cms-page/cms-page.component.scss index 839fae89e321efae3a96c2f124c626bcdd5d4d22..1222aec706bf5157c0e1eb4dff908daaba052741 100644 --- a/src/app/editorialisation/components/cms-page/cms-page.component.scss +++ b/src/app/editorialisation/components/cms-page/cms-page.component.scss @@ -7,4 +7,5 @@ line-height: 1.2; padding: 1rem; } + } diff --git a/src/app/editorialisation/components/cms-page/cms-page.component.ts b/src/app/editorialisation/components/cms-page/cms-page.component.ts index 6a7f533c037cd072a6e1ac953ce2de2683776bfa..2c3226207b2f512ec3720e414f34c25443f4e7f4 100644 --- a/src/app/editorialisation/components/cms-page/cms-page.component.ts +++ b/src/app/editorialisation/components/cms-page/cms-page.component.ts @@ -1,7 +1,8 @@ -import { Component, OnInit } from '@angular/core'; +import { AfterViewInit, Component, OnInit } from '@angular/core'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; import { ActivatedRoute, Router } from '@angular/router'; import { environment } from '../../../../environments/environment'; +import { TarteAuCitronService } from '../../../core/services'; import { ToolsService } from '../../../core/services/tools.service'; import { AppRoutes } from '../../../routes'; import { IPageHeaderInfo } from '../../../shared/models'; @@ -13,7 +14,7 @@ import { EditorialisationService, SeoSErvice } from '../../services'; templateUrl: './cms-page.component.html', styleUrls: ['./cms-page.component.scss'], }) -export class CMSPageComponent implements OnInit { +export class CMSPageComponent implements OnInit, AfterViewInit { page: CMSContent; safePageContent: SafeHtml; pageHeaderInfo: IPageHeaderInfo = { @@ -27,6 +28,7 @@ export class CMSPageComponent implements OnInit { private _toolsService: ToolsService, private _router: Router, private _seoService: SeoSErvice, + private _tacService: TarteAuCitronService, ) { } @@ -54,4 +56,8 @@ export class CMSPageComponent implements OnInit { }); }); } + + ngAfterViewInit(): void { + this._tacService.triggerTarteaucitronYoutube(); + } } diff --git a/src/app/editorialisation/components/cms-post-detail/cms-post-detail.component.ts b/src/app/editorialisation/components/cms-post-detail/cms-post-detail.component.ts index 310ac417c79eca8f113de644b1a24b796b9bea81..02a4dd6eb7514fa8cc1cf534627ec1a6a8da47c3 100644 --- a/src/app/editorialisation/components/cms-post-detail/cms-post-detail.component.ts +++ b/src/app/editorialisation/components/cms-post-detail/cms-post-detail.component.ts @@ -1,22 +1,22 @@ import { DatePipe } from '@angular/common'; -import { Component, OnInit } from '@angular/core'; -import { DomSanitizer, Meta, SafeHtml, Title } from '@angular/platform-browser'; +import { AfterViewInit, Component, OnInit } from '@angular/core'; +import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; import { ActivatedRoute, Router } from '@angular/router'; import { notificationMessages } from '../../../../i18n/traductions'; import { ToolsService } from '../../../core/services/tools.service'; import { ElasticsearchService } from '../../../elasticsearch/services/elasticsearch.service'; -import { SeoSErvice } from '../../services/seo.service' +import { SeoSErvice } from '../../services/seo.service'; import { AppRoutes } from '../../../routes'; import { IPageHeaderInfo, Metadata, typesMetadata } from '../../../shared/models'; import { CMSContent } from '../../models/cms-content.model'; -import { environment } from '../../../../environments/environment'; +import { TarteAuCitronService } from '../../../core/services'; @Component({ selector: 'app-cms-post-detail', templateUrl: './cms-post-detail.component.html', styleUrls: ['./cms-post-detail.component.scss'], }) -export class CMSPostDetailComponent implements OnInit { +export class CMSPostDetailComponent implements OnInit, AfterViewInit { AppRoutes = AppRoutes; post: CMSContent; @@ -40,8 +40,7 @@ export class CMSPostDetailComponent implements OnInit { private _elasticSearchService: ElasticsearchService, private _seoService: SeoSErvice, private _toolsService: ToolsService, - private _titleService: Title, - private _meta: Meta, + private _tacService: TarteAuCitronService, ) { } @@ -84,7 +83,9 @@ export class CMSPostDetailComponent implements OnInit { } } - + ngAfterViewInit(): void { + this._tacService.triggerTarteaucitronYoutube(); + } setBackupImage(metadata: Metadata) { // Init the image property to make sure that 'url' is accessible in the following lines diff --git a/src/app/editorialisation/components/site-map/site-map.component.html b/src/app/editorialisation/components/site-map/site-map.component.html index 11518df0b630220d10bd2671465dc165169743eb..0015f3152bd3f70a974aac322a3e5ad767029a5d 100644 --- a/src/app/editorialisation/components/site-map/site-map.component.html +++ b/src/app/editorialisation/components/site-map/site-map.component.html @@ -23,6 +23,7 @@ <li><a class="link-1" [routerLink]="['/', AppRoutes.accessibility.uri]" i18n="@@sitemap.accessibility">Accessibility</a></li> <li><a class="link-1" [routerLink]="['/', AppRoutes.siteMap.uri]" i18n="@@footer.sitemap">Sitemap</a></li> <li><a class="link-1" [routerLink]="['/', AppRoutes.legalNotices.uri]" i18n="@@sitemap.legalNotices">Legal notices</a></li> + <li><a class="link-1" [routerLink]="['/', AppRoutes.personalData.uri]" i18n="@@sitemap.personalData">Personal data</a></li> <li><a class="link-1" [routerLink]="['/', AppRoutes.credits.uri]" i18n="@@sitemap.credits">Credits</a></li> <li><a class="link-1" [routerLink]="['/', AppRoutes.cgu.uri]" i18n="@@sitemap.cgu">Terms of use</a> </li> diff --git a/src/app/editorialisation/editorialisation-routing.module.ts b/src/app/editorialisation/editorialisation-routing.module.ts index 8327b1590464c951560b19c2d006107511a77e48..c218a2afeecaa79e5a492415e550a69500268d0c 100644 --- a/src/app/editorialisation/editorialisation-routing.module.ts +++ b/src/app/editorialisation/editorialisation-routing.module.ts @@ -71,6 +71,14 @@ export const routes: Routes = [ uri: AppRoutes.legalNotices.uri, }, }, + { + path: AppRoutes.personalData.uri, + component: CMSPageComponent, + data: { + title: AppRoutes.personalData.title, + uri: AppRoutes.personalData.uri, + }, + }, { path: AppRoutes.documentation.uri, children: [ diff --git a/src/app/editorialisation/models/cms-content.model.ts b/src/app/editorialisation/models/cms-content.model.ts index 9d7a45d9b5874ee610471fdad552c6feb8f1ea7b..35adc3504d0dad26f2874735ce618a01da70ef77 100644 --- a/src/app/editorialisation/models/cms-content.model.ts +++ b/src/app/editorialisation/models/cms-content.model.ts @@ -1,4 +1,3 @@ - export interface IESCMSResponse { 'content-fr': IGhostContentResponse; type: string; @@ -111,7 +110,8 @@ export class GhostContentResponse { og_description?: string; og_image?: string; - constructor(data: IGhostContentResponse) { + constructor(data: IGhostContentResponse) + { this.id = data.id; this.status = (data.status != null) ? data.status : ''; this.title = (data.title != null) ? data.title : ''; @@ -143,9 +143,43 @@ export class GhostContentResponse { }); + this.html = this.youtubeParser(this.html); + this.author = (data.primary_author) ? data.primary_author : null; this.highlight = []; } + + private youtubeParser (content:string): string { + // recherche de youtube + if (content.search('iframe') > 0) { + var parser = new DOMParser(); + var htmlContent = parser.parseFromString(content, 'text/html'); + + var iframes = htmlContent.getElementsByTagName('iframe'); + + for (var i = 0 ; i < iframes.length ; i++) { + let src = iframes[i].getAttribute('src'); + var link = src.match(new RegExp(/(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+/mgi)); + + if (link.length > 0) { + // on récupère la derniere portion + var vid: string[]|string = link[0].match(new RegExp(/embed\/[a-zA-Z0-9]*/mgi) ); + vid = vid[0].slice(6); + + var youtubeDiv = document.createElement('div'); + youtubeDiv.setAttribute('class','youtube_player'); + youtubeDiv.setAttribute('videoID', vid); + youtubeDiv.setAttribute('width', '100%'); + youtubeDiv.setAttribute('height','300px'); + + + iframes[i].parentNode.replaceChild(youtubeDiv,iframes[i]); + } + } + content = htmlContent.getElementsByTagName('body')[0].innerHTML; + } + return content; + } } export interface ICMSMedia { diff --git a/src/app/editorialisation/services/seo.service.ts b/src/app/editorialisation/services/seo.service.ts index 9bae842d02fea7ec52eec466928583164cf06723..a1cbc8236cd9a9b29451b6159ce4e3d2850f611a 100644 --- a/src/app/editorialisation/services/seo.service.ts +++ b/src/app/editorialisation/services/seo.service.ts @@ -37,8 +37,8 @@ export class SeoSErvice { } else { description = post.content.excerpt; - if (description.length > 140 ) { - description = `${description.substr(0,description.substr(0,136).lastIndexOf(' '))}...`; + if (description.length > 140) { + description = `${description.substr(0, description.substr(0,136).lastIndexOf(' '))}...`; } } diff --git a/src/app/map/services/map.service.ts b/src/app/map/services/map.service.ts index 77ad3ec6bc160bfded5f9d65313c3e75e514e113..d97753b189dc66ffff7f28007be07a1ff5524ba3 100644 --- a/src/app/map/services/map.service.ts +++ b/src/app/map/services/map.service.ts @@ -93,7 +93,6 @@ export class MapService { // Subscribe to the error observable and send a notification this._errorSubscription = errorObservable.subscribe((v) => { - // console.log(v); this._notificationService.notify( new Notification({ message: notificationMessages.geosource.mapError, diff --git a/src/app/routes.ts b/src/app/routes.ts index 161b0fc295277faab8706609dc5283c9bbf1705f..1dc7ecfdaf19b8ba2b673a2a587f8d2e931d1003 100644 --- a/src/app/routes.ts +++ b/src/app/routes.ts @@ -168,6 +168,13 @@ export const AppRoutes = { en: 'Legal notices', }, }, + personalData: { + uri: 'donnees-personnelles', + title: { + fr: 'Données personnelles', + en: 'Personal data', + }, + }, drafts: { uri: 'brouillons', title: { @@ -221,8 +228,8 @@ export const AppRoutes = { uri: 'autre-ressources', title: { fr: 'Autre ressources', - en: 'Other rResources' - } + en: 'Other rResources', + }, }, contribution: { uri: 'contribution', @@ -251,7 +258,7 @@ export const AppRoutes = { title: { fr: 'Actualités de la plateforme data de la Métropole de Lyon', en: 'News from the Metropole de Lyon data platform' - } + }, }, reusesDetail: { uri: 'reutilisations/:id', diff --git a/src/app/user/components/auth/sign-up/sign-up.component.html b/src/app/user/components/auth/sign-up/sign-up.component.html index 1ffb32374072ec06581fafc68abe41b81c37b703..9bbcc18184855ded2582c1d065c9cce15fbbffaf 100644 --- a/src/app/user/components/auth/sign-up/sign-up.component.html +++ b/src/app/user/components/auth/sign-up/sign-up.component.html @@ -303,18 +303,20 @@ respond to your request. </div> </div> - <p class="consent-text" i18n="@@consent.text"> - Fields with an asterisk (*) are mandatory. Information in these fields will be processed to respond to - your request. The data is kept for a period of 12 months. Recipients of this - information are the metropolitan departments in charge of processing your request. In compliance with - the - “Digital Technology and Freedom” law dated January 6, 1978, you have the right to access and rectify - information that concerns you. To exercise this right, please contact the service of the Data Protection - Officer (DPD): Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires - Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 or use the - following form https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. You may also oppose - processing of your personal data for a legitimate reason. In this case, we will - not be able to process the request submitted using this form. + <p class="consent-text" i18n="@@consent.signup.text"> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname, company, address, zipcode, city and country. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil </p> </div> </div> diff --git a/src/app/user/components/user-profil/user-info/user-info.component.html b/src/app/user/components/user-profil/user-info/user-info.component.html index 0ca186e6515e1ec271a5703c9f01a7e51cdb08e4..ef3dfb87cdab779c4c0fe1d31a172338426640d0 100644 --- a/src/app/user/components/user-profil/user-info/user-info.component.html +++ b/src/app/user/components/user-profil/user-info/user-info.component.html @@ -142,18 +142,20 @@ respond to your request. </div> </div> - <p class="consent-text" i18n="@@consent.text"> - Fields with an asterisk (*) are mandatory. Information in these fields will be processed to respond to - your request. The data is kept for a period of 12 months. Recipients of this - information are the metropolitan departments in charge of processing your request. In compliance with - the - “Digital Technology and Freedom” law dated January 6, 1978, you have the right to access and rectify - information that concerns you. To exercise this right, please contact the service of the Data Protection - Officer (DPD): Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires - Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 or use the - following form https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. You may also oppose - processing of your personal data for a legitimate reason. In this case, we will - not be able to process the request submitted using this form. + <p class="consent-text" i18n="@@consent.userinfo.text"> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname, company, address, zipcode, city and country. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil </p> </div> </div> diff --git a/src/assets/config/config.template.json b/src/assets/config/config.template.json index f604cce19d3e5c2652edbab3142a030012deea97..83f179e99b906db5bbcefc45506a67ec7054548d 100644 --- a/src/assets/config/config.template.json +++ b/src/assets/config/config.template.json @@ -16,10 +16,17 @@ "seo": "", "datasetUsageStatistics": "" }, + "statistics": { + "matomoHost": "", + "matomoId": "" + }, + "layer3d": { + "url": "" + }, "theFunctionalitiesInterruptor": { "credits": true, "reuses": true, "partners": true }, "licenses": [] -} \ No newline at end of file +} diff --git a/src/environments/environment.production.ts b/src/environments/environment.production.ts index b3c2ca8a0ef95518e50478beb1cb97a1177da47c..19cc8c4ef2ccd85efb8455e950a12ca1aeef4cc0 100644 --- a/src/environments/environment.production.ts +++ b/src/environments/environment.production.ts @@ -36,6 +36,7 @@ environment.cmsStaticPages[AppRoutes.accessibility.uri] = 'accessibilite'; environment.cmsStaticPages[AppRoutes.approach.uri] = 'la-demarche'; environment.cmsStaticPages[AppRoutes.documentation.uri] = 'utiliser-la-plateforme-data-du-grand-lyon'; environment.cmsStaticPages[AppRoutes.legalNotices.uri] = 'mentions-legales'; +environment.cmsStaticPages[AppRoutes.personalData.uri] = 'donnees-personnelles'; environment.cmsStaticPages[AppRoutes.credits.uri] = 'credits'; environment.cmsStaticPages[AppRoutes.cgu.uri] = 'conditions-generales-dutilisation'; environment.cmsStaticPages[AppRoutes.beginners.uri] = 'le-coin-des-debutants'; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index c2d2262eac1682505b2325e6565cbc6990b662ba..2142d3d8be3bf5c7d012c4d98a0b602281b12679 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -37,5 +37,6 @@ environment.cmsStaticPages[AppRoutes.accessibility.uri] = 'accessibilite'; environment.cmsStaticPages[AppRoutes.approach.uri] = 'la-demarche'; environment.cmsStaticPages[AppRoutes.documentation.uri] = 'utiliser-la-plateforme-data-du-grand-lyon'; environment.cmsStaticPages[AppRoutes.legalNotices.uri] = 'mentions-legales'; +environment.cmsStaticPages[AppRoutes.personalData.uri] = 'donnees-personnelles'; environment.cmsStaticPages[AppRoutes.cgu.uri] = 'conditions-generales-dutilisation'; environment.cmsStaticPages[AppRoutes.beginners.uri] = 'le-coin-des-debutants'; diff --git a/src/i18n/messages.en.xlf b/src/i18n/messages.en.xlf index cd04c33318781ea1f34af6e0b8ba39e2e14bc51c..fd1fd8080e108c2f55f267f7c6722e755eed5d69 100644 --- a/src/i18n/messages.en.xlf +++ b/src/i18n/messages.en.xlf @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" ?> <xliff version="1.2" - xmlns="urn:oasis:names:tc:xliff:document:1.2"> + xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="ng2.template"> <body> <trans-unit id="skipLinks.content" datatype="html"> @@ -131,6 +131,14 @@ <source>Legal Notices</source> <target>Legal Notices</target> </trans-unit> + <trans-unit id="footer.personalData" datatype="html"> + <source>Personal data</source> + <target>Personal data</target> + </trans-unit> + <trans-unit id="footer.manageCookies" datatype="html"> + <source>Manage cookies</source> + <target>Manage cookies</target> + </trans-unit> <trans-unit id="footer.contactus" datatype="html"> <source>Contact Us</source> <target>Contact Us</target> @@ -267,9 +275,9 @@ </trans-unit> <trans-unit id="global.resultsFound" datatype="html"> <source> of <x id="INTERPOLATION"/> - results</source> + results</source> <target> of <x id="INTERPOLATION"/> - results</target> + results</target> </trans-unit> <trans-unit id="global.oneOccurenceFound" datatype="html"> <source>Found occurence</source> @@ -466,10 +474,10 @@ <trans-unit id="dataset.detail.lines" datatype="html"> <source> <x id="INTERPOLATION"/> - lines</source> + lines</source> <target> <x id="INTERPOLATION"/> - lines</target> + lines</target> </trans-unit> <trans-unit id="dataset.detail.map.share" datatype="html"> <source>Share the map</source> @@ -582,10 +590,10 @@ <trans-unit id="dataset.info.viewsNumber" datatype="html"> <source> <x id="INTERPOLATION"/> - view(s) during the last month</source> + view(s) during the last month</source> <target> <x id="INTERPOLATION"/> - view(s) during the last month</target> + view(s) during the last month</target> </trans-unit> <trans-unit id="dataset.info.view" datatype="html"> <source>view</source> @@ -635,9 +643,9 @@ </trans-unit> <trans-unit id="changelog.description" datatype="html"> <source>Your recommendations to improve this portal are regularly integrated. -Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </source> + Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </source> <target>Your recommendations to improve this portal are regularly integrated. -Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </target> + Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </target> </trans-unit> <trans-unit id="changelog.major" datatype="html"> <source>Major improvements</source> @@ -998,9 +1006,9 @@ Here is the list of the last evolutions of the portal. If you wish to contribute </trans-unit> <trans-unit id="form.errors.minLength" datatype="html"> <source>Your password must at least contain <x id="INTERPOLATION"/> - characters</source> + characters</source> <target>Your password must at least contain <x id="INTERPOLATION"/> - characters</target> + characters</target> </trans-unit> <trans-unit id="form.errors.invalidCharacters" datatype="html"> <source>Your password contains some forbidden characters (€, ô, é, è, …).</source> @@ -1030,7 +1038,7 @@ Here is the list of the last evolutions of the portal. If you wish to contribute <source>Your password must contain at least</source> <target>Your password must contain at least</target> </trans-unit> - <trans-unit id="signup.password.rule.and" datatype="html"> + <trans-unit id="signup.password.rule.and" datatype="html"> <source> and </source> <target> and </target> </trans-unit> @@ -1224,6 +1232,10 @@ Here is the list of the last evolutions of the portal. If you wish to contribute <source>Legal notices</source> <target>Legal notices</target> </trans-unit> + <trans-unit id="sitemap.personalData" datatype="html"> + <source>Personal data</source> + <target>Personal data</target> + </trans-unit> <trans-unit id="sitemap.contact" datatype="html"> <source>Contact us</source> <target>Contact us</target> @@ -1244,9 +1256,9 @@ Here is the list of the last evolutions of the portal. If you wish to contribute <!-- Results page --> <trans-unit id="results.noresult.1" datatype="html"> <source>No <x id="INTERPOLATION"/> - corresponds to the research criteria.</source> + corresponds to the research criteria.</source> <target>No <x id="INTERPOLATION"/> - corresponds to the research criteria.</target> + corresponds to the research criteria.</target> </trans-unit> <trans-unit id="results.noresult.2" datatype="html"> <source>Suggestion:</source> @@ -1408,29 +1420,133 @@ Here is the list of the last evolutions of the portal. If you wish to contribute <source>I accept the processing of the information entered in this form to respond to my request.</source> <target>I accept the processing of the information entered in this form to respond to my request.</target> </trans-unit> - <trans-unit id="consent.text" datatype="html"> - <source>Fields with an asterisk (*) are mandatory. Information in these fields will be processed to respond to - your request. The data is kept for a period of 12 months. Recipients of this - information are the metropolitan departments in charge of processing your request. In compliance with - the - “Digital Technology and Freedom” law dated January 6, 1978, you have the right to access and rectify - information that concerns you. To exercise this right, please contact the service of the Data Protection - Officer (DPD): Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires - Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 or use the - following form https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. You may also oppose - processing of your personal data for a legitimate reason. In this case, we will - not be able to process the request submitted using this form.</source> - <target>Fields with an asterisk (*) are mandatory. Information in these fields will be processed to respond to - your request. The data is kept for a period of 12 months. Recipients of this - information are the metropolitan departments in charge of processing your request. In compliance with - the - “Digital Technology and Freedom” law dated January 6, 1978, you have the right to access and rectify - information that concerns you. To exercise this right, please contact the service of the Data Protection - Officer (DPD): Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires - Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 or use the - following form https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. You may also oppose - processing of your personal data for a legitimate reason. In this case, we will - not be able to process the request submitted using this form.</target> + <trans-unit id="consent.contact.text" datatype="html"> + <source> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box " I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </source> + <target> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </target> + </trans-unit> + <trans-unit id="consent.feedback.text" datatype="html"> + <source> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </source> + <target> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </target> + </trans-unit> + <trans-unit id="consent.signup.text" datatype="html"> + <source> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname, address, zipcode, city and country. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </source> + <target> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname, address, zipcode, city and country. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </target> + </trans-unit> + <trans-unit id="consent.userinfo.text" datatype="html"> + <source> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname, address, zipcode, city and country. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </source> + <target> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname, address, zipcode, city and country. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </target> </trans-unit> <trans-unit id="consent.error" datatype="html"> <source>You must accept the processing of the information entered in this form to respond to your request.</source> @@ -1466,9 +1582,9 @@ Here is the list of the last evolutions of the portal. If you wish to contribute </trans-unit> <trans-unit id="contribution.mainText" datatype="html"> <source>The Métropole de Lyon encourages all players in the area - (citizens, companies, associations, research laboratories, schools, etc.) to make available all the data they produce.</source> + (citizens, companies, associations, research laboratories, schools, etc.) to make available all the data they produce.</source> <target>The Métropole de Lyon encourages all players in the area - (citizens, companies, associations, research laboratories, schools, etc.) to make available all the data they produce.</target> + (citizens, companies, associations, research laboratories, schools, etc.) to make available all the data they produce.</target> </trans-unit> <trans-unit id="contribution.text2" datatype="html"> <source>To publish data on the data.grandlyon.com platform, </source> @@ -1478,7 +1594,7 @@ Here is the list of the last evolutions of the portal. If you wish to contribute <source>contact us</source> <target>contact us</target> </trans-unit> - <trans-unit id="reuses.description.part1" datatype="html"> + <trans-unit id="reuses.description.part1" datatype="html"> <source>The Métropole de Lyon promotes the reuse of territorial data: analysis, map, site, service, application...</source> <target>The Métropole de Lyon promotes the reuse of territorial data: analysis, map, site, service, application...</target> </trans-unit> @@ -1518,15 +1634,15 @@ Here is the list of the last evolutions of the portal. If you wish to contribute <source>The acceptance of the terms of use is necessary in order to access the resources of the datasets</source> <target>The acceptance of the terms of use is necessary in order to access the resources of the datasets</target> </trans-unit> - <trans-unit id="cgu.modal.acceptation" datatype="html"> + <trans-unit id="cgu.modal.acceptation" datatype="html"> <source>You have to read the entire Terms of Use before you can accept it.</source> <target>You have to read the entire Terms of Use before you can accept it.</target> </trans-unit> - <trans-unit id="cgu.modal.refuse" datatype="html"> + <trans-unit id="cgu.modal.refuse" datatype="html"> <source>Refuse</source> <target>Refuse</target> </trans-unit> - <trans-unit id="cgu.modal.refuseComplete" datatype="html"> + <trans-unit id="cgu.modal.refuseComplete" datatype="html"> <source>Refuse terms of use</source> <target>Refuse terms of use</target> </trans-unit> diff --git a/src/i18n/messages.fr.xlf b/src/i18n/messages.fr.xlf index b41e304c633ddc5f89042d3e12db108af384107e..226f3d90dee1e6a2f32a3856e3084fad015931f4 100644 --- a/src/i18n/messages.fr.xlf +++ b/src/i18n/messages.fr.xlf @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" ?> <xliff version="1.2" - xmlns="urn:oasis:names:tc:xliff:document:1.2"> + xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="en" datatype="plaintext" original="ng2.template"> <body> <trans-unit id="skipLinks.content" datatype="html"> @@ -131,6 +131,14 @@ <source>Legal Notices</source> <target>Mentions légales</target> </trans-unit> + <trans-unit id="footer.personalData" datatype="html"> + <source>Personal data</source> + <target>Données personnelles</target> + </trans-unit> + <trans-unit id="footer.manageCookies" datatype="html"> + <source>Manage cookies</source> + <target>Gestion des cookies</target> + </trans-unit> <trans-unit id="footer.contactus" datatype="html"> <source>Contact Us</source> <target>Contactez-nous</target> @@ -267,9 +275,9 @@ </trans-unit> <trans-unit id="global.resultsFound" datatype="html"> <source>of <x id="INTERPOLATION"/> - results</source> + results</source> <target> sur <x id="INTERPOLATION"/> - résultats</target> + résultats</target> </trans-unit> <trans-unit id="global.occurenceFoundMetadata" datatype="html"> <source>{VAR_PLURAL, plural, =1 {Found occurence} other {Found occurences}} in metadata</source> @@ -386,10 +394,10 @@ <trans-unit id="dataset.resources.commune" datatype="html"> <source>All</source> <target>Toutes</target> - <trans-unit id="dataset.resources.allcommune" datatype="html"> - <source>All the municipalities</source> - <target>Toutes les communes</target> - </trans-unit> + <trans-unit id="dataset.resources.allcommune" datatype="html"> + <source>All the municipalities</source> + <target>Toutes les communes</target> + </trans-unit> </trans-unit> <trans-unit id="dataset.resources.url.root" datatype="html"> <source>Resource root URL</source> @@ -466,10 +474,10 @@ <trans-unit id="dataset.detail.lines" datatype="html"> <source> <x id="INTERPOLATION"/> - lines</source> + lines</source> <target> <x id="INTERPOLATION"/> - lignes</target> + lignes</target> </trans-unit> <trans-unit id="dataset.detail.map.share" datatype="html"> <source>Share the map</source> @@ -582,10 +590,10 @@ <trans-unit id="dataset.info.viewsNumber" datatype="html"> <source> <x id="INTERPOLATION"/> - view(s) during the last month</source> + view(s) during the last month</source> <target> <x id="INTERPOLATION"/> - vue(s) dans le dernier mois</target> + vue(s) dans le dernier mois</target> </trans-unit> <trans-unit id="dataset.info.view" datatype="html"> <source>view</source> @@ -643,9 +651,9 @@ </trans-unit> <trans-unit id="changelog.description" datatype="html"> <source>Your recommendations to improve this portal are regularly integrated. -Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </source> + Here is the list of the last evolutions of the portal. If you wish to contribute to the optimization of the portal, do not hesitate to </source> <target>Vos recommandations afin d’améliorer ce portail sont régulièrement intégrées. -Voici la liste des dernières évolutions du portail. Si vous souhaitez contribuer à l’optimisation du portail, n’hésitez pas à </target> + Voici la liste des dernières évolutions du portail. Si vous souhaitez contribuer à l’optimisation du portail, n’hésitez pas à </target> </trans-unit> <trans-unit id="changelog.lastupdate" datatype="html"> <source>Last update</source> @@ -702,7 +710,7 @@ Voici la liste des dernières évolutions du portail. Si vous souhaitez contribu <trans-unit id="organizations.description" datatype="html"> <source>The Lyon Metropolitan Area has opened its portal to all stakeholders in the region who wish to distribute their data, in open data or restricted access. If you wish to make your data available on this shared platform, do not hesitate to </source> <target>La Métropole de Lyon a ouvert son portail à tous les acteurs du territoire qui souhaitent diffuser leurs données, - en open data ou en accès restreint. Si vous souhaitez mettre à disposition vos données sur cette plateforme mutualisée, n’hésitez pas à </target> + en open data ou en accès restreint. Si vous souhaitez mettre à disposition vos données sur cette plateforme mutualisée, n’hésitez pas à </target> </trans-unit> <trans-unit id="organizations.contactus" datatype="html"> <source>contact us</source> @@ -1007,9 +1015,9 @@ Voici la liste des dernières évolutions du portail. Si vous souhaitez contribu </trans-unit> <trans-unit id="form.errors.minLength" datatype="html"> <source>Your password must at least contain <x id="INTERPOLATION"/> - characters</source> + characters</source> <target>Votre mot de passe doit contenir au minimum <x id="INTERPOLATION"/> - caractères.</target> + caractères.</target> </trans-unit> <trans-unit id="form.errors.invalidCharacters" datatype="html"> <source>Your password contains some forbidden characters (€, ô, é, è, …).</source> @@ -1233,6 +1241,10 @@ Voici la liste des dernières évolutions du portail. Si vous souhaitez contribu <source>Legal notices</source> <target>Mentions légales</target> </trans-unit> + <trans-unit id="sitemap.personalData" datatype="html"> + <source>Personal data</source> + <target>Données personnelles</target> + </trans-unit> <trans-unit id="sitemap.contact" datatype="html"> <source>Contact us</source> <target>Contactez-nous</target> @@ -1253,9 +1265,9 @@ Voici la liste des dernières évolutions du portail. Si vous souhaitez contribu <!-- Results page --> <trans-unit id="results.noresult.1" datatype="html"> <source>No <x id="INTERPOLATION"/> - corresponds to the research criteria.</source> + corresponds to the research criteria.</source> <target>Aucun(e) <x id="INTERPOLATION"/> - ne correspond aux termes de recherche.</target> + ne correspond aux termes de recherche.</target> </trans-unit> <trans-unit id="results.noresult.2" datatype="html"> <source>Suggestion:</source> @@ -1413,19 +1425,120 @@ Voici la liste des dernières évolutions du portail. Si vous souhaitez contribu <source>I accept the processing of the information entered in this form to respond to my request.</source> <target>J'accepte que les informations saisies dans ce formulaire soient traitées pour répondre à ma demande.</target> </trans-unit> - <trans-unit id="consent.text" datatype="html"> - <source>Fields with an asterisk (*) are mandatory. Information in these fields will be processed to respond to - your request. The data is kept for a period of 12 months. Recipients of this - information are the metropolitan departments in charge of processing your request. In compliance with - the - “Digital Technology and Freedom” law dated January 6, 1978, you have the right to access and rectify - information that concerns you. To exercise this right, please contact the service of the Data Protection - Officer (DPD): Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires - Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 or use the - following form https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. You may also oppose - processing of your personal data for a legitimate reason. In this case, we will - not be able to process the request submitted using this form.</source> - <target>Les champs suivi d'un astérisque (*) sont obligatoires. Les informations contenues dans ces champs font l’objet d’un traitement informatisé destiné à répondre à votre demande. Les données sont conservées pendant une durée de 12 mois. Les destinataires des informations sont les services métropolitains en charge du traitement de votre demande. Conformément à la loi "informatique et libertés" du 6 janvier 1978 modifiée, vous bénéficiez d’un droit d’accès et de rectification aux informations vous concernant. Si vous souhaitez exercer ce droit, vous pouvez vous adresser au service du Délégué à la Protection des Données (DPD) : Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou via le formulaire https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. Si toutefois vous souhaitez, pour des motifs légitimes, vous opposer au traitement des données vous concernant, nous ne pourrons pas traiter la demande soumise via ce formulaire. + <trans-unit id="consent.contact.text" datatype="html"> + <source> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </source> + <target> + Conformément à la Loi ≪ Informatique et Libertés ≫ modifiée, la collecte et le traitement de vos données à caractère personnel sont nécessaires pour nous contacter. La base légale du traitement est votre consentement, donné en cochant la case ci-dessus (cf. article 6.1.b du Règlement européen sur la protection des données). Les données traitées sont : + adresse e-mail, nom, prénom. + Les destinataires de ces données personnelles, sont, dans le strict cadre des finalités énoncées ci-dessus, la Métropole de Lyon. + Ces données seront conservées durant 1 an. + Vous disposez d’un droit d’accès, de rectification et d’effacement de vos données personnelles. Lorsqu’un consentement est nécessaire au traitement, vous disposez du droit de le retirer. Sous certaines conditions règlementaires, vous disposez du droit de demander la limitation du traitement ou de vous y opposer. + Vous pouvez exercer ces différents droits en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse : + Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou via le formulaire https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/ + Les réclamations touchant à la collecte ou au traitement de vos données à caractère personnel pourront être adressées au service du Délégué à la Protection des Données (DPD), dont les coordonnées ont été précisées ci-dessus. + En cas de désaccord persistant concernant vos données, vous avez le droit de saisir la CNIL [autorité de contrôle concernée] à l’adresse suivante : + Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </target> + </trans-unit> + <trans-unit id="consent.feedback.text" datatype="html"> + <source> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </source> + <target> + Conformément à la Loi ≪ Informatique et Libertés ≫ modifiée, la collecte et le traitement de vos données à caractère personnel sont nécessaires pour nous donner votre avis. La base légale du traitement est votre consentement, donné en cochant la case ci-dessus (cf. article 6.1.b du Règlement européen sur la protection des données). Les données traitées sont : + adresse e-mail. + Les destinataires de ces données personnelles, sont, dans le strict cadre des finalités énoncées ci-dessus, la Métropole de Lyon. + Ces données seront conservées durant 1 an. + Vous disposez d’un droit d’accès, de rectification et d’effacement de vos données personnelles. Lorsqu’un consentement est nécessaire au traitement, vous disposez du droit de le retirer. Sous certaines conditions règlementaires, vous disposez du droit de demander la limitation du traitement ou de vous y opposer. + Vous pouvez exercer ces différents droits en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse : + Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou via le formulaire https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/ + Les réclamations touchant à la collecte ou au traitement de vos données à caractère personnel pourront être adressées au service du Délégué à la Protection des Données (DPD), dont les coordonnées ont été précisées ci-dessus. + En cas de désaccord persistant concernant vos données, vous avez le droit de saisir la CNIL [autorité de contrôle concernée] à l’adresse suivante : + Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </target> + </trans-unit> + <trans-unit id="consent.signup.text" datatype="html"> + <source> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname, address, zipcode, city and country. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </source> + <target> + Conformément à la Loi ≪ Informatique et Libertés ≫ modifiée, la collecte et le traitement de vos données à caractère personnel sont nécessaires pour la création de votre compte. La base légale du traitement est votre consentement, donné en cochant la case ci-dessus (cf. article 6.1.b du Règlement européen sur la protection des données). Les données traitées sont : + adresse e-mail, nom, prénom, adresse, code postal, ville et pays. + Les destinataires de ces données personnelles, sont, dans le strict cadre des finalités énoncées ci-dessus, la Métropole de Lyon. + Ces données seront conservées jusqu'à ce que vous supprimiez votre compte. + Vous disposez d’un droit d’accès, de rectification et d’effacement de vos données personnelles. Lorsqu’un consentement est nécessaire au traitement, vous disposez du droit de le retirer. Sous certaines conditions règlementaires, vous disposez du droit de demander la limitation du traitement ou de vous y opposer. + Vous pouvez exercer ces différents droits en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse : + Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou via le formulaire https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/ + Les réclamations touchant à la collecte ou au traitement de vos données à caractère personnel pourront être adressées au service du Délégué à la Protection des Données (DPD), dont les coordonnées ont été précisées ci-dessus. + En cas de désaccord persistant concernant vos données, vous avez le droit de saisir la CNIL [autorité de contrôle concernée] à l’adresse suivante : + Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </target> + </trans-unit> + <trans-unit id="consent.userinfo.text" datatype="html"> + <source> + According to French Law ≪ Informatique et Libertés ≫ concerning data processing and individual liberties, + registration and use of your personal datas are necessary to answer your questions. + You allow « data.grandlyon.com » to collect and use your datas by clicking the box « I accept the processing of the information entered in this form to respond to my request. ». Data collected are: e-mail, firstname, lastname, address, zipcode, city and country. + Recipients of these personal datas are, with strict respect of goals mentionned above, + responsible departements of Metropole de Lyon and its service providers. + You have the right to access, correct and delete the personal data. + When a consent is required for a processing, you have the right to revoke it. + Under some regulary conditions, you have the right to ask for processing limitation or to get opposed to it. + To exercise these rights, you can contact the Délégué à la Protection des Données by mail at : + Métropole de Lyon – Délégué à la Protection des Données – Direction des Affaires Juridiques et de la Commande Publique – 20, rue du Lac – BP 33569 – 69505 Lyon Cedex 03 + or by form at : https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/. + For any demand about collecting or processing of your personal datas, you can contact the Délégué à la Protection des Données (DPD), whose adress is mentionned above. + For strong conflicts concerning your personal datas, you have the right to alert the CNIL [supervisory authority] which address is : Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil + </source> + <target> + Conformément à la Loi ≪ Informatique et Libertés ≫ modifiée, la collecte et le traitement de vos données à caractère personnel sont nécessaires pour la modification de vos informations personnelles. La base légale du traitement est votre consentement, donné en cochant la case ci-dessus (cf. article 6.1.b du Règlement européen sur la protection des données). Les données traitées sont : + adresse e-mail, nom, prénom, adresse, code postal, ville et pays. + Les destinataires de ces données personnelles, sont, dans le strict cadre des finalités énoncées ci-dessus, la Métropole de Lyon. + Ces données seront conservées jusqu'à ce que vous supprimiez votre compte. + Vous disposez d’un droit d’accès, de rectification et d’effacement de vos données personnelles. Lorsqu’un consentement est nécessaire au traitement, vous disposez du droit de le retirer. Sous certaines conditions règlementaires, vous disposez du droit de demander la limitation du traitement ou de vous y opposer. + Vous pouvez exercer ces différents droits en contactant directement le Délégué à la Protection des Données par courrier en écrivant à l’adresse : + Métropole de Lyon – Délégué à la Protection des Données - Direction des Affaires Juridiques et de la Commande Publique - 20, rue du Lac - BP 33569 - 69505 Lyon Cedex 03 ou via le formulaire https://demarches.toodego.com/sve/proteger-mes-donnees-personnelles/ + Les réclamations touchant à la collecte ou au traitement de vos données à caractère personnel pourront être adressées au service du Délégué à la Protection des Données (DPD), dont les coordonnées ont été précisées ci-dessus. + En cas de désaccord persistant concernant vos données, vous avez le droit de saisir la CNIL [autorité de contrôle concernée] à l’adresse suivante : + Commission Nationale Informatique et Libertés, 3 place de Fontenoy 75007 Paris, 01 53 73 22 22, https://www.cnil.fr/fr/vous-souhaitez-contacter-la-cnil </target> </trans-unit> <trans-unit id="consent.error" datatype="html"> @@ -1462,9 +1575,9 @@ Voici la liste des dernières évolutions du portail. Si vous souhaitez contribu </trans-unit> <trans-unit id="contribution.mainText" datatype="html"> <source>We support you in the formalization of your datasets, in the attribution of his license, until - its publication on the portal.</source> + its publication on the portal.</source> <target>La Métropole de Lyon encourage tous les acteurs du territoire (citoyens, entreprises, associations, laboratoires de recherche, écoles...) - à mettre à disposition de tous les données qu'ils produisent. </target> + à mettre à disposition de tous les données qu'ils produisent. </target> </trans-unit> <trans-unit id="contribution.text2" datatype="html"> <source>To publish data on the data.grandlyon.com platform, </source> diff --git a/src/main.ts b/src/main.ts index 6b9ee2376e7c47e00c591bc8bc85271f09f53128..7ff6d061ab87bbf79eaf1909f05ffc0402f07fcd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -20,5 +20,4 @@ fetch('./assets/config/config.json') platformBrowserDynamic().bootstrapModule(AppModule) .catch(err => console.log(err)); - }); diff --git a/src/scss/ghost-style.scss b/src/scss/ghost-style.scss index ceda6099083115800089c622a7073c3938beff07..ffe3e8947d75fa182a3c19475c3b58cf6c5106f4 100644 --- a/src/scss/ghost-style.scss +++ b/src/scss/ghost-style.scss @@ -73,6 +73,10 @@ height: 300px; } + .youtube_player iframe { + height: 300px; + } + iframe:not([width]) { width: 100%; } diff --git a/src/scss/tarteaucitron.scss b/src/scss/tarteaucitron.scss new file mode 100644 index 0000000000000000000000000000000000000000..2de6816caf4d92ee3d64536afcf61b64b2015493 --- /dev/null +++ b/src/scss/tarteaucitron.scss @@ -0,0 +1,51 @@ +#tarteaucitronRoot { + + #tarteaucitronAlertBig { + background-color: $brand-color !important; + z-index: 3 !important; + } + + #tarteaucitronDisclaimerAlert { + width: 100%; + text-align: center; + margin-bottom: 0.6rem; + } + + .tarteaucitronAlertBigBottom { + button { + color: $grey-dark-color !important; + background-color: $white !important; + padding: 8px 20px !important; + border-radius: 4px !important; + font-weight: bold; + + &:active, &:focus, &:hover { + text-decoration: underline !important; + } + } + + .tarteaucitronCross::before, + .tarteaucitronCheck::before { + color: $grey-dark-color; + } + } +} + +#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronClosePanelCookie, #tarteaucitron #tarteaucitronClosePanel { + border-radius: 0; + padding: 4px 0; +} + +#tarteaucitron #tarteaucitronServices .tarteaucitronLine .tarteaucitronAsk .tarteaucitronAllow, +#tarteaucitron #tarteaucitronServices .tarteaucitronLine .tarteaucitronAsk .tarteaucitronDeny, +.tac_activate .tarteaucitronAllow { + padding: 6px 10px; +} + +#tarteaucitronAlertSmall #tarteaucitronCookiesListContainer #tarteaucitronCookiesList .tarteaucitronTitle, +#tarteaucitron #tarteaucitronServices .tarteaucitronTitle button, +#tarteaucitron #tarteaucitronInfo, +#tarteaucitron #tarteaucitronServices .tarteaucitronDetails { + padding: 5px 20px; + border-radius: 0; +} diff --git a/src/styles.scss b/src/styles.scss index efe4ab6b6e08c0ed9ab781164be715c87d00ece4..b2eb74be01e181975b6709dcfedcdc3c27c57042 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -535,3 +535,4 @@ span.required-field, } @import "./scss/ghost-style"; +@import "./scss/tarteaucitron";