Compare commits

...

2 Commits

Author SHA1 Message Date
Arkadiusz Wieczorek
534f9f3db6 Add minor UI fixes 2022-07-03 19:35:36 +02:00
Arkadiusz Wieczorek
9a1287c35b Fix styling for mail and generating images, add copy button, add images 2022-07-03 14:28:42 +02:00
9 changed files with 133 additions and 61 deletions

View File

@ -29,10 +29,13 @@ h1 {
} }
&__content { &__content {
height: 70vh; max-height: 50vh;
overflow-y: scroll; overflow-y: scroll;
padding: 1rem 2rem; padding: 1rem 2rem;
color: $black-color; color: $black-color;
a {
color: $ultra-black-color;
}
} }
h2 { h2 {
@ -44,3 +47,12 @@ h1 {
font-size: calc(14 / 16 * 1rem); font-size: calc(14 / 16 * 1rem);
} }
} }
.greeting-text {
font-size: 1rem;
a {
color: $ultra-black-color;
font-weight: 700;
}
}

View File

@ -5,7 +5,7 @@ import { Explainers } from './explainers';
import { ParsedAnswers } from './parse-answers'; import { ParsedAnswers } from './parse-answers';
import { v } from './verbs'; import { v } from './verbs';
import './email-content.scss'; import './email-content.scss';
import { Fragment } from 'react'; import { Fragment, useState } from 'react';
declare var PLUGIN_NAME: string; declare var PLUGIN_NAME: string;
declare var PLUGIN_URL: string; declare var PLUGIN_URL: string;
@ -28,18 +28,26 @@ export default function EmailContent({
.reduce((a, b) => a.concat(b), []) .reduce((a, b) => a.concat(b), [])
) )
).map((explainer_key) => Explainers[explainer_key]); ).map((explainer_key) => Explainers[explainer_key]);
const [copied, setCopy] = useState<boolean>(false);
function copyTextToClipboard() {
// Should be changed in the future to Clipboard API (https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/write#browser_compatibility)
let r = document.createRange();
r.selectNode(document.querySelector('.mail-container__content'));
window.getSelection().addRange(r);
document.execCommand('copy');
window.getSelection().removeAllRanges();
setCopy(true);
}
return ( return (
<Fragment> <Fragment>
<div className="generator-container"> <div className="generator-container">
<h1>Treść maila</h1> <h1>Treść maila</h1>
<div className="mail-container"> <div className="mail-container">
<div className="mail-container__header"> <div className="mail-container__header">
<div className="mail-container__header--control"> <div className="mail-container__header--control"></div>
<button>Kopiuj</button>
</div>
</div> </div>
{/* <pre>{JSON.stringify(answers, null, 3)}</pre> */}
<article className="mail-container__content"> <article className="mail-container__content">
<p>Dzień dobry,</p> <p>Dzień dobry,</p>
<p> <p>
@ -69,6 +77,23 @@ export default function EmailContent({
</p> </p>
</article> </article>
</div> </div>
<div className="buttons-container">
<button className="sv_next_btn" onClick={() => copyTextToClipboard()}>
{copied ? 'Skopiowano!' : 'Kopiuj treść wiadomości'}
</button>
</div>
{copied ? (
<section className="greeting-text">
<strong>Przed Tobą ostatni krok! 😊</strong>
<p>
<a href="mailto:?subject=Zapytanie o przetwarzanie moich danych osobowych przez Państwa stronę">
Przejdź do swojego klienta pocztowego
</a>
, załącz zrzuty ekranów, wklej treść wiadomości i wyślij do
administratorów witryny {visited_url.split('/').slice(0, 3).join('/')}.
</p>
</section>
) : null}
</div> </div>
</Fragment> </Fragment>
); );

View File

@ -220,14 +220,15 @@ export default function generateSurveyQuestions(hosts: string[]) {
type: 'html', type: 'html',
visibleIf: visibleIf:
'{is_incognito_different} != "no" and ({popup_type} = "none" or {popup_type} = "page") ', '{is_incognito_different} != "no" and ({popup_type} = "none" or {popup_type} = "page") ',
html: /* HTML */ `Jeżeli w trybie incognito widzisz więcej okienek z html: /* HTML */ `Jeżeli w trybie incognito {widzisz} więcej okienek z
informacjami o przetwarzaniu danych osobowych, wykonaj analizę w informacjami o przetwarzaniu danych osobowych, {wykonaj} analizę w
normalnym trybie ponownie - ale najpierw usuń pliki cookies tej strony. normalnym trybie ponownie - ale najpierw {usuń} pliki cookies tej
strony.
<a <a
href="https://support.mozilla.org/pl/kb/usuwanie-ciasteczek-i-danych-stron-firefox?redirectslug=usuwanie-ciasteczek&redirectlocale=pl" href="https://support.mozilla.org/pl/kb/usuwanie-ciasteczek-i-danych-stron-firefox?redirectslug=usuwanie-ciasteczek&redirectlocale=pl"
target="_blank" target="_blank"
> >
Zobacz, jak to zrobić {Zobacz}, jak to zrobić
</a>`, </a>`,
}, },
{ {
@ -285,7 +286,7 @@ export default function generateSurveyQuestions(hosts: string[]) {
}, },
{ {
value: 'yes', value: 'yes',
text: 'Nie. Muszę wykonać więcej czynności aby odmówić wszystkich zgód, albo opcja niewyrażenia zgody jest mało widoczna.', text: 'Nie. {Muszę} wykonać więcej czynności aby odmówić wszystkich zgód, albo opcja niewyrażenia zgody jest mało widoczna.',
}, },
], ],
}, },
@ -339,7 +340,7 @@ export default function generateSurveyQuestions(hosts: string[]) {
name: 'administrator_identity_available_before_choice', name: 'administrator_identity_available_before_choice',
isRequired: true, isRequired: true,
visibleIf: '{popup_type} = "some_choice"', visibleIf: '{popup_type} = "some_choice"',
title: 'Czy przed podjęciem wyboru dot. {Twoich} danych masz możliwość poznać tożsamość administratora strony?', title: 'Czy przed podjęciem wyboru dot. {Twoich} danych {masz} możliwość poznać tożsamość administratora strony?',
choices: [ choices: [
{ {
value: 'yes', value: 'yes',
@ -363,10 +364,10 @@ export default function generateSurveyQuestions(hosts: string[]) {
name: 'policy_readable', name: 'policy_readable',
isRequired: true, isRequired: true,
choices: [ choices: [
{ value: 'yes', text: 'dostępna i czytelna' }, { value: 'yes', text: 'Dostępna i czytelna' },
{ {
value: 'entirely_obscured_by_popup', value: 'entirely_obscured_by_popup',
text: 'dostępna, ale nieczytelna. Zasłania ją całkowicie lub prawie całkowicie popup o RODO lub nie można się do niej doklikać bez podjęcia wyboru w okienku', text: 'Dostępna, ale nieczytelna. Zasłania ją całkowicie lub prawie całkowicie popup o RODO lub nie można się do niej doklikać bez podjęcia wyboru w okienku',
}, },
{ {
value: 'cant_find', value: 'cant_find',

View File

@ -18,7 +18,6 @@ body {
nav { nav {
position: sticky; position: sticky;
top: 0; top: 0;
// background-color: #fff;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: left; justify-content: left;
@ -53,6 +52,7 @@ h1 {
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 1; z-index: 1;
user-select: none;
.webpage-metadata { .webpage-metadata {
word-break: break-all; word-break: break-all;

View File

@ -11,16 +11,26 @@ h2 {
} }
.images { .images {
display: flex; display: grid;
grid-template-columns: 1fr 1fr 1fr;
width: 100%;
grid-gap: 1rem; grid-gap: 1rem;
flex-wrap: wrap; margin: 2rem 0 1rem;
margin: 2rem 0; max-height: 45vh;
overflow-y: scroll;
overflow-x: clip;
z-index: 1;
position: relative;
} }
.generator-container { .generator-container {
max-width: 100ex; max-width: 100ex;
margin: 0 auto; margin: 0 auto;
font-size: calc(14 / 16 * 1rem); font-size: calc(14 / 16 * 1rem);
a {
color: $ultra-black-color;
}
} }
.buttons-container { .buttons-container {
@ -39,18 +49,16 @@ h2 {
} }
.browser { .browser {
height: 9.667rem; height: 8.667rem;
width: 16rem;
font-weight: 800 !important; font-weight: 800 !important;
// box-shadow: rgba(12, 12, 13, 0.1) 0px 1px 4px 0px;
color: $disabled-grey !important; color: $disabled-grey !important;
border: 1px solid $disabled-grey; border: 1px solid $disabled-grey;
background-image: linear-gradient(to bottom, $icd-rentgen-color 20%, #fff 20%, #fff 100%); background-image: linear-gradient(to bottom, $icd-rentgen-color 20%, #fff 20%, #fff 100%);
animation: xray 2s cubic-bezier(0, 1.43, 0.39, 1.43) infinite; animation: xray 2s cubic-bezier(0, 1.43, 0.39, 1.43) infinite;
&--filled { &--filled {
background-size: contain; background-size: 100%;
background-position-y: 18px; background-position-y: 19px;
animation: none; animation: none;
.browser__header { .browser__header {
@ -83,6 +91,9 @@ h2 {
font-weight: 400; font-weight: 400;
padding-left: 0.25rem; padding-left: 0.25rem;
color: #000; color: #000;
overflow: visible;
word-break: break-all;
inline-size: 10rem;
} }
&--controls { &--controls {
@ -92,6 +103,6 @@ h2 {
} }
&__content { &__content {
height: 7.667rem; height: 6.667rem;
} }
} }

View File

@ -59,6 +59,10 @@ export default function ScreenshotGenerator({
await new Promise((resolve) => setTimeout(resolve, 1000)); await new Promise((resolve) => setTimeout(resolve, 1000));
response = await (await pollTask(path)).json(); response = await (await pollTask(path)).json();
setImages((response as screenshotTask)?.images); setImages((response as screenshotTask)?.images);
document.querySelector('.images').scrollTo({
top: document.querySelector('.images').scrollHeight,
behavior: 'smooth',
});
} }
if (response.status === taskState.FINISHED) { if (response.status === taskState.FINISHED) {
@ -117,6 +121,7 @@ export default function ScreenshotGenerator({
setTaskId(urlArr[urlArr.length - 1]); setTaskId(urlArr[urlArr.length - 1]);
const response = await subscribeTask(task.url); const response = await subscribeTask(task.url);
setImages(response.images); setImages(response.images);
console.log('response.images', response.images);
console.log('output', response); console.log('output', response);
}} }}
> >
@ -128,15 +133,23 @@ export default function ScreenshotGenerator({
{mode === 'in_progress' || mode === 'finished' ? ( {mode === 'in_progress' || mode === 'finished' ? (
<Fragment> <Fragment>
<h1>Przygotowujemy zrzuty ekranów</h1> <h1>Przygotowanie zrzutów ekranów</h1>
<div className="container"> <div className="container">
<h2>To może chwilkę zająć</h2> {mode === 'in_progress' ? (
<p> <Fragment>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolore sint <h2>To może chwilkę zająć...</h2>
laudantium blanditiis aperiam quos expedita voluptatem iure, nam aliquam <p>
vel minus aliquid incidunt consequatur illo velit dolorem error Nasz serwer właśnie odwiedza wskazaną przez Ciebie stronę
exercitationem tempora? i przygotowuje zrzuty ekranów narzędzi deweloperskich.
</p> </p>
</Fragment>
) : null}
{mode === 'finished' ? (
<Fragment>
<h2>Gotowe!</h2>
<p>Zrzuty ekranów narzędzi deweloperskich gotowe do pobrania.</p>
</Fragment>
) : null}
<div className="images"> <div className="images">
{images.map((screenshot) => { {images.map((screenshot) => {
@ -150,7 +163,7 @@ export default function ScreenshotGenerator({
> >
<div className="browser__header"> <div className="browser__header">
<div className="browser__header--address-bar"> <div className="browser__header--address-bar">
{screenshot.url} {screenshot.url.split('-').slice(-2).join('-')}
</div> </div>
<div className="browser__header--controls">···</div> <div className="browser__header--controls">···</div>
</div> </div>
@ -172,9 +185,11 @@ export default function ScreenshotGenerator({
</div> </div>
<div className="buttons-container"> <div className="buttons-container">
{mode === 'finished' ? ( {mode === 'finished' ? (
<button className="sv_next_btn" onClick={() => downloadFiles()}> <Fragment>
Pobierz zrzuty ekranów <button className="sv_next_btn" onClick={() => downloadFiles()}>
</button> Pobierz zrzuty ekranów i przejdź dalej
</button>
</Fragment>
) : null} ) : null}
</div> </div>
</Fragment> </Fragment>

View File

@ -1,37 +1,42 @@
const words = { const words = {
zrobiłem: ['zrobiłem', 'zrobiłam', 'zrobiłom', 'zrobiliśmy'], ciebie: ['ciebie', 'ciebie', 'ciebie', 'was'],
szukałem: ['szukałem', 'szukałam', 'szukałom', 'szukaliśmy'], dokonałeś: ['dokonałeś', 'dokonałaś', 'dokonałoś', 'dokonaliście'],
znalazłem: ['znalazłem', 'znalazłam', 'znalazłom', 'znaleźliśmy'], jesteś: ['jesteś', 'jesteś', 'jesteś', 'jesteście'],
kliknąłem: ['kliknąłem', 'kliknęłam', 'klinkęłom', 'kliknęliśmy'],
mam: ['mam', 'mam', 'mam', 'mamy'],
masz: ['masz', 'masz', 'masz', 'macie'],
mnie: ['mnie', 'mnie', 'mnie', 'nas'],
moich: ['moich', 'moich', 'moich', 'naszych'],
moje: ['moje', 'moje', 'moje', 'nasze'], moje: ['moje', 'moje', 'moje', 'nasze'],
mojej: ['mojej', 'mojej', 'mojej', 'naszej'], mojej: ['mojej', 'mojej', 'mojej', 'naszej'],
wyraziłem: ['wyraziłem', 'wyraziłam', 'wyraziłom', 'wyraziliśmy'], muszę: ['muszę', 'muszę', 'muszę', 'musimy'],
kliknąłem: ['kliknąłem', 'kliknęłam', 'klinkęłom', 'kliknęliśmy'],
odwiedzałeś: ['odwiedzałeś', 'odwiedzałaś', 'odwiedzałoś', 'odwiedzaliście'],
wyraziłeś: ['wyraziłeś', 'wyraziłaś', 'wyraziłoś', 'wyraziliście'],
jesteś: ['jesteś', 'jesteś', 'jesteś', 'jesteście'],
twoich: ['twoich', 'twoich', 'twoich', 'waszych'],
tobie: ['tobie', 'tobie', 'tobie', 'wam'],
twojej: ['twojej', 'twojej', 'twojej', 'waszej'],
odkliknąłeś: ['odkliknąłeś', 'odkliknęłaś', 'odklikęłoś', 'odkliknęliście'], odkliknąłeś: ['odkliknąłeś', 'odkliknęłaś', 'odklikęłoś', 'odkliknęliście'],
odmówiłem: ['odmówiłem', 'odmówiłam', 'odmówiłom', 'odmówiliśmy'],
odmówiłeś: ['odmówiłeś', 'odmówiłaś', 'odmówiłoś', 'odmówiliście'],
odwiedzałeś: ['odwiedzałeś', 'odwiedzałaś', 'odwiedzałoś', 'odwiedzaliście'],
odwiedziłem: ['odwiedziłem', 'odwiedziłam', 'odwiedziłom', 'odwiedziliśmy'],
odznaczyłem: ['odznaczyłem', 'odznaczyłam', 'odznaczyłom', 'odznaczyliśmy'],
otwórz: ['otwórz', 'otwórz', 'otwórz', 'otwórzcie'], otwórz: ['otwórz', 'otwórz', 'otwórz', 'otwórzcie'],
widzisz: ['widzisz', 'widzisz', 'widzisz', 'widzicie'], podjąłem: ['podjąłem', 'podjęłam', 'podjęłom', 'podjęliśmy'],
podjąłeś: ['podjąłeś', 'podjęłaś', 'podjęłoś', 'podjęliście'],
proszę: ['proszę', 'proszę', 'proszę', 'prosimy'],
szukałem: ['szukałem', 'szukałam', 'szukałom', 'szukaliśmy'],
tobie: ['tobie', 'tobie', 'tobie', 'wam'],
twoich: ['twoich', 'twoich', 'twoich', 'waszych'],
twojej: ['twojej', 'twojej', 'twojej', 'waszej'],
usuń: ['usuń', 'usuń', 'usuń', 'usuńcie'],
widzę: ['widzę', 'widzę', 'widzę', 'widzimy'], widzę: ['widzę', 'widzę', 'widzę', 'widzimy'],
widziałem: ['widziałem', 'widziałam', 'widziałom', 'widzieliśmy'], widziałem: ['widziałem', 'widziałam', 'widziałom', 'widzieliśmy'],
odwiedziłem: ['odwiedziłem', 'odwiedziłam', 'odwiedziłom', 'odwiedziliśmy'], widzisz: ['widzisz', 'widzisz', 'widzisz', 'widzicie'],
mam: ['mam', 'mam', 'mam', 'mamy'], wykonaj: ['wykonaj', 'wykonaj', 'wykonaj', 'wykonajcie'],
podjąłeś: ['podjąłeś', 'podjęłaś', 'podjęłoś', 'podjęliście'], wyraziłem: ['wyraziłem', 'wyraziłam', 'wyraziłom', 'wyraziliśmy'],
wyraziłeś: ['wyraziłeś', 'wyraziłaś', 'wyraziłoś', 'wyraziliście'],
zamknąłem: ['zamknąłem', 'zamknęłom', 'zamknęłom', 'zamknęliśmy'], zamknąłem: ['zamknąłem', 'zamknęłom', 'zamknęłom', 'zamknęliśmy'],
zobacz: ['zobacz', 'zobacz', 'zobacz', 'zobaczcie'],
zamknąłeś: ['zamknąłeś', 'zamknęłaś', 'zamknęłoś', 'zamknęliście'], zamknąłeś: ['zamknąłeś', 'zamknęłaś', 'zamknęłoś', 'zamknęliście'],
znalazłem: ['znalazłem', 'znalazłam', 'znalazłom', 'znaleźliśmy'],
zrobiłem: ['zrobiłem', 'zrobiłam', 'zrobiłom', 'zrobiliśmy'],
zwracam: ['zwracam', 'zwracam', 'zwracam', 'zwracamy'], zwracam: ['zwracam', 'zwracam', 'zwracam', 'zwracamy'],
moich: ['moich', 'moich', 'moich', 'naszych'],
ciebie: ['ciebie', 'ciebie', 'ciebie', 'was'],
mnie: ['mnie', 'mnie', 'mnie', 'nas'],
podjąłem: ['podjąłem', 'podjęłam', 'podjęłom', 'podjęliśmy'],
dokonałeś: ['dokonałeś', 'dokonałaś', 'dokonałoś', 'dokonaliście'],
odmówiłeś: ['odmówiłeś', 'odmówiłaś', 'odmówiłoś', 'odmówiliście'],
odznaczyłem: ['odznaczyłem', 'odznaczyłam', 'odznaczyłom', 'odznaczyliśmy'],
proszę: ['proszę', 'proszę', 'proszę', 'prosimy'],
odmówiłem: ['odmówiłem', 'odmówiłam', 'odmówiłom', 'odmówiliśmy'],
} as { [key: string]: string[] }; } as { [key: string]: string[] };
export default words; export default words;

View File

@ -12,6 +12,7 @@
top: 0; top: 0;
background: #ffffff; background: #ffffff;
z-index: 1; z-index: 1;
user-select: none;
.webpage-metadata { .webpage-metadata {
word-break: break-all; word-break: break-all;

View File

@ -3,6 +3,7 @@
body { body {
width: 400px; width: 400px;
overflow-x: hidden; overflow-x: hidden;
user-select: none;
} }
.toolbar { .toolbar {
@ -19,6 +20,7 @@ body {
top: 0; top: 0;
background: #ffffff; background: #ffffff;
z-index: 1; z-index: 1;
user-select: none;
.webpage-metadata { .webpage-metadata {
word-break: break-all; word-break: break-all;