From 3154148b5ee739169f4dbabc9cabae04366bba33 Mon Sep 17 00:00:00 2001 From: Ben Hong Date: Wed, 27 Mar 2024 09:55:55 -0700 Subject: [PATCH] fix(docs-infra): add cookie consent gtag event default state This PR sets a default state for cookie consent of 'denied'. The other part of the PR exists in the angular/dev-infra repo which will grant permission when the user accepts the cookie banner. --- .../services/analytics/analytics.service.ts | 18 ++- package.json | 10 +- yarn.lock | 146 ++++++++++++------ 3 files changed, 122 insertions(+), 52 deletions(-) diff --git a/adev/src/app/core/services/analytics/analytics.service.ts b/adev/src/app/core/services/analytics/analytics.service.ts index 74d2483c239223..033121eee8756b 100644 --- a/adev/src/app/core/services/analytics/analytics.service.ts +++ b/adev/src/app/core/services/analytics/analytics.service.ts @@ -8,7 +8,7 @@ import {inject, Injectable} from '@angular/core'; -import {WINDOW, ENVIRONMENT} from '@angular/docs'; +import {WINDOW, ENVIRONMENT, LOCAL_STORAGE, STORAGE_KEY, setCookieConsent} from '@angular/docs'; import {formatErrorEventForAnalytics} from './analytics-format-error'; @@ -28,6 +28,7 @@ interface WindowWithAnalytics extends Window { export class AnalyticsService { private environment = inject(ENVIRONMENT); private window: WindowWithAnalytics = inject(WINDOW); + private readonly localStorage = inject(LOCAL_STORAGE); constructor() { this._installGlobalSiteTag(); @@ -64,6 +65,21 @@ export class AnalyticsService { window.gtag = function () { window.dataLayer?.push(arguments); }; + + // Cookie banner consent initial state + // This code is modified in the @angular/docs package in the cookie-popup component. + // Docs: https://developers.google.com/tag-platform/security/guides/consent + if (this.localStorage) { + if (this.localStorage.getItem(STORAGE_KEY) === 'true') { + setCookieConsent('granted'); + } else { + setCookieConsent('denied'); + } + } else { + // In case localStorage is not available, we default to denying cookies. + setCookieConsent('denied'); + } + window.gtag('js', new Date()); // Configure properties before loading the script. This is necessary to avoid diff --git a/package.json b/package.json index f80de89f734490..59f410f1044d12 100644 --- a/package.json +++ b/package.json @@ -151,11 +151,11 @@ "// 2": "devDependencies are not used under Bazel. Many can be removed after test.sh is deleted.", "devDependencies": { "@actions/core": "^1.10.0", - "@angular-devkit/architect-cli": "^0.1800.0-next", - "@angular/animations": "^18.0.0-next", - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#5b1b7bc36648f4c066d8cf917ea7cc9e7eed2b8f", - "@angular/docs": "https://github.com/angular/dev-infra-private-docs-builds.git#12016780c96616656ed6667d65860391a5b56c79", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#43caa47b9ea70629976ccbe2b4fb4869f202c080", + "@angular-devkit/architect-cli": "^0.1703.0-rc", + "@angular/animations": "^17.3.0-rc", + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#4a72a4dd4c19416cb8204deee884500766fee9f8", + "@angular/docs": "https://github.com/angular/dev-infra-private-docs-builds.git#ea7f2bc177445d0420103f3e7611d5d40793e8c7", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#7dea535110c0215b221908e37067ee6b605db373", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-proposal-async-generator-functions": "^7.20.7", "@bazel/bazelisk": "^1.7.5", diff --git a/yarn.lock b/yarn.lock index e9824e12d5c080..32d9425dbfea06 100644 --- a/yarn.lock +++ b/yarn.lock @@ -438,19 +438,19 @@ uuid "^9.0.0" yargs "^17.0.0" -"@angular/cdk@18.0.0-next.5": - version "18.0.0-next.5" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-18.0.0-next.5.tgz#17167794604c0b73b354dab7135f1cc24d5be876" - integrity sha512-O2zFYFCr4IuZwtVl/Ban04NSreuVFYqWUrryvY76rsYzsOdnC9hqy3CsL0cyFZXlEZUL6tN0UYf7RIYKg11YJQ== +"@angular/cdk@17.3.0-rc.0": + version "17.3.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-17.3.0-rc.0.tgz#c4bfc20f46cee133bf08e9beb86e46ec0c38408e" + integrity sha512-A5Oa0J5/uqigfHAFQGoGPYOQXJhG+2s8PWarW5hCY39f1B4xO1JyCI4p6/6tXedDqoLTwgLZ5BbXTSyN2WulbA== dependencies: tslib "^2.3.0" optionalDependencies: parse5 "^7.1.2" -"@angular/cli@18.0.0-next.3": - version "18.0.0-next.3" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-18.0.0-next.3.tgz#db89347a0899d77ac79d8e718f4bde2b60a44f9c" - integrity sha512-hOa142GG3wurxD4PQuiYCpRJ9suYVeIMZmDpjYVbVbFIf8S6jhyai0dYoBcHruVYiOtNRbLBbgmY3hYNAlv2ag== +"@angular/cdk@18.0.0-next.1": + version "18.0.0-next.1" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-18.0.0-next.1.tgz#089950a633f97bc091c27dddbf03101b5302a861" + integrity sha512-B9KvXGTu9jWjGV8ueqYnO06jHjqAc7oQNb8lwzH3ev8eJ7rgWsippc51MygNTVt5G/PeEYZl1gf8Gn7l8rfa5A== dependencies: "@angular-devkit/architect" "0.1800.0-next.3" "@angular-devkit/core" "18.0.0-next.3" @@ -470,17 +470,17 @@ symbol-observable "4.0.0" yargs "17.7.2" -"@angular/common@18.0.0-next.5": - version "18.0.0-next.5" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-18.0.0-next.5.tgz#5954ab0076dad5bf332d3b67681e625f2c997ec8" - integrity sha512-nadG1Ru6KzuUBv/XaXlqXYzBpJ0jELltgw9p5rFv0FWxY0WF3/0u5qq0+leK+hNlMvRZQNNwlb/Nv8viBuyNUg== +"@angular/common@18.0.0-next.1": + version "18.0.0-next.1" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-18.0.0-next.1.tgz#018492c47e176e8d9667b04778f20785ffd59b6d" + integrity sha512-8SjKz6IZ+BSxbh4sZ7k8BydtKnRatbvKFz3Zu3q0AEU44lEBzeO26pE4gEWX1pw739IB+ldsT6Yfl5Gb6o9Qtg== dependencies: tslib "^2.3.0" -"@angular/core@18.0.0-next.5": - version "18.0.0-next.5" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-18.0.0-next.5.tgz#b7329aa491ab1c5d34ceb5c3531343136e70f533" - integrity sha512-bK2wKQJXjLf9LmwEA2fn5GD1phyidWxXMpa7sCVNbcSlGNlNo2Gp3bPqawpDxkU1cd8bgGBNtoHrK8why0fb0g== +"@angular/core@18.0.0-next.1": + version "18.0.0-next.1" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-18.0.0-next.1.tgz#f90bef16c1af677ad900318aca0100ed8945041f" + integrity sha512-jdhuX7RROtOYcMuSBb4CG35iACMgz8Ba4n4eURh6sSCyqLHz1phkBOoXzHddZNg4QY64KpahAYvhmhk6eoax+A== dependencies: tslib "^2.3.0" @@ -491,17 +491,17 @@ dependencies: tslib "^2.3.0" -"@angular/docs@https://github.com/angular/dev-infra-private-docs-builds.git#12016780c96616656ed6667d65860391a5b56c79": - version "0.0.0-f122b83d2a49e24eb9dfcd54fca9fc97612b832d" - resolved "https://github.com/angular/dev-infra-private-docs-builds.git#12016780c96616656ed6667d65860391a5b56c79" - dependencies: - "@angular/cdk" "18.0.0-next.5" - "@angular/common" "18.0.0-next.5" - "@angular/core" "18.0.0-next.5" - "@angular/forms" "18.0.0-next.5" - "@angular/material" "18.0.0-next.5" - "@angular/platform-browser" "18.0.0-next.5" - "@angular/router" "18.0.0-next.5" +"@angular/docs@https://github.com/angular/dev-infra-private-docs-builds.git#ea7f2bc177445d0420103f3e7611d5d40793e8c7": + version "0.0.0-4b433074a806bbbd4d319264430740cd46e62f27" + resolved "https://github.com/angular/dev-infra-private-docs-builds.git#ea7f2bc177445d0420103f3e7611d5d40793e8c7" + dependencies: + "@angular/cdk" "18.0.0-next.1" + "@angular/common" "18.0.0-next.1" + "@angular/core" "18.0.0-next.1" + "@angular/forms" "18.0.0-next.1" + "@angular/material" "18.0.0-next.1" + "@angular/platform-browser" "18.0.0-next.1" + "@angular/router" "18.0.0-next.1" "@webcontainer/api" "^1.1.8" algoliasearch "^4.20.0" diff "5.2.0" @@ -517,17 +517,17 @@ xterm-addon-fit "^0.8.0" zone.js "^0.14.2" -"@angular/forms@18.0.0-next.5": - version "18.0.0-next.5" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-18.0.0-next.5.tgz#9557decde759a3491ee3e2c919d243c069e5afcd" - integrity sha512-KsmVbRpr/AgBPNAeDg8NJ8isizyotq3sSoaCwPu3jN6OWfHfBBHybOnAd/ksYMa3bdZXp7SFJAn93W+Vtq5Nyg== +"@angular/forms@18.0.0-next.1": + version "18.0.0-next.1" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-18.0.0-next.1.tgz#c0ea5e969ac0d86ae4879decc2b1ea5784afc4ef" + integrity sha512-yE6iTx0Fhbg3QQixHISoBbh9yIC0pMlm1djQS7KvVf8Xny19t5uuSoqse7fSxB8memHFE822bwcQ57G0JsyPUQ== dependencies: tslib "^2.3.0" -"@angular/material@18.0.0-next.5": - version "18.0.0-next.5" - resolved "https://registry.yarnpkg.com/@angular/material/-/material-18.0.0-next.5.tgz#bbe62ef044538fb9e555567a5cb97a9c74c422c0" - integrity sha512-vmsEfJxWW3+fshw7muUG96wQzfAlTXrX8U8hKwjNEfFBJBWXGqnrrjNPsiYVmxuJmncWFd+ZSI04ShT06jjkUA== +"@angular/material@17.3.0-rc.0": + version "17.3.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular/material/-/material-17.3.0-rc.0.tgz#9358ca5dac96fadb3f742b100eba28e0662da158" + integrity sha512-gX9OZvypLw6OvQ9goROwY2GosmKuqazcPZeHKtvk6WrvoIf2wSK+DEaNlX1gbHv0xVEtxFHqGE/diQumFQKYcA== dependencies: "@material/animation" "15.0.0-canary.7f224ddd4.0" "@material/auto-init" "15.0.0-canary.7f224ddd4.0" @@ -578,24 +578,78 @@ "@material/typography" "15.0.0-canary.7f224ddd4.0" tslib "^2.3.0" -"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#43caa47b9ea70629976ccbe2b4fb4869f202c080": - version "0.0.0-f122b83d2a49e24eb9dfcd54fca9fc97612b832d" - resolved "https://github.com/angular/dev-infra-private-ng-dev-builds.git#43caa47b9ea70629976ccbe2b4fb4869f202c080" +"@angular/material@18.0.0-next.1": + version "18.0.0-next.1" + resolved "https://registry.yarnpkg.com/@angular/material/-/material-18.0.0-next.1.tgz#b6561539ac5c5a7ac6358d91dcfd1726bc2ad8dc" + integrity sha512-tdr1+Y9d9cV1JNvfOFmaElWaO7l7lc7TjU0hZLlYjwsgPwXOONhm2qEcRzumatkuGqI4IBM/v9KJaCzOwFfu/Q== + dependencies: + "@material/animation" "15.0.0-canary.7f224ddd4.0" + "@material/auto-init" "15.0.0-canary.7f224ddd4.0" + "@material/banner" "15.0.0-canary.7f224ddd4.0" + "@material/base" "15.0.0-canary.7f224ddd4.0" + "@material/button" "15.0.0-canary.7f224ddd4.0" + "@material/card" "15.0.0-canary.7f224ddd4.0" + "@material/checkbox" "15.0.0-canary.7f224ddd4.0" + "@material/chips" "15.0.0-canary.7f224ddd4.0" + "@material/circular-progress" "15.0.0-canary.7f224ddd4.0" + "@material/data-table" "15.0.0-canary.7f224ddd4.0" + "@material/density" "15.0.0-canary.7f224ddd4.0" + "@material/dialog" "15.0.0-canary.7f224ddd4.0" + "@material/dom" "15.0.0-canary.7f224ddd4.0" + "@material/drawer" "15.0.0-canary.7f224ddd4.0" + "@material/elevation" "15.0.0-canary.7f224ddd4.0" + "@material/fab" "15.0.0-canary.7f224ddd4.0" + "@material/feature-targeting" "15.0.0-canary.7f224ddd4.0" + "@material/floating-label" "15.0.0-canary.7f224ddd4.0" + "@material/form-field" "15.0.0-canary.7f224ddd4.0" + "@material/icon-button" "15.0.0-canary.7f224ddd4.0" + "@material/image-list" "15.0.0-canary.7f224ddd4.0" + "@material/layout-grid" "15.0.0-canary.7f224ddd4.0" + "@material/line-ripple" "15.0.0-canary.7f224ddd4.0" + "@material/linear-progress" "15.0.0-canary.7f224ddd4.0" + "@material/list" "15.0.0-canary.7f224ddd4.0" + "@material/menu" "15.0.0-canary.7f224ddd4.0" + "@material/menu-surface" "15.0.0-canary.7f224ddd4.0" + "@material/notched-outline" "15.0.0-canary.7f224ddd4.0" + "@material/radio" "15.0.0-canary.7f224ddd4.0" + "@material/ripple" "15.0.0-canary.7f224ddd4.0" + "@material/rtl" "15.0.0-canary.7f224ddd4.0" + "@material/segmented-button" "15.0.0-canary.7f224ddd4.0" + "@material/select" "15.0.0-canary.7f224ddd4.0" + "@material/shape" "15.0.0-canary.7f224ddd4.0" + "@material/slider" "15.0.0-canary.7f224ddd4.0" + "@material/snackbar" "15.0.0-canary.7f224ddd4.0" + "@material/switch" "15.0.0-canary.7f224ddd4.0" + "@material/tab" "15.0.0-canary.7f224ddd4.0" + "@material/tab-bar" "15.0.0-canary.7f224ddd4.0" + "@material/tab-indicator" "15.0.0-canary.7f224ddd4.0" + "@material/tab-scroller" "15.0.0-canary.7f224ddd4.0" + "@material/textfield" "15.0.0-canary.7f224ddd4.0" + "@material/theme" "15.0.0-canary.7f224ddd4.0" + "@material/tooltip" "15.0.0-canary.7f224ddd4.0" + "@material/top-app-bar" "15.0.0-canary.7f224ddd4.0" + "@material/touch-target" "15.0.0-canary.7f224ddd4.0" + "@material/typography" "15.0.0-canary.7f224ddd4.0" + tslib "^2.3.0" + +"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#7dea535110c0215b221908e37067ee6b605db373": + version "0.0.0-5774b71c01a55c4c998f858ee37d3b77ae704c31" + resolved "https://github.com/angular/dev-infra-private-ng-dev-builds.git#7dea535110c0215b221908e37067ee6b605db373" dependencies: "@yarnpkg/lockfile" "^1.1.0" typescript "~4.9.0" -"@angular/platform-browser@18.0.0-next.5": - version "18.0.0-next.5" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-18.0.0-next.5.tgz#d88cb7429802a9c71f8028fd8fcb67d8dbb6cb1e" - integrity sha512-c/cXwnprIsGuP2uTH3vBLtJCWB8rEc4c+HUfq9R3B70kGK0+4DMIMdD3eP45P4qL+nVXqWv62vtzH7BP8zCIxg== +"@angular/platform-browser@18.0.0-next.1": + version "18.0.0-next.1" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-18.0.0-next.1.tgz#1b4ae134e27fe3a8176d3c7e3b54cb8e404c7e53" + integrity sha512-n1c+sevDbb2lnvY3KzNmrlhQM686L02HI5qbHLcNw0I28CTat0xrLJIrj8gFHT2uxKESIw9hC7a0Q/DkpBeoqQ== dependencies: tslib "^2.3.0" -"@angular/router@18.0.0-next.5": - version "18.0.0-next.5" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-18.0.0-next.5.tgz#545888fc78f163450329c081d89acd7dc9516640" - integrity sha512-G/CHyrQpTV8Rct/PYkKMnweB7zug0n8qWxajzXHvRshhJVNCmiUGEuCDKi25Fg4IjAUqu9y4dEg9WeIuHtYLZA== +"@angular/router@18.0.0-next.1": + version "18.0.0-next.1" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-18.0.0-next.1.tgz#06a940870e85cf21be4d0b6df1a6be1ef928d300" + integrity sha512-nq9BPRp1uLOPrNySYGYJbHnDZ+5Tr+orHQ9JRVyhi5NGJlejwfKWfHyOixY3DWwMtfFUacsnjdxoUD+YC5bpmA== dependencies: tslib "^2.3.0"