From 70b51c27e9e8564650d1e4af844c50464d0317a0 Mon Sep 17 00:00:00 2001 From: lenacohen Date: Tue, 11 Jun 2024 18:37:20 -0400 Subject: [PATCH 1/2] Add modal overlay to nudge Chromium users to pin to toolbar --- src/_locales/en_US/messages.json | 20 ++++++ src/icons/close.svg | 4 ++ src/lib/i18n.js | 11 +++ src/skin/css/firstRun.css | 82 ++++++++++++++++++++++- src/skin/firstRun.html | 12 ++++ src/skin/images/pinning-instructions.png | Bin 0 -> 28543 bytes src/skin/js/firstRun.js | 60 +++++++++++++++++ src/skin/popup.html | 7 +- 8 files changed, 191 insertions(+), 5 deletions(-) create mode 100644 src/icons/close.svg create mode 100644 src/skin/images/pinning-instructions.png diff --git a/src/_locales/en_US/messages.json b/src/_locales/en_US/messages.json index 6dc747576f..459fc6a001 100644 --- a/src/_locales/en_US/messages.json +++ b/src/_locales/en_US/messages.json @@ -359,6 +359,26 @@ "message": "Privacy Policy", "description": "Shown at the bottom of the intro page." }, + "intro_pin_nudge": { + "message": "First, $START_SPAN_TAG$pin Privacy Badger to your toolbar$END_SPAN_TAG$ for easy access to the \"$DISABLE_FOR_SITE$\" button.", + "description": "Part of a Chrome-only overlay on the intro page", + "placeholders": { + "start_span_tag": { + "content": "" + }, + "disable_for_site": { + "content": "$1", + "example": "Disable for this site" + }, + "end_span_tag": { + "content": "" + } + } + }, + "intro_pin_instructions": { + "message": "To pin Privacy Badger's icon, click on the puzzle piece icon in your browser toolbar. Then, click on the pin icon next to Privacy Badger.", + "description": "Alt text for pinning instructions image. Shown on the Chrome-only overlay of the intro page." + }, "share_button_title_facebook": { "message": "Share on Facebook", "description": "Text shown when you hover over the social sharing buttons on the intro page." diff --git a/src/icons/close.svg b/src/icons/close.svg new file mode 100644 index 0000000000..770c9fdd3e --- /dev/null +++ b/src/icons/close.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/lib/i18n.js b/src/lib/i18n.js index e0eef24aff..6d4be15082 100644 --- a/src/lib/i18n.js +++ b/src/lib/i18n.js @@ -78,6 +78,17 @@ function setTextDirection() { ['.btn-silo', '.btn-silo div', '#allowlist-form > div > div > div', '#widget-site-exceptions-select-div', '#widget-site-exceptions-remove-button'].forEach((selector) => { toggle_css_value(selector, "float", "left", "right"); }); + } else if (document.location.pathname == "/skin/firstRun.html") { + $('#pin-nudge').css({ + right: 'unset', + left: '15px' + }); + $('#pin-image').css("transform", "scaleX(-1)"); + $('#dismiss-nudge').css({ + float: 'left', + right: 'unset', + left: '-5px' + }); } } diff --git a/src/skin/css/firstRun.css b/src/skin/css/firstRun.css index c63b40adb8..750fb2c6ba 100644 --- a/src/skin/css/firstRun.css +++ b/src/skin/css/firstRun.css @@ -410,7 +410,7 @@ header img { @media print, screen and (min-width: 40em) { header img { margin:1rem 0 0; - width:15rem; + width:12rem; } } header .title-bar h1 { @@ -648,6 +648,7 @@ header .title-bar h1 { visibility:visible; } } + /* fonts */ @font-face { font-family:'ChunkFive'; @@ -789,6 +790,72 @@ body { background-image:linear-gradient(#DFDFE6, #DFDFE6 30%, #fff 30%); padding:4rem 0; } + +#overlay { + width: 100%; + height: 100%; + z-index: 999; + background-color: #1f171769; + position: fixed; + top: 0; + left: 0; +} + +@keyframes bounce { + 0%, 20%, 50%, 80%, 100% {transform: translateY(0);} + 40% {transform: translateY(-20px);} + 60% {transform: translateY(-5px);} +} + +#dismiss-nudge { + float: right; + padding-bottom: 5px; + margin: 5px; + position: relative; + top: -5px; + right: -5px; +} + +#dismiss-nudge img { + height: 20px; +} + +#dismiss-nudge:hover img, #dismiss-nudge:focus img { + /* Calculated with https://codepen.io/sosuke/pen/Pjoqqp to match #F06A0A */ + filter: invert(63%) sepia(46%) saturate(6632%) hue-rotate(356deg) brightness(95%) contrast(98%); +} + +#pin-nudge-text { + line-height: 1.5; + width: 275px; + font-size: 17px; +} + +#pin-nudge-cta { + font-family:"OpenSans-Bold",sans-serif; +} + +#pin-image { + width: 275px; + border-radius: 8px; +} + +#pin-nudge { + background-color: #DFDFE6; + position: fixed; + top: 15px; + right: 15px; + padding: 25px; + z-index: 1000; + border-radius: 8px; + box-shadow: rgba(0, 0, 0, 0.25) 0px 0px 20px, rgba(0, 0, 0, 0.35) 0px 25px 30px; + animation: bounce 2s ease 1; + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; +} + #pb-privacy-policy, #pb-privacy-policy a { color:#707070; font-family:"OpenSans-Light",sans-serif; @@ -841,4 +908,17 @@ body { border-left: 0.4275rem solid #555; color: #fff; } + + #pin-nudge { + background-color: #555; + } + + #dismiss-nudge img { + filter: invert(0.85); + } + + #dismiss-nudge:hover img, #dismiss-nudge:focus img { + /* Calculated with https://codepen.io/sosuke/pen/Pjoqqp to match #F06A0A */ + filter: invert(63%) sepia(46%) saturate(6632%) hue-rotate(356deg) brightness(95%) contrast(98%);; + } } diff --git a/src/skin/firstRun.html b/src/skin/firstRun.html index ff62aae634..1a9bc37f93 100644 --- a/src/skin/firstRun.html +++ b/src/skin/firstRun.html @@ -28,6 +28,18 @@

+ + + +
diff --git a/src/skin/images/pinning-instructions.png b/src/skin/images/pinning-instructions.png new file mode 100644 index 0000000000000000000000000000000000000000..3855d9203dfb6391b548104ed92ecec855f9e4eb GIT binary patch literal 28543 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 literal 0 HcmV?d00001 diff --git a/src/skin/js/firstRun.js b/src/skin/js/firstRun.js index ef508e38b6..7a36fe5a16 100644 --- a/src/skin/js/firstRun.js +++ b/src/skin/js/firstRun.js @@ -15,4 +15,64 @@ $(function () { }); } }); + + function hideNudgeOverlay() { + $("body").css('overflow', 'auto'); + $("#pin-nudge").fadeOut(); + $("#overlay").fadeOut(); + document.removeEventListener("click", clickHandler); + document.removeEventListener("keydown", keydownHandler); + } + + function clickHandler(e) { + // Hide the pin nudge when a user clicks outside the popup + if (!document.getElementById('pin-nudge').contains(e.target)) { + hideNudgeOverlay(); + } + } + + function keydownHandler(e) { + // Hide the pin nudge when a user presses 'Esc' + if (e.keyCode === 27) { + hideNudgeOverlay(); + } else if (e.keyCode === 9) { + // Trap focus within the popup + $("#dismiss-nudge").trigger("focus"); + e.preventDefault(); + } + } + + // Don't show the pin nudge in Firefox because extensions are pinned automatically + // chrome.action is only available in MV3 and chrome.browserAction is only available in <= MV2 + // chrome.browserAction.getUserSettings doesn't exist in MV2 but does in Firefox + let is_chromium_mv3 = !!chrome.action; + let is_chromium_mv2 = chrome.browserAction && !chrome.browserAction.getUserSettings; + if (is_chromium_mv2 || is_chromium_mv3) { + $("#pin-nudge-text").html(chrome.i18n.getMessage("intro_pin_nudge", [chrome.i18n.getMessage("popup_disable_for_site")])); + $("#pin-nudge").show(); + $("#overlay").show(); + $("body").css('overflow', 'hidden'); + document.addEventListener("click", clickHandler); + document.addEventListener("keydown", keydownHandler); + } + + $("#dismiss-nudge").on("click", function (e) { + e.preventDefault(); + hideNudgeOverlay(); + }); + + let interval_id; + // Auto-dismiss the nudge once user pins Privacy Badger + async function checkIsPinned() { + let userSettings = await chrome.action.getUserSettings(); + if (userSettings.isOnToolbar) { + hideNudgeOverlay(); + clearInterval(interval_id); + } + } + + // For Chromium, we can only check if PB is pinned in MV3 + if (is_chromium_mv3) { + interval_id = setInterval(() => checkIsPinned(), 1000); + } }); diff --git a/src/skin/popup.html b/src/skin/popup.html index 60cc3c6175..0aa0f950c5 100644 --- a/src/skin/popup.html +++ b/src/skin/popup.html @@ -39,10 +39,9 @@
- - - - + + +
From 08227453d38494ba0aa1d64410f4726aceaeae22 Mon Sep 17 00:00:00 2001 From: lenacohen Date: Tue, 2 Jul 2024 13:44:39 -0400 Subject: [PATCH 2/2] Fix layout bug with social share icons on narrow screens --- src/skin/css/firstRun.css | 2 +- src/skin/images/mastodon.svg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/skin/css/firstRun.css b/src/skin/css/firstRun.css index 750fb2c6ba..5dcad229e2 100644 --- a/src/skin/css/firstRun.css +++ b/src/skin/css/firstRun.css @@ -498,8 +498,8 @@ header .title-bar h1 { display:block; margin:2.5rem auto 2rem; padding-bottom:3rem; - width:94px; z-index:3; + width: 146px; } .share-links>a { position:relative; diff --git a/src/skin/images/mastodon.svg b/src/skin/images/mastodon.svg index 25d284c215..78e1a900c2 100644 --- a/src/skin/images/mastodon.svg +++ b/src/skin/images/mastodon.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file