Skip to content

Commit f92b557

Browse files
authored
Merge branch 'main' into jm/feat-mparticle-headers
2 parents 0d25675 + 262f6ac commit f92b557

File tree

11 files changed

+70
-61
lines changed

11 files changed

+70
-61
lines changed

ab-testing/config/abTests.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@ import type { ABTest } from "./types.ts";
2020
*/
2121

2222
const ABTests: ABTest[] = [
23+
{
24+
name: "webx-dark-mode-web",
25+
description: "Dark mode accessibility feature test on web",
26+
owners: ["dotcom.platform@theguardian.com"],
27+
status: "ON",
28+
expirationDate: "2027-04-09",
29+
type: "server",
30+
audienceSize: 0 / 100,
31+
groups: ["enable"],
32+
shouldForceMetricsCollection: false,
33+
},
2334
{
2435
name: "commercial-prebid-v10",
2536
description: "Testing Prebid.js v10 integration on DCR",

ab-testing/config/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ type AllSpace = Map<string, FastlyTestParams[]>;
66

77
type Team =
88
| "commercial"
9+
// WebX in the canonical name for the team, when the last test using webex expires we should remove webex from this union type
910
| "webex"
11+
| "webx"
1012
| "thefilter"
1113
| "fronts-and-curation"
1214
| "growth";

dotcom-rendering/src/components/Accessibility.importable.tsx

Lines changed: 26 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { css } from '@emotion/react';
2-
import { isUndefined, removeCookie, setCookie, storage } from '@guardian/libs';
2+
import { isUndefined, storage } from '@guardian/libs';
33
import { article17, palette } from '@guardian/source/foundations';
44
import { type SetStateAction, useEffect, useState } from 'react';
55
import { useConfig } from './ConfigContext';
@@ -19,10 +19,6 @@ const bold = css`
1919
font-weight: bold;
2020
`;
2121

22-
// This is hard coded, and must be changed if the experiment bucket changes
23-
// https://github.com/guardian/frontend/blob/09f49b80/common/app/experiments/Experiments.scala#L57
24-
const darkModeCookieName = 'X-GU-Experiment-0perc-D';
25-
2622
const PreferenceToggle = ({
2723
label,
2824
checked,
@@ -90,30 +86,6 @@ export const Accessibility = () => {
9086
true,
9187
);
9288

93-
const [shouldParticipate, setParticipate] =
94-
useState<boolean>(darkModeAvailable);
95-
96-
useEffect(() => {
97-
if (shouldParticipate) {
98-
setCookie({
99-
name: darkModeCookieName,
100-
value: 'true',
101-
});
102-
} else {
103-
removeCookie({ name: darkModeCookieName });
104-
}
105-
106-
const timeout = setTimeout(() => {
107-
// we must reload the page for the preference to take effect,
108-
// as this relies on a server-side test & cookie combination
109-
if (shouldParticipate !== darkModeAvailable) {
110-
window.location.reload();
111-
}
112-
}, 1200);
113-
114-
return () => clearTimeout(timeout);
115-
}, [shouldParticipate, darkModeAvailable]);
116-
11789
const togglePreference = (
11890
preferenceCallback: (value: SetStateAction<boolean>) => void,
11991
): void => {
@@ -154,29 +126,36 @@ export const Accessibility = () => {
154126

155127
<br />
156128

157-
<fieldset css={formStyle}>
129+
<div css={formStyle}>
158130
<p>
159131
We offer beta support for a dark colour scheme on the
160132
web. The colour scheme preference will follow your
161133
system settings.
162134
</p>
163-
<label>
164-
<input
165-
type="checkbox"
166-
checked={shouldParticipate}
167-
onChange={(e) => {
168-
setParticipate(e.target.checked);
169-
}}
170-
data-link-name="prefers-colour-scheme"
171-
/>
172-
<span css={bold}>
173-
Participate in the dark colour scheme beta{' '}
174-
</span>
175-
{shouldParticipate
176-
? ' Untick this to opt out (browser will refresh)'
177-
: ' Tick this to opt in (browser will refresh)'}
178-
</label>
179-
</fieldset>
135+
{darkModeAvailable ? (
136+
<>
137+
<p css={bold}>
138+
You are currently participating in the dark
139+
colour scheme beta.
140+
</p>
141+
<a href="/ab-tests/opt-out/webx-dark-mode-web:enable">
142+
Click here to opt out (this will redirect you to
143+
the homepage)
144+
</a>
145+
</>
146+
) : (
147+
<>
148+
<p css={bold}>
149+
You are not currently participating in the dark
150+
colour scheme beta.
151+
</p>
152+
<a href="/ab-tests/opt-in/webx-dark-mode-web:enable">
153+
Click here to opt in (this will redirect you to
154+
the homepage)
155+
</a>
156+
</>
157+
)}
158+
</div>
180159
</form>
181160
</FrontSection>
182161
);

dotcom-rendering/src/components/ArticlePage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ export const ArticlePage = (props: WebProps | AppProps) => {
179179
You can{' '}
180180
<a
181181
style={{ color: 'inherit' }}
182-
href="/opt/out/dark-mode-web"
182+
href="/ab-tests/opt-out/webx-dark-mode-web"
183183
>
184184
opt out anytime
185185
</a>{' '}

dotcom-rendering/src/components/FrontPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ export const FrontPage = ({ front, NAV }: Props) => {
112112
You can{' '}
113113
<a
114114
style={{ color: 'inherit' }}
115-
href="/opt/out/dark-mode-web"
115+
href="/ab-tests/opt-out/webx-dark-mode-web"
116116
>
117117
opt out anytime
118118
</a>{' '}

dotcom-rendering/src/components/SportDataPageComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ export const SportDataPageComponent = ({ sportData }: Props) => {
8585
You can{' '}
8686
<a
8787
style={{ color: 'inherit' }}
88-
href="/opt/out/dark-mode-web"
88+
href="/ab-tests/opt-out/webx-dark-mode-web"
8989
>
9090
opt out anytime
9191
</a>{' '}

dotcom-rendering/src/components/TagPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export const TagPage = ({ tagPage, NAV }: Props) => {
102102
You can{' '}
103103
<a
104104
style={{ color: 'inherit' }}
105-
href="/opt/out/dark-mode-web"
105+
href="/ab-tests/opt-out/webx-dark-mode-web"
106106
>
107107
opt out anytime
108108
</a>{' '}

dotcom-rendering/src/server/render.allEditorialNewslettersPage.web.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,14 @@ export const renderEditorialNewslettersPage = ({
2424
const title = newslettersPage.webTitle;
2525
const NAV = extractNAV(newslettersPage.nav);
2626

27+
const darkModeAvailable =
28+
newslettersPage.config.serverSideABTests?.['webx-dark-mode-web'] ===
29+
'enable';
30+
2731
// The newsletters page is currently only supported on Web
2832
const config = {
2933
renderingTarget: 'Web',
30-
darkModeAvailable: false,
34+
darkModeAvailable,
3135
assetOrigin: ASSET_ORIGIN,
3236
editionId: newslettersPage.editionId,
3337
} satisfies Config;

dotcom-rendering/src/server/render.article.web.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,14 @@ export const renderHtml = ({
5050
const title = decideTitle(article);
5151
const linkedData = frontendData.linkedData;
5252

53+
const darkModeAvailable =
54+
frontendData.config.serverSideABTests?.['webx-dark-mode-web'] ===
55+
'enable';
56+
5357
const renderingTarget = 'Web';
5458
const config: Config = {
5559
renderingTarget,
56-
darkModeAvailable:
57-
frontendData.config.abTests.darkModeWebVariant === 'variant',
60+
darkModeAvailable,
5861
assetOrigin: ASSET_ORIGIN,
5962
editionId: frontendData.editionId,
6063
};
@@ -232,16 +235,20 @@ export const renderBlocks = ({
232235
switches,
233236
keywordIds,
234237
abTests = {},
238+
serverSideABTests,
235239
edition,
236240
shouldHideAds,
237241
}: FEBlocksRequest): string => {
238242
const format: ArticleFormat = decideFormat(FEFormat);
239243

240244
const editionId = isEditionId(edition) ? edition : 'UK';
241245

246+
const darkModeAvailable =
247+
serverSideABTests?.['webx-dark-mode-web'] === 'enable';
248+
242249
const config: Config = {
243250
renderingTarget: 'Web',
244-
darkModeAvailable: abTests.darkModeWebVariant === 'variant',
251+
darkModeAvailable,
245252
assetOrigin: ASSET_ORIGIN,
246253
editionId,
247254
};

dotcom-rendering/src/server/render.front.web.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,13 @@ export const renderFront = ({
8383
const NAV = extractNAV(front.nav);
8484
const enhancedNAV = enhanceNav(NAV);
8585

86+
const darkModeAvailable =
87+
front.config.serverSideABTests?.['webx-dark-mode-web'] === 'enable';
88+
8689
// Fronts are not supported in Apps
8790
const config = {
8891
renderingTarget: 'Web',
89-
darkModeAvailable:
90-
front.config.abTests.darkModeWebVariant === 'variant',
92+
darkModeAvailable,
9193
assetOrigin: ASSET_ORIGIN,
9294
editionId: front.editionId,
9395
} satisfies Config;
@@ -182,11 +184,13 @@ export const renderTagPage = ({
182184
const NAV = extractNAV(tagPage.nav);
183185
const enhancedNAV = enhanceNav(NAV);
184186

187+
const darkModeAvailable =
188+
tagPage.config.serverSideABTests?.['webx-dark-mode-web'] === 'enable';
189+
185190
// Fronts are not supported in Apps
186191
const config: Config = {
187192
renderingTarget: 'Web',
188-
darkModeAvailable:
189-
tagPage.config.abTests.darkModeWebVariant === 'variant',
193+
darkModeAvailable,
190194
assetOrigin: ASSET_ORIGIN,
191195
editionId: tagPage.editionId,
192196
};

0 commit comments

Comments
 (0)