Skip to content

Commit a2048b8

Browse files
committed
Add privacyPolicyNewWindow boolean in config for a11y
1 parent e13e3d3 commit a2048b8

12 files changed

Lines changed: 72 additions & 17 deletions

File tree

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ var orejimeConfig = {
8282
// You must provide a link to your privacy policy page for GDPR compliance.
8383
privacyPolicyUrl: '',
8484

85+
// [optional]
86+
// Opens the privacy policy link in a new window (target="_blank" and rel="noopener noreferrer").
87+
privacyPolicyNewWindow: false,
88+
8589
// The list of third-party purposes that Orejime will manage for you.
8690
// The purposes will appear in the modal in the same order as defined here.
8791
purposes: [

src/ui/components/ContextualNoticeContainer.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ const ContextualNoticeContainer = ({
4747
purpose={purpose}
4848
data={data}
4949
privacyPolicyUrl={config.privacyPolicyUrl}
50+
privacyPolicyNewWindow={config.privacyPolicyNewWindow}
5051
onAccept={() => {
5152
manager.setConsent(purpose.id, true);
5253
setIsBeingDisabled(true);

src/ui/components/Main.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ const Main = ({apiRef}: MainProps) => {
5252
needsUpdate={manager.needsUpdate()}
5353
purposeTitles={config.purposes.map(({title}) => title)}
5454
privacyPolicyUrl={config.privacyPolicyUrl}
55+
privacyPolicyNewWindow={config.privacyPolicyNewWindow}
5556
logo={config.logo}
5657
onConfigure={openModal}
5758
onAccept={() => {
@@ -74,6 +75,7 @@ const Main = ({apiRef}: MainProps) => {
7475
isForced={config.forceModal && manager.isDirty()}
7576
needsUpdate={manager.needsUpdate()}
7677
privacyPolicyUrl={config.privacyPolicyUrl}
78+
privacyPolicyNewWindow={config.privacyPolicyNewWindow}
7779
onClose={closeModal}
7880
onSave={commit}
7981
>

src/ui/components/types/Banner.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export interface BannerProps {
66
needsUpdate: boolean;
77
purposeTitles: string[];
88
privacyPolicyUrl: string;
9+
privacyPolicyNewWindow?: boolean;
910
logo?: ImageDescriptor;
1011
onAccept: () => void;
1112
onDecline: () => void;

src/ui/components/types/ContextualNotice.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export interface ContextualNoticeProps<Data extends ContextualNoticeOptions> {
99
purpose: Purpose;
1010
data: Data;
1111
privacyPolicyUrl: string;
12+
privacyPolicyNewWindow?: boolean;
1213
onAccept: () => void;
1314
}
1415

src/ui/components/types/Modal.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export interface ModalProps {
44
isForced: boolean;
55
needsUpdate: boolean;
66
privacyPolicyUrl: string;
7+
privacyPolicyNewWindow?: boolean;
78
onClose: () => void;
89
onSave: () => void;
910
children: ComponentChildren;

src/ui/themes/dsfr/Banner.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const Banner: BannerComponent = ({
88
isHidden,
99
purposeTitles,
1010
privacyPolicyUrl,
11+
privacyPolicyNewWindow,
1112
onAccept,
1213
onDecline,
1314
onConfigure
@@ -28,7 +29,17 @@ const Banner: BannerComponent = ({
2829
<strong key="purposes">{purposeTitles.join(', ')}</strong>
2930
),
3031
privacyPolicy: (
31-
<a key="privacyPolicyUrl" href={privacyPolicyUrl}>
32+
<a
33+
key="privacyPolicyUrl"
34+
href={privacyPolicyUrl}
35+
{...(privacyPolicyNewWindow
36+
? {
37+
target: '_blank',
38+
rel: 'noopener noreferrer',
39+
title: t.misc.newWindowTitle
40+
}
41+
: {})}
42+
>
3243
{t.banner.privacyPolicyLabel}
3344
</a>
3445
)

src/ui/themes/dsfr/Modal.tsx

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const Modal: ModalComponent = ({
88
isForced,
99
needsUpdate,
1010
privacyPolicyUrl,
11+
privacyPolicyNewWindow,
1112
onClose,
1213
onSave,
1314
children
@@ -55,17 +56,26 @@ const Modal: ModalComponent = ({
5556
) : null}
5657

5758
<p>
58-
{template(t.modal.description, {
59-
privacyPolicy: (
60-
<a
61-
key="privacyPolicyLink"
62-
href={privacyPolicyUrl}
63-
onClick={onClose}
64-
>
65-
{t.modal.privacyPolicyLabel}
66-
</a>
67-
)
68-
})}
59+
{template(t.modal.description, {
60+
privacyPolicy: (
61+
<a
62+
key="privacyPolicyLink"
63+
href={privacyPolicyUrl}
64+
{...(!privacyPolicyNewWindow
65+
? {onClick: onClose}
66+
: {})}
67+
{...(privacyPolicyNewWindow
68+
? {
69+
target: '_blank',
70+
rel: 'noopener noreferrer',
71+
title: t.misc.newWindowTitle
72+
}
73+
: {})}
74+
>
75+
{t.modal.privacyPolicyLabel}
76+
</a>
77+
)
78+
})}
6979
</p>
7080
</div>
7181

src/ui/themes/standard/Banner.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const Banner: BannerComponent = ({
99
needsUpdate,
1010
purposeTitles,
1111
privacyPolicyUrl,
12+
privacyPolicyNewWindow,
1213
logo,
1314
onAccept: onSaveRequest,
1415
onDecline: onDeclineRequest,
@@ -61,6 +62,13 @@ const Banner: BannerComponent = ({
6162
key="privacyPolicyLink"
6263
className="orejime-Banner-privacyPolicyLink"
6364
href={privacyPolicyUrl}
65+
{...(privacyPolicyNewWindow
66+
? {
67+
target: '_blank',
68+
rel: 'noopener noreferrer',
69+
title: t.misc.newWindowTitle
70+
}
71+
: {})}
6472
>
6573
{t.banner.privacyPolicyLabel}
6674
</a>

src/ui/themes/standard/ContextualNotice.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ const ContextualNotice: ContextualNoticeComponent = ({
99
purpose,
1010
data,
1111
onAccept,
12-
privacyPolicyUrl
12+
privacyPolicyUrl,
13+
privacyPolicyNewWindow
1314
}) => {
1415
const t = useTranslations();
1516
const {titleLevel} = data;
@@ -18,7 +19,13 @@ const ContextualNotice: ContextualNoticeComponent = ({
1819
const templateProps = {
1920
purpose: purpose.title,
2021
privacyPolicy: (
21-
<a key="privacyPolicyUrl" href={privacyPolicyUrl}>
22+
<a
23+
key="privacyPolicyUrl"
24+
href={privacyPolicyUrl}
25+
{...(privacyPolicyNewWindow
26+
? {target: '_blank', rel: 'noopener noreferrer', title: t.misc.newWindowTitle}
27+
: {})}
28+
>
2229
{t.contextual.privacyPolicyLabel}
2330
</a>
2431
)

0 commit comments

Comments
 (0)