{
+const MediaLoader = ({ blocks, className, embedded }: Props) => {
const { lang, translations } = useContext(ServiceContext);
const { pageIdentifier } = useContext(EventTrackingContext);
const { enabled: adsEnabled } = useToggle('ads');
@@ -288,11 +274,7 @@ const MediaLoader = ({ blocks, className, embedded, uniqueId }: Props) => {
onClick={() => setShowPlaceholder(false)}
/>
) : (
-
+
)}
>
)}
diff --git a/src/app/components/MediaLoader/types.ts b/src/app/components/MediaLoader/types.ts
index 0955ef1af94..7361b9f34de 100644
--- a/src/app/components/MediaLoader/types.ts
+++ b/src/app/components/MediaLoader/types.ts
@@ -38,7 +38,6 @@ export type PlayerConfig = {
embedRights?: 'allowed';
liveRewind?: boolean;
simulcast?: boolean;
- warning?: string;
};
};
@@ -116,8 +115,6 @@ export type Player = {
parameters: { updatedAdTag: string },
): void;
load: () => void;
- play: () => void;
- pause: () => void;
bind: (event: string, callback: () => void) => void;
loadPlugin: (
pluginName: { [key: string]: string },
@@ -129,7 +126,6 @@ export type Player = {
};
},
) => void;
- player: { paused: () => boolean };
};
export type BumpType = {
@@ -244,26 +240,6 @@ export type LegacyMediaBlock = {
};
};
-export type MediaCollection = {
- type: 'liveMedia';
- model: {
- synopses: {
- short: string;
- };
- masterbrand: {
- networkName: string;
- };
- version: {
- vpid?: string;
- serviceID?: string;
- duration: string;
- status: string;
- };
- imageUrlTemplate: string;
- title: string;
- };
-};
-
export type MediaBlock =
| AresMediaBlock
| ClipMediaBlock
@@ -272,8 +248,7 @@ export type MediaBlock =
| OnDemandTVBlock
| OnDemandAudioBlock
| CaptionBlock
- | MediaOverrides
- | MediaCollection;
+ | MediaOverrides;
export type BuildConfigProps = {
id: string;
diff --git a/src/app/components/Metadata/index.tsx b/src/app/components/Metadata/index.tsx
index 897362ee250..646ac34754a 100644
--- a/src/app/components/Metadata/index.tsx
+++ b/src/app/components/Metadata/index.tsx
@@ -167,7 +167,6 @@ const MetadataContainer = ({
{isoLang &&
!isEnglishService &&
alternateLinksWsSites.map(renderAlternateLinks)}
- {/* eslint-disable-next-line react/no-invalid-html-attribute */}
{linkToAmpPage &&
}
{renderAppleItunesApp({
iTunesAppId,
diff --git a/src/app/components/MostRead/Amp/__snapshots__/index.test.tsx.snap b/src/app/components/MostRead/Amp/__snapshots__/index.test.tsx.snap
index 960161f3e20..4f905dfb623 100644
--- a/src/app/components/MostRead/Amp/__snapshots__/index.test.tsx.snap
+++ b/src/app/components/MostRead/Amp/__snapshots__/index.test.tsx.snap
@@ -164,7 +164,7 @@ exports[`AmpMostRead should render as expected 1`] = `
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -265,7 +265,7 @@ exports[`AmpMostRead should render as expected 1`] = `
dir="ltr"
>
{{title}}
diff --git a/src/app/components/MostRead/Canonical/Item/__snapshots__/index.test.tsx.snap b/src/app/components/MostRead/Canonical/Item/__snapshots__/index.test.tsx.snap
index dece06f2b07..5aeaf767868 100644
--- a/src/app/components/MostRead/Canonical/Item/__snapshots__/index.test.tsx.snap
+++ b/src/app/components/MostRead/Canonical/Item/__snapshots__/index.test.tsx.snap
@@ -208,7 +208,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -508,7 +508,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -539,7 +539,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -570,7 +570,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -601,7 +601,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -632,7 +632,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -663,7 +663,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -694,7 +694,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -725,7 +725,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -756,7 +756,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -787,7 +787,7 @@ exports[`MostReadItemWrapper should render ltr correctly with 10 items 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -1006,7 +1006,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -1306,7 +1306,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1337,7 +1337,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1368,7 +1368,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1399,7 +1399,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1430,7 +1430,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1461,7 +1461,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1492,7 +1492,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1523,7 +1523,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1554,7 +1554,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1585,7 +1585,7 @@ exports[`MostReadItemWrapper should render rtl correctly with 10 items 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1619,7 +1619,7 @@ exports[`MostReadLink should render ltr correctly 1`] = `
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -1681,7 +1681,7 @@ exports[`MostReadLink should render ltr correctly 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
@@ -1713,7 +1713,7 @@ exports[`MostReadLink should render rtl correctly 1`] = `
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -1775,7 +1775,7 @@ exports[`MostReadLink should render rtl correctly 1`] = `
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -1807,7 +1807,7 @@ exports[`MostReadLink should render with last updated date correctly 1`] = `
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -1897,7 +1897,7 @@ exports[`MostReadLink should render with last updated date correctly 1`] = `
dir="ltr"
>
Tins you need to know about Babcock University
diff --git a/src/app/components/MostRead/Canonical/Item/index.styles.ts b/src/app/components/MostRead/Canonical/Item/index.styles.ts
index 0e6214a5989..d82493cc2c7 100644
--- a/src/app/components/MostRead/Canonical/Item/index.styles.ts
+++ b/src/app/components/MostRead/Canonical/Item/index.styles.ts
@@ -2,7 +2,7 @@ import { css, Theme } from '@emotion/react';
import { grid } from '../../../../legacy/psammead/psammead-styles/src/detection';
const styles = {
- link: ({ palette, fontSizes, fontVariants }: Theme) =>
+ link: ({ spacings, palette, fontSizes, fontVariants }: Theme) =>
css({
...fontSizes.pica,
...fontVariants.serifMedium,
@@ -10,7 +10,7 @@ const styles = {
position: 'static',
color: palette.EBON,
textDecoration: 'none',
- display: 'inline-block',
+ marginBottom: `${spacings.FULL}rem`,
'&:hover, &:focus': {
textDecoration: 'underline',
diff --git a/src/app/components/MostRead/Canonical/Item/index.tsx b/src/app/components/MostRead/Canonical/Item/index.tsx
index 9b993182848..f85ef329874 100755
--- a/src/app/components/MostRead/Canonical/Item/index.tsx
+++ b/src/app/components/MostRead/Canonical/Item/index.tsx
@@ -54,6 +54,7 @@ export const MostReadLink = ({
css={[styles.link, size === 'default' && styles.defaultLink]}
href={href}
onClick={clickTrackerHandler}
+ className="focusIndicatorDisplayTableCell"
>
{title}
diff --git a/src/app/components/MostRead/Canonical/List/__snapshots__/index.test.tsx.snap b/src/app/components/MostRead/Canonical/List/__snapshots__/index.test.tsx.snap
index 2bf0c17cd08..cf68edc141e 100644
--- a/src/app/components/MostRead/Canonical/List/__snapshots__/index.test.tsx.snap
+++ b/src/app/components/MostRead/Canonical/List/__snapshots__/index.test.tsx.snap
@@ -273,7 +273,7 @@ exports[`MostReadList should render burmese most read with a one column layout 1
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -358,7 +358,7 @@ exports[`MostReadList should render burmese most read with a one column layout 1
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -389,7 +389,7 @@ exports[`MostReadList should render burmese most read with a one column layout 1
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -420,7 +420,7 @@ exports[`MostReadList should render burmese most read with a one column layout 1
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -451,7 +451,7 @@ exports[`MostReadList should render burmese most read with a one column layout 1
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -482,7 +482,7 @@ exports[`MostReadList should render burmese most read with a one column layout 1
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -779,7 +779,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -1084,7 +1084,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1115,7 +1115,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1146,7 +1146,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1177,7 +1177,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1208,7 +1208,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1239,7 +1239,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1270,7 +1270,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1301,7 +1301,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1332,7 +1332,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1363,7 +1363,7 @@ exports[`MostReadList should render with ltr bengali items with correct dir 1`]
dir="ltr"
>
ভিসা ফুরিয়ে যাওয়ায় ক্রিকেটার সাইফের জরিমানা
@@ -1648,7 +1648,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -1953,7 +1953,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -1984,7 +1984,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -2015,7 +2015,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -2046,7 +2046,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -2077,7 +2077,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -2108,7 +2108,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -2139,7 +2139,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -2170,7 +2170,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -2201,7 +2201,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -2232,7 +2232,7 @@ exports[`MostReadList should render with ltr burmese items with correct dir 1`]
dir="ltr"
>
အောက်စဖို့ဒ် ဆရာတော် ပါမောက္ခ ဒေါက်တာအရှင်ဓမ္မသာမိ
@@ -2449,7 +2449,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -2534,7 +2534,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -2565,7 +2565,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -2596,7 +2596,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -2627,7 +2627,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -2658,7 +2658,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -2689,7 +2689,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -2720,7 +2720,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -2751,7 +2751,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -2782,7 +2782,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -2813,7 +2813,7 @@ exports[`MostReadList should render with ltr news items with a max of one column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3098,7 +3098,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -3297,7 +3297,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3328,7 +3328,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3359,7 +3359,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3390,7 +3390,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3421,7 +3421,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3452,7 +3452,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3483,7 +3483,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3514,7 +3514,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3545,7 +3545,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3576,7 +3576,7 @@ exports[`MostReadList should render with ltr news items with a max of two column
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -3873,7 +3873,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -4178,7 +4178,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4209,7 +4209,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4240,7 +4240,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4271,7 +4271,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4302,7 +4302,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4333,7 +4333,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4364,7 +4364,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4395,7 +4395,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4426,7 +4426,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4457,7 +4457,7 @@ exports[`MostReadList should render with ltr news items with a multi column layo
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -4754,7 +4754,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -5059,7 +5059,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5090,7 +5090,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5121,7 +5121,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5152,7 +5152,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5183,7 +5183,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5214,7 +5214,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5245,7 +5245,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5276,7 +5276,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5307,7 +5307,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5338,7 +5338,7 @@ exports[`MostReadList should render with ltr news items with correct dir 1`] = `
dir="ltr"
>
Could a computer ever create better art than a human?
@@ -5635,7 +5635,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -5940,7 +5940,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -5971,7 +5971,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -6002,7 +6002,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -6033,7 +6033,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -6064,7 +6064,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -6095,7 +6095,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -6126,7 +6126,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -6157,7 +6157,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -6188,7 +6188,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
@@ -6219,7 +6219,7 @@ exports[`MostReadList should render with rtl persian items with correct dir 1`]
dir="rtl"
>
در این جشنواره برای نخستین بار از کارگران افغانستان در شهر تهران تقدیر شد
diff --git a/src/app/components/MostRead/index.tsx b/src/app/components/MostRead/index.tsx
index dd2428e063e..027b795b9db 100644
--- a/src/app/components/MostRead/index.tsx
+++ b/src/app/components/MostRead/index.tsx
@@ -3,7 +3,6 @@ import { RequestContext } from '#contexts/RequestContext';
import useToggle from '#hooks/useToggle';
import { getMostReadEndpoint } from '#app/lib/utilities/getUrlHelpers/getMostReadUrls';
import { getEnvConfig } from '#app/lib/utilities/getEnvConfig';
-import { OptimizelyContext, ReactSDKClient } from '@optimizely/react-sdk';
import { ServiceContext } from '../../contexts/ServiceContext';
import Canonical from './Canonical';
import Amp from './Amp';
@@ -36,7 +35,6 @@ interface MostReadProps {
mobileDivider?: boolean;
headingBackgroundColour?: string;
className?: string;
- sendOptimizelyEvents?: boolean;
}
// We render amp on ONLY STY, CSP and ARTICLE pages using amp-list.
@@ -112,10 +110,8 @@ const MostRead = ({
mobileDivider = false,
headingBackgroundColour = WHITE,
className = '',
- sendOptimizelyEvents = false,
}: MostReadProps) => {
const { isAmp, pageType, variant } = useContext(RequestContext);
- const { optimizely } = useContext(OptimizelyContext);
const {
service,
mostRead: { hasMostRead },
@@ -139,34 +135,39 @@ const MostRead = ({
isBff,
});
- const eventTrackingData = {
- ...blockLevelEventTrackingData,
- ...(sendOptimizelyEvents && {
- optimizely,
- optimizelyMetricNameOverride: 'most_read',
- }),
- };
+ // We render amp on ONLY STY, CSP and ARTICLE pages using amp-list.
+ const AmpMostRead = () =>
+ mostReadAmpPageTypes.includes(pageType) ? (
+
+
+
+
+ ) : null;
+
+ // Do not render on Canonical if data is not provided
+ const CanonicalMostRead = () =>
+ data ? (
+
+
+
+
+ ) : null;
- return isAmp ? (
-
- ) : (
-
- );
+ return isAmp ? : ;
};
export default MostRead;
diff --git a/src/app/components/OptimizelyRecommendations/index.tsx b/src/app/components/OptimizelyRecommendations/index.tsx
index 1b0414add30..b34b126a70d 100644
--- a/src/app/components/OptimizelyRecommendations/index.tsx
+++ b/src/app/components/OptimizelyRecommendations/index.tsx
@@ -19,7 +19,7 @@ const OptimizelyRecommendation = ({
);
return (
-
+
{variation => {
let unirecsHybridRecommendationData = null;
if (variation && variation !== 'control') {
diff --git a/src/app/components/PageLayoutWrapper/__snapshots__/index.test.tsx.snap b/src/app/components/PageLayoutWrapper/__snapshots__/index.test.tsx.snap
index 940cb4cf43d..a34c3a2ee19 100644
--- a/src/app/components/PageLayoutWrapper/__snapshots__/index.test.tsx.snap
+++ b/src/app/components/PageLayoutWrapper/__snapshots__/index.test.tsx.snap
@@ -1006,13 +1006,13 @@ exports[`PageLayoutWrapper should render default page wrapper with children 1`]
@media (min-width: 15rem) and (max-width: 37.4375rem) {
.emotion-151 {
- grid-template-rows: repeat(4, auto);
+ grid-template-rows: repeat(5, auto);
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
.emotion-151 {
- grid-template-rows: repeat(3, auto);
+ grid-template-rows: repeat(4, auto);
}
}
@@ -1637,7 +1637,9 @@ exports[`PageLayoutWrapper should render default page wrapper with children 1`]
Why you can trust the BBC
-
+
-
+
-
+
-
+
-
+
-
+
+
- 2025 BBC. The BBC is not responsible for the content of external sites.
+ 2024 BBC. The BBC is not responsible for the content of external sites.
) => {
const { service } = useContext(ServiceContext);
const { isLite, isAmp } = useContext(RequestContext);
+ const topStories = pageData.secondaryColumn?.topStories;
+ const mostReadItems = pageData.mostRead?.items;
+
+ // const scrollableOJExperimentVariation = useOptimizelyVariation(
+ // 'oj_scroll',
+ // ) as unknown as string;
+ const variantValue = 'A'; // We would get this value from useOptimizelyVariation (as commented out above)
+ // so just manually switch the hardcoded variant for now while getting this working
+ const experimentVariant: 'A' | 'B' | 'none' = ['A', 'B'].includes(
+ variantValue,
+ )
+ ? (variantValue as 'A' | 'B')
+ : 'none';
+ let dataForOJExperiment;
+ if (experimentVariant === 'A') {
+ dataForOJExperiment = topStories;
+ } else if (experimentVariant === 'B' && mostReadItems) {
+ dataForOJExperiment = mostReadItems;
+ }
+
+ const propsForOJExperiment = {
+ blocks: dataForOJExperiment || [],
+ experimentVariant,
+ };
+ console.log('mostReadItems', mostReadItems, 'topStories', topStories);
const isErrorPage = ![200].includes(status) || !status;
const pageType = pageData?.metadata?.type;
const reportingPageType = pageType?.replace(/ /g, '');
@@ -202,7 +224,7 @@ const PageLayoutWrapper = ({
{!isErrorPage && }
diff --git a/src/app/components/Text/index.tsx b/src/app/components/Text/index.tsx
index 8a35985dd39..faa5e736a2e 100644
--- a/src/app/components/Text/index.tsx
+++ b/src/app/components/Text/index.tsx
@@ -29,7 +29,7 @@ const Text = forwardRef(function Text(
}: Props & Omit, keyof Props>,
ref: ForwardedRef,
) {
- const Component: React.ElementType = as || 'span';
+ const Component = as || 'span';
return (
css`
}
// Overrides focus indicator styles with inverted colours. Used on a dark background page. E.g. Episode lists.
- a.focusIndicatorInvert:focus-visible,
- button.focusIndicatorInvert:focus-visible {
+ a.focusIndicatorInvert:focus-visible {
outline: ${focusIndicatorThickness} solid ${palette.WHITE};
box-shadow: 0 0 0 ${focusIndicatorThickness} ${palette.BLACK};
outline-offset: ${focusIndicatorThickness};
diff --git a/src/app/components/ThemeProvider/palette.ts b/src/app/components/ThemeProvider/palette.ts
index 2f6463ea23b..28b299c6a0e 100644
--- a/src/app/components/ThemeProvider/palette.ts
+++ b/src/app/components/ThemeProvider/palette.ts
@@ -27,9 +27,7 @@ export const GREY_8 = '#202224';
export const KINGFISHER = '#11708C';
export const LE_TEAL = '#09838B';
export const LIVE_LIGHT = '#00CCC7';
-export const LIVE_MEDIUM = '#008282';
export const LIVE_DARK = '#006666';
-export const LIVE_CORE = '#009E9E';
export const LUNAR = '#F2F2F2';
export const LUNAR_LIGHT = '#F8F8F8';
export const METAL = '#6E6E73';
diff --git a/src/app/components/ThemeProvider/withThemeProvider.tsx b/src/app/components/ThemeProvider/withThemeProvider.tsx
index 9275d80f9c6..b1722debcaa 100644
--- a/src/app/components/ThemeProvider/withThemeProvider.tsx
+++ b/src/app/components/ThemeProvider/withThemeProvider.tsx
@@ -37,9 +37,7 @@ import {
KINGFISHER,
LE_TEAL,
LIVE_LIGHT,
- LIVE_MEDIUM,
LIVE_DARK,
- LIVE_CORE,
LUNAR,
LUNAR_LIGHT,
METAL,
@@ -245,9 +243,7 @@ const withThemeProvider = ({
KINGFISHER,
LE_TEAL,
LIVE_LIGHT,
- LIVE_MEDIUM,
LIVE_DARK,
- LIVE_CORE,
LUNAR,
LUNAR_LIGHT,
METAL,
diff --git a/src/app/components/VisuallyHiddenText/index.tsx b/src/app/components/VisuallyHiddenText/index.tsx
index fe546bda304..95608ef88dc 100644
--- a/src/app/components/VisuallyHiddenText/index.tsx
+++ b/src/app/components/VisuallyHiddenText/index.tsx
@@ -7,8 +7,6 @@ interface VisuallyHiddenTextProps {
id?: string;
tabIndex?: number;
as?: T;
- lang?: string;
- children?: React.ReactNode;
}
const VisuallyHiddenText = ({
@@ -19,7 +17,7 @@ const VisuallyHiddenText = ({
...htmlAttributes
}: VisuallyHiddenTextProps &
Omit, keyof VisuallyHiddenTextProps>) => {
- const Component: React.ElementType = as || 'span';
+ const Component = as || 'span';
return (
(
);
-
-export const Close = ({ className }: { className?: string }) => (
-
-
-
-);
-
-export const Play = ({ className }: { className?: string }) => (
-
-
-
-);
diff --git a/src/app/contexts/EventTrackingContext/index.test.tsx b/src/app/contexts/EventTrackingContext/index.test.tsx
index f01e86edf62..47da5a6b30b 100644
--- a/src/app/contexts/EventTrackingContext/index.test.tsx
+++ b/src/app/contexts/EventTrackingContext/index.test.tsx
@@ -59,7 +59,6 @@ describe('Expected use', () => {
pageIdentifier: 'news::pidgin.news.story.51745682.page',
platform: 'canonical',
producerId: '70',
- producerName: 'PIDGIN',
statsDestination: 'WS_NEWS_LANGUAGES_TEST',
});
});
@@ -81,7 +80,6 @@ describe('Expected use', () => {
pageIdentifier: 'kyrgyz.page',
platform: 'canonical',
producerId: '58',
- producerName: 'KYRGYZ',
statsDestination: 'WS_NEWS_LANGUAGES_TEST',
});
});
diff --git a/src/app/contexts/EventTrackingContext/index.tsx b/src/app/contexts/EventTrackingContext/index.tsx
index a6c706d44e6..2df643bdb10 100644
--- a/src/app/contexts/EventTrackingContext/index.tsx
+++ b/src/app/contexts/EventTrackingContext/index.tsx
@@ -10,6 +10,7 @@ import useToggle from '../../hooks/useToggle';
import {
ARTICLE_PAGE,
FRONT_PAGE,
+ MEDIA_PAGE,
MOST_READ_PAGE,
FEATURE_INDEX_PAGE,
MEDIA_ASSET_PAGE,
@@ -59,6 +60,7 @@ const getCampaignID = (pageType: CampaignPageTypes) => {
[ARTICLE_PAGE]: 'article',
[MEDIA_ARTICLE_PAGE]: 'article-sfv',
[FRONT_PAGE]: 'index-home',
+ [MEDIA_PAGE]: 'player-episode',
[MOST_READ_PAGE]: 'list-datadriven-read',
[FEATURE_INDEX_PAGE]: 'index-section-fix',
[MEDIA_ASSET_PAGE]: 'article-media-asset',
@@ -104,7 +106,7 @@ export const EventTrackingContextProvider = ({
const { pageType } = requestContext;
const serviceContext = useContext(ServiceContext);
- const { atiAnalyticsProducerId, atiAnalyticsProducerName } = serviceContext;
+ const { atiAnalyticsProducerId } = serviceContext;
const { enabled: eventTrackingIsEnabled } = useToggle('eventTracking');
@@ -125,14 +127,12 @@ export const EventTrackingContextProvider = ({
pageIdentifier,
platform,
producerId: atiAnalyticsProducerId,
- producerName: atiAnalyticsProducerName,
statsDestination,
};
}
return null;
}, [
atiAnalyticsProducerId,
- atiAnalyticsProducerName,
atiData,
data,
eventTrackingIsEnabled,
diff --git a/src/app/hooks/useClickTrackerHandler/index.jsx b/src/app/hooks/useClickTrackerHandler/index.jsx
index 92ae9d74c83..4255368f5fb 100644
--- a/src/app/hooks/useClickTrackerHandler/index.jsx
+++ b/src/app/hooks/useClickTrackerHandler/index.jsx
@@ -1,5 +1,7 @@
/* eslint-disable no-console */
import { useContext, useCallback, useState } from 'react';
+import path from 'ramda/src/path';
+import pathOr from 'ramda/src/pathOr';
import { EventTrackingContext } from '../../contexts/EventTrackingContext';
import useTrackingToggle from '../useTrackingToggle';
@@ -11,29 +13,26 @@ import { isValidClick } from './clickTypes';
const EVENT_TYPE = 'click';
const useClickTrackerHandler = (props = {}) => {
- const preventNavigation = props?.preventNavigation;
- const componentName = props?.componentName;
- const url = props?.url;
- const advertiserID = props?.advertiserID;
- const format = props?.format;
- const optimizely = props?.optimizely;
+ const preventNavigation = path(['preventNavigation'], props);
+ const componentName = path(['componentName'], props);
+ const url = path(['url'], props);
+ const advertiserID = path(['advertiserID'], props);
+ const format = path(['format'], props);
+ const optimizely = path(['optimizely'], props);
const optimizelyMetricNameOverride = props?.optimizelyMetricNameOverride;
const detailedPlacement = props?.detailedPlacement;
const { trackingIsEnabled } = useTrackingToggle(componentName);
const [clicked, setClicked] = useState(false);
const eventTrackingContext = useContext(EventTrackingContext);
-
- const {
- pageIdentifier,
- platform,
- producerId,
- producerName,
- statsDestination,
- } = eventTrackingContext;
- const campaignID = props?.campaignID || eventTrackingContext?.campaignID;
-
- const { service, useReverb } = useContext(ServiceContext);
+ const { pageIdentifier, platform, producerId, statsDestination } =
+ eventTrackingContext;
+ const campaignID = pathOr(
+ path(['campaignID'], eventTrackingContext),
+ ['campaignID'],
+ props,
+ );
+ const { service } = useContext(ServiceContext);
return useCallback(
async event => {
@@ -51,12 +50,11 @@ const useClickTrackerHandler = (props = {}) => {
pageIdentifier,
platform,
producerId,
- producerName,
service,
statsDestination,
].every(Boolean);
if (shouldSendEvent) {
- const nextPageUrl = event?.currentTarget?.href;
+ const nextPageUrl = path(['currentTarget', 'href'], event);
event.stopPropagation();
event.preventDefault();
@@ -78,9 +76,6 @@ const useClickTrackerHandler = (props = {}) => {
);
}
- const optimizelyVariation =
- optimizely?.getVariation(OPTIMIZELY_CONFIG.ruleKey) || null;
-
try {
await sendEventBeacon({
type: EVENT_TYPE,
@@ -90,17 +85,11 @@ const useClickTrackerHandler = (props = {}) => {
pageIdentifier,
platform,
producerId,
- producerName,
service,
advertiserID,
statsDestination,
url,
detailedPlacement,
- useReverb,
- ...(optimizelyVariation &&
- optimizelyVariation !== 'off' && {
- experimentVariant: optimizelyVariation,
- }),
});
} finally {
if (nextPageUrl && !preventNavigation) {
@@ -122,7 +111,6 @@ const useClickTrackerHandler = (props = {}) => {
platform,
preventNavigation,
producerId,
- producerName,
service,
statsDestination,
url,
@@ -131,7 +119,6 @@ const useClickTrackerHandler = (props = {}) => {
optimizely,
optimizelyMetricNameOverride,
detailedPlacement,
- useReverb,
],
);
};
diff --git a/src/app/hooks/useClickTrackerHandler/index.test.jsx b/src/app/hooks/useClickTrackerHandler/index.test.jsx
index 4dcfef622d3..9a1690f2538 100644
--- a/src/app/hooks/useClickTrackerHandler/index.test.jsx
+++ b/src/app/hooks/useClickTrackerHandler/index.test.jsx
@@ -1,6 +1,6 @@
/* eslint-disable jsx-a11y/click-events-have-key-events */
/* eslint-disable jsx-a11y/no-static-element-interactions */
-import React, { createContext } from 'react';
+import React from 'react';
import userEvent from '@testing-library/user-event';
import { waitFor } from '@testing-library/dom';
import { STORY_PAGE } from '#app/routes/utils/pageTypes';
@@ -13,8 +13,6 @@ import {
act,
fireEvent,
} from '../../components/react-testing-library-with-providers';
-import * as serviceContextModule from '../../contexts/ServiceContext';
-
import pidginData from './fixtureData/tori-51745682.json';
import useClickTrackerHandler from '.';
@@ -91,17 +89,6 @@ beforeEach(() => {
assign: jest.fn(),
...rest,
};
-
- jest.replaceProperty(
- serviceContextModule,
- 'ServiceContext',
- createContext({
- atiAnalyticsProducerId: '70',
- atiAnalyticsProducerName: 'PIDGIN',
- service: 'pidgin',
- useReverb: false,
- }),
- );
});
afterEach(() => {
@@ -393,7 +380,6 @@ describe('Click tracking', () => {
optimizely: {
track: mockOptimizelyTrack,
user: { attributes: mockAttributes, id: mockUserId },
- getVariation: jest.fn(() => 'off'),
},
optimizelyMetricNameOverride: 'myEvent',
};
@@ -438,7 +424,6 @@ describe('Click tracking', () => {
optimizely: {
track: mockOptimizelyTrack,
user: { attributes: mockAttributes, id: mockUserId },
- getVariation: jest.fn(() => 'off'),
},
};
const {
diff --git a/src/app/hooks/useOptimizelyScrollDepth/index.jsx b/src/app/hooks/useOptimizelyScrollDepth/index.jsx
index 4fed4e28e7e..00dd6a69d26 100644
--- a/src/app/hooks/useOptimizelyScrollDepth/index.jsx
+++ b/src/app/hooks/useOptimizelyScrollDepth/index.jsx
@@ -21,7 +21,7 @@ const useOptimizelyScrollDepth = () => {
const [scrollSeventyFive, setScrollSeventyFive] = useState(false);
const [scrollHundred, setScrollHundred] = useState(false);
- const experimentVariation = useOptimizelyVariation(OPTIMIZELY_CONFIG.flagKey);
+ const experimentVariation = useOptimizelyVariation(OPTIMIZELY_CONFIG.flagId);
const hasVariationKey = experimentVariation !== null;
const sendScrollEvents = hasVariationKey && !isAmp;
diff --git a/src/app/hooks/useOptimizelyVariation/index.jsx b/src/app/hooks/useOptimizelyVariation/index.jsx
index b0d9a6d6e51..2ce58c789ae 100644
--- a/src/app/hooks/useOptimizelyVariation/index.jsx
+++ b/src/app/hooks/useOptimizelyVariation/index.jsx
@@ -8,13 +8,13 @@ const isClientSide = true;
// WE CAN SAFELY DO SO SINCE isClientSide IS A CONSTANT AND THEREFORE GUARANTEES THAT
// EACH HOOK WILL BE CALLED IN THE EXACT SAME ORDER UPON INITAL RENDER.
const useOptimizelyVariation = (
- flagKey,
+ flagId,
overrideAttributes = {},
useClientSide = isClientSide,
) => {
if (useClientSide) {
const [decision, isClientReady, didTimeout] = useDecision(
- flagKey,
+ flagId,
{
autoUpdate: true,
},
diff --git a/src/app/hooks/useViewTracker/index.jsx b/src/app/hooks/useViewTracker/index.jsx
index 950bfa6ea64..4722169f8c4 100644
--- a/src/app/hooks/useViewTracker/index.jsx
+++ b/src/app/hooks/useViewTracker/index.jsx
@@ -1,4 +1,6 @@
import { useContext, useEffect, useState, useRef } from 'react';
+import path from 'ramda/src/path';
+import pathOr from 'ramda/src/pathOr';
import prop from 'ramda/src/prop';
import { sendEventBeacon } from '../../components/ATIAnalytics/beacon';
@@ -16,11 +18,11 @@ const MIN_VIEWED_PERCENT = 0.5;
* @returns {Ref | undefined}
*/
const useViewTracker = (props = {}) => {
- const componentName = props?.componentName;
- const format = props?.format;
- const advertiserID = props?.advertiserID;
- const url = props?.url;
- const optimizely = props?.optimizely;
+ const componentName = path(['componentName'], props);
+ const format = path(['format'], props);
+ const advertiserID = path(['advertiserID'], props);
+ const url = path(['url'], props);
+ const optimizely = path(['optimizely'], props);
const optimizelyMetricNameOverride = props?.optimizelyMetricNameOverride;
const detailedPlacement = props?.detailedPlacement;
@@ -30,17 +32,14 @@ const useViewTracker = (props = {}) => {
const [eventSent, setEventSent] = useState(false);
const { trackingIsEnabled } = useTrackingToggle(componentName);
const eventTrackingContext = useContext(EventTrackingContext);
-
- const {
- pageIdentifier,
- platform,
- producerId,
- producerName,
- statsDestination,
- } = eventTrackingContext;
- const campaignID = props?.campaignID || eventTrackingContext?.campaignID;
-
- const { service, useReverb } = useContext(ServiceContext);
+ const { pageIdentifier, platform, producerId, statsDestination } =
+ eventTrackingContext;
+ const campaignID = pathOr(
+ path(['campaignID'], eventTrackingContext),
+ ['campaignID'],
+ props,
+ );
+ const { service } = useContext(ServiceContext);
const initObserver = async () => {
if (typeof window.IntersectionObserver === 'undefined') {
@@ -68,7 +67,6 @@ const useViewTracker = (props = {}) => {
pageIdentifier,
platform,
producerId,
- producerName,
service,
statsDestination,
].every(Boolean);
@@ -97,9 +95,6 @@ const useViewTracker = (props = {}) => {
);
}
- const optimizelyVariation =
- optimizely?.getVariation(OPTIMIZELY_CONFIG.ruleKey) || null;
-
sendEventBeacon({
campaignID,
componentName,
@@ -107,18 +102,12 @@ const useViewTracker = (props = {}) => {
pageIdentifier,
platform,
producerId,
- producerName,
service,
statsDestination,
type: EVENT_TYPE,
advertiserID,
url,
detailedPlacement,
- useReverb,
- ...(optimizelyVariation &&
- optimizelyVariation !== 'off' && {
- experimentVariant: optimizelyVariation,
- }),
});
setEventSent(true);
observer.current.disconnect();
@@ -142,7 +131,6 @@ const useViewTracker = (props = {}) => {
pageIdentifier,
platform,
producerId,
- producerName,
service,
statsDestination,
trackingIsEnabled,
@@ -152,7 +140,6 @@ const useViewTracker = (props = {}) => {
optimizely,
optimizelyMetricNameOverride,
detailedPlacement,
- useReverb,
]);
return async element => {
diff --git a/src/app/hooks/useViewTracker/index.test.jsx b/src/app/hooks/useViewTracker/index.test.jsx
index 8810829ec7c..77a512076fd 100644
--- a/src/app/hooks/useViewTracker/index.test.jsx
+++ b/src/app/hooks/useViewTracker/index.test.jsx
@@ -1,6 +1,6 @@
/* eslint-disable no-console */
-import React, { createContext } from 'react';
+import React from 'react';
import {
renderHook,
act,
@@ -11,8 +11,7 @@ import { RequestContextProvider } from '#contexts/RequestContext';
import { ToggleContextProvider } from '#contexts/ToggleContext';
import { STORY_PAGE } from '#app/routes/utils/pageTypes';
import OPTIMIZELY_CONFIG from '#lib/config/optimizely';
-import * as serviceContextModule from '../../contexts/ServiceContext';
-
+import { ServiceContextProvider } from '../../contexts/ServiceContext';
import useViewTracker from '.';
import fixtureData from './fixtureData.json';
@@ -66,17 +65,6 @@ beforeEach(() => {
jest.useFakeTimers();
console.error = jest.fn();
global.IntersectionObserver = IntersectionObserver;
-
- jest.replaceProperty(
- serviceContextModule,
- 'ServiceContext',
- createContext({
- atiAnalyticsProducerId: '70',
- atiAnalyticsProducerName: 'PIDGIN',
- service: 'pidgin',
- useReverb: false,
- }),
- );
});
afterEach(() => {
@@ -110,13 +98,13 @@ const wrapper = ({ pageData, atiData, children, toggles = defaultToggles }) => (
service="pidgin"
pathname="/pidgin/tori-51745682"
>
-
+
{children}
-
+
);
@@ -220,7 +208,6 @@ describe('Expected use', () => {
optimizely: {
track: mockOptimizelyTrack,
user: { attributes: mockAttributes, id: mockUserId },
- getVariation: jest.fn(() => 'off'),
},
optimizelyMetricNameOverride: 'myEvent',
};
@@ -624,7 +611,6 @@ describe('Expected use', () => {
optimizely: {
track: mockOptimizelyTrack,
user: { attributes: mockAttributes, id: mockUserId },
- getVariation: jest.fn(() => 'off'),
},
};
diff --git a/src/app/legacy/components/Promo/a.jsx b/src/app/legacy/components/Promo/a.jsx
index 83922ee9d05..c7f39456c2a 100644
--- a/src/app/legacy/components/Promo/a.jsx
+++ b/src/app/legacy/components/Promo/a.jsx
@@ -3,7 +3,6 @@ import styled from '@emotion/styled';
const A = styled.a`
color: ${props => props.theme.palette.GREY_10};
text-decoration: none;
- display: block;
&:hover,
&:focus {
text-decoration: underline;
diff --git a/src/app/legacy/components/Promo/image.jsx b/src/app/legacy/components/Promo/image.jsx
index 8d824ad0a34..778bfa11659 100644
--- a/src/app/legacy/components/Promo/image.jsx
+++ b/src/app/legacy/components/Promo/image.jsx
@@ -19,7 +19,7 @@ const ChildWrapper = styled.div`
// promos with images via Programmes (which can be of type audio and possibly others) use a different iChef recipe requiring a second set of resolutions
// https://github.com/bbc/programme-images/tree/master/webapp/ichef/recipes
-const createSrcSet = (imageUrl, isProgrammeImage, suffix = '') => {
+const createSrcSet = (imageUrl, suffix = '', isProgrammeImage) => {
const imageResolutions = [85, 120, 170, 232, 325, 450, 660, 800];
const imageResolutionsProgrammes = [96, 128, 176, 240, 352, 464, 672, 800];
@@ -63,9 +63,9 @@ const Image = props => {
'https://ichef.bbci.co.uk/images/ic/',
);
const suffix = src.endsWith('.webp') ? '' : '.webp';
- const primarySrcSet = createSrcSet(src, isProgrammeImage, suffix);
+ const primarySrcSet = createSrcSet(src, suffix, isProgrammeImage);
- const fallbackSrcSet = createSrcSet(src, isProgrammeImage).replaceAll(
+ const fallbackSrcSet = createSrcSet(src, '', isProgrammeImage).replaceAll(
'.webp',
'',
);
diff --git a/src/app/legacy/components/ScrollablePromo/Promo/index.jsx b/src/app/legacy/components/ScrollablePromo/Promo/index.jsx
index a2a71a52e7b..d533ce7a4d2 100644
--- a/src/app/legacy/components/ScrollablePromo/Promo/index.jsx
+++ b/src/app/legacy/components/ScrollablePromo/Promo/index.jsx
@@ -12,6 +12,7 @@ import {
} from '#psammead/gel-foundations/src/spacings';
import {
GEL_GROUP_0_SCREEN_WIDTH_MIN,
+ GEL_GROUP_1_SCREEN_WIDTH_MIN,
GEL_GROUP_2_SCREEN_WIDTH_MIN,
GEL_GROUP_3_SCREEN_WIDTH_MIN,
GEL_GROUP_4_SCREEN_WIDTH_MIN,
@@ -19,20 +20,25 @@ import {
import filterForBlockType from '#lib/utilities/blockHandlers';
import useOperaMiniDetection from '#hooks/useOperaMiniDetection';
import PromoTimestamp from '#components/Promo/timestamp';
+import LiveLabel from '../../../../components/LiveLabel';
import { ServiceContext } from '../../../../contexts/ServiceContext';
const StyledLink = styled(Link)`
${({ script }) => script && getPica(script)}
${({ service }) => service && getSerifBold(service)}
width: 100%;
- overflow-wrap: break-word;
- text-overflow: ellipsis;
+
text-decoration: none;
overflow-x: hidden;
overflow-y: hidden;
display: -webkit-box;
- -webkit-line-clamp: 4;
+ ${({ experimentVariant }) =>
+ experimentVariant === 'none' &&
+ ` overflow-wrap: break-word;
+ text-overflow: ellipsis;
+ -webkit-line-clamp: 4;
+ `}
-webkit-box-orient: vertical;
&:hover,
@@ -53,6 +59,7 @@ const PromoBox = styled.div`
theme.isDarkUi ? theme.palette.GREY_3 : theme.palette.WHITE};
padding: ${GEL_SPACING_DBL};
margin-bottom: ${GEL_SPACING_TRPL};
+ height: auto;
@media (min-width: ${GEL_GROUP_0_SCREEN_WIDTH_MIN}) {
width: 14.8125rem;
}
@@ -62,6 +69,18 @@ const PromoBox = styled.div`
@media (min-width: ${GEL_GROUP_4_SCREEN_WIDTH_MIN}) {
width: 12.6875rem;
}
+ ${({ experimentVariant }) =>
+ experimentVariant !== 'none' &&
+ `
+ margin-bottom: 0;
+ width: 11.5rem;
+ @media (min-width: ${GEL_GROUP_1_SCREEN_WIDTH_MIN}) {
+ width: 17rem;
+ }
+ @media (min-width: ${GEL_GROUP_3_SCREEN_WIDTH_MIN}) {
+ width: 15.5rem;
+ }
+ `}
`;
const OperaPromoBox = styled.div`
@@ -81,46 +100,89 @@ const TimeStamp = styled(PromoTimestamp)`
color: ${({ theme }) => theme.isDarkUi && theme.palette.GREY_6};
`;
-const Promo = ({ block, onClick }) => {
+const Promo = ({ block, experimentVariant, onClick }) => {
const { script, service, serviceDatetimeLocale } = useContext(ServiceContext);
- const textBlock = filterForBlockType(
- pathOr({}, ['model', 'blocks'], block),
- 'text',
- );
- const aresLinkBlock = filterForBlockType(
- pathOr({}, ['model', 'blocks'], block),
- 'aresLink',
- );
- const href = pathOr(
- '',
- ['model', 'blocks', '0', 'model', 'blocks', '0', 'model', 'locator'],
- textBlock,
- );
- const title = pathOr(
- '',
- ['model', 'blocks', '0', 'model', 'blocks', '0', 'model', 'text'],
- textBlock,
- );
- const timestamp = path(
- ['model', 'blocks', '0', 'model', 'timestamp'],
- aresLinkBlock,
+ let title;
+ let href;
+ let textBlock;
+ let aresLinkBlock;
+ let timestamp;
+ let isLive;
+ switch (experimentVariant) {
+ case 'A':
+ title = pathOr(
+ block.headline || '',
+ [
+ 'headlines',
+ 'promoHeadline',
+ 'blocks',
+ '0',
+ 'model',
+ 'blocks',
+ '0',
+ 'model',
+ 'text',
+ ],
+ block,
+ );
+ href = pathOr('', ['locators', 'canonicalUrl'], block);
+ isLive = block.isLive;
+ break;
+ case 'B':
+ title = block.title;
+ href = block.href;
+ break;
+ default:
+ textBlock = filterForBlockType(
+ pathOr({}, ['model', 'blocks'], block),
+ 'text',
+ );
+ aresLinkBlock = filterForBlockType(
+ pathOr({}, ['model', 'blocks'], block),
+ 'aresLink',
+ );
+ timestamp = path(
+ ['model', 'blocks', '0', 'model', 'timestamp'],
+ aresLinkBlock,
+ );
+ href = pathOr(
+ '',
+ ['model', 'blocks', '0', 'model', 'blocks', '0', 'model', 'locator'],
+ textBlock,
+ );
+ title = pathOr(
+ '',
+ ['model', 'blocks', '0', 'model', 'blocks', '0', 'model', 'text'],
+ textBlock,
+ );
+ break;
+ }
+ console.log(
+ 'title',
+ title,
+ 'href',
+ href,
+ 'timestamp',
+ timestamp,
+ 'isLive',
+ isLive,
);
const isOperaMini = useOperaMiniDetection();
const WrapperPromoBox = isOperaMini ? OperaPromoBox : PromoBox;
-
return (
-
+
+ {isLive && }
{title}
- {timestamp && (
+ {timestamp && !experimentVariant && (
{timestamp}
diff --git a/src/app/legacy/components/ScrollablePromo/PromoList/index.jsx b/src/app/legacy/components/ScrollablePromo/PromoList/index.jsx
index d633622259d..57a8e389e9f 100644
--- a/src/app/legacy/components/ScrollablePromo/PromoList/index.jsx
+++ b/src/app/legacy/components/ScrollablePromo/PromoList/index.jsx
@@ -14,7 +14,6 @@ import { ServiceContext } from '../../../../contexts/ServiceContext';
import Promo from '../Promo';
const StandardScrollPromo = styled.ul`
- list-style: none;
${({ dir }) => `padding-${dir === 'ltr' ? 'left' : 'right'}: 0;`}
margin: 0;
display: flex;
@@ -79,10 +78,12 @@ const OperaStyledList = styled.li`
margin-${dir === 'ltr' ? `left` : `right`}: 0;}`}
`;
-const PromoList = ({ blocks, viewTracker, onClick }) => {
+const PromoList = ({ blocks, experimentVariant, viewTracker, onClick }) => {
+ console.log('in promo list', blocks, experimentVariant);
const { dir } = useContext(ServiceContext);
const isOperaMini = useOperaMiniDetection();
- const listBlocks = blocks.slice(0, 3);
+ const listBlocks =
+ experimentVariant === 'B' ? blocks.slice(0, 5) : blocks.slice(0, 3);
const ScrollPromo = isOperaMini ? OperaScrollPromo : StandardScrollPromo;
const List = isOperaMini ? OperaStyledList : StyledList;
@@ -97,7 +98,11 @@ const PromoList = ({ blocks, viewTracker, onClick }) => {
return (
// eslint-disable-next-line react/no-array-index-key
-
+
);
})}
diff --git a/src/app/legacy/components/ScrollablePromo/helpers/fixtureData.js b/src/app/legacy/components/ScrollablePromo/helpers/fixtureData.js
index 7996bdf34d6..6094857f58d 100644
--- a/src/app/legacy/components/ScrollablePromo/helpers/fixtureData.js
+++ b/src/app/legacy/components/ScrollablePromo/helpers/fixtureData.js
@@ -1334,3 +1334,343 @@ export const PromoSingleBlock = {
},
position: [5, 3],
};
+
+export const mostReadBlocks = [
+ {
+ id: 'urn:bbc:optimo:asset:cg4z0d2xgq3o',
+ rank: 1,
+ title:
+ 'Putin apologise for Azerbaijan Airlines crash but no accept blame for di crash',
+ href: 'https://www.bbc.com/pidgin/articles/cg4z0d2xgq3o',
+ timestamp: '2024-12-28T14:30:33.956Z',
+ },
+ {
+ id: 'urn:bbc:optimo:asset:cj30vyvmn3xo',
+ rank: 2,
+ title: 'Court remand Queen Naomi and Oriyomi Hamzat for prison',
+ href: 'https://www.bbc.com/pidgin/articles/cj30vyvmn3xo',
+ timestamp: '2024-12-24T14:31:03.815Z',
+ },
+ {
+ id: 'urn:bbc:optimo:asset:c3rq3lzr3gpo',
+ rank: 3,
+ title:
+ "'Make everybody help me beg make dem release my pikin' - Ex-Queen Naomi mama speak after deadly Ibadan stampede",
+ href: 'https://www.bbc.com/pidgin/articles/c3rq3lzr3gpo',
+ timestamp: '2024-12-27T12:00:17.653Z',
+ },
+ {
+ id: 'urn:bbc:optimo:asset:clyvjjxn0pmo',
+ rank: 4,
+ title:
+ 'Life and Times of Romeo and Juliet star Olivia Hussey wey die at 73',
+ href: 'https://www.bbc.com/pidgin/articles/clyvjjxn0pmo',
+ timestamp: '2024-12-28T09:40:51.463Z',
+ },
+ {
+ id: 'urn:bbc:optimo:asset:c7veqd6vr7lo',
+ rank: 5,
+ title:
+ "Nigerian military say na 'secondary explosion' kill 10 pipo for Sokoto State",
+ href: 'https://www.bbc.com/pidgin/articles/c7veqd6vr7lo',
+ timestamp: '2024-12-27T14:25:38.267Z',
+ },
+ {
+ id: 'urn:bbc:optimo:asset:c5y4j20443do',
+ rank: 6,
+ title:
+ "'Why di next project I go dey for gatz beta pass Seven Doors' - Chioma Akpotha",
+ href: 'https://www.bbc.com/pidgin/articles/c5y4j20443do',
+ timestamp: '2024-12-28T06:33:30.811Z',
+ },
+ {
+ id: 'urn:bbc:optimo:asset:cn9g805eqpno',
+ rank: 7,
+ title:
+ 'IPMAN, MRS and NNPC new fuel price rate – price of fuel go kontinu to go down?',
+ href: 'https://www.bbc.com/pidgin/articles/cn9g805eqpno',
+ timestamp: '2024-12-23T17:00:30.378Z',
+ },
+ {
+ id: 'urn:bbc:optimo:asset:cly2x6pv5zqo',
+ rank: 8,
+ title: "'Phone and technology don take di only job wey I know'",
+ href: 'https://www.bbc.com/pidgin/articles/cly2x6pv5zqo',
+ timestamp: '2024-12-27T09:12:40.775Z',
+ },
+ {
+ id: 'urn:bbc:optimo:asset:cpqd5yy8p4xo',
+ rank: 9,
+ title:
+ 'Wetin pipo see na Baltasar Engonga sex videos but wetin dey happun for Equatorial Guinea pass like dat ',
+ href: 'https://www.bbc.com/pidgin/articles/cpqd5yy8p4xo',
+ timestamp: '2024-11-10T07:44:00.348Z',
+ },
+ {
+ id: 'urn:bbc:optimo:asset:c33dl4388p4o',
+ rank: 10,
+ title: 'Nasa make history wit closest-ever approach to di Sun',
+ href: 'https://www.bbc.com/pidgin/articles/c33dl4388p4o',
+ timestamp: '2024-12-27T14:38:29.323Z',
+ },
+];
+
+export const topStoriesBlocks = [
+ {
+ locators: {
+ optimoUrn: 'urn:bbc:optimo:asset:cg4z0d2xgq3o',
+ canonicalUrl: 'https://www.bbc.com/pidgin/articles/cg4z0d2xgq3o',
+ },
+ timestamp: 1735396233956,
+ suitableForSyndication: true,
+ language: 'pcm',
+ headlines: {
+ seoHeadline:
+ 'Azerbaijan Airlines: Putin tok sorry for airline crash but no take blame for am',
+ promoHeadline: {
+ blocks: [
+ {
+ type: 'text',
+ model: {
+ blocks: [
+ {
+ type: 'paragraph',
+ model: {
+ text: 'Putin apologise for Azerbaijan Airlines crash but no accept blame for di crash',
+ blocks: [
+ {
+ type: 'fragment',
+ model: {
+ text: 'Putin apologise for Azerbaijan Airlines crash but no accept blame for di crash',
+ attributes: [],
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ images: { defaultPromoImage: [Object] },
+ summary: { blocks: [Array] },
+ passport: {
+ language: 'pcm',
+ home: 'http://www.bbc.co.uk/ontologies/passport/home/Pidgin',
+ locator: 'urn:bbc:optimo:asset:cg4z0d2xgq3o',
+ availability: 'AVAILABLE',
+ taggings: [Array],
+ schemaVersion: '1.4.0',
+ publishedState: 'PUBLISHED',
+ predicates: [Object],
+ },
+ serviceIdentifier: 'Pidgin',
+ breakingNews: { isBreaking: false },
+ consumableAsSFV: false,
+ id: 'urn:bbc:ares::article:cg4z0d2xgq3o',
+ type: 'optimo',
+ },
+ {
+ locators: {
+ optimoUrn: 'urn:bbc:optimo:asset:c7veqd6vr7lo',
+ canonicalUrl: 'https://www.bbc.com/pidgin/articles/c7veqd6vr7lo',
+ },
+ timestamp: 1735309538267,
+ suitableForSyndication: true,
+ language: 'pcm',
+ headlines: {
+ seoHeadline:
+ "Sokoto airstrikes: Nigerian military say na 'secondary explosion' kill 10 pipo",
+ promoHeadline: {
+ blocks: [
+ {
+ type: 'text',
+ model: {
+ blocks: [
+ {
+ type: 'paragraph',
+ model: {
+ text: "Nigerian military say na 'secondary explosion' kill 10 pipo for Sokoto State",
+ blocks: [
+ {
+ type: 'fragment',
+ model: {
+ text: "Nigerian military say na 'secondary explosion' kill 10 pipo for Sokoto State",
+ attributes: [],
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ images: { defaultPromoImage: [Object] },
+ summary: { blocks: [Array] },
+ passport: {
+ language: 'pcm',
+ home: 'http://www.bbc.co.uk/ontologies/passport/home/Pidgin',
+ locator: 'urn:bbc:optimo:asset:c7veqd6vr7lo',
+ availability: 'AVAILABLE',
+ taggings: [Array],
+ schemaVersion: '1.4.0',
+ publishedState: 'PUBLISHED',
+ predicates: [Object],
+ },
+ serviceIdentifier: 'Pidgin',
+ breakingNews: { isBreaking: false },
+ consumableAsSFV: false,
+ id: 'urn:bbc:ares::article:c7veqd6vr7lo',
+ type: 'optimo',
+ },
+ {
+ locators: {
+ optimoUrn: 'urn:bbc:optimo:asset:c33dl4388p4o',
+ canonicalUrl: 'https://www.bbc.com/pidgin/articles/c33dl4388p4o',
+ },
+ timestamp: 1735310309323,
+ suitableForSyndication: true,
+ language: 'pcm',
+ headlines: {
+ seoHeadline:
+ 'Nasa Parker Solar Probe survive closest-ever approach to Sun',
+ promoHeadline: {
+ blocks: [
+ {
+ type: 'text',
+ model: {
+ blocks: [
+ {
+ type: 'paragraph',
+ model: {
+ text: 'Nasa make history wit closest-ever approach to di Sun',
+ blocks: [
+ {
+ type: 'fragment',
+ model: {
+ text: 'Nasa make history wit closest-ever approach to di Sun',
+ attributes: [],
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ ],
+ },
+ },
+ images: { defaultPromoImage: [Object] },
+ summary: { blocks: [Array] },
+ passport: {
+ language: 'pcm',
+ home: 'http://www.bbc.co.uk/ontologies/passport/home/Pidgin',
+ locator: 'urn:bbc:optimo:asset:c33dl4388p4o',
+ availability: 'AVAILABLE',
+ taggings: [Array],
+ schemaVersion: '1.4.0',
+ publishedState: 'PUBLISHED',
+ predicates: [Object],
+ },
+ byline: { blocks: [Array] },
+ serviceIdentifier: 'Pidgin',
+ breakingNews: { isBreaking: false },
+ consumableAsSFV: false,
+ id: 'urn:bbc:ares::article:c33dl4388p4o',
+ type: 'optimo',
+ },
+];
+
+export const topStoriesBlocksWithLiveItem = [
+ {
+ locators: {
+ optimoUrn: 'urn:bbc:optimo:asset:c78wqxgqq4do',
+ canonicalUrl: 'https://www.bbc.com/hindi/articles/c78wqxgqq4do',
+ },
+ timestamp: 1738939383381,
+ suitableForSyndication: true,
+ language: 'hi',
+ headlines: {
+ seoHeadline:
+ 'US India: अपने नागरिकों के निर्वासन पर कोलंबिया जैसा कड़ा रुख़ भारत क्यक् नहीं दिखा सका',
+ promoHeadline: [Object],
+ },
+ images: { defaultPromoImage: [Object] },
+ summary: { blocks: [Array] },
+ passport: {
+ language: 'hi',
+ home: 'http://www.bbc.co.uk/ontologies/passport/home/Hindi',
+ locator: 'urn:bbc:optimo:asset:c78wqxgqq4do',
+ availability: 'AVAILABLE',
+ taggings: [Array],
+ schemaVersion: '1.4.0',
+ publishedState: 'PUBLISHED',
+ predicates: [Object],
+ },
+ byline: { blocks: [Array] },
+ serviceIdentifier: 'Hindi',
+ breakingNews: { isBreaking: false },
+ consumableAsSFV: false,
+ id: 'urn:bbc:ares::article:c78wqxgqq4do',
+ type: 'optimo',
+ },
+ {
+ headline: 'पूछताछ के बाद बांग्लादेशी अभिनेत्री शॉन और सबा को रिहा किया गया',
+ destinationUrl: '/hindi/live/c5yerl0rx49t',
+ isLive: true,
+ summary:
+ 'ढाका मेट्रोपॉलिटन पुलिस की डिटेक्टिव ब्रांच (डीबी) ने बांग्लादेशी अभिनेत्री मेहर अफ़रोज़ शॉन और सोहाना सबा को रिहा कर दिया है.',
+ image: {
+ id: 'c2edf88d-8f38-4a26-b81e-cf2cad66ec25',
+ subType: 'promo',
+ href: 'http://c.files.bbci.co.uk/67d9/live/c79f90b0-e512-11ef-a819-277e390a7a08.jpg',
+ path: '/cpsprodpb/67d9/live/c79f90b0-e512-11ef-a819-277e390a7a08.jpg',
+ height: 683,
+ width: 1024,
+ altText: 'भारतीय रुपया',
+ copyrightHolder: 'Getty Images',
+ originCode: 'cpsprodpb',
+ type: 'image',
+ },
+ serviceIdentifier: 'hindi',
+ id: 'urn:bbc:tipo:topic:c5yerl0rx49t',
+ type: 'tipo-live',
+ },
+ {
+ locators: {
+ optimoUrn: 'urn:bbc:optimo:asset:c3rq57dejlyo',
+ canonicalUrl: 'https://www.bbc.com/hindi/articles/c3rq57dejlyo',
+ },
+ timestamp: 1738942111890,
+ suitableForSyndication: true,
+ language: 'hi',
+ headlines: {
+ seoHeadline:
+ 'Delhi: दिल्ली चुनाव के नतीजों पर 8 फ़रवरी को सबकी नज़र, Delhi में मेंसी रही बीते 15 सालों की राजनीति',
+ promoHeadline: [Object],
+ },
+ images: { defaultPromoImage: [Object] },
+ summary: { blocks: [Array] },
+ passport: {
+ language: 'hi',
+ home: 'http://www.bbc.co.uk/ontologies/passport/home/Hindi',
+ locator: 'urn:bbc:optimo:asset:c3rq57dejlyo',
+ availability: 'AVAILABLE',
+ taggings: [Array],
+ schemaVersion: '1.4.0',
+ publishedState: 'PUBLISHED',
+ predicates: [Object],
+ },
+ serviceIdentifier: 'Hindi',
+ breakingNews: { isBreaking: false },
+ consumableAsSFV: false,
+ id: 'urn:bbc:ares::article:c3rq57dejlyo',
+ type: 'optimo',
+ },
+];
diff --git a/src/app/legacy/components/ScrollablePromo/index.jsx b/src/app/legacy/components/ScrollablePromo/index.jsx
index 31bf3d4a399..a05bec46fb9 100644
--- a/src/app/legacy/components/ScrollablePromo/index.jsx
+++ b/src/app/legacy/components/ScrollablePromo/index.jsx
@@ -2,6 +2,7 @@ import React, { useContext } from 'react';
import {
GEL_SPACING,
GEL_SPACING_DBL,
+ GEL_SPACING_QUAD,
} from '#psammead/gel-foundations/src/spacings';
import { getDoublePica } from '#psammead/gel-foundations/src/typography';
@@ -14,6 +15,7 @@ import tail from 'ramda/src/tail';
import {
GEL_GROUP_0_SCREEN_WIDTH_MIN,
GEL_GROUP_2_SCREEN_WIDTH_MIN,
+ GEL_GROUP_3_SCREEN_WIDTH_MAX,
GEL_GROUP_4_SCREEN_WIDTH_MIN,
} from '#psammead/gel-foundations/src/breakpoints';
import { GridItemMediumNoMargin } from '#components/Grid';
@@ -35,10 +37,26 @@ const PromoWrapper = styled.div`
}
`;
+const ScrollablePromoContainer = styled.div`
+ background: #f6f6f6;
+ padding: ${GEL_SPACING};
+ display: flex;
+ overflow-x: auto;
+ ${({ experimentVariant }) =>
+ experimentVariant !== 'none' &&
+ `
+ @media (min-width: ${GEL_GROUP_3_SCREEN_WIDTH_MAX}){
+ display: none;
+ }
+ width: 100vw;
+ margin-left: calc(-50vw + 50%);
+ `}
+`;
+
const LabelComponent = styled.strong`
- display: block;
${({ script }) => script && getDoublePica(script)};
${({ service }) => getSansRegular(service)}
+
margin-bottom: ${GEL_SPACING_DBL};
color: ${({ theme }) =>
theme.isDarkUi ? theme.palette.GREY_2 : theme.palette.SHADOW};
@@ -55,16 +73,28 @@ const LabelComponent = styled.strong`
margin-${dir === 'ltr' ? `left` : `right`}: 0;
}
`}
+ ${({ experimentVariant }) =>
+ experimentVariant &&
+ `
+ display: flex;
+ align-items: center;
+ height: ${GEL_SPACING_QUAD};
+ `}
`;
-const ScrollablePromo = ({ blocks, blockGroupIndex = null }) => {
- const { script, service, dir, translations } = useContext(ServiceContext);
-
+const ScrollablePromo = ({
+ blocks,
+ blockGroupIndex = null,
+ experimentVariant = 'none',
+}) => {
+ const { script, service, dir, translations, mostRead } =
+ useContext(ServiceContext);
+ console.log('Blocks in scrollable promo:', blocks, blocks.type);
const eventTrackingData = {
componentName: `edoj${blockGroupIndex}`,
format: 'CHD=edoj',
};
-
+ console.log('experimentVariant:', experimentVariant);
const viewRef = useViewTracker(eventTrackingData);
const handleClickTracking = useClickTrackerHandler(eventTrackingData);
@@ -72,22 +102,34 @@ const ScrollablePromo = ({ blocks, blockGroupIndex = null }) => {
return null;
}
- const title =
- blocks[0].type === 'title' &&
- path(
- ['0', 'model', 'blocks', '0', 'model', 'blocks', '0', 'model', 'text'],
- blocks,
- );
-
+ let title;
+ if (experimentVariant === 'A') {
+ // title = `${translations.topStoriesTitle || 'Top Stories'} - `;
+ title = translations.topStoriesTitle || 'Top Stories';
+ } else if (experimentVariant === 'B') {
+ // title = `${mostRead.header || 'Most Read'} - `;
+ title = mostRead.header || 'Most Read';
+ } else {
+ title =
+ blocks[0].type === 'title' &&
+ path(
+ ['0', 'model', 'blocks', '0', 'model', 'blocks', '0', 'model', 'text'],
+ blocks,
+ );
+ }
const blocksWithoutTitle = blocks[0].type === 'title' ? tail(blocks) : blocks;
const isSingleItem = blocksWithoutTitle.length === 1;
- const ariaLabel = title && idSanitiser(title);
+ const ariaLabel =
+ title &&
+ idSanitiser(`${title}${experimentVariant !== 'none' ? ' scrollable' : ''}`);
const a11yAttributes = {
- as: 'section',
- role: 'region',
+ ...(experimentVariant !== 'none' && {
+ as: 'section',
+ role: 'region',
+ }),
...(ariaLabel
? { 'aria-labelledby': ariaLabel }
: {
@@ -98,32 +140,46 @@ const ScrollablePromo = ({ blocks, blockGroupIndex = null }) => {
),
}),
};
-
return (
-
- {title && (
-
- {title}
-
- )}
- {isSingleItem ? (
-
-
-
- ) : (
-
- )}
-
+
+
+ {title && (
+
+ {title}
+
+ )}
+ {experimentVariant !== 'none' && (
+
+ )}
+ {experimentVariant === 'none' && isSingleItem && (
+
+
+
+ )}
+ {experimentVariant === 'none' && !isSingleItem && (
+
+ )}
+
+
);
};
diff --git a/src/app/legacy/components/ScrollablePromo/index.stories.jsx b/src/app/legacy/components/ScrollablePromo/index.stories.jsx
index 3dd1cec8b29..37e6d6021ad 100644
--- a/src/app/legacy/components/ScrollablePromo/index.stories.jsx
+++ b/src/app/legacy/components/ScrollablePromo/index.stories.jsx
@@ -11,6 +11,8 @@ import {
twoLinksWithNoImages,
truncatedTextInSingleLink,
arabicText,
+ MostReadBlocks,
+ TopStoriesBlocks,
} from './helpers/fixtureData';
const BackGround = styled.div`
@@ -18,10 +20,10 @@ const BackGround = styled.div`
padding: 2rem;
`;
-const ScrollablePromoComponent = ({ data, service }) => (
+const ScrollablePromoComponent = ({ data, variant, service }) => (
-
+
);
@@ -65,3 +67,19 @@ export const ArabicText = () => (
export const WithTimestamp = (_, { service }) => (
);
+
+export const OJExperimentMostRead = (_, { service }) => (
+
+);
+
+export const OJExperimentTopStories = (_, { service }) => (
+
+);
diff --git a/src/app/legacy/components/ScrollablePromo/index.test.jsx b/src/app/legacy/components/ScrollablePromo/index.test.jsx
index e8cb12d1046..4261442d545 100644
--- a/src/app/legacy/components/ScrollablePromo/index.test.jsx
+++ b/src/app/legacy/components/ScrollablePromo/index.test.jsx
@@ -7,6 +7,8 @@ import {
oneLinkOnly,
oneLinkWithNoTitle,
moreThanThreeLinks,
+ topStoriesBlocks,
+ mostReadBlocks,
} from './helpers/fixtureData';
import ScrollablePromo from '.';
import { edOjA, edOjB } from './fixtures';
@@ -158,4 +160,34 @@ describe('ScrollablePromo', () => {
);
expect(container).toMatchSnapshot();
});
+
+ it('should render Top Stories ScrollablePromo with experimentVariant A', () => {
+ console.log('ccc', topStoriesBlocks);
+ const { container, getByTestId, getByRole, getAllByRole } = render(
+ ,
+ );
+ expect(container.childElementCount).toEqual(1);
+ const heading = getByTestId('eoj-recommendations-heading');
+ expect(heading).toBeInTheDocument();
+ expect(heading).toHaveTextContent('Top Stories'); // translations were not available in the rendered component
+
+ const list = getByRole('list');
+ expect(list).toBeInTheDocument();
+ const items = getAllByRole('listitem');
+ expect(items).toHaveLength(3);
+ });
+ it('should render Most Read ScrollablePromo withexperimentVariant B', () => {
+ const { container, getByTestId, getByRole, getAllByRole } = render(
+ ,
+ );
+ expect(container.childElementCount).toEqual(1);
+ const heading = getByTestId('eoj-recommendations-heading');
+ expect(heading).toBeInTheDocument();
+ expect(heading).toHaveTextContent('Most read'); // there is a 'translation' for this, but it is English
+
+ const list = getByRole('list');
+ expect(list).toBeInTheDocument();
+ const items = getAllByRole('listitem');
+ expect(items).toHaveLength(5);
+ });
});
diff --git a/src/app/legacy/containers/App/index.test.jsx b/src/app/legacy/containers/App/index.test.jsx
index 05f6583d4a7..1779733008a 100644
--- a/src/app/legacy/containers/App/index.test.jsx
+++ b/src/app/legacy/containers/App/index.test.jsx
@@ -22,7 +22,7 @@ describe('ClientApp', () => {
it('BrowserRouter should be called with the correct props', () => {
const actualBrowserRouter = ReactRouter.BrowserRouter;
- ReactRouter.BrowserRouter = jest.fn(() => 'Browser Router');
+ ReactRouter.BrowserRouter = jest.fn(() => <>>);
renderClientApp();
expect(ReactRouter.BrowserRouter).toHaveBeenCalledWith(
{
@@ -63,7 +63,7 @@ describe('ServerApp', () => {
it('StaticRouter should be called with the correct props', () => {
const actualStaticRouter = ReactRouter.StaticRouter;
- ReactRouter.StaticRouter = jest.fn(() => 'Static Router');
+ ReactRouter.StaticRouter = jest.fn(() => <>>);
renderServerApp();
expect(ReactRouter.StaticRouter).toHaveBeenCalledWith(
{
diff --git a/src/app/legacy/containers/ArticleMetadata/index.jsx b/src/app/legacy/containers/ArticleMetadata/index.jsx
index cce20e5efe0..cc4ecb0cebc 100644
--- a/src/app/legacy/containers/ArticleMetadata/index.jsx
+++ b/src/app/legacy/containers/ArticleMetadata/index.jsx
@@ -11,8 +11,8 @@ const ArticleMetadata = ({
firstPublished,
lastPublished,
section = '',
- aboutTags,
- mentionsTags,
+ aboutTags = [],
+ mentionsTags = [],
lang,
description,
imageLocator = '',
diff --git a/src/app/legacy/containers/CpsFeaturesAnalysis/index.jsx b/src/app/legacy/containers/CpsFeaturesAnalysis/index.jsx
index 0884fb18a87..9a3ef7c475a 100644
--- a/src/app/legacy/containers/CpsFeaturesAnalysis/index.jsx
+++ b/src/app/legacy/containers/CpsFeaturesAnalysis/index.jsx
@@ -14,7 +14,6 @@ import {
GEL_SPACING_DBL,
GEL_SPACING_TRPL,
} from '#psammead/gel-foundations/src/spacings';
-import { OptimizelyContext } from '@optimizely/react-sdk';
import { ServiceContext } from '../../../contexts/ServiceContext';
import CpsOnwardJourney from '../CpsOnwardJourney';
import FrostedGlassPromo from '../../../components/FrostedGlassPromo/lazy';
@@ -61,25 +60,10 @@ const StoryPromoLiFeatures = styled(StoryPromoLi)`
}
`;
-const PromoListComponent = ({
- promoItems,
- dir = 'ltr',
- sendOptimizelyEvents,
-}) => {
+const PromoListComponent = ({ promoItems, dir = 'ltr' }) => {
const { serviceDatetimeLocale } = useContext(ServiceContext);
- const { optimizely } = useContext(OptimizelyContext);
-
- const eventTrackingDataWithOptimizely = {
- block: {
- ...eventTrackingData.block,
- ...(sendOptimizelyEvents && {
- optimizely,
- optimizelyMetricNameOverride: 'features',
- }),
- },
- };
- const viewRef = useViewTracker(eventTrackingDataWithOptimizely.block);
+ const viewRef = useViewTracker(eventTrackingData.block);
return (
@@ -97,7 +81,7 @@ const PromoListComponent = ({
displayImage
displaySummary={false}
serviceDatetimeLocale={serviceDatetimeLocale}
- eventTrackingData={eventTrackingDataWithOptimizely}
+ eventTrackingData={eventTrackingData}
sectionType="features-and-analysis"
/>
@@ -107,21 +91,10 @@ const PromoListComponent = ({
);
};
-const PromoComponent = ({ promo, dir = 'ltr', sendOptimizelyEvents }) => {
- const { optimizely } = useContext(OptimizelyContext);
+const PromoComponent = ({ promo, dir = 'ltr' }) => {
const { serviceDatetimeLocale } = useContext(ServiceContext);
- const eventTrackingDataWithOptimizely = {
- block: {
- ...eventTrackingData.block,
- ...(sendOptimizelyEvents && {
- optimizely,
- optimizelyMetricNameOverride: 'features',
- }),
- },
- };
-
- const viewRef = useViewTracker(eventTrackingDataWithOptimizely.block);
+ const viewRef = useViewTracker(eventTrackingData);
return (
@@ -130,7 +103,7 @@ const PromoComponent = ({ promo, dir = 'ltr', sendOptimizelyEvents }) => {
dir={dir}
displayImage
serviceDatetimeLocale={serviceDatetimeLocale}
- eventTrackingData={eventTrackingDataWithOptimizely}
+ eventTrackingData={eventTrackingData}
sectionType="features-and-analysis"
/>
@@ -138,10 +111,9 @@ const PromoComponent = ({ promo, dir = 'ltr', sendOptimizelyEvents }) => {
};
const FeaturesAnalysis = ({
- content,
+ content = [],
parentColumns,
sectionLabelBackground,
- sendOptimizelyEvents,
}) => {
const { translations } = useContext(ServiceContext);
@@ -161,7 +133,6 @@ const FeaturesAnalysis = ({
promoListComponent={PromoListComponent}
columnType="secondary"
sectionLabelBackground={sectionLabelBackground}
- sendOptimizelyEvents={sendOptimizelyEvents}
/>
);
};
diff --git a/src/app/legacy/containers/CpsOnwardJourney/index.jsx b/src/app/legacy/containers/CpsOnwardJourney/index.jsx
index 3b12a1e2c74..da98415d5d5 100644
--- a/src/app/legacy/containers/CpsOnwardJourney/index.jsx
+++ b/src/app/legacy/containers/CpsOnwardJourney/index.jsx
@@ -128,7 +128,6 @@ const CpsOnwardJourney = ({
columnType,
skipLink = null,
eventTrackingData = null,
- sendOptimizelyEvents = false,
}) => {
const { script, service, dir } = useContext(ServiceContext);
@@ -138,18 +137,27 @@ const CpsOnwardJourney = ({
'aria-labelledby': labelId,
};
+ const CpsOnwardJourneyWrapper = ({ children }) =>
+ parentColumns ? (
+
+ {children}
+
+ ) : (
+
+ {children}
+
+ );
+
if (!content.length) return null;
const hasSingleContent = content.length === 1;
const [singleContent] = content;
return (
-
+
{title ? (
) : (
@@ -180,7 +187,6 @@ const CpsOnwardJourney = ({
dir={dir}
isMediaContent={isMediaContent}
eventTrackingData={eventTrackingData}
- sendOptimizelyEvents={sendOptimizelyEvents}
/>
)}
diff --git a/src/app/legacy/containers/CpsRecommendations/index.jsx b/src/app/legacy/containers/CpsRecommendations/index.jsx
index a221093593b..eb9c7beb69a 100644
--- a/src/app/legacy/containers/CpsRecommendations/index.jsx
+++ b/src/app/legacy/containers/CpsRecommendations/index.jsx
@@ -45,7 +45,7 @@ const LabelComponent = styled(SectionLabel)`
}
`;
-const CpsRecommendations = ({ items }) => {
+const CpsRecommendations = ({ items = [] }) => {
const { recommendations, translations, script, service, dir } =
useContext(ServiceContext);
const { enabled } = useToggle('cpsRecommendations');
diff --git a/src/app/legacy/containers/EpisodeList/RecentVideoEpisodes/index.jsx b/src/app/legacy/containers/EpisodeList/RecentVideoEpisodes/index.jsx
index 1540091f202..1facc9f732b 100644
--- a/src/app/legacy/containers/EpisodeList/RecentVideoEpisodes/index.jsx
+++ b/src/app/legacy/containers/EpisodeList/RecentVideoEpisodes/index.jsx
@@ -32,23 +32,10 @@ const StyledSectionLabel = styled(SectionLabel)`
margin-bottom: ${GEL_SPACING_TRPL};
}
`;
-
const InlineDiv = styled.div`
display: inline;
`;
-const getAmpImageComponent =
- ({ image, altText }) =>
- () => (
-
- );
-
const RecentVideoEpisodes = ({ masterBrand, episodes }) => {
const { script, service, dir, timezone, datetimeLocale, translations } =
useContext(ServiceContext);
@@ -114,7 +101,15 @@ const RecentVideoEpisodes = ({ masterBrand, episodes }) => {
locale: datetimeLocale,
})}
{...(isAmp && {
- as: getAmpImageComponent(episode),
+ as: () => (
+
+ ),
})}
/>
{/* these must be concatenated for screen reader UX */}
diff --git a/src/app/legacy/containers/Footer/__snapshots__/index.test.jsx.snap b/src/app/legacy/containers/Footer/__snapshots__/index.test.jsx.snap
index b6c365ea68f..6390e55f9b6 100644
--- a/src/app/legacy/containers/Footer/__snapshots__/index.test.jsx.snap
+++ b/src/app/legacy/containers/Footer/__snapshots__/index.test.jsx.snap
@@ -276,13 +276,13 @@ exports[`FooterContainer snapshots should render correctly 1`] = `
@media (min-width: 15rem) and (max-width: 37.4375rem) {
.emotion-14 {
- grid-template-rows: repeat(4, auto);
+ grid-template-rows: repeat(5, auto);
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
.emotion-14 {
- grid-template-rows: repeat(3, auto);
+ grid-template-rows: repeat(4, auto);
}
}
@@ -415,7 +415,9 @@ exports[`FooterContainer snapshots should render correctly 1`] = `
Why you can trust the BBC
-
+
-
+
-
+
-
+
-
+
-
+
+
{
beforeEach(() => {
- jest.useFakeTimers().setSystemTime(new Date('3000-01-01T12:00:00Z'));
+ // eslint-disable-next-line prettier/prettier
+ global.Date = class extends RealDate {
+ constructor() {
+ super();
+ return new RealDate('3000-01-01T12:00:00');
+ }
+ };
+ });
+
+ afterEach(() => {
+ global.Date = RealDate;
});
describe('snapshots', () => {
diff --git a/src/app/legacy/containers/Fragment/index.test.jsx b/src/app/legacy/containers/Fragment/index.test.jsx
index 13834f60f44..432673708aa 100644
--- a/src/app/legacy/containers/Fragment/index.test.jsx
+++ b/src/app/legacy/containers/Fragment/index.test.jsx
@@ -2,7 +2,7 @@ import React from 'react';
import { render } from '@testing-library/react';
import { shouldMatchSnapshot } from '#psammead/psammead-test-helpers/src';
import { ServiceContext } from '../../../contexts/ServiceContext';
-import FragmentContainer from './index';
+import Fragment from './index';
const newsContext = {
service: 'news',
@@ -18,7 +18,7 @@ const CreateFragment = ({
text = '',
} = {}) => (
-
+
);
diff --git a/src/app/legacy/containers/Header/index.jsx b/src/app/legacy/containers/Header/index.jsx
index 824742e4759..9c92ed80d34 100644
--- a/src/app/legacy/containers/Header/index.jsx
+++ b/src/app/legacy/containers/Header/index.jsx
@@ -1,9 +1,14 @@
import React, { useContext, useRef, useState } from 'react';
+import PropTypes from 'prop-types';
import SkipLink from '#psammead/psammead-brand/src/SkipLink';
import { RequestContext } from '#contexts/RequestContext';
import useOperaMiniDetection from '#hooks/useOperaMiniDetection';
import ScriptLink from '#app/components/Header/ScriptLink';
-import { ARTICLE_PAGE, HOME_PAGE } from '#app/routes/utils/pageTypes';
+import {
+ ARTICLE_PAGE,
+ HOME_PAGE,
+ TOPIC_PAGE,
+} from '#app/routes/utils/pageTypes';
import LiteSiteCta from '#app/components/LiteSiteCta';
import { liteEnabledServices } from '#app/components/LiteSiteCta/liteSiteConfig';
import { ServiceContext } from '../../../contexts/ServiceContext';
@@ -43,12 +48,16 @@ const Header = ({ brandRef, borderBottom, skipLink, scriptLink, linkId }) => {
);
};
-const HeaderContainer = () => {
+const HeaderContainer = ({
+ scriptSwitchId = '',
+ renderScriptSwitch = true,
+ propsForOJExperiment,
+}) => {
const { isAmp, isApp, pageType, isLite } = useContext(RequestContext);
const { service, script, translations, dir, scriptLink, lang, serviceLang } =
useContext(ServiceContext);
const { skipLinkText } = translations;
-
+ console.log('propsForOJExperiment in HeaderContainer:', propsForOJExperiment);
const isOperaMini = useOperaMiniDetection();
const brandRef = useRef(null);
@@ -70,14 +79,14 @@ const HeaderContainer = () => {
let shouldRenderScriptSwitch = false;
- if (scriptLink) {
- switch (true) {
- case service === 'uzbek' && ![ARTICLE_PAGE, HOME_PAGE].includes(pageType):
- shouldRenderScriptSwitch = false;
- break;
- default:
- shouldRenderScriptSwitch = true;
- break;
+ if (scriptLink && renderScriptSwitch) {
+ if (
+ service === 'uzbek' &&
+ ![ARTICLE_PAGE, HOME_PAGE, TOPIC_PAGE].includes(pageType)
+ ) {
+ shouldRenderScriptSwitch = false;
+ } else {
+ shouldRenderScriptSwitch = true;
}
}
@@ -91,19 +100,57 @@ const HeaderContainer = () => {
}
+ scriptLink={
+ shouldRenderScriptSwitch && (
+
+ )
+ }
/>
) : (
}
+ scriptLink={
+ shouldRenderScriptSwitch && (
+
+ )
+ }
/>
)}
{renderLiteSiteCTA && }
-
+
);
};
+HeaderContainer.propTypes = {
+ scriptSwitchId: PropTypes.string,
+ renderScriptSwitch: PropTypes.bool,
+ propsForOJExperiment: PropTypes.shape({
+ blocks: PropTypes.arrayOf(
+ PropTypes.oneOfType([
+ PropTypes.shape({
+ headlines: PropTypes.shape({
+ promoHeadline: PropTypes.shape({
+ text: PropTypes.string.isRequired,
+ }).isRequired,
+ }).isRequired,
+ locators: PropTypes.shape({
+ canonicalUrl: PropTypes.string.isRequired,
+ }).isRequired,
+ }),
+ PropTypes.shape({
+ title: PropTypes.string.isRequired,
+ href: PropTypes.string.isRequired,
+ }),
+ ]),
+ ),
+ experimentVariant: PropTypes.oneOf(['A', 'B', 'none']),
+ }),
+};
+HeaderContainer.defaultProps = {
+ scriptSwitchId: '',
+ renderScriptSwitch: true,
+ propsForOJExperiment: null,
+};
export default HeaderContainer;
diff --git a/src/app/legacy/containers/Header/index.test.jsx b/src/app/legacy/containers/Header/index.test.jsx
index 2855d61eb91..265e44afe8c 100644
--- a/src/app/legacy/containers/Header/index.test.jsx
+++ b/src/app/legacy/containers/Header/index.test.jsx
@@ -17,6 +17,7 @@ const {
FRONT_PAGE,
LIVE_RADIO_PAGE,
MEDIA_ASSET_PAGE,
+ TOPIC_PAGE,
HOME_PAGE,
TV_PAGE,
} = PAGE_TYPES;
@@ -35,8 +36,11 @@ jest.mock('react-router-dom', () => ({
useRouteMatch: () => ({ path: '/news', params: {} }),
}));
-const HeaderContainerWithContext = ({ renderOptions }) =>
- render( , {
+const HeaderContainerWithContext = ({
+ renderScriptSwitch = true,
+ renderOptions,
+}) =>
+ render( , {
toggles: defaultToggleState,
...renderOptions,
});
@@ -157,7 +161,7 @@ describe(`Header`, () => {
describe('when service is uzbek', () => {
describe.each(['cyr', 'lat'])('and variant is %s', variant => {
- const supportedUzbekPageTypes = [ARTICLE_PAGE, HOME_PAGE];
+ const supportedUzbekPageTypes = [ARTICLE_PAGE, HOME_PAGE, TOPIC_PAGE];
const unsupportedUzbekPageTypes = Object.values(PAGE_TYPES).filter(
pageType => !supportedUzbekPageTypes.includes(pageType),
);
@@ -198,6 +202,19 @@ describe(`Header`, () => {
});
});
+ it('should not render script link on Topic page when missing variant topic ID', () => {
+ const { container } = HeaderContainerWithContext({
+ renderScriptSwitch: false,
+ renderOptions: {
+ pageType: TOPIC_PAGE,
+ service: 'serbian',
+ variant: 'cyr',
+ },
+ });
+
+ expect(container.querySelectorAll(scriptLinkSelector).length).toBe(0);
+ });
+
it('should focus on consent banner heading on mount', () => {
const initialFocusElement = document.activeElement;
HeaderContainerWithContext({
diff --git a/src/app/legacy/containers/Navigation/index.canonical.jsx b/src/app/legacy/containers/Navigation/index.canonical.jsx
index 5bf94a2b045..254f3c620e3 100644
--- a/src/app/legacy/containers/Navigation/index.canonical.jsx
+++ b/src/app/legacy/containers/Navigation/index.canonical.jsx
@@ -9,11 +9,19 @@ import {
import { GEL_GROUP_2_SCREEN_WIDTH_MAX } from '#psammead/gel-foundations/src/breakpoints';
import useMediaQuery from '#hooks/useMediaQuery';
import { RequestContext } from '#app/contexts/RequestContext';
+import ScrollablePromo from '#components/ScrollablePromo';
const ScrollableWrapper = styled.div`
position: relative;
`;
-
+const Divider = styled.div`
+ content: '';
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ border-bottom: 0.0625rem solid ${props => props.theme.palette.GREY_3};
+`;
const CanonicalNavigationContainer = ({
script,
service,
@@ -21,6 +29,8 @@ const CanonicalNavigationContainer = ({
menuAnnouncedText,
scrollableListItems,
dropdownListItems,
+ experimentVariant,
+ blocks,
}) => {
const { isLite } = useContext(RequestContext);
const [isOpen, setIsOpen] = useState(false);
@@ -48,8 +58,10 @@ const CanonicalNavigationContainer = ({
{scrollableListItems}
)}
+
{dropdownListItems}
+
);
};
diff --git a/src/app/legacy/containers/Navigation/index.jsx b/src/app/legacy/containers/Navigation/index.jsx
index 7a203c9d7ad..785b9492ca5 100644
--- a/src/app/legacy/containers/Navigation/index.jsx
+++ b/src/app/legacy/containers/Navigation/index.jsx
@@ -48,9 +48,10 @@ const renderListItems = (
return [...listAcc, listItem];
}, []);
-const NavigationContainer = () => {
+const NavigationContainer = ({ propsForOJExperiment }) => {
const { isAmp, isLite } = useContext(RequestContext);
-
+ const { blocks, experimentVariant } = propsForOJExperiment;
+ console.log('blocks in NavigationContainer:', blocks, experimentVariant);
const { script, translations, navigation, service, dir } =
useContext(ServiceContext);
@@ -98,6 +99,8 @@ const NavigationContainer = () => {
scrollableNavClickTrackerHandler,
scrollableNavViewRef,
isLite,
+ blocks,
+ experimentVariant,
)}
);
@@ -128,6 +131,8 @@ const NavigationContainer = () => {
dir={dir}
script={script}
service={service}
+ experimentVariant={experimentVariant}
+ blocks={blocks}
/>
);
};
diff --git a/src/app/legacy/containers/OnDemandImage/index.test.jsx b/src/app/legacy/containers/OnDemandImage/index.test.jsx
index 0f49c82d9e2..df382896048 100644
--- a/src/app/legacy/containers/OnDemandImage/index.test.jsx
+++ b/src/app/legacy/containers/OnDemandImage/index.test.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import { RequestContextProvider } from '#contexts/RequestContext';
-import { AUDIO_PAGE } from '#app/routes/utils/pageTypes';
+import { MEDIA_PAGE } from '#app/routes/utils/pageTypes';
import { render } from '../../../components/react-testing-library-with-providers';
import { ServiceContextProvider } from '../../../contexts/ServiceContext';
import OnDemandImage from '.';
@@ -10,7 +10,7 @@ const component = ({ url, isAmp, service, alt }) => (
diff --git a/src/app/legacy/containers/OptimizelyArticleCompleteTracking/index.jsx b/src/app/legacy/containers/OptimizelyArticleCompleteTracking/index.jsx
index ad8a584994b..1753251120a 100644
--- a/src/app/legacy/containers/OptimizelyArticleCompleteTracking/index.jsx
+++ b/src/app/legacy/containers/OptimizelyArticleCompleteTracking/index.jsx
@@ -12,7 +12,7 @@ const OptimizelyArticleCompleteTracking = () => {
const [pageCompleteSent, setPageCompleteSent] = useState(false);
const [isVisible, setIsVisible] = useState(false);
- const experimentVariation = useOptimizelyVariation(OPTIMIZELY_CONFIG.flagKey);
+ const experimentVariation = useOptimizelyVariation(OPTIMIZELY_CONFIG.flagId);
const sendPageCompleteEvent =
experimentVariation && !isAmp && !pageCompleteSent && isVisible;
diff --git a/src/app/legacy/containers/OptimizelyPageViewTracking/index.jsx b/src/app/legacy/containers/OptimizelyPageViewTracking/index.jsx
index 524a8483179..11a51ec0fcf 100644
--- a/src/app/legacy/containers/OptimizelyPageViewTracking/index.jsx
+++ b/src/app/legacy/containers/OptimizelyPageViewTracking/index.jsx
@@ -10,7 +10,7 @@ const OptimizelyPageViewTracking = () => {
const { optimizely } = useContext(OptimizelyContext);
const [pageViewSent, setPageViewSent] = useState(false);
- const experimentVariation = useOptimizelyVariation(OPTIMIZELY_CONFIG.flagKey);
+ const experimentVariation = useOptimizelyVariation(OPTIMIZELY_CONFIG.flagId);
const hasVariationKey = experimentVariation !== null;
const sendPageViewEvent = hasVariationKey && !isAmp && !pageViewSent;
diff --git a/src/app/legacy/containers/PageHandlers/__snapshots__/withContexts.test.jsx.snap b/src/app/legacy/containers/PageHandlers/__snapshots__/withContexts.test.jsx.snap
index 040bd94a784..7684b08b551 100644
--- a/src/app/legacy/containers/PageHandlers/__snapshots__/withContexts.test.jsx.snap
+++ b/src/app/legacy/containers/PageHandlers/__snapshots__/withContexts.test.jsx.snap
@@ -3,7 +3,7 @@
exports[`withContexts HOC should return all context providers 1`] = `
- {"lang":"en-GB","articleAuthor":"https://www.facebook.com/bbcnews","articleTimestampPrefix":"Updated","articleTimestampSuffix":"","atiAnalyticsAppName":"news","atiAnalyticsProducerId":"64","atiAnalyticsProducerName":"NEWS","chartbeatDomain":"bbc.co.uk","brandName":"BBC News","product":"BBC News","defaultImage":"https://static.files.bbci.co.uk/ws/simorgh-assets/public/news/images/metadata/poster-1024x576.png","defaultImageAltText":"BBC News","dir":"ltr","externalLinkText":", external","imageCaptionOffscreenText":"Image caption, ","videoCaptionOffscreenText":"Video caption, ","audioCaptionOffscreenText":"Audio caption","defaultCaptionOffscreenText":"Caption, ","imageCopyrightOffscreenText":"Image source, ","locale":"en_GB","datetimeLocale":"en-gb","service":"news","serviceName":"News","languageName":"English","twitterCreator":"@BBCNews","twitterSite":"@BBCNews","noBylinesPolicy":"https://www.bbc.com/news/help-41670342#authorexpertise","publishingPrinciples":"https://www.bbc.com/news/help-41670342","isTrustProjectParticipant":true,"script":{"atlas":{"groupA":{"fontSize":78,"lineHeight":84},"groupB":{"fontSize":96,"lineHeight":104},"groupD":{"fontSize":140,"lineHeight":148}},"elephant":{"groupA":{"fontSize":60,"lineHeight":64},"groupB":{"fontSize":78,"lineHeight":84},"groupD":{"fontSize":116,"lineHeight":124}},"imperial":{"groupA":{"fontSize":50,"lineHeight":54},"groupB":{"fontSize":64,"lineHeight":72},"groupD":{"fontSize":96,"lineHeight":104}},"royal":{"groupA":{"fontSize":40,"lineHeight":44},"groupB":{"fontSize":52,"lineHeight":60},"groupD":{"fontSize":76,"lineHeight":84}},"foolscap":{"groupA":{"fontSize":32,"lineHeight":36},"groupB":{"fontSize":40,"lineHeight":44},"groupD":{"fontSize":56,"lineHeight":60}},"canon":{"groupA":{"fontSize":28,"lineHeight":32},"groupB":{"fontSize":32,"lineHeight":36},"groupD":{"fontSize":44,"lineHeight":48}},"trafalgar":{"groupA":{"fontSize":20,"lineHeight":24},"groupB":{"fontSize":24,"lineHeight":28},"groupD":{"fontSize":32,"lineHeight":36}},"paragon":{"groupA":{"fontSize":20,"lineHeight":24},"groupB":{"fontSize":22,"lineHeight":26},"groupD":{"fontSize":28,"lineHeight":32}},"doublePica":{"groupA":{"fontSize":18,"lineHeight":22},"groupB":{"fontSize":20,"lineHeight":24},"groupD":{"fontSize":24,"lineHeight":28}},"greatPrimer":{"groupA":{"fontSize":18,"lineHeight":22},"groupB":{"fontSize":18,"lineHeight":22},"groupD":{"fontSize":20,"lineHeight":24}},"bodyCopy":{"groupA":{"fontSize":15,"lineHeight":20},"groupB":{"fontSize":16,"lineHeight":22},"groupD":{"fontSize":16,"lineHeight":22}},"pica":{"groupA":{"fontSize":15,"lineHeight":20},"groupB":{"fontSize":16,"lineHeight":20},"groupD":{"fontSize":16,"lineHeight":20}},"longPrimer":{"groupA":{"fontSize":15,"lineHeight":18},"groupB":{"fontSize":15,"lineHeight":18},"groupD":{"fontSize":14,"lineHeight":18}},"brevier":{"groupA":{"fontSize":14,"lineHeight":18},"groupB":{"fontSize":14,"lineHeight":18},"groupD":{"fontSize":13,"lineHeight":16}},"minion":{"groupA":{"fontSize":12,"lineHeight":16},"groupB":{"fontSize":12,"lineHeight":16},"groupD":{"fontSize":12,"lineHeight":16}}},"manifestPath":"/articles/manifest.json","frontPageTitle":"Home","showAdPlaceholder":false,"showRelatedTopics":true,"translations":{"ads":{"advertisementLabel":"Advertisement"},"home":"Home","currentPage":"Current page","skipLinkText":"Skip to content","relatedContent":"Related content","relatedTopics":"Related topics","navMenuText":"Sections","mediaAssetPage":{"mediaPlayer":"Media player","audioPlayer":"Audio player","videoPlayer":"Video player"},"liveExperiencePage":{"liveLabel":"Live","liveCoverage":"Live Coverage","breaking":"Breaking","postedAt":"Posted at","summary":"Summary","shareButtonText":"Share"},"downloads":{"instructions":"You can download and view today’s news.","title":"File Download"},"gist":"At a glance","error":{"404":{"statusCode":"404","title":"Page cannot be found","message":"Sorry, we're unable to bring you the page you're looking for. Please try:","solutions":["Double checking the url","Hitting the refresh button in your browser","Searching for this page using the BBC search bar"],"callToActionFirst":"Alternatively, please visit the ","callToActionLinkText":"BBC News homepage.","callToActionLast":"","callToActionLinkUrl":"https://www.bbc.com/news"},"500":{"statusCode":"500","title":"Internal server error","message":"Sorry, we're currently unable to bring you the page you're looking for. Please try:","solutions":["Hitting the refresh button in your browser","Coming back again later"],"callToActionFirst":"Alternatively, please visit the ","callToActionLinkText":"BBC News homepage.","callToActionLast":"","callToActionLinkUrl":"https://www.bbc.com/news"}},"consentBanner":{"privacy":{"title":"We've updated our Privacy and Cookies Policy","description":{"uk":{"first":"We've made some important changes to our Privacy and Cookies Policy and we want you to know what this means for you and your data.","linkText":null,"last":null,"linkUrl":null},"international":{"first":"We've made some important changes to our Privacy and Cookies Policy and we want you to know what this means for you and your data.","linkText":null,"last":null,"linkUrl":null}},"accept":"OK","reject":"Find out what's changed","rejectUrl":"https://www.bbc.co.uk/usingthebbc/privacy-policy/"},"cookie":{"amp":{"accept":"Accept data collection and continue","reject":"Reject data collection and continue","initial":{"title":"Let us know you agree to data collection on AMP","description":{"first":"We and our partners use technologies, such as ","linkText":"cookies","last":", and collect browsing data to give you the best online experience and to personalise the content and advertising shown to you. Please let us know if you agree.","linkUrl":"https://www.bbc.co.uk/usingthebbc/cookies/what-do-i-need-to-know-about-cookies/"},"manage":"Manage my settings"},"manage":{"title":"Manage consent settings on AMP pages","description":{"para1":"These settings apply to AMP pages only. You may be asked to set these preferences again when you visit non-AMP BBC pages.","para2":"The lightweight mobile page you have visited has been built using Google AMP technology.","heading2":"Strictly necessary data collection","para3":"To make our web pages work, we store some limited information on your device without your consent.","para4":{"text":"Read more about the essential information we store on your device to make our web pages work.","url":"https://www.bbc.co.uk/usingthebbc/strictly-necessary-cookies/"},"para5":"We use local storage to store your consent preferences on your device.","heading3":"Optional data collection","para6":"When you consent to data collection on AMP pages you are consenting to allow us to display personalised ads that are relevant to you when you are outside of the UK.","para7":{"text":"Read more about how we personalise ads in the BBC and our advertising partners.","url":"https://www.bbc.com/usingthebbc/cookies/how-does-the-bbc-use-cookies-for-advertising/"},"para8":"You can choose not to receive personalised ads by clicking “Reject data collection and continue” below. Please note that you will still see advertising, but it will not be personalised to you.","para9":"You can change these settings by clicking “Ad Choices / Do not sell my info” in the footer at any time."}}},"canonical":{"title":"Let us know you agree to cookies","description":{"uk":{"first":"We use ","linkText":"cookies","last":" to give you the best online experience. Please let us know if you agree to all of these cookies.","linkUrl":"https://www.bbc.co.uk/usingthebbc/cookies/what-do-i-need-to-know-about-cookies/"},"international":{"first":"We use ","linkText":"cookies","last":" to give you the best online experience. Please let us know if you agree to all of these cookies.","linkUrl":"https://www.bbc.co.uk/usingthebbc/cookies/what-do-i-need-to-know-about-cookies/"}},"accept":"Yes, I agree","reject":"No, take me to settings","rejectUrl":"https://www.bbc.co.uk/usingthebbc/cookies/how-can-i-change-my-bbc-cookie-settings/"}}},"media":{"noJs":"To play this content, please enable JavaScript, or try a different browser","contentExpired":"This content is no longer available","audio":"Audio","photogallery":"Image gallery","video":"Video","listen":"Listen","watch":"Watch","liveLabel":"LIVE","nextLabel":"NEXT","previousRadioShow":"Previous radio show","nextRadioShow":"Next radio show","duration":"Duration"},"socialEmbed":{},"featuresAnalysisTitle":"More to explore"},"mostRead":{"header":"Most read","lastUpdated":"Last updated:","numberOfItems":10,"hasMostRead":true},"radioSchedule":{"hasRadioSchedule":false},"recommendations":{"hasStoryRecommendations":false},"footer":{"trustProjectLink":{"href":"https://www.bbc.com/news/help-41670342","text":"Why you can trust the BBC"},"externalLink":{"href":"https://www.bbc.co.uk/editorialguidelines/guidance/feeds-and-links","text":"Read about our approach to external linking."},"links":[{"href":"https://www.bbc.com/terms","text":"Terms of Use"},{"href":"https://www.bbc.co.uk/aboutthebbc/","text":"About the BBC"},{"href":"https://www.bbc.com/privacy/","text":"Privacy Policy"},{"href":"https://www.bbc.com/usingthebbc/cookies/","text":"Cookies"},{"href":"https://www.bbc.com/accessibility/","text":"Accessibility Help"},{"href":"https://www.bbc.com/contact/","text":"Contact the BBC"},{"id":"COOKIE_SETTINGS","href":"#","text":"Do not share or sell my info","lang":"en-GB"}],"copyrightText":"BBC. The BBC is not responsible for the content of external sites."},"timezone":"Europe/London","navigation":[{"title":"Home","url":"/news"},{"title":"UK","url":"/news/uk"},{"title":"World","url":"/news/world"},{"title":"Business","url":"/news/business"},{"title":"Politics","url":"/news/politics"},{"title":"Tech","url":"/news/technology"},{"title":"Science","url":"/news/science_and_environment"},{"title":"Health","url":"/news/health"},{"title":"Family & Education","url":"/news/education"},{"title":"Entertainment & Arts","url":"/news/entertainment_and_arts"},{"title":"Stories","url":"/news/stories"}]}
+ {"lang":"en-GB","articleAuthor":"https://www.facebook.com/bbcnews","articleTimestampPrefix":"Updated","articleTimestampSuffix":"","atiAnalyticsAppName":"news","atiAnalyticsProducerId":"64","chartbeatDomain":"bbc.co.uk","brandName":"BBC News","product":"BBC News","defaultImage":"https://static.files.bbci.co.uk/ws/simorgh-assets/public/news/images/metadata/poster-1024x576.png","defaultImageAltText":"BBC News","dir":"ltr","externalLinkText":", external","imageCaptionOffscreenText":"Image caption, ","videoCaptionOffscreenText":"Video caption, ","audioCaptionOffscreenText":"Audio caption","defaultCaptionOffscreenText":"Caption, ","imageCopyrightOffscreenText":"Image source, ","locale":"en_GB","datetimeLocale":"en-gb","service":"news","serviceName":"News","languageName":"English","twitterCreator":"@BBCNews","twitterSite":"@BBCNews","noBylinesPolicy":"https://www.bbc.com/news/help-41670342#authorexpertise","publishingPrinciples":"https://www.bbc.com/news/help-41670342","isTrustProjectParticipant":true,"script":{"atlas":{"groupA":{"fontSize":78,"lineHeight":84},"groupB":{"fontSize":96,"lineHeight":104},"groupD":{"fontSize":140,"lineHeight":148}},"elephant":{"groupA":{"fontSize":60,"lineHeight":64},"groupB":{"fontSize":78,"lineHeight":84},"groupD":{"fontSize":116,"lineHeight":124}},"imperial":{"groupA":{"fontSize":50,"lineHeight":54},"groupB":{"fontSize":64,"lineHeight":72},"groupD":{"fontSize":96,"lineHeight":104}},"royal":{"groupA":{"fontSize":40,"lineHeight":44},"groupB":{"fontSize":52,"lineHeight":60},"groupD":{"fontSize":76,"lineHeight":84}},"foolscap":{"groupA":{"fontSize":32,"lineHeight":36},"groupB":{"fontSize":40,"lineHeight":44},"groupD":{"fontSize":56,"lineHeight":60}},"canon":{"groupA":{"fontSize":28,"lineHeight":32},"groupB":{"fontSize":32,"lineHeight":36},"groupD":{"fontSize":44,"lineHeight":48}},"trafalgar":{"groupA":{"fontSize":20,"lineHeight":24},"groupB":{"fontSize":24,"lineHeight":28},"groupD":{"fontSize":32,"lineHeight":36}},"paragon":{"groupA":{"fontSize":20,"lineHeight":24},"groupB":{"fontSize":22,"lineHeight":26},"groupD":{"fontSize":28,"lineHeight":32}},"doublePica":{"groupA":{"fontSize":18,"lineHeight":22},"groupB":{"fontSize":20,"lineHeight":24},"groupD":{"fontSize":24,"lineHeight":28}},"greatPrimer":{"groupA":{"fontSize":18,"lineHeight":22},"groupB":{"fontSize":18,"lineHeight":22},"groupD":{"fontSize":20,"lineHeight":24}},"bodyCopy":{"groupA":{"fontSize":15,"lineHeight":20},"groupB":{"fontSize":16,"lineHeight":22},"groupD":{"fontSize":16,"lineHeight":22}},"pica":{"groupA":{"fontSize":15,"lineHeight":20},"groupB":{"fontSize":16,"lineHeight":20},"groupD":{"fontSize":16,"lineHeight":20}},"longPrimer":{"groupA":{"fontSize":15,"lineHeight":18},"groupB":{"fontSize":15,"lineHeight":18},"groupD":{"fontSize":14,"lineHeight":18}},"brevier":{"groupA":{"fontSize":14,"lineHeight":18},"groupB":{"fontSize":14,"lineHeight":18},"groupD":{"fontSize":13,"lineHeight":16}},"minion":{"groupA":{"fontSize":12,"lineHeight":16},"groupB":{"fontSize":12,"lineHeight":16},"groupD":{"fontSize":12,"lineHeight":16}}},"manifestPath":"/articles/manifest.json","frontPageTitle":"Home","showAdPlaceholder":false,"showRelatedTopics":true,"translations":{"ads":{"advertisementLabel":"Advertisement"},"home":"Home","currentPage":"Current page","skipLinkText":"Skip to content","relatedContent":"Related content","relatedTopics":"Related topics","navMenuText":"Sections","mediaAssetPage":{"mediaPlayer":"Media player","audioPlayer":"Audio player","videoPlayer":"Video player"},"liveExperiencePage":{"liveLabel":"Live","liveCoverage":"Live Coverage","breaking":"Breaking","postedAt":"Posted at","summary":"Summary","shareButtonText":"Share"},"downloads":{"instructions":"You can download and view today’s news.","title":"File Download"},"gist":"At a glance","error":{"404":{"statusCode":"404","title":"Page cannot be found","message":"Sorry, we're unable to bring you the page you're looking for. Please try:","solutions":["Double checking the url","Hitting the refresh button in your browser","Searching for this page using the BBC search bar"],"callToActionFirst":"Alternatively, please visit the ","callToActionLinkText":"BBC News homepage.","callToActionLast":"","callToActionLinkUrl":"https://www.bbc.com/news"},"500":{"statusCode":"500","title":"Internal server error","message":"Sorry, we're currently unable to bring you the page you're looking for. Please try:","solutions":["Hitting the refresh button in your browser","Coming back again later"],"callToActionFirst":"Alternatively, please visit the ","callToActionLinkText":"BBC News homepage.","callToActionLast":"","callToActionLinkUrl":"https://www.bbc.com/news"}},"consentBanner":{"privacy":{"title":"We've updated our Privacy and Cookies Policy","description":{"uk":{"first":"We've made some important changes to our Privacy and Cookies Policy and we want you to know what this means for you and your data.","linkText":null,"last":null,"linkUrl":null},"international":{"first":"We've made some important changes to our Privacy and Cookies Policy and we want you to know what this means for you and your data.","linkText":null,"last":null,"linkUrl":null}},"accept":"OK","reject":"Find out what's changed","rejectUrl":"https://www.bbc.co.uk/usingthebbc/privacy-policy/"},"cookie":{"amp":{"accept":"Accept data collection and continue","reject":"Reject data collection and continue","initial":{"title":"Let us know you agree to data collection on AMP","description":{"first":"We and our partners use technologies, such as ","linkText":"cookies","last":", and collect browsing data to give you the best online experience and to personalise the content and advertising shown to you. Please let us know if you agree.","linkUrl":"https://www.bbc.co.uk/usingthebbc/cookies/what-do-i-need-to-know-about-cookies/"},"manage":"Manage my settings"},"manage":{"title":"Manage consent settings on AMP pages","description":{"para1":"These settings apply to AMP pages only. You may be asked to set these preferences again when you visit non-AMP BBC pages.","para2":"The lightweight mobile page you have visited has been built using Google AMP technology.","heading2":"Strictly necessary data collection","para3":"To make our web pages work, we store some limited information on your device without your consent.","para4":{"text":"Read more about the essential information we store on your device to make our web pages work.","url":"https://www.bbc.co.uk/usingthebbc/strictly-necessary-cookies/"},"para5":"We use local storage to store your consent preferences on your device.","heading3":"Optional data collection","para6":"When you consent to data collection on AMP pages you are consenting to allow us to display personalised ads that are relevant to you when you are outside of the UK.","para7":{"text":"Read more about how we personalise ads in the BBC and our advertising partners.","url":"https://www.bbc.com/usingthebbc/cookies/how-does-the-bbc-use-cookies-for-advertising/"},"para8":"You can choose not to receive personalised ads by clicking “Reject data collection and continue” below. Please note that you will still see advertising, but it will not be personalised to you.","para9":"You can change these settings by clicking “Ad Choices / Do not sell my info” in the footer at any time."}}},"canonical":{"title":"Let us know you agree to cookies","description":{"uk":{"first":"We use ","linkText":"cookies","last":" to give you the best online experience. Please let us know if you agree to all of these cookies.","linkUrl":"https://www.bbc.co.uk/usingthebbc/cookies/what-do-i-need-to-know-about-cookies/"},"international":{"first":"We use ","linkText":"cookies","last":" to give you the best online experience. Please let us know if you agree to all of these cookies.","linkUrl":"https://www.bbc.co.uk/usingthebbc/cookies/what-do-i-need-to-know-about-cookies/"}},"accept":"Yes, I agree","reject":"No, take me to settings","rejectUrl":"https://www.bbc.co.uk/usingthebbc/cookies/how-can-i-change-my-bbc-cookie-settings/"}}},"media":{"noJs":"To play this content, please enable JavaScript, or try a different browser","contentExpired":"This content is no longer available","audio":"Audio","photogallery":"Image gallery","video":"Video","listen":"Listen","watch":"Watch","liveLabel":"LIVE","nextLabel":"NEXT","previousRadioShow":"Previous radio show","nextRadioShow":"Next radio show","duration":"Duration"},"socialEmbed":{},"featuresAnalysisTitle":"More to explore"},"mostRead":{"header":"Most read","lastUpdated":"Last updated:","numberOfItems":10,"hasMostRead":true},"radioSchedule":{"hasRadioSchedule":false},"recommendations":{"hasStoryRecommendations":false},"footer":{"trustProjectLink":{"href":"https://www.bbc.com/news/help-41670342","text":"Why you can trust the BBC"},"externalLink":{"href":"https://www.bbc.co.uk/editorialguidelines/guidance/feeds-and-links","text":"Read about our approach to external linking."},"links":[{"href":"https://www.bbc.com/terms","text":"Terms of Use"},{"href":"https://www.bbc.co.uk/aboutthebbc/","text":"About the BBC"},{"href":"https://www.bbc.com/privacy/","text":"Privacy Policy"},{"href":"https://www.bbc.com/usingthebbc/cookies/","text":"Cookies"},{"href":"https://www.bbc.com/accessibility/","text":"Accessibility Help"},{"href":"https://www.bbc.com/contact/","text":"Contact the BBC"},{"id":"COOKIE_SETTINGS","href":"#","text":"Do not share or sell my info","lang":"en-GB"}],"copyrightText":"BBC. The BBC is not responsible for the content of external sites."},"timezone":"Europe/London","navigation":[{"title":"Home","url":"/news"},{"title":"UK","url":"/news/uk"},{"title":"World","url":"/news/world"},{"title":"Business","url":"/news/business"},{"title":"Politics","url":"/news/politics"},{"title":"Tech","url":"/news/technology"},{"title":"Science","url":"/news/science_and_environment"},{"title":"Health","url":"/news/health"},{"title":"Family & Education","url":"/news/education"},{"title":"Entertainment & Arts","url":"/news/entertainment_and_arts"},{"title":"Stories","url":"/news/stories"}]}
{"env":"live","id":"c0000000000o","isUK":true,"origin":"https://www.bbc.com","pageType":"article","derivedPageType":null,"isAmp":true,"isApp":false,"isLite":false,"isNextJs":false,"platform":"amp","statsDestination":"NEWS_PS_TEST","statsPageIdentifier":"news.articles.c0000000000o.page","statusCode":200,"previousPath":null,"variant":null,"timeOnServer":null,"showAdsBasedOnLocation":true,"showCookieBannerBasedOnCountry":true,"service":"news","pathname":"/pathname","canonicalLink":"https://www.bbc.com/pathname","ampLink":"https://www.bbc.com/pathname.amp","canonicalUkLink":"https://www.bbc.co.uk/pathname","ampUkLink":"https://www.bbc.co.uk/pathname.amp","canonicalNonUkLink":"https://www.bbc.com/pathname","ampNonUkLink":"https://www.bbc.com/pathname.amp","mvtExperiments":[{"experimentName":"foo","variation":"bar"}]}
diff --git a/src/app/legacy/containers/PageHandlers/withOptimizelyProvider/index.test.jsx b/src/app/legacy/containers/PageHandlers/withOptimizelyProvider/index.test.jsx
index f7e92ed48e0..e0d4a640f52 100644
--- a/src/app/legacy/containers/PageHandlers/withOptimizelyProvider/index.test.jsx
+++ b/src/app/legacy/containers/PageHandlers/withOptimizelyProvider/index.test.jsx
@@ -21,9 +21,9 @@ const props = {
},
};
-const Component = () => Hola Optimizely ;
-
const TestComponent = () => {
+ const Component = () => Hola Optimizely ;
+
const OptimizelyComponent = withOptimizelyProvider(Component);
const memoizedServiceContextValue = useMemo(
diff --git a/src/app/legacy/containers/PodcastPromo/components/card-episodes-text.jsx b/src/app/legacy/containers/PodcastPromo/components/card-episodes-text.jsx
index eccb9fe8ea5..df019200924 100644
--- a/src/app/legacy/containers/PodcastPromo/components/card-episodes-text.jsx
+++ b/src/app/legacy/containers/PodcastPromo/components/card-episodes-text.jsx
@@ -25,10 +25,12 @@ const EpisodesText = styled.p`
`;
const CardEpisodesText = ({ children, ...props }) => (
-
- {mediaIcons.seriesstack}
- {children}
-
+ <>
+
+ {mediaIcons.seriesstack}
+ {children}
+
+ >
);
export default CardEpisodesText;
diff --git a/src/app/legacy/containers/RadioSchedule/Canonical/__snapshots__/index.test.jsx.snap b/src/app/legacy/containers/RadioSchedule/Canonical/__snapshots__/index.test.jsx.snap
index 4f21c53afa6..ed3aba7b57f 100644
--- a/src/app/legacy/containers/RadioSchedule/Canonical/__snapshots__/index.test.jsx.snap
+++ b/src/app/legacy/containers/RadioSchedule/Canonical/__snapshots__/index.test.jsx.snap
@@ -1,6 +1,1457 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`RadioSchedule With initial data renders correctly for a service 1`] = `
+exports[`Canonical RadioSchedule With initial data renders correctly for a service 1`] = `
+.emotion-0 {
+ background-color: #F2F2F2;
+ padding: 0 1rem;
+ content-visibility: auto;
+ contain-intrinsic-size: 59.375rem;
+}
+
+@media (min-width: 15rem) {
+ .emotion-0 {
+ contain-intrinsic-size: 56.563rem;
+ }
+}
+
+@media (min-width: 25rem) {
+ .emotion-0 {
+ contain-intrinsic-size: 51.063rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-0 {
+ contain-intrinsic-size: 30.75rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-0 {
+ contain-intrinsic-size: 21.25rem;
+ }
+}
+
+.emotion-3 {
+ position: relative;
+ z-index: 0;
+ color: #141414;
+ margin-top: 2rem;
+ margin: 0 auto;
+ width: 100%;
+ padding-top: 0.5rem;
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-3 {
+ margin-top: 1.5rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-3 {
+ margin-bottom: 1.5rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-3 {
+ margin: 0 auto;
+ padding-top: 1.5rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-3 {
+ max-width: 63rem;
+ padding-top: 2rem;
+ }
+}
+
+.emotion-5 {
+ margin: 0;
+ padding: 0;
+ scroll-margin-top: 1rem;
+}
+
+.emotion-5:focus-visible {
+ outline: 0.1875rem solid #000000;
+ box-shadow: 0 0 0 0.1875rem #FFFFFF;
+ outline-offset: 0.1875rem;
+}
+
+.emotion-7 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+
+.emotion-9 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex-flow: row nowrap;
+ -webkit-flex-flow: row nowrap;
+ -ms-flex-flow: row nowrap;
+ flex-flow: row nowrap;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ min-height: 2.75rem;
+ -webkit-align-items: baseline;
+ -webkit-box-align: baseline;
+ -ms-flex-align: baseline;
+ align-items: baseline;
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-9 {
+ -webkit-align-items: stretch;
+ -webkit-box-align: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ }
+}
+
+.emotion-11 {
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 700;
+ font-style: normal;
+ background-color: #F2F2F2;
+ margin: 1rem 0;
+ padding-left: 0.5rem;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-11 {
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-11 {
+ font-size: 1.5rem;
+ line-height: 2rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-11 {
+ margin: 0;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-11 {
+ padding-left: 1rem;
+ }
+}
+
+.emotion-13 {
+ margin: 0 auto;
+ width: 100%;
+ padding-bottom: 1rem;
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-13 {
+ margin-top: 1.5rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-13 {
+ max-width: 63rem;
+ padding-bottom: 1.5rem;
+ }
+}
+
+.emotion-16 {
+ padding: 0;
+ margin: 0;
+}
+
+@media (max-width: 14.9375rem) {
+ .emotion-16 {
+ padding: 0 0.5rem;
+ }
+}
+
+@media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-16 {
+ padding: 0 0.5rem;
+ }
+}
+
+@media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-16 {
+ padding: 0 1rem;
+ }
+}
+
+@supports (display: grid) {
+ .emotion-16 {
+ display: grid;
+ position: initial;
+ width: initial;
+ margin: 0;
+ }
+
+ @media (max-width: 14.9375rem) {
+ .emotion-16 {
+ grid-template-columns: repeat(4, 1fr);
+ grid-column-end: span 4;
+ grid-column-gap: 0.5rem;
+ padding: 0 0.5rem;
+ }
+ }
+
+ @media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-16 {
+ grid-template-columns: repeat(4, 1fr);
+ grid-column-end: span 4;
+ grid-column-gap: 0.5rem;
+ padding: 0 0.5rem;
+ }
+ }
+
+ @media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-16 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ grid-column-gap: 0.5rem;
+ padding: 0 1rem;
+ }
+ }
+
+ @media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-16 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ grid-column-gap: 1rem;
+ }
+ }
+
+ @media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-16 {
+ grid-template-columns: repeat(8, 1fr);
+ grid-column-end: span 8;
+ grid-column-gap: 1rem;
+ }
+ }
+
+ @media (min-width: 80rem) {
+ .emotion-16 {
+ grid-template-columns: repeat(8, 1fr);
+ grid-column-end: span 8;
+ grid-column-gap: 1rem;
+ }
+ }
+}
+
+@media (max-width: 37.5rem) {
+ .emotion-16 {
+ padding: 0;
+ }
+}
+
+.emotion-19 {
+ position: relative;
+ padding-bottom: 1rem;
+}
+
+@media (max-width: 14.9375rem) {
+ .emotion-19 {
+ width: calc(4/4*(100% - 4 * 0.5rem) + 3 * 0.5rem );
+ margin: 0 0.25rem;
+ display: inline-block;
+ vertical-align: top;
+ }
+}
+
+@media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-19 {
+ width: calc(4/4*(100% - 4 * 0.5rem) + 3 * 0.5rem );
+ margin: 0 0.25rem;
+ display: inline-block;
+ vertical-align: top;
+ }
+}
+
+@media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-19 {
+ width: calc(6/6*(100% - 6 * 0.5rem) + 5 * 0.5rem );
+ margin: 0 0.25rem;
+ display: inline-block;
+ vertical-align: top;
+ }
+}
+
+@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-19 {
+ width: calc(3/6*(100% - 6 * 1rem) + 2 * 1rem );
+ margin: 0 0.5rem;
+ display: inline-block;
+ vertical-align: top;
+ }
+}
+
+@media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-19 {
+ width: calc(2/8*(100% - 8 * 1rem) + 1 * 1rem );
+ margin: 0 0.5rem;
+ display: inline-block;
+ vertical-align: top;
+ }
+}
+
+@media (min-width: 80rem) {
+ .emotion-19 {
+ width: calc(2/8*(100% - 8 * 1rem) + 1 * 1rem );
+ margin: 0 0.5rem;
+ display: inline-block;
+ vertical-align: top;
+ }
+}
+
+@supports (display: grid) {
+ .emotion-19 {
+ display: block;
+ width: initial;
+ margin: 0;
+ }
+
+ @media (max-width: 14.9375rem) {
+ .emotion-19 {
+ grid-template-columns: repeat(4, 1fr);
+ grid-column-end: span 4;
+ }
+ }
+
+ @media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-19 {
+ grid-template-columns: repeat(4, 1fr);
+ grid-column-end: span 4;
+ }
+ }
+
+ @media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-19 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ }
+ }
+
+ @media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-19 {
+ grid-template-columns: repeat(3, 1fr);
+ grid-column-end: span 3;
+ }
+ }
+
+ @media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-19 {
+ grid-template-columns: repeat(2, 1fr);
+ grid-column-end: span 2;
+ }
+ }
+
+ @media (min-width: 80rem) {
+ .emotion-19 {
+ grid-template-columns: repeat(2, 1fr);
+ grid-column-end: span 2;
+ }
+ }
+}
+
+@supports (grid-template-columns: fit-content(200px)) {
+ .emotion-19 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ }
+}
+
+.emotion-21 {
+ padding-bottom: 0.5rem;
+}
+
+.emotion-23 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.emotion-25 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ padding-left: 0.25rem;
+}
+
+.emotion-25>svg {
+ color: #5A5A5A;
+ margin: 0;
+ overflow: visible;
+}
+
+@media screen and (forced-colors: active) {
+ .emotion-25>svg {
+ fill: canvasText;
+ }
+}
+
+.emotion-27 {
+ vertical-align: middle;
+ margin: 0 0.25rem;
+ color: #222222;
+ fill: currentColor;
+ width: 0.725rem;
+ height: 0.725rem;
+}
+
+.emotion-29 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ width: 100%;
+}
+
+.emotion-29>time {
+ color: #5A5A5A;
+ font-size: 0.75rem;
+ line-height: 1.125rem;
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-29>time {
+ font-size: 0.75rem;
+ line-height: 1.125rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-29>time {
+ font-size: 0.75rem;
+ line-height: 1.125rem;
+ }
+}
+
+.emotion-29::after {
+ content: '';
+ border-top: 0.0625rem solid #AEAEB5;
+ top: 1.0625rem;
+ margin-right: 0.625rem;
+ width: 100%;
+}
+
+.emotion-31 {
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ color: #545658;
+ display: block;
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-31 {
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-31 {
+ font-size: 0.8125rem;
+ line-height: 1.25rem;
+ }
+}
+
+.emotion-33 {
+ padding-top: 0.5rem;
+ background-color: #FFFFFF;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ outline: 0.0625rem solid transparent;
+ height: 100%;
+}
+
+.emotion-35 {
+ padding: 0 0.5rem;
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+
+.emotion-37 {
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 700;
+ font-style: normal;
+ font-size: 0.9375rem;
+ line-height: 1.5rem;
+ color: #6E6E73;
+ margin: 0;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-37 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-37 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+.emotion-39 {
+ -webkit-clip-path: inset(100%);
+ clip-path: inset(100%);
+ clip: rect(1px, 1px, 1px, 1px);
+ height: 1px;
+ overflow: hidden;
+ position: absolute;
+ width: 1px;
+ margin: 0;
+}
+
+.emotion-40 {
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 700;
+ font-style: normal;
+ font-size: 0.9375rem;
+ line-height: 1.5rem;
+ color: #B80000;
+ display: inline-block;
+ margin-left: 0.5rem;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-40 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-40 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+.emotion-43 {
+ color: #6E6E73;
+ padding: 0.5rem 0 0 0;
+ display: inline-block;
+ width: 100%;
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ font-size: 0.9375rem;
+ line-height: 1.5rem;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-43 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-43 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+.emotion-46 {
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ color: #6E6E73;
+ padding-top: 0.5rem;
+ padding-bottom: 1rem;
+ margin: 0;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-46 {
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-46 {
+ font-size: 0.8125rem;
+ line-height: 1.25rem;
+ }
+}
+
+.emotion-48 {
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ font-size: 0.75rem;
+ line-height: 1.125rem;
+ padding: 0.5rem;
+ background-color: #FFFFFF;
+ outline: 0.0625rem solid transparent;
+ color: #B80000;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-48 {
+ font-size: 0.75rem;
+ line-height: 1.125rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-48 {
+ font-size: 0.75rem;
+ line-height: 1.125rem;
+ }
+}
+
+@media screen and (-ms-high-contrast: active) {
+ .emotion-48 {
+ background-color: transparent;
+ outline: none;
+ }
+}
+
+.emotion-50>svg {
+ color: #B80000;
+ fill: currentColor;
+ width: 1.0625rem;
+ height: 0.75rem;
+ margin: 0;
+}
+
+@media screen and (forced-colors: active) {
+ .emotion-50>svg {
+ fill: canvasText;
+ }
+}
+
+.emotion-52 {
+ vertical-align: middle;
+ margin: 0 0.25rem;
+ color: #222222;
+ fill: currentColor;
+ width: 0.75rem;
+ height: 0.75rem;
+}
+
+.emotion-54 {
+ padding-right: 0.5rem;
+}
+
+.emotion-75 {
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 700;
+ font-style: normal;
+ font-size: 0.9375rem;
+ line-height: 1.5rem;
+ color: #222222;
+ margin: 0;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-75 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-75 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+.emotion-77 {
+ position: static;
+ color: #222222;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ overflow-wrap: break-word;
+ display: inline-block;
+}
+
+.emotion-77:before {
+ bottom: 0;
+ content: '';
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ top: 0;
+ white-space: nowrap;
+ z-index: 1;
+}
+
+.emotion-77:hover,
+.emotion-77:focus {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
+}
+
+.emotion-77:visited {
+ color: #6E6E73;
+}
+
+.emotion-77:hover .emotion-44 {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
+}
+
+.emotion-77:focus .emotion-44 {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
+}
+
+.emotion-81 {
+ color: #3F3F42;
+ padding: 0.5rem 0 0 0;
+ display: inline-block;
+ width: 100%;
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ font-size: 0.9375rem;
+ line-height: 1.5rem;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-81 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-81 {
+ font-size: 1rem;
+ line-height: 1.5rem;
+ }
+}
+
+.emotion-86 {
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ font-size: 0.75rem;
+ line-height: 1.125rem;
+ padding: 0.5rem;
+ background-color: #222222;
+ outline: 0.0625rem solid transparent;
+ color: #FFFFFF;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-86 {
+ font-size: 0.75rem;
+ line-height: 1.125rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-86 {
+ font-size: 0.75rem;
+ line-height: 1.125rem;
+ }
+}
+
+@media screen and (-ms-high-contrast: active) {
+ .emotion-86 {
+ background-color: transparent;
+ outline: none;
+ }
+}
+
+.emotion-88>svg {
+ color: #FFFFFF;
+ fill: currentColor;
+ width: 1.0625rem;
+ height: 0.75rem;
+ margin: 0;
+}
+
+@media screen and (forced-colors: active) {
+ .emotion-88>svg {
+ fill: canvasText;
+ }
+}
+
+.emotion-170 {
+ font-size: 0.9375rem;
+ line-height: 1.375rem;
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ color: #222222;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-170 {
+ font-size: 0.9375rem;
+ line-height: 1.375rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-170 {
+ font-size: 0.875rem;
+ line-height: 1.375rem;
+ }
+}
+
+.emotion-170:hover,
+.emotion-170:focus {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
+}
+
+.emotion-170:visited {
+ color: #6E6E73;
+}
+
+
+
+
+
+
+
+
+ البث الإذاعي
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 09:00
+
+
+
+
+
+
+
+
+
+ واصل الاستماع,
+
+
+ لاحق
+
+ العالم هذا الصباح
+
+ , 09:00,
+
+
+ 1 يناير/ كانون الثاني 2030
+
+
+ , المدة 1،30،30
+
+
+
+
+ الفترة الإخبارية الرئيسية كل صباح على مدى أربع ساعات وتتناول أهم الأخبار والموضوعات الأقليمية والدولية بالتغطية والتحليل.
+
+
+
+
+
+
+
+
+
+
+
+ 1:30:30
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 02:59
+
+
+
+
+
+
+
+
+ الفترة الإخبارية الرئيسية كل صباح على مدى أربع ساعات وتتناول أهم الأخبار والموضوعات الأقليمية والدولية بالتغطية والتحليل.
+
+
+
+
+
+
+
+
+
+
+
+ 2:00:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 02:30
+
+
+
+
+
+
+
+
+ نشرة موجزة في دقيقتين لأهم الأنباء الأقليمية والدولية
+
+
+
+
+
+
+
+
+
+
+
+ 02:00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 02:00
+
+
+
+
+
+
+
+
+ نشرة اخبارية على رأس الساعة تركز على أهم أخبار المنطقة والعالم وتتضمن تصريحات المسؤولين وإفادات مراسلينا
+
+
+
+
+
+
+
+
+
+
+
+ 06:00
+
+
+
+
+
+
+
+ استقبال البث
+
+
+
+
+`;
+
+exports[`Canonical RadioSchedule Without initial data renders correctly for a service with a radio schedule and page frequency URL 1`] = `
.emotion-0 {
background-color: #F2F2F2;
padding: 0 1rem;
diff --git a/src/app/legacy/containers/RadioSchedule/Canonical/index.jsx b/src/app/legacy/containers/RadioSchedule/Canonical/index.jsx
index 673850ae60d..8ace7a43df2 100644
--- a/src/app/legacy/containers/RadioSchedule/Canonical/index.jsx
+++ b/src/app/legacy/containers/RadioSchedule/Canonical/index.jsx
@@ -1,6 +1,7 @@
-import React, { useContext } from 'react';
+import React, { useEffect, useState, useContext } from 'react';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
+import moment from 'moment';
import {
GEL_GROUP_1_SCREEN_WIDTH_MIN,
GEL_GROUP_2_SCREEN_WIDTH_MIN,
@@ -17,8 +18,14 @@ import {
import { getLongPrimer } from '#psammead/gel-foundations/src/typography';
import { getSansRegular } from '#psammead/psammead-styles/src/font-styles';
import SectionLabel from '#psammead/psammead-section-label/src';
+import { RequestContext } from '#contexts/RequestContext';
import RadioSchedule from '#components/RadioSchedule';
+import webLogger from '#lib/logger.web';
+import { RADIO_SCHEDULE_FETCH_ERROR } from '#lib/logger.const';
import { ServiceContext } from '../../../../contexts/ServiceContext';
+import processRadioSchedule from '../utilities/processRadioSchedule';
+
+const logger = webLogger();
const RadioScheduleSection = styled.section`
background-color: ${props => props.theme.palette.LUNAR};
@@ -87,7 +94,8 @@ const RadioFrequencyLink = styled.a`
`;
const CanonicalRadioSchedule = ({
- radioSchedule,
+ initialData,
+ endpoint,
lang = null,
className = '',
}) => {
@@ -98,6 +106,10 @@ const CanonicalRadioSchedule = ({
radioSchedule: radioScheduleConfig = {},
} = useContext(ServiceContext);
+ const { timeOnServer } = useContext(RequestContext);
+
+ const [radioSchedule, setRadioSchedule] = useState(initialData);
+
const { header, frequenciesPageUrl, frequenciesPageLabel, durationLabel } =
radioScheduleConfig;
@@ -105,6 +117,45 @@ const CanonicalRadioSchedule = ({
palette: { LUNAR },
} = useTheme();
+ useEffect(() => {
+ if (!radioSchedule) {
+ const handleResponse = url => async response => {
+ if (!response.ok) {
+ throw Error(
+ `Unexpected response (HTTP status code ${response.status}) when requesting ${url}`,
+ );
+ }
+
+ const radioScheduleData = await response.json();
+ const timeOnClient = parseInt(moment.utc().format('x'), 10);
+ const processedSchedule = processRadioSchedule(
+ radioScheduleData,
+ service,
+ timeOnServer || timeOnClient,
+ );
+ setRadioSchedule(processedSchedule);
+ };
+
+ const fetchRadioScheduleData = pathname =>
+ fetch(pathname, { mode: 'no-cors' })
+ .then(handleResponse(pathname))
+ .catch(error => {
+ logger.error(
+ JSON.stringify(
+ {
+ event: RADIO_SCHEDULE_FETCH_ERROR,
+ message: error.toString(),
+ },
+ null,
+ 2,
+ ),
+ );
+ });
+
+ fetchRadioScheduleData(endpoint);
+ }
+ }, [endpoint, service, timeOnServer, radioSchedule]);
+
if (!radioSchedule) {
return null;
}
diff --git a/src/app/legacy/containers/RadioSchedule/Canonical/index.test.jsx b/src/app/legacy/containers/RadioSchedule/Canonical/index.test.jsx
index c05567a6443..f675b7e5a58 100644
--- a/src/app/legacy/containers/RadioSchedule/Canonical/index.test.jsx
+++ b/src/app/legacy/containers/RadioSchedule/Canonical/index.test.jsx
@@ -7,10 +7,12 @@ import {
act,
} from '../../../../components/react-testing-library-with-providers';
import { ServiceContextProvider } from '../../../../contexts/ServiceContext';
-import RadioSchedule from '.';
+import CanonicalRadioSchedule from '.';
import processRadioSchedule from '../utilities/processRadioSchedule';
-const RadioScheduleWithContext = ({ radioSchedule, lang }) => (
+const endpoint = 'https://localhost/arabic/bbc_arabic_radio/schedule.json';
+
+const RadioScheduleWithContext = ({ initialData, lang }) => (
(
timeOnServer={Date.now()}
>
-
+
);
-describe('RadioSchedule', () => {
+describe('Canonical RadioSchedule', () => {
beforeEach(() => {
fetch.resetMocks();
});
@@ -43,7 +49,7 @@ describe('RadioSchedule', () => {
let container;
await act(async () => {
container = render(
- ,
+ ,
).container;
});
expect(container).toMatchSnapshot();
@@ -59,7 +65,7 @@ describe('RadioSchedule', () => {
await act(async () => {
container = render(
- ,
+ ,
).container;
});
expect(container.querySelectorAll('li').length).toEqual(4);
@@ -105,4 +111,91 @@ describe('RadioSchedule', () => {
expect(container).toBeEmptyDOMElement();
});
});
+
+ describe('Without initial data', () => {
+ it('renders correctly for a service with a radio schedule and page frequency URL', async () => {
+ fetch.mockResponseOnce(JSON.stringify(arabicRadioScheduleData));
+ let container;
+
+ await act(async () => {
+ container = render( ).container;
+ });
+
+ expect(container).toMatchSnapshot();
+ });
+
+ it('contains four programs for a service with a radio schedule', async () => {
+ fetch.mockResponseOnce(JSON.stringify(arabicRadioScheduleData));
+ let container;
+
+ await act(async () => {
+ container = render( ).container;
+ });
+ expect(container.querySelectorAll('li').length).toEqual(4);
+ });
+
+ it('render radio schedules container with lang code', async () => {
+ fetch.mockResponseOnce(JSON.stringify(arabicRadioScheduleData));
+ let container;
+
+ await act(async () => {
+ container = render( ).container;
+ });
+ expect(container.querySelector('section')).toHaveAttribute(
+ 'lang',
+ 'fa-AF',
+ );
+ });
+
+ it('does not render when data contains less than 4 programs', async () => {
+ const radioSchedule2Programmes = { ...arabicRadioScheduleData };
+ radioSchedule2Programmes.schedules =
+ radioSchedule2Programmes.schedules.slice(0, 2);
+
+ fetch.mockResponseOnce(JSON.stringify(radioSchedule2Programmes));
+
+ let container;
+
+ await act(async () => {
+ container = render( ).container;
+ });
+ expect(container).toBeEmptyDOMElement();
+ });
+
+ it('does not render when data contains no programs', async () => {
+ fetch.mockResponseOnce(
+ JSON.stringify({
+ schedules: [],
+ }),
+ );
+ let container;
+
+ await act(async () => {
+ container = render( ).container;
+ });
+ expect(container).toBeEmptyDOMElement();
+ });
+
+ it('does not render when data fetched returns non-ok status code', async () => {
+ global.console.error = jest.fn();
+ fetch.mockResponse({ status: 404 });
+ let container;
+
+ await act(async () => {
+ container = render( ).container;
+ });
+ expect(container).toBeEmptyDOMElement();
+ });
+
+ it('does not render when data fetch is rejected', async () => {
+ global.console.error = jest.fn();
+ fetch.mockRejectOnce(Error('Server not found'));
+ let container;
+
+ await act(async () => {
+ container = render( ).container;
+ });
+ expect(container).toBeEmptyDOMElement();
+ });
+ });
});
diff --git a/src/app/legacy/containers/RadioSchedule/index.jsx b/src/app/legacy/containers/RadioSchedule/index.jsx
index 53647697469..aff1d6020e2 100644
--- a/src/app/legacy/containers/RadioSchedule/index.jsx
+++ b/src/app/legacy/containers/RadioSchedule/index.jsx
@@ -1,28 +1,44 @@
import React, { useContext } from 'react';
import pathOr from 'ramda/src/pathOr';
import { RequestContext } from '#contexts/RequestContext';
+import useLocation from '#hooks/useLocation';
import useToggle from '#hooks/useToggle';
+import { getRadioScheduleEndpoint } from '#lib/utilities/getUrlHelpers/getRadioSchedulesUrls';
import { ServiceContext } from '../../../contexts/ServiceContext';
import Canonical from './Canonical';
const RadioSchedule = ({
initialData,
+ radioScheduleEndpointOverride = null,
lang = null,
className = '',
toggleName,
}) => {
const { enabled } = useToggle(toggleName);
- const { isAmp } = useContext(RequestContext);
- const { radioSchedule } = useContext(ServiceContext);
+ const { isAmp, env } = useContext(RequestContext);
+ const { service, radioSchedule } = useContext(ServiceContext);
+ const location = useLocation();
const hasRadioSchedule = pathOr(null, ['hasRadioSchedule'], radioSchedule);
const radioScheduleEnabled = !isAmp && enabled && hasRadioSchedule;
if (!radioScheduleEnabled) {
return null;
}
+ const endpoint =
+ radioScheduleEndpointOverride ||
+ getRadioScheduleEndpoint({
+ service,
+ env,
+ queryString: location.search,
+ });
return (
-
+
);
};
diff --git a/src/app/legacy/containers/RadioSchedule/index.stories.jsx b/src/app/legacy/containers/RadioSchedule/index.stories.jsx
new file mode 100644
index 00000000000..a45d110ac19
--- /dev/null
+++ b/src/app/legacy/containers/RadioSchedule/index.stories.jsx
@@ -0,0 +1,59 @@
+import React from 'react';
+import { BrowserRouter } from 'react-router-dom';
+import moment from 'moment';
+import { RequestContextProvider } from '#contexts/RequestContext';
+import { ToggleContextProvider } from '#contexts/ToggleContext';
+import { getLocalRadioScheduleEndpoint } from '#lib/utilities/getUrlHelpers/getRadioSchedulesUrls';
+import { FRONT_PAGE } from '#app/routes/utils/pageTypes';
+import RadioScheduleContainer from '.';
+
+// Currently, only these services have radio schedule data
+const radioServices = {
+ afaanoromoo: 'oromo',
+ afrique: 'afrique',
+ amharic: 'amharic',
+ arabic: 'arabic',
+ bengali: 'bangla',
+ burmese: 'burmese',
+ gahuza: 'gahuza',
+ hausa: 'hausa',
+ indonesia: 'indonesian',
+ korean: 'korean',
+ pashto: 'pashto',
+ persian: 'dari',
+ somali: 'somali',
+ swahili: 'swahili',
+ tigrinya: 'tigrinya',
+ urdu: 'urdu',
+};
+
+const Component = (_, { service }) => (
+
+
+
+
+
+
+
+);
+
+moment.locale('en-GB'); // needed for Time Machine date string
+
+export default {
+ title: 'Containers/Radio Schedule',
+ Component,
+ parameters: { chromatic: { disable: true } },
+};
+
+export const RadioSchedule = Component;
diff --git a/src/app/legacy/containers/RelatedTopics/index.jsx b/src/app/legacy/containers/RelatedTopics/index.jsx
index e903f51eeb8..d0df6a76fb0 100644
--- a/src/app/legacy/containers/RelatedTopics/index.jsx
+++ b/src/app/legacy/containers/RelatedTopics/index.jsx
@@ -30,7 +30,7 @@ const StyledSectionLabel = styled(SectionLabel)`
`;
const RelatedTopics = ({
- topics,
+ topics = [],
mobileDivider = true,
bar = true,
className = '',
diff --git a/src/app/legacy/containers/StoryPromo/index.jsx b/src/app/legacy/containers/StoryPromo/index.jsx
index faa9fec450d..2bd4bfb2fd1 100644
--- a/src/app/legacy/containers/StoryPromo/index.jsx
+++ b/src/app/legacy/containers/StoryPromo/index.jsx
@@ -50,9 +50,9 @@ const extractAltText = blocks => {
if (block.model && block.model.blocks) {
return extractAltText(block.model.blocks);
}
+ return '';
}
};
-
const getBlockByType = (blocks, blockType) => {
let blockData;
blocks.forEach(block => {
diff --git a/src/app/legacy/containers/Text/fixtures.js b/src/app/legacy/containers/Text/fixtures.js
index c35916d2b65..a05d118af71 100644
--- a/src/app/legacy/containers/Text/fixtures.js
+++ b/src/app/legacy/containers/Text/fixtures.js
@@ -1,4 +1,4 @@
-export const fragmentBlock = (id, text, attributes = []) => ({
+export const fragmentBlock = (id = null, text, attributes = []) => ({
id,
type: 'fragment',
model: {
@@ -7,7 +7,7 @@ export const fragmentBlock = (id, text, attributes = []) => ({
},
});
-export const paragraphBlock = (id, blocks) => ({
+export const paragraphBlock = (id = null, blocks) => ({
id,
type: 'paragraph',
model: {
diff --git a/src/app/legacy/containers/Text/index.test.jsx b/src/app/legacy/containers/Text/index.test.jsx
index 0fe04889a7c..4076b48b4dd 100644
--- a/src/app/legacy/containers/Text/index.test.jsx
+++ b/src/app/legacy/containers/Text/index.test.jsx
@@ -15,7 +15,7 @@ const defaultToggles = {
},
};
-const listItemBlock = (id, listBlocks) => ({
+const listItemBlock = (id = null, listBlocks) => ({
id,
type: 'listItem',
model: {
@@ -23,7 +23,7 @@ const listItemBlock = (id, listBlocks) => ({
},
});
-const listBlock = (id, blocks, type = 'unorderedList') => ({
+const listBlock = (id = null, blocks, type = 'unorderedList') => ({
id,
type,
model: {
diff --git a/src/app/legacy/psammead/psammead-brand/src/index.jsx b/src/app/legacy/psammead/psammead-brand/src/index.jsx
index d195672f411..4fd2d5cb28a 100644
--- a/src/app/legacy/psammead/psammead-brand/src/index.jsx
+++ b/src/app/legacy/psammead/psammead-brand/src/index.jsx
@@ -148,33 +148,35 @@ const StyledBrand = ({
serviceLocalisedName = null,
svg,
isLongBrand,
-}) => {
- return svg ? (
- <>
-
- {svg.group}
-
-
- >
- ) : null;
-};
+}) => (
+ <>
+ {svg && (
+ <>
+
+ {svg.group}
+
+
+ >
+ )}
+ >
+);
const Brand = forwardRef((props, ref) => {
const {
diff --git a/src/app/legacy/psammead/psammead-navigation/src/index.jsx b/src/app/legacy/psammead/psammead-navigation/src/index.jsx
index 14d82f73fd2..fd198667ead 100644
--- a/src/app/legacy/psammead/psammead-navigation/src/index.jsx
+++ b/src/app/legacy/psammead/psammead-navigation/src/index.jsx
@@ -137,16 +137,18 @@ const CurrentLink = ({
script,
currentPageText = null,
}) => (
-
- {`${currentPageText}, `}
- {link}
-
+ <>
+
+ {`${currentPageText}, `}
+ {link}
+
+ >
);
export const NavigationUl = ({ children, ...props }) => (
@@ -229,7 +231,6 @@ const StyledNav = styled.nav`
bottom: 0;
right: 0;
left: 0;
- border-bottom: 0.0625rem solid ${props => props.theme.palette.GREY_3};
}
${StyledListItem} {
@@ -240,7 +241,7 @@ const StyledNav = styled.nav`
`}
}
`;
-
+// border-bottom: 0.0625rem solid ${props => props.theme.palette.GREY_3};
const Navigation = ({
children,
dir = 'ltr',
diff --git a/src/app/legacy/psammead/psammead-styles/src/__snapshots__/global-styles.test.jsx.snap b/src/app/legacy/psammead/psammead-styles/src/__snapshots__/global-styles.test.jsx.snap
new file mode 100644
index 00000000000..ebdd7e2d46e
--- /dev/null
+++ b/src/app/legacy/psammead/psammead-styles/src/__snapshots__/global-styles.test.jsx.snap
@@ -0,0 +1,501 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`global-styles should render global styles 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`global-styles should render global styles with @font-face rules 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
diff --git a/src/app/legacy/psammead/psammead-styles/src/global-styles.test.jsx b/src/app/legacy/psammead/psammead-styles/src/global-styles.test.jsx
new file mode 100644
index 00000000000..72f7a60cd8f
--- /dev/null
+++ b/src/app/legacy/psammead/psammead-styles/src/global-styles.test.jsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import { render } from '@testing-library/react';
+import GlobalStyles from './global-styles';
+
+/**
+ * 15/10/20
+ * Revisit snapshot mechanism following Emotion migration.
+ */
+
+describe('global-styles', () => {
+ it('should render global styles', () => {
+ render( );
+ expect(document.head).toMatchSnapshot();
+ });
+
+ it('should render global styles with @font-face rules', () => {
+ render( );
+ expect(document.head).toMatchSnapshot();
+ });
+});
diff --git a/src/app/legacy/psammead/psammead-topic-tags/src/index.jsx b/src/app/legacy/psammead/psammead-topic-tags/src/index.jsx
index e4638bb8baa..694b9470cf3 100644
--- a/src/app/legacy/psammead/psammead-topic-tags/src/index.jsx
+++ b/src/app/legacy/psammead/psammead-topic-tags/src/index.jsx
@@ -74,34 +74,38 @@ export const TopicTags = ({
}) => {
const hasMultipleChildren = children.length > 1;
- return hasMultipleChildren ? (
-
- {children.map((child, index) => {
- if (child.type !== TopicTag) return null;
+ return (
+ <>
+ {hasMultipleChildren ? (
+
+ {children.map((child, index) => {
+ if (child.type !== TopicTag) return null;
- return (
+ return (
+
+ {child}
+
+ );
+ })}
+
+ ) : (
+
- {child}
+ {children.type === TopicTag && children}
- );
- })}
-
- ) : (
-
-
- {children.type === TopicTag && children}
-
-
+
+ )}
+ >
);
};
diff --git a/src/app/lib/analyticsUtils/sendBeacon/index.js b/src/app/lib/analyticsUtils/sendBeacon/index.js
index 466423bf40f..9e624399db7 100644
--- a/src/app/lib/analyticsUtils/sendBeacon/index.js
+++ b/src/app/lib/analyticsUtils/sendBeacon/index.js
@@ -4,106 +4,7 @@ import { ATI_LOGGING_ERROR } from '../../logger.const';
const logger = nodeLogger(__filename);
-const setReverbPageValues = async ({ pageVars, userVars }) => {
- window.bbcpage = {};
-
- window.bbcpage = Object.assign(window.bbcpage, {
- getName() {
- return Promise.resolve(pageVars.name);
- },
- getLanguage() {
- return Promise.resolve(pageVars.additionalProperties.content_language);
- },
- getDestination() {
- return Promise.resolve(pageVars.destination);
- },
- getProducer() {
- return Promise.resolve(pageVars.producer);
- },
- getSection() {
- return Promise.resolve('');
- },
- getContentId() {
- return Promise.resolve(pageVars.contentId);
- },
- getContentType() {
- return Promise.resolve(pageVars.contentType);
- },
- getEdition() {
- return Promise.resolve('');
- },
- getReferrer() {
- return Promise.resolve('');
- },
- getAdditionalProperties() {
- return Promise.resolve(pageVars.additionalProperties);
- },
- additionalProperties: {
- testDomain: 'local.ati-host.net',
- trace: '',
- customVars: '',
- },
- });
-
- window.bbcuser = {
- getHashedId: () => null,
- isSignedIn: () => Promise.resolve(userVars.isSignedIn),
- };
-};
-
-const reverbPageViews = async ({ reverbInstance }) => {
- reverbInstance.viewEvent();
-};
-
-const reverbLinkClick = async ({ reverbInstance, eventDetails }) => {
- const { componentName, container } = eventDetails;
-
- return reverbInstance.userActionEvent(
- 'click',
- componentName,
- { container },
- {},
- {},
- true,
- );
-};
-
-const reverbHandlers = {
- pageView: reverbPageViews,
- sectionView: reverbPageViews,
- sectionClick: reverbLinkClick,
-};
-
-const callReverb = async eventDetails => {
- const { eventName } = eventDetails;
-
- // eslint-disable-next-line no-underscore-dangle
- window.__reverb.__reverbLoadedPromise.then(
- async reverb => {
- if (reverb.isReady()) {
- await reverbHandlers[eventName]({
- reverbInstance: reverb,
- eventDetails,
- });
- return;
- }
-
- reverb.initialise().then(async () => {
- await reverbHandlers[eventName]({
- reverbInstance: reverb,
- eventDetails,
- });
- });
- },
- () => {
- logger.error(ATI_LOGGING_ERROR, {
- error: 'Failed to load reverb. No event sent',
- });
- },
- );
-};
-
-const sendBeacon = async (url, reverbBeaconConfig) => {
+const sendBeacon = async url => {
if (onClient()) {
try {
if (reverbBeaconConfig) {
diff --git a/src/app/lib/analyticsUtils/sendBeacon/index.test.js b/src/app/lib/analyticsUtils/sendBeacon/index.test.js
index a38fa634f91..b3bf2bc2272 100644
--- a/src/app/lib/analyticsUtils/sendBeacon/index.test.js
+++ b/src/app/lib/analyticsUtils/sendBeacon/index.test.js
@@ -28,7 +28,7 @@ describe('sendBeacon', () => {
});
afterEach(() => {
- jest.clearAllMocks();
+ fetch.resetMocks();
});
it(`should fetch`, () => {
@@ -158,6 +158,10 @@ describe('sendBeacon', () => {
fetchResponse = Promise.reject(error);
});
+ afterEach(() => {
+ jest.resetAllMocks();
+ });
+
it(`should send error to logger`, async () => {
await sendBeacon('https://foobar.com');
diff --git a/src/app/lib/config/optimizely/index.js b/src/app/lib/config/optimizely/index.js
index db22a7e7a1d..ae7b4459865 100644
--- a/src/app/lib/config/optimizely/index.js
+++ b/src/app/lib/config/optimizely/index.js
@@ -1,8 +1,5 @@
export default {
- // This is the key of the whole experiment
- flagKey: 'jump_to_onward_journeys',
- // This is the key for the 'rule' that is attached to the experiment
- ruleKey: 'jump_to_onward_journeys_experiment',
+ flagId: 'jump_to',
viewClickAttributeId: 'wsoj',
variationMappings: {
on: 'on',
diff --git a/src/app/lib/config/services/afaanoromoo.ts b/src/app/lib/config/services/afaanoromoo.ts
index 4a714531f0c..65bb3076b5b 100644
--- a/src/app/lib/config/services/afaanoromoo.ts
+++ b/src/app/lib/config/services/afaanoromoo.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-afaanoromoo',
atiAnalyticsProducerId: '2',
- atiAnalyticsProducerName: 'AFAAN_OROMOO',
chartbeatDomain: 'afaanoromoo.bbc.co.uk',
brandName: 'BBC News Afaan Oromoo',
product: 'BBC News',
@@ -233,7 +232,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'Sagantaa raadiyoo itti aanu',
duration: 'Turtii',
recentEpisodes: 'Sagantaawwan darban',
- closeVideo: 'Bahi',
},
socialEmbed: {
caption: {
@@ -314,7 +312,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Afaanoota biroo',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/afrique.ts b/src/app/lib/config/services/afrique.ts
index e4c3c473fdd..76641871b0a 100644
--- a/src/app/lib/config/services/afrique.ts
+++ b/src/app/lib/config/services/afrique.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-afrique',
atiAnalyticsProducerId: '3',
- atiAnalyticsProducerName: 'AFRIQUE',
chartbeatDomain: 'afrique.bbc.co.uk',
brandName: 'BBC News Afrique',
product: 'BBC News',
@@ -236,7 +235,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'Emission de radio suivante',
duration: 'Durée',
recentEpisodes: 'Editions Précédentes',
- closeVideo: 'Sortir',
},
socialEmbed: {
caption: {
@@ -321,7 +319,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Autres langues',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
@@ -339,10 +337,6 @@ export const service: DefaultServiceConfig = {
title: 'Accueil',
url: '/afrique',
},
- {
- title: 'Conflit en RDC',
- url: '/afrique/topics/cge72ry253jt',
- },
{
title: 'Ecoutez en direct',
url: '/afrique/bbc_afrique_radio/liveradio',
diff --git a/src/app/lib/config/services/amharic.ts b/src/app/lib/config/services/amharic.ts
index df4351887c9..ec6cd25382b 100644
--- a/src/app/lib/config/services/amharic.ts
+++ b/src/app/lib/config/services/amharic.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-amharic',
atiAnalyticsProducerId: '4',
- atiAnalyticsProducerName: 'AMHARIC',
chartbeatDomain: 'amharic.bbc.co.uk',
brandName: 'BBC News አማርኛ',
product: 'BBC News',
@@ -222,7 +221,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'ቀጣይ የሬዲዮ ስርጭት',
duration: 'ርዝመት',
recentEpisodes: 'ያለፉ ዝግጅቶች’',
- closeVideo: 'ይውጡ',
},
socialEmbed: {
caption: {
@@ -365,7 +363,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'ቢቢሲን በተለያዩ ቋንቋዎች',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/arabic.ts b/src/app/lib/config/services/arabic.ts
index 337ad471d33..562f8edab0f 100644
--- a/src/app/lib/config/services/arabic.ts
+++ b/src/app/lib/config/services/arabic.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-arabic',
atiAnalyticsProducerId: '5',
- atiAnalyticsProducerName: 'ARABIC',
chartbeatDomain: 'arabic.bbc.co.uk',
brandName: 'BBC News عربي',
product: 'BBC News',
@@ -252,7 +251,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'البرامج السابقة',
podcastExternalLinks: 'هذا البودكاست متاح عبر',
download: 'تحميل الحلقة',
- closeVideo: 'خروج',
},
socialEmbed: {
caption: {
@@ -403,7 +401,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'بي بي سي نيوز عربي في لغات أخرى',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/archive.ts b/src/app/lib/config/services/archive.ts
index 9e0c5aa1daf..dfe36cb9f17 100644
--- a/src/app/lib/config/services/archive.ts
+++ b/src/app/lib/config/services/archive.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'archive',
atiAnalyticsProducerId: '127',
- atiAnalyticsProducerName: 'BBC_ARCHIVE',
chartbeatDomain: 'bbc.co.uk',
brandName: 'BBC Archive',
product: 'BBC Archive',
diff --git a/src/app/lib/config/services/azeri.ts b/src/app/lib/config/services/azeri.ts
index 9a52fdd189f..f1b4b3e20a5 100644
--- a/src/app/lib/config/services/azeri.ts
+++ b/src/app/lib/config/services/azeri.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-azeri',
atiAnalyticsProducerId: '6',
- atiAnalyticsProducerName: 'AZERI',
chartbeatDomain: 'azeri.bbc.co.uk',
brandName: 'BBC News Azərbaycanca',
product: 'BBC News',
@@ -228,7 +227,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'Next radio show',
duration: 'Duration',
recentEpisodes: 'Daha ətraflı',
- closeVideo: 'Bağla',
},
socialEmbed: {
caption: {
@@ -306,7 +304,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News digər dillərdə',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/bengali.ts b/src/app/lib/config/services/bengali.ts
index 7184ea9609d..f7f266c317d 100644
--- a/src/app/lib/config/services/bengali.ts
+++ b/src/app/lib/config/services/bengali.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-bengali',
atiAnalyticsProducerId: '31',
- atiAnalyticsProducerName: 'BENGALI',
chartbeatDomain: 'bengali.bbc.co.uk',
brandName: 'BBC News বাংলা',
product: 'BBC News',
@@ -229,7 +228,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'পরবর্তী রেডিও অনুষ্ঠান',
duration: 'স্থিতিকাল',
recentEpisodes: 'পুরনো অনুষ্ঠান',
- closeVideo: 'বন্ধ করুন',
},
socialEmbed: {
caption: {
@@ -315,7 +313,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'অন্যান্য ভাষায় বিবিসির সংবাদ',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/burmese.ts b/src/app/lib/config/services/burmese.ts
index e07da31a844..775c7298a7a 100644
--- a/src/app/lib/config/services/burmese.ts
+++ b/src/app/lib/config/services/burmese.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-burmese',
atiAnalyticsProducerId: '35',
- atiAnalyticsProducerName: 'BURMESE',
chartbeatDomain: 'burmese.bbc.co.uk',
brandName: 'BBC News မြန်မာ',
product: 'BBC News',
@@ -258,7 +257,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'ထုတ်လွှင့်ပြီး အစီအစဉ်မျာ',
podcastExternalLinks: 'ဒီပေါ့ဒ်ကတ်စ်ကို နောက်ထပ်ရနိုင်သည့်နေရာ',
download: 'ဒေါင်းလုပ်လုပ် ရယူရန်',
- closeVideo: 'ပိတ်မယ်',
},
socialEmbed: {
caption: {
@@ -337,7 +335,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'အခြားဘာသာစကားနှင့် ဘီဘီစီသတင်းများ',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/cymrufyw.ts b/src/app/lib/config/services/cymrufyw.ts
index 84f30249382..4e9be266a66 100644
--- a/src/app/lib/config/services/cymrufyw.ts
+++ b/src/app/lib/config/services/cymrufyw.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-cymrufyw',
atiAnalyticsProducerId: '100',
- atiAnalyticsProducerName: 'WALES',
chartbeatDomain: 'cymrufyw.bbc.co.uk',
brandName: 'BBC Cymru Fyw',
product: 'BBC News',
diff --git a/src/app/lib/config/services/gahuza.ts b/src/app/lib/config/services/gahuza.ts
index dc57e979ee1..fb329ae6555 100644
--- a/src/app/lib/config/services/gahuza.ts
+++ b/src/app/lib/config/services/gahuza.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-gahuza',
atiAnalyticsProducerId: '40',
- atiAnalyticsProducerName: 'GAHUZA',
chartbeatDomain: 'gahuza.bbc.co.uk',
brandName: 'BBC News Gahuza',
product: 'BBC News',
@@ -256,7 +255,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'Ibiganiro byashise',
podcastExternalLinks: 'Iyi podcast iraboneka kandi kuri',
download: 'Pakurura ikiganiro',
- closeVideo: 'Sohoka',
},
socialEmbed: {
caption: {
@@ -354,10 +352,6 @@ export const service: DefaultServiceConfig = {
title: "Urupapuro rw'itangiriro",
url: '/gahuza',
},
- {
- title: 'Ibitero bya M23 muri Congo',
- url: '/gahuza/topics/cx2qn9pqx4yt',
- },
{
title: 'Ibiyaga binini',
url: '/gahuza/topics/c06gq67y3w5t',
diff --git a/src/app/lib/config/services/gujarati.ts b/src/app/lib/config/services/gujarati.ts
index b112776d5c0..5a6a4600142 100644
--- a/src/app/lib/config/services/gujarati.ts
+++ b/src/app/lib/config/services/gujarati.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-gujarati',
atiAnalyticsProducerId: '50',
- atiAnalyticsProducerName: 'GUJARATI',
chartbeatDomain: 'gujarati.bbc.co.uk',
brandName: 'BBC News ગુજરાતી',
product: 'BBC News',
@@ -233,7 +232,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'આગામી રેડિયો શો',
duration: 'અવધિ',
recentEpisodes: 'તાજેતરનાં એપિસોડ્સ',
- closeVideo: 'બહાર નીકળો',
},
socialEmbed: {
caption: {
@@ -312,7 +310,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News અન્ય ભાષાઓમાં',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/hausa.ts b/src/app/lib/config/services/hausa.ts
index 9fc7af11a34..f49fe41025d 100644
--- a/src/app/lib/config/services/hausa.ts
+++ b/src/app/lib/config/services/hausa.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-hausa',
atiAnalyticsProducerId: '51',
- atiAnalyticsProducerName: 'HAUSA',
chartbeatDomain: 'hausa.bbc.co.uk',
brandName: 'BBC News Hausa',
product: 'BBC News',
@@ -253,7 +252,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'Kari',
podcastExternalLinks: 'Za a iya samun wannan Podcast din a',
download: 'Sauke shiri',
- closeVideo: 'Fita',
},
socialEmbed: {
caption: {
@@ -399,7 +397,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Labaran BBC a sauran harsuna',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/hindi.ts b/src/app/lib/config/services/hindi.ts
index 6643f5cc2f8..7bf273df96e 100644
--- a/src/app/lib/config/services/hindi.ts
+++ b/src/app/lib/config/services/hindi.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-hindi',
atiAnalyticsProducerId: '52',
- atiAnalyticsProducerName: 'HINDI',
chartbeatDomain: 'hindi.bbc.co.uk',
brandName: 'BBC News हिंदी',
product: 'BBC News',
@@ -49,16 +48,16 @@ export const service: DefaultServiceConfig = {
googleSiteVerification: 'D-aEHUiyVaMoUJXjVRbDVkxS0dLTMUZLD3dLPTnWO4Q',
podcastPromo: {
title: 'पॉडकास्ट',
- brandTitle: 'The Lens: मुकेश शर्मा के साथ',
+ brandTitle: 'दिनभर: पूरा दिन,पूरी ख़बर (Dinbhar)',
brandDescription:
- 'हफ़्ते की सबसे बड़ी न्यूज़ स्टोरी पर चर्चा: मुकेश शर्मा के साथ.',
+ 'वो राष्ट्रीय और अंतरराष्ट्रीय ख़बरें जो दिनभर सुर्खियां बनीं.',
image: {
- src: 'https://ichef.bbci.co.uk/images/ic/$recipe/p0kjf0d8.jpg',
- alt: 'मुकेश शर्मा',
+ src: 'https://ichef.bbci.co.uk/images/ic/$recipe/p09ds7cb.jpg',
+ alt: 'दिनभर',
},
linkLabel: {
text: 'दिनभर: पूरा दिन,पूरी ख़बर',
- href: 'https://www.bbc.com/hindi/podcasts/p0kjf03y',
+ href: 'https://www.bbc.com/hindi/podcasts/p09ds7zx',
},
skipLink: {
text: 'छोड़कर %title% आगे बढ़ें',
@@ -89,11 +88,7 @@ export const service: DefaultServiceConfig = {
videoPlayer: 'वीडियो प्लेयर',
},
articlePage: {
- jumpToTitle: {
- variation_1: 'इस पर जाएं',
- variation_2: 'बीबीसी न्यूज़ हिंदी से और अधिक जानें',
- variation_3: 'बीबीसी न्यूज़ हिंदी से और ख़बरें पढ़ें',
- },
+ jumpTo: 'इस पर जाएं',
},
liveExperiencePage: {
liveLabel: 'लाइव',
@@ -270,7 +265,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'प्रसारण का समय',
podcastExternalLinks: 'ये पॉडकास्ट इन प्लेटफ़ॉर्म्स पर भी उपलब्ध है -',
download: 'एपिसोड डाउनलोड करें',
- closeVideo: 'बाहर निकलें',
},
socialEmbed: {
caption: {
@@ -423,7 +417,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'अन्य भाषाएँ',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
@@ -443,10 +437,6 @@ export const service: DefaultServiceConfig = {
title: 'होम पेज',
url: '/hindi',
},
- {
- title: 'दिल्ली विधानसभा चुनाव',
- url: '/hindi/topics/c8dqegnm6d9t',
- },
{
title: 'भारत',
url: '/hindi/topics/ckdxnkz7607t',
diff --git a/src/app/lib/config/services/igbo.ts b/src/app/lib/config/services/igbo.ts
index fc91ff94b46..50d1e91b80c 100644
--- a/src/app/lib/config/services/igbo.ts
+++ b/src/app/lib/config/services/igbo.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-igbo',
atiAnalyticsProducerId: '53',
- atiAnalyticsProducerName: 'IGBO',
chartbeatDomain: 'igbo.bbc.co.uk',
brandName: 'BBC News Ìgbò',
product: 'BBC News',
@@ -232,7 +231,6 @@ export const service: DefaultServiceConfig = {
previousRadioShow: 'Previous radio show',
nextRadioShow: 'Next radio show',
duration: 'Duration',
- closeVideo: 'Wepu',
},
socialEmbed: {
caption: {
@@ -330,7 +328,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Akụkọ BBC n’asụsụ ndị ọzọ',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/indonesia.ts b/src/app/lib/config/services/indonesia.ts
index ebf9725d812..9911b3c7b34 100644
--- a/src/app/lib/config/services/indonesia.ts
+++ b/src/app/lib/config/services/indonesia.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-indonesia',
atiAnalyticsProducerId: '54',
- atiAnalyticsProducerName: 'INDONESIAN',
chartbeatDomain: 'indonesian.bbc.co.uk', // this is meant to be different to the service name
brandName: 'BBC News Indonesia',
product: 'BBC News',
@@ -255,7 +254,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'Siaran sebelumnya',
podcastExternalLinks: 'Podcast ini juga tersedia di',
download: 'Unduh episode',
- closeVideo: 'Keluar',
},
socialEmbed: {
caption: {
@@ -341,7 +339,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BC News dalam bahasa-bahasa lain',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/japanese.ts b/src/app/lib/config/services/japanese.ts
index 30281394a10..3f869da3f1f 100644
--- a/src/app/lib/config/services/japanese.ts
+++ b/src/app/lib/config/services/japanese.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-japanese',
atiAnalyticsProducerId: '56',
- atiAnalyticsProducerName: 'JAPANESE',
chartbeatDomain: 'japanese.bbc.co.uk',
brandName: 'BBCニュース',
product: 'BBC News',
@@ -217,7 +216,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: '次のラジオ番組',
duration: '所要時間',
recentEpisodes: 'さらに',
- closeVideo: '閉じる',
},
socialEmbed: {
caption: {
@@ -295,7 +293,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBCニュースを他言語で読む',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/korean.ts b/src/app/lib/config/services/korean.ts
index dd69c356ca1..b9ca762a136 100644
--- a/src/app/lib/config/services/korean.ts
+++ b/src/app/lib/config/services/korean.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '에 업데이트 됨',
atiAnalyticsAppName: 'news-korean',
atiAnalyticsProducerId: '57',
- atiAnalyticsProducerName: 'KOREAN',
chartbeatDomain: 'korean.bbc.co.uk',
brandName: 'BBC News 코리아',
product: 'BBC News',
@@ -227,7 +226,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: '다음 라디오 방송',
duration: '방송 길이',
recentEpisodes: '이전',
- closeVideo: '나가기',
},
socialEmbed: {
caption: {
@@ -313,7 +311,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: '다른 언어로 보기',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/kyrgyz.ts b/src/app/lib/config/services/kyrgyz.ts
index 91eaab2b2a8..7bae01b96eb 100644
--- a/src/app/lib/config/services/kyrgyz.ts
+++ b/src/app/lib/config/services/kyrgyz.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-kyrgyz',
atiAnalyticsProducerId: '58',
- atiAnalyticsProducerName: 'KYRGYZ',
chartbeatDomain: 'kyrgyz.bbc.co.uk',
brandName: 'BBC News Кыргыз Кызматы',
product: 'BBC News',
@@ -235,7 +234,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'Мурдагы берүүлөр',
podcastExternalLinks: 'Бул подкастты башка платформалардан дагы угуңуз',
download: 'Подкастты жүктөп алыңыз',
- closeVideo: 'Чыгуу',
},
socialEmbed: {
caption: {
@@ -314,7 +312,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Башка тилдерде',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/marathi.ts b/src/app/lib/config/services/marathi.ts
index b542253aadc..8707a0a6924 100644
--- a/src/app/lib/config/services/marathi.ts
+++ b/src/app/lib/config/services/marathi.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-marathi',
atiAnalyticsProducerId: '59',
- atiAnalyticsProducerName: 'MARATHI',
chartbeatDomain: 'marathi.bbc.co.uk',
brandName: 'BBC News मराठी',
product: 'BBC News',
@@ -244,7 +243,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'ताजे एपिसोड',
podcastExternalLinks: 'हे पॉडकास्ट तुम्ही इथे ऐकू शकता',
download: 'एपिसोड डाऊनलोड करा',
- closeVideo: 'बंद करा',
},
socialEmbed: {
caption: {
@@ -325,7 +323,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News इतर भाषांमध्ये',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/mundo.ts b/src/app/lib/config/services/mundo.ts
index 1883747803b..f1e2439cdf7 100644
--- a/src/app/lib/config/services/mundo.ts
+++ b/src/app/lib/config/services/mundo.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-mundo',
atiAnalyticsProducerId: '62',
- atiAnalyticsProducerName: 'MUNDO',
chartbeatDomain: 'mundo.bbc.co.uk',
brandName: 'BBC News Mundo',
product: 'BBC News',
@@ -235,7 +234,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'Próximo programa',
duration: 'Duración',
recentEpisodes: 'Más',
- closeVideo: 'Salir',
},
socialEmbed: {
caption: {
@@ -391,7 +389,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Otros idiomas',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/naidheachdan.ts b/src/app/lib/config/services/naidheachdan.ts
index 162430d21e5..374eb830c85 100644
--- a/src/app/lib/config/services/naidheachdan.ts
+++ b/src/app/lib/config/services/naidheachdan.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-naidheachdan',
atiAnalyticsProducerId: '79',
- atiAnalyticsProducerName: 'SCOTLAND',
chartbeatDomain: 'bbc.co.uk',
brandName: 'BBC Naidheachdan',
product: 'BBC News',
diff --git a/src/app/lib/config/services/nepali.ts b/src/app/lib/config/services/nepali.ts
index 1bb74063d29..bfa5f1e1040 100644
--- a/src/app/lib/config/services/nepali.ts
+++ b/src/app/lib/config/services/nepali.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: 'अद्यावधिक',
atiAnalyticsAppName: 'news-nepali',
atiAnalyticsProducerId: '63',
- atiAnalyticsProducerName: 'NEPALI',
chartbeatDomain: 'nepali.bbc.co.uk',
brandName: 'BBC News नेपाली',
product: 'BBC News',
@@ -230,7 +229,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'पहिलेका कार्यक्रमहरू',
podcastExternalLinks: 'यो पडकास्ट सुन्नकालागि यहाँ उपलब्ध छ',
download: 'एपिसोड डाउनलोड',
- closeVideo: 'बाहिरिनुहोस्',
},
socialEmbed: {
caption: {
@@ -310,7 +308,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'अरू भाषामा बीबीसी',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/news.ts b/src/app/lib/config/services/news.ts
index d26675c59de..b7c8ec505c9 100644
--- a/src/app/lib/config/services/news.ts
+++ b/src/app/lib/config/services/news.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news',
atiAnalyticsProducerId: '64',
- atiAnalyticsProducerName: 'NEWS',
chartbeatDomain: 'bbc.co.uk',
brandName: 'BBC News',
product: 'BBC News',
diff --git a/src/app/lib/config/services/newsround.ts b/src/app/lib/config/services/newsround.ts
index 4f4b506d059..eb95bf0fa84 100644
--- a/src/app/lib/config/services/newsround.ts
+++ b/src/app/lib/config/services/newsround.ts
@@ -13,7 +13,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'newsround',
atiAnalyticsProducerId: '65',
- atiAnalyticsProducerName: 'NEWSROUND',
chartbeatDomain: 'bbc.co.uk',
brandName: 'CBBC Newsround',
product: 'CBBC Newsround',
diff --git a/src/app/lib/config/services/pashto.ts b/src/app/lib/config/services/pashto.ts
index 79984fc5961..2c10c0f075c 100644
--- a/src/app/lib/config/services/pashto.ts
+++ b/src/app/lib/config/services/pashto.ts
@@ -14,7 +14,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-pashto',
atiAnalyticsProducerId: '68',
- atiAnalyticsProducerName: 'PASHTO',
brandName: 'BBC News پښتو',
chartbeatDomain: 'pashto.bbc.co.uk',
serviceLocalizedName: 'پښتو',
@@ -241,7 +240,6 @@ export const service: DefaultServiceConfig = {
previousRadioShow: 'تېره راډیویي خپرونه',
nextRadioShow: 'راتلونکې راډیویي خپرونه',
duration: 'موده',
- closeVideo: 'وتل',
},
socialEmbed: {
caption: {
@@ -324,7 +322,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'نورې ژبې',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/persian.ts b/src/app/lib/config/services/persian.ts
index fda0901d29b..05f856c4d70 100644
--- a/src/app/lib/config/services/persian.ts
+++ b/src/app/lib/config/services/persian.ts
@@ -14,7 +14,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-persian',
atiAnalyticsProducerId: '69',
- atiAnalyticsProducerName: 'PERSIAN',
chartbeatDomain: 'persian.bbc.co.uk',
brandName: 'BBC News فارسی',
serviceLocalizedName: 'فارسی',
@@ -271,7 +270,6 @@ export const service: DefaultServiceConfig = {
duration: 'مدت',
podcastExternalLinks: 'این پادکست در این زمان قابل دسترس است',
download: 'دانلود برنامه',
- closeVideo: 'خروج',
},
socialEmbed: {
caption: {
@@ -424,7 +422,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'اخبار به زبانهای دیگر',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
@@ -445,6 +443,10 @@ export const service: DefaultServiceConfig = {
title: 'بحران خاورمیانه',
url: '/persian/topics/cj31ldvmg1et',
},
+ {
+ title: 'انتخابات آمریکا',
+ url: '/persian/topics/cj1gj22k6z6t',
+ },
{
title: 'پخش زنده',
url: '/persian/media-49522521',
diff --git a/src/app/lib/config/services/pidgin.ts b/src/app/lib/config/services/pidgin.ts
index 28686911e96..dec3ff32fd1 100644
--- a/src/app/lib/config/services/pidgin.ts
+++ b/src/app/lib/config/services/pidgin.ts
@@ -12,8 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-pidgin',
atiAnalyticsProducerId: '70',
- atiAnalyticsProducerName: 'PIDGIN',
- useReverb: true,
chartbeatDomain: 'pidgin.bbc.co.uk',
brandName: 'BBC News Pidgin',
product: 'BBC News',
@@ -225,7 +223,6 @@ export const service: DefaultServiceConfig = {
previousRadioShow: 'Previous radio show',
nextRadioShow: 'Next radio show',
duration: 'Duration',
- closeVideo: 'Exit',
},
socialEmbed: {
caption: {
@@ -342,7 +339,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News for oda languages',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/portuguese.ts b/src/app/lib/config/services/portuguese.ts
index 6c13d7ff310..c12dcd3d30f 100644
--- a/src/app/lib/config/services/portuguese.ts
+++ b/src/app/lib/config/services/portuguese.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-portuguese',
atiAnalyticsProducerId: '33',
- atiAnalyticsProducerName: 'BRASIL',
chartbeatDomain: 'brasil.bbc.co.uk', // this is meant to be different to the service name
brandName: 'BBC News Brasil',
product: 'BBC News',
@@ -249,7 +248,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'Mais',
podcastExternalLinks: 'O podcast está disponível em',
download: 'Baixar episódio',
- closeVideo: 'Sair',
},
socialEmbed: {
caption: {
@@ -404,7 +402,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News em outras línguas',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/punjabi.ts b/src/app/lib/config/services/punjabi.ts
index e46e350ebc0..61c9f0bf82e 100644
--- a/src/app/lib/config/services/punjabi.ts
+++ b/src/app/lib/config/services/punjabi.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-punjabi',
atiAnalyticsProducerId: '73',
- atiAnalyticsProducerName: 'PUNJABI',
chartbeatDomain: 'punjabi.bbc.co.uk',
brandName: 'BBC News ਪੰਜਾਬੀ',
product: 'BBC News',
@@ -227,7 +226,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'Next radio show',
duration: 'Duration',
recentEpisodes: 'ਤਾਜ਼ਾ ਐਪੀਸੋਡ',
- closeVideo: 'ਬਾਹਰ ਜਾਓ',
},
socialEmbed: {
caption: {
@@ -329,7 +327,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'ਬੀਬੀਸੀ ’ਤੇ ਹੋਰ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ ਖ਼ਬਰਾਂ',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/russian.ts b/src/app/lib/config/services/russian.ts
index e55356741dc..e83c02ff63c 100644
--- a/src/app/lib/config/services/russian.ts
+++ b/src/app/lib/config/services/russian.ts
@@ -208,7 +208,6 @@ export const mainTranslations = {
episodes: 'передачи',
podcastExternalLinks: 'Этот подкаст доступен на',
download: 'Загрузить эпизод',
- closeVideo: 'Выйти',
},
socialEmbed: {
caption: {
@@ -319,7 +318,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-russian',
atiAnalyticsProducerId: '75',
- atiAnalyticsProducerName: 'RUSSIAN',
chartbeatDomain: 'russian.bbc.co.uk',
brandName: 'BBC News Русская служба',
product: 'BBC News',
@@ -424,7 +422,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Би-би-си на других языках',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
@@ -446,10 +444,6 @@ export const service: DefaultServiceConfig = {
title: 'Война в Украине',
url: '/russian/topics/cez0n29ggrdt',
},
- {
- title: 'Сводка потерь',
- url: '/russian/topics/cqx9qqylwvgt',
- },
{
title: 'Истории',
url: '/russian/topics/cv27xky1pppt',
diff --git a/src/app/lib/config/services/scotland.ts b/src/app/lib/config/services/scotland.ts
index ee761a25e1c..c6518022033 100644
--- a/src/app/lib/config/services/scotland.ts
+++ b/src/app/lib/config/services/scotland.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'scotland',
atiAnalyticsProducerId: '79',
- atiAnalyticsProducerName: 'SCOTLAND',
chartbeatDomain: 'bbc.co.uk',
brandName: 'BBC Scotland',
product: 'BBC Scotland',
diff --git a/src/app/lib/config/services/serbian.ts b/src/app/lib/config/services/serbian.ts
index 97d4a8f21ef..c3d5155a15c 100644
--- a/src/app/lib/config/services/serbian.ts
+++ b/src/app/lib/config/services/serbian.ts
@@ -11,7 +11,6 @@ const baseServiceConfig = {
articleAuthor: 'https://www.facebook.com/bbcnews',
atiAnalyticsAppName: 'news-serbian',
atiAnalyticsProducerId: '81',
- atiAnalyticsProducerName: 'SERBIAN',
chartbeatDomain: 'serbian.bbc.co.uk',
product: 'BBC News',
defaultImage: 'https://news.files.bbci.co.uk/ws/img/logos/og/serbian.png',
@@ -93,7 +92,7 @@ export const service: SerbianConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News na drugim jezicima',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
@@ -115,25 +114,21 @@ export const service: SerbianConfig = {
title: 'Početna strana',
url: '/serbian/lat',
},
- {
- title: 'Studentske blokade',
- url: '/serbian/topics/cly9dd4w09wt/lat',
- },
{
title: 'Srbija',
- url: '/serbian/topics/cr50vdy9q6wt/lat',
+ url: '/serbian/lat/topics/cr50vdy9q6wt',
},
{
title: 'Balkan',
- url: '/serbian/topics/c06g87137jgt/lat',
+ url: '/serbian/lat/topics/c06g87137jgt',
},
{
title: 'Svet',
- url: '/serbian/topics/c2lej05e1eqt/lat',
+ url: '/serbian/lat/topics/c2lej05e1eqt',
},
{
title: 'Video',
- url: '/serbian/topics/c44vyp5g049t/lat',
+ url: '/serbian/lat/topics/c44vyp5g049t',
},
{
title: 'Najpopularnije',
@@ -328,7 +323,6 @@ export const service: SerbianConfig = {
previousRadioShow: 'Prethodna radio emisija',
nextRadioShow: 'Sledeća radio emisija',
duration: 'Trajanje',
- closeVideo: 'Izađi',
},
socialEmbed: {
caption: {
@@ -491,7 +485,7 @@ export const service: SerbianConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News на другим језицима',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
@@ -513,26 +507,6 @@ export const service: SerbianConfig = {
title: 'Почетна страна',
url: '/serbian/cyr',
},
- {
- title: 'Студентске блокаде',
- url: '/serbian/topics/cly9dd4w09wt/cyr',
- },
- {
- title: 'Србија',
- url: '/serbian/topics/cr50vdy9q6wt/cyr',
- },
- {
- title: 'Балкан',
- url: '/serbian/topics/c06g87137jgt/cyr',
- },
- {
- title: 'Свет',
- url: '/serbian/topics/c2lej05e1eqt/cyr',
- },
- {
- title: 'Видео',
- url: '/serbian/topics/c44vyp5g049t/cyr',
- },
{
title: 'Најпопуларније',
url: '/serbian/cyr/popular/read',
@@ -727,7 +701,6 @@ export const service: SerbianConfig = {
nextRadioShow: 'Следећа радио емисија',
duration: 'Трајање',
recentEpisodes: 'Претходне епизоде',
- closeVideo: 'Изађи',
},
socialEmbed: {
caption: {
diff --git a/src/app/lib/config/services/sinhala.ts b/src/app/lib/config/services/sinhala.ts
index 3cc1c747a4e..8f917508cca 100644
--- a/src/app/lib/config/services/sinhala.ts
+++ b/src/app/lib/config/services/sinhala.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-sinhala',
atiAnalyticsProducerId: '82',
- atiAnalyticsProducerName: 'SINHALA',
chartbeatDomain: 'sinhala.bbc.co.uk',
brandName: 'BBC News සිංහල',
product: 'BBC News',
@@ -227,7 +226,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'Next radio show',
duration: 'ධාවන කාලය',
recentEpisodes: 'පෙර වැඩසටහන්',
- closeVideo: 'ඉවත්වෙන්න',
},
socialEmbed: {
caption: {
@@ -302,7 +300,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'බීබීසී පුවත් වෙනත් භාෂාවලින්',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/somali.ts b/src/app/lib/config/services/somali.ts
index 79542cc8515..47a4f8b8621 100644
--- a/src/app/lib/config/services/somali.ts
+++ b/src/app/lib/config/services/somali.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-somali',
atiAnalyticsProducerId: '83',
- atiAnalyticsProducerName: 'SOMALI',
chartbeatDomain: 'somali.bbc.co.uk',
brandName: 'BBC News Somali',
product: 'BBC News',
@@ -317,7 +316,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Wararka BBC ee luqadaha kale',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/sport.ts b/src/app/lib/config/services/sport.ts
index 61506ee3237..f5a22ac2c84 100644
--- a/src/app/lib/config/services/sport.ts
+++ b/src/app/lib/config/services/sport.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'sport',
atiAnalyticsProducerId: '85',
- atiAnalyticsProducerName: 'SPORT',
chartbeatDomain: 'bbc.co.uk',
brandName: 'BBC Sport',
product: 'BBC Sport',
diff --git a/src/app/lib/config/services/swahili.ts b/src/app/lib/config/services/swahili.ts
index 94d80d7b22b..f7d1ab7b471 100644
--- a/src/app/lib/config/services/swahili.ts
+++ b/src/app/lib/config/services/swahili.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-swahili',
atiAnalyticsProducerId: '86',
- atiAnalyticsProducerName: 'SWAHILI',
chartbeatDomain: 'swahili.bbc.co.uk',
brandName: 'BBC News Swahili',
product: 'BBC News',
@@ -272,7 +271,7 @@ export const service: DefaultServiceConfig = {
mostRead: {
header: 'Iliyosomwa zaidi',
lastUpdated: 'Imeboreshwa mwisho:',
- numberOfItems: 10,
+ numberOfItems: 5,
hasMostRead: true,
},
radioSchedule: {
@@ -315,7 +314,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Habari za BBC kwa lugha zingine',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/tamil.ts b/src/app/lib/config/services/tamil.ts
index 5fdb27a5067..5eab5b20aa5 100644
--- a/src/app/lib/config/services/tamil.ts
+++ b/src/app/lib/config/services/tamil.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-tamil',
atiAnalyticsProducerId: '87',
- atiAnalyticsProducerName: 'TAMIL',
chartbeatDomain: 'tamil.bbc.co.uk',
brandName: 'BBC News தமிழ்',
product: 'BBC News',
@@ -243,7 +242,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'அடுத்த வானொலி நிகழ்ச்சி',
duration: 'கால அளவு',
recentEpisodes: 'முந்தைய நிகழ்ச்சிகள்',
- closeVideo: 'மூடுக',
},
socialEmbed: {
caption: {
@@ -396,7 +394,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'பிபிசி நியூஸ் பிற மொழிகளில்',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/telugu.ts b/src/app/lib/config/services/telugu.ts
index 0708a6a6a61..0ec8c97c7ac 100644
--- a/src/app/lib/config/services/telugu.ts
+++ b/src/app/lib/config/services/telugu.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-telugu',
atiAnalyticsProducerId: '89',
- atiAnalyticsProducerName: 'TELUGU',
chartbeatDomain: 'telugu.bbc.co.uk',
brandName: 'BBC News తెలుగు',
product: 'BBC News',
@@ -235,7 +234,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'తర్వాత రేడియో షో',
duration: 'వ్యవధి',
recentEpisodes: 'ఇటీవలి ఎపిసోడ్లు',
- closeVideo: 'నిష్క్రమించు',
},
socialEmbed: {
caption: {
@@ -315,7 +313,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'ఇతర భాషల్లో బీబీసీ వార్తలు',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/thai.ts b/src/app/lib/config/services/thai.ts
index 73d5dd32e56..a092bc32e61 100644
--- a/src/app/lib/config/services/thai.ts
+++ b/src/app/lib/config/services/thai.ts
@@ -14,7 +14,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-thai',
atiAnalyticsProducerId: '90',
- atiAnalyticsProducerName: 'THAI',
chartbeatDomain: 'thai.bbc.co.uk',
brandName: 'BBC News ไทย',
product: 'BBC News',
@@ -221,7 +220,6 @@ export const service: DefaultServiceConfig = {
previousRadioShow: 'รายการวิทยุก่อนหน้า',
nextRadioShow: 'รายการวิทยุถัดไป',
duration: 'ความยาว',
- closeVideo: 'ออก',
},
socialEmbed: {
caption: {
@@ -333,7 +331,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'บีบีซีนิวส์ภาษาอื่น ๆ',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/tigrinya.ts b/src/app/lib/config/services/tigrinya.ts
index 6f74ac82489..4863fa4ca02 100644
--- a/src/app/lib/config/services/tigrinya.ts
+++ b/src/app/lib/config/services/tigrinya.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-tigrinya',
atiAnalyticsProducerId: '91',
- atiAnalyticsProducerName: 'TIGRINYA',
chartbeatDomain: 'tigrinya.bbc.co.uk',
brandName: 'BBC News ትግርኛ',
product: 'BBC News',
@@ -212,7 +211,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'ዝቕጽል ፈነወ ራድዮ',
duration: 'ዕምሪ ፈነወ',
recentEpisodes: 'ዝሓለፉ ክፋላት',
- closeVideo: 'ออก',
},
socialEmbed: {
caption: {
@@ -290,7 +288,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'ብኻልኦት ቋንቋታት',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/turkce.ts b/src/app/lib/config/services/turkce.ts
index 583780197a9..a636c1370c5 100644
--- a/src/app/lib/config/services/turkce.ts
+++ b/src/app/lib/config/services/turkce.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-turkce',
atiAnalyticsProducerId: '92',
- atiAnalyticsProducerName: 'TURKISH',
chartbeatDomain: 'turkish.bbc.co.uk', // this is meant to be different to the service name
brandName: 'BBC News Türkçe',
product: 'BBC News',
@@ -229,7 +228,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'Next radio show',
duration: 'Duration',
recentEpisodes: 'Diğerleri',
- closeVideo: 'Çıkış',
},
socialEmbed: {
caption: {
@@ -308,7 +306,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Farklı dillerde BBC haberleri',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/ukchina.ts b/src/app/lib/config/services/ukchina.ts
index 3a9a0a01926..03a79f9bb0e 100644
--- a/src/app/lib/config/services/ukchina.ts
+++ b/src/app/lib/config/services/ukchina.ts
@@ -11,7 +11,6 @@ const baseServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-ukchina',
atiAnalyticsProducerId: '93',
- atiAnalyticsProducerName: 'UK_CHINA',
chartbeatDomain: 'ukchina.bbc.co.uk',
brandName: 'BBC 英伦网',
product: 'BBC',
@@ -276,7 +275,6 @@ export const service: ChineseConfig = {
nextRadioShow: '下期广播节目',
duration: '节目全长',
recentEpisodes: '存档节目',
- closeVideo: '退出',
},
socialEmbed: {
caption: {
@@ -541,7 +539,6 @@ export const service: ChineseConfig = {
nextRadioShow: '下期廣播節目',
duration: '節目全長',
recentEpisodes: '存档节目',
- closeVideo: '退出',
},
socialEmbed: {
caption: {
diff --git a/src/app/lib/config/services/ukrainian.ts b/src/app/lib/config/services/ukrainian.ts
index 4022affb25e..09659f5dab3 100644
--- a/src/app/lib/config/services/ukrainian.ts
+++ b/src/app/lib/config/services/ukrainian.ts
@@ -16,7 +16,6 @@ const baseServiceConfig = {
articleTimestampPrefix: 'Оновлено: ',
atiAnalyticsAppName: 'news-ukrainian',
atiAnalyticsProducerId: '94',
- atiAnalyticsProducerName: 'UKRAINIAN',
chartbeatDomain: 'ukrainian.bbc.co.uk',
brandName: 'BBC News Україна',
product: 'BBC News',
@@ -244,7 +243,6 @@ const baseServiceConfig = {
recentEpisodes: 'Більше',
podcastExternalLinks: 'Цей подкаст доступний у',
download: 'Завантажити епізод',
- closeVideo: 'Вийти',
},
socialEmbed: {
caption: {
@@ -320,7 +318,7 @@ const baseServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Новини ВВС іншими мовами',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/urdu.ts b/src/app/lib/config/services/urdu.ts
index 992afa6e4ff..3c11bd975c7 100644
--- a/src/app/lib/config/services/urdu.ts
+++ b/src/app/lib/config/services/urdu.ts
@@ -13,7 +13,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-urdu',
atiAnalyticsProducerId: '95',
- atiAnalyticsProducerName: 'URDU',
chartbeatDomain: 'urdu.bbc.co.uk',
brandName: 'BBC News اردو',
defaultImage: 'https://news.files.bbci.co.uk/ws/img/logos/og/urdu.png',
@@ -86,13 +85,6 @@ export const service: DefaultServiceConfig = {
audioPlayer: 'Audio player',
videoPlayer: 'Video player',
},
- articlePage: {
- jumpToTitle: {
- variation_1: 'پر جائیں',
- variation_2: 'بی بی سی نیوز اردو کی مدد سے مزید جانیے',
- variation_3: 'بی بی سی اردو نیوز سے مزید',
- },
- },
liveExperiencePage: {
liveLabel: 'لائیو',
liveCoverage: 'لائیو کوریج',
@@ -256,7 +248,6 @@ export const service: DefaultServiceConfig = {
recentEpisodes: 'سابق پروگرام',
podcastExternalLinks: 'یہ پوڈکاسٹ ان پلیٹفارمز پر بھی دستیاب ہے',
download: 'قسط ڈاؤن لوڈ کریں',
- closeVideo: 'بند کریں',
},
socialEmbed: {
caption: {
@@ -404,7 +395,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'بی بی سی نیوز دیگر زبانوں میں',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/uzbek.ts b/src/app/lib/config/services/uzbek.ts
index 5c5f60f3941..8c0ebb7ef18 100644
--- a/src/app/lib/config/services/uzbek.ts
+++ b/src/app/lib/config/services/uzbek.ts
@@ -11,7 +11,6 @@ const baseServiceConfig = {
articleAuthor: `https://www.facebook.com/bbcnews`,
atiAnalyticsAppName: 'news-uzbek',
atiAnalyticsProducerId: '96',
- atiAnalyticsProducerName: 'UZBEK',
chartbeatDomain: 'uzbek.bbc.co.uk',
product: 'BBC News',
defaultImage: 'https://news.files.bbci.co.uk/ws/img/logos/og/uzbek.png',
@@ -245,7 +244,6 @@ const defaultCyrillicConfig = {
nextRadioShow: 'Кейинги радио дастур',
duration: 'Давомийлиги',
recentEpisodes: 'Олдинги дастурлар',
- closeVideo: 'Чиқиш',
},
socialEmbed: {
caption: {
@@ -315,7 +313,7 @@ const defaultCyrillicConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News бошқа тилларда',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
@@ -650,7 +648,7 @@ export const service: UzbekConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News бошқа тилларда',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/vietnamese.ts b/src/app/lib/config/services/vietnamese.ts
index c8786cde402..b7137c29c34 100644
--- a/src/app/lib/config/services/vietnamese.ts
+++ b/src/app/lib/config/services/vietnamese.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-vietnamese',
atiAnalyticsProducerId: '97',
- atiAnalyticsProducerName: 'VIETNAMESE',
chartbeatDomain: 'vietnamese.bbc.co.uk',
brandName: 'BBC News Tiếng Việt',
product: 'BBC News',
@@ -228,7 +227,6 @@ export const service: DefaultServiceConfig = {
nextRadioShow: 'Show radio sau',
duration: 'Thời lượng',
recentEpisodes: 'Xem thêm',
- closeVideo: 'Thoát',
},
socialEmbed: {
caption: {
@@ -311,7 +309,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'BBC News các ngôn ngữ khác',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/ws.ts b/src/app/lib/config/services/ws.ts
index 202af86087c..c84a5047ad7 100644
--- a/src/app/lib/config/services/ws.ts
+++ b/src/app/lib/config/services/ws.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news',
atiAnalyticsProducerId: '64',
- atiAnalyticsProducerName: 'NEWS',
chartbeatDomain: 'bbc.co.uk',
brandName: 'BBC News',
product: 'BBC News',
diff --git a/src/app/lib/config/services/yoruba.ts b/src/app/lib/config/services/yoruba.ts
index 7ac2810344f..7c88613f121 100644
--- a/src/app/lib/config/services/yoruba.ts
+++ b/src/app/lib/config/services/yoruba.ts
@@ -12,7 +12,6 @@ export const service: DefaultServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-yoruba',
atiAnalyticsProducerId: '107',
- atiAnalyticsProducerName: 'YORUBA',
chartbeatDomain: 'yoruba.bbc.co.uk',
brandName: 'BBC News Yorùbá',
product: 'BBC News',
@@ -222,7 +221,6 @@ export const service: DefaultServiceConfig = {
previousRadioShow: 'Previous radio show',
nextRadioShow: 'Next radio show',
duration: 'Duration',
- closeVideo: 'Jáde',
},
socialEmbed: {
caption: {
@@ -297,7 +295,7 @@ export const service: DefaultServiceConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: 'Ka ìròyìn BBC l’èdè míràn nibi',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
diff --git a/src/app/lib/config/services/zhongwen.ts b/src/app/lib/config/services/zhongwen.ts
index 12a69b77115..d86b3b5f932 100644
--- a/src/app/lib/config/services/zhongwen.ts
+++ b/src/app/lib/config/services/zhongwen.ts
@@ -12,7 +12,6 @@ const baseServiceConfig = {
articleTimestampSuffix: '',
atiAnalyticsAppName: 'news-zhongwen',
atiAnalyticsProducerId: '38',
- atiAnalyticsProducerName: 'CHINESE',
chartbeatDomain: 'zhongwen.bbc.co.uk',
brandName: 'BBC News 中文',
product: 'BBC News',
@@ -102,7 +101,7 @@ export const service: ZhongwenConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: '以其他语言阅览BBC新闻',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
@@ -126,31 +125,31 @@ export const service: ZhongwenConfig = {
},
{
title: '国际',
- url: '/zhongwen/topics/c83plve5vmjt/simp',
+ url: '/zhongwen/simp/topics/ck2l9z0em07t',
},
{
title: '中国',
- url: '/zhongwen/topics/ckr7mn6r003t/simp',
+ url: '/zhongwen/simp/topics/cv85rd690y1t',
},
{
title: '香港',
- url: '/zhongwen/topics/cezw73jk755t/simp',
+ url: '/zhongwen/simp/topics/c4vmr03pyn6t',
},
{
title: '台湾',
- url: '/zhongwen/topics/cd6qem06z92t/simp',
+ url: '/zhongwen/simp/topics/c50nzmy3vent',
},
{
title: '英国',
- url: '/zhongwen/topics/c1ez1k4emn0t/simp',
+ url: '/zhongwen/simp/topics/c1nq04exqmlt',
},
{
title: '财经',
- url: '/zhongwen/topics/cq8nqywy37yt/simp',
+ url: '/zhongwen/simp/topics/cdlxq9k9nqkt',
},
{
title: '视频',
- url: '/zhongwen/topics/cgvl47l38e1t/simp',
+ url: '/zhongwen/simp/topics/ck5rznle6edt',
},
],
scriptLink: {
@@ -330,7 +329,6 @@ export const service: ZhongwenConfig = {
recentEpisodes: '存档节目',
podcastExternalLinks: 'This podcast is also available on',
download: '下载本集节目',
- closeVideo: '退出',
},
socialEmbed: {
caption: {
@@ -410,7 +408,7 @@ export const service: ZhongwenConfig = {
},
{
href: 'https://www.bbc.com/ws/languages',
- text: '以其他語言閱覽BBC新聞',
+ text: 'Other Languages',
},
{
id: 'COOKIE_SETTINGS',
@@ -434,31 +432,31 @@ export const service: ZhongwenConfig = {
},
{
title: '國際',
- url: '/zhongwen/topics/c83plve5vmjt/trad',
+ url: '/zhongwen/trad/topics/c83plve5vmjt',
},
{
title: '中國',
- url: '/zhongwen/topics/ckr7mn6r003t/trad',
+ url: '/zhongwen/trad/topics/ckr7mn6r003t',
},
{
title: '香港',
- url: '/zhongwen/topics/cezw73jk755t/trad',
+ url: '/zhongwen/trad/topics/cezw73jk755t',
},
{
title: '台灣',
- url: '/zhongwen/topics/cd6qem06z92t/trad',
+ url: '/zhongwen/trad/topics/cd6qem06z92t',
},
{
title: '英國',
- url: '/zhongwen/topics/c1ez1k4emn0t/trad',
+ url: '/zhongwen/trad/topics/c1ez1k4emn0t',
},
{
title: '財經',
- url: '/zhongwen/topics/cq8nqywy37yt/trad',
+ url: '/zhongwen/trad/topics/cq8nqywy37yt',
},
{
title: '影片',
- url: '/zhongwen/topics/cgvl47l38e1t/trad',
+ url: '/zhongwen/trad/topics/cgvl47l38e1t',
},
],
scriptLink: {
@@ -638,7 +636,6 @@ export const service: ZhongwenConfig = {
recentEpisodes: '存档节目',
podcastExternalLinks: 'This podcast is also available on',
download: '下載本集節目',
- closeVideo: '退出',
},
socialEmbed: {
caption: {
diff --git a/src/app/lib/styles.const/__snapshots__/index.test.ts.snap b/src/app/lib/styles.const/__snapshots__/index.test.ts.snap
index 09f8e06de5c..67a72ac79de 100644
--- a/src/app/lib/styles.const/__snapshots__/index.test.ts.snap
+++ b/src/app/lib/styles.const/__snapshots__/index.test.ts.snap
@@ -16,9 +16,11 @@ exports[`Styles NEGATIVE_MARGIN should match text 1`] = `
exports[`Styles NegativeMargin should match text 1`] = `
{
- "name": "1fx7y7j-NegativeMargin",
+ "map": "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTBCOEIiLCJmaWxlIjoiaW5kZXgudHMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIEdST1VQXzFfTUFYX1dJRFRILFxuICBHUk9VUF8yX01JTl9XSURUSCxcbiAgR1JPVVBfM19NSU5fV0lEVEgsXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvVGhlbWVQcm92aWRlci9tZWRpYVF1ZXJpZXMnO1xuaW1wb3J0IHtcbiAgTUFSR0lOX0FCT1ZFXzQwMFBYLFxuICBNQVJHSU5fQkVMT1dfNDAwUFgsXG4gIFFVQURSVVBMRSxcbiAgVFJJUExFLFxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1RoZW1lUHJvdmlkZXIvc3BhY2luZ3MnO1xuXG5leHBvcnQgY29uc3QgTkVHQVRJVkVfTUFSR0lOID0gYCR7R1JPVVBfMV9NQVhfV0lEVEh9IHtcbiAgICAvKiBUbyByZW1vdmUgR0VMIE1hcmdpbnMgKi9cbiAgICBtYXJnaW46ICR7UVVBRFJVUExFfXJlbSAtJHtNQVJHSU5fQkVMT1dfNDAwUFh9IDA7XG4gICAgcGFkZGluZzogMCAke01BUkdJTl9CRUxPV180MDBQWH07XG4gIH1cbiAgJHtHUk9VUF8yX01JTl9XSURUSH0ge1xuICAgIG1hcmdpbjogJHtRVUFEUlVQTEV9cmVtIC0ke01BUkdJTl9BQk9WRV80MDBQWH0gMDtcbiAgfVxuICAke0dST1VQXzNfTUlOX1dJRFRIfSB7XG4gICAgbWFyZ2luOiAke1RSSVBMRX1yZW0gLSR7TUFSR0lOX0FCT1ZFXzQwMFBYfSAwO1xufWA7XG5cbmV4cG9ydCBjb25zdCBOZWdhdGl2ZU1hcmdpbiA9IGNzcyh7XG4gIFtHUk9VUF8xX01BWF9XSURUSF06IHtcbiAgICAvKiBUbyByZW1vdmUgR0VMIE1hcmdpbnMgKi9cbiAgICBtYXJnaW46IGAke1FVQURSVVBMRX1yZW0gLSR7TUFSR0lOX0JFTE9XXzQwMFBYfSAwYCxcbiAgICBwYWRkaW5nOiBgMCAke01BUkdJTl9CRUxPV180MDBQWH1gLFxuICB9LFxuICBbR1JPVVBfMl9NSU5fV0lEVEhdOiB7XG4gICAgbWFyZ2luOiBgJHtRVUFEUlVQTEV9cmVtIC0ke01BUkdJTl9BQk9WRV80MDBQWH0gMGAsXG4gIH0sXG4gIFtHUk9VUF8zX01JTl9XSURUSF06IHsgbWFyZ2luOiBgJHtUUklQTEV9cmVtIC0ke01BUkdJTl9BQk9WRV80MDBQWH0gMGAgfSxcbn0pO1xuXG4vKipcbiAqIFRoZXNlIHN0eWxlcyBhcmUgbGlmdGVkIGZyb20gI3BzYW1tZWFkL3BzYW1tZWFkLXZpc3VhbGx5LWhpZGRlbi10ZXh0L3NyY1xuICogKGh0dHBzOi8vZ2l0aHViLmNvbS9iYmMvc2ltb3JnaC9ibG9iL2M5MjUzYjkyOGJjNGRiMjY4YzFkM2VmZjIzNzY1N2E1M2M3Nzc2MzMvc3JjL2FwcC9sZWdhY3kvcHNhbW1lYWQvcHNhbW1lYWQtdmlzdWFsbHktaGlkZGVuLXRleHQvc3JjL2luZGV4LmpzeCNMMy1MMTEpLFxuICogIHdoaWNoIHdlIGNhbm5vdCB1c2UgZGlyZWN0bHkgYXMgd2UgcmVxdWlyZSBjb250cm9sIG92ZXIgX3doZW5fIHRoZXkgYXJlIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB2aXN1YWxseUhpZGRlblN0eWxlID0gYFxuY2xpcC1wYXRoOiBpbnNldCgxMDAlKTtcbmNsaXA6IHJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtcbmhlaWdodDogMXB4O1xub3ZlcmZsb3c6IGhpZGRlbjtcbnBvc2l0aW9uOiBhYnNvbHV0ZTtcbndpZHRoOiAxcHg7XG5tYXJnaW46IDA7XG5gO1xuIl19 */",
+ "name": "1qlli7s-NegativeMargin",
"next": undefined,
- "styles": "@media (max-width: 24.9375rem){margin:2rem -0.5rem 0;padding:0 0.5rem;}@media (min-width: 25rem){margin:2rem -1rem 0;}@media (min-width: 37.5rem){margin:1.5rem -1rem 0;};label:NegativeMargin;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTBCOEIiLCJmaWxlIjoiaW5kZXgudHMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIEdST1VQXzFfTUFYX1dJRFRILFxuICBHUk9VUF8yX01JTl9XSURUSCxcbiAgR1JPVVBfM19NSU5fV0lEVEgsXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvVGhlbWVQcm92aWRlci9tZWRpYVF1ZXJpZXMnO1xuaW1wb3J0IHtcbiAgTUFSR0lOX0FCT1ZFXzQwMFBYLFxuICBNQVJHSU5fQkVMT1dfNDAwUFgsXG4gIFFVQURSVVBMRSxcbiAgVFJJUExFLFxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1RoZW1lUHJvdmlkZXIvc3BhY2luZ3MnO1xuXG5leHBvcnQgY29uc3QgTkVHQVRJVkVfTUFSR0lOID0gYCR7R1JPVVBfMV9NQVhfV0lEVEh9IHtcbiAgICAvKiBUbyByZW1vdmUgR0VMIE1hcmdpbnMgKi9cbiAgICBtYXJnaW46ICR7UVVBRFJVUExFfXJlbSAtJHtNQVJHSU5fQkVMT1dfNDAwUFh9IDA7XG4gICAgcGFkZGluZzogMCAke01BUkdJTl9CRUxPV180MDBQWH07XG4gIH1cbiAgJHtHUk9VUF8yX01JTl9XSURUSH0ge1xuICAgIG1hcmdpbjogJHtRVUFEUlVQTEV9cmVtIC0ke01BUkdJTl9BQk9WRV80MDBQWH0gMDtcbiAgfVxuICAke0dST1VQXzNfTUlOX1dJRFRIfSB7XG4gICAgbWFyZ2luOiAke1RSSVBMRX1yZW0gLSR7TUFSR0lOX0FCT1ZFXzQwMFBYfSAwO1xufWA7XG5cbmV4cG9ydCBjb25zdCBOZWdhdGl2ZU1hcmdpbiA9IGNzcyh7XG4gIFtHUk9VUF8xX01BWF9XSURUSF06IHtcbiAgICAvKiBUbyByZW1vdmUgR0VMIE1hcmdpbnMgKi9cbiAgICBtYXJnaW46IGAke1FVQURSVVBMRX1yZW0gLSR7TUFSR0lOX0JFTE9XXzQwMFBYfSAwYCxcbiAgICBwYWRkaW5nOiBgMCAke01BUkdJTl9CRUxPV180MDBQWH1gLFxuICB9LFxuICBbR1JPVVBfMl9NSU5fV0lEVEhdOiB7XG4gICAgbWFyZ2luOiBgJHtRVUFEUlVQTEV9cmVtIC0ke01BUkdJTl9BQk9WRV80MDBQWH0gMGAsXG4gIH0sXG4gIFtHUk9VUF8zX01JTl9XSURUSF06IHsgbWFyZ2luOiBgJHtUUklQTEV9cmVtIC0ke01BUkdJTl9BQk9WRV80MDBQWH0gMGAgfSxcbn0pO1xuXG4vKipcbiAqIFRoZXNlIHN0eWxlcyBhcmUgbGlmdGVkIGZyb20gI3BzYW1tZWFkL3BzYW1tZWFkLXZpc3VhbGx5LWhpZGRlbi10ZXh0L3NyY1xuICogKGh0dHBzOi8vZ2l0aHViLmNvbS9iYmMvc2ltb3JnaC9ibG9iL2M5MjUzYjkyOGJjNGRiMjY4YzFkM2VmZjIzNzY1N2E1M2M3Nzc2MzMvc3JjL2FwcC9sZWdhY3kvcHNhbW1lYWQvcHNhbW1lYWQtdmlzdWFsbHktaGlkZGVuLXRleHQvc3JjL2luZGV4LmpzeCNMMy1MMTEpLFxuICogIHdoaWNoIHdlIGNhbm5vdCB1c2UgZGlyZWN0bHkgYXMgd2UgcmVxdWlyZSBjb250cm9sIG92ZXIgX3doZW5fIHRoZXkgYXJlIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB2aXN1YWxseUhpZGRlblN0eWxlID0gYFxuY2xpcC1wYXRoOiBpbnNldCgxMDAlKTtcbmNsaXA6IHJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtcbmhlaWdodDogMXB4O1xub3ZlcmZsb3c6IGhpZGRlbjtcbnBvc2l0aW9uOiBhYnNvbHV0ZTtcbndpZHRoOiAxcHg7XG5tYXJnaW46IDA7XG5gO1xuIl19 */",
+ "styles": "@media (max-width: 24.9375rem){margin:2rem -0.5rem 0;padding:0 0.5rem;}@media (min-width: 25rem){margin:2rem -1rem 0;}@media (min-width: 37.5rem){margin:1.5rem -1rem 0;};label:NegativeMargin;",
+ "toString": [Function],
}
`;
diff --git a/src/app/lib/utilities/episodeAvailability/withMediaError/index.jsx b/src/app/lib/utilities/episodeAvailability/withMediaError/index.jsx
index ed087679a72..dedbb276b6b 100644
--- a/src/app/lib/utilities/episodeAvailability/withMediaError/index.jsx
+++ b/src/app/lib/utilities/episodeAvailability/withMediaError/index.jsx
@@ -2,23 +2,21 @@ import React from 'react';
import { EPISODE_STATUS } from '../episodeStatus';
import ErrorMessage from '../ErrorMessage';
-const getErrorComponent = episodeAvailability => errorProps => (
-
-);
-
const withMediaError = PageComponent => {
const MediaErrorComponent = props => {
const { pageData: { episodeAvailability } = null } = props;
const mediaIsAvailable =
episodeAvailability === EPISODE_STATUS.EPISODE_IS_AVAILABLE;
+ const ErrorComponent = errorProps => (
+
+ );
+
return (
null : getErrorComponent(episodeAvailability)
- }
+ MediaError={mediaIsAvailable ? () => null : ErrorComponent}
/>
);
};
diff --git a/src/app/lib/utilities/getEnvConfig/index.ts b/src/app/lib/utilities/getEnvConfig/index.ts
index e4ce70ef114..04c8dc94a41 100644
--- a/src/app/lib/utilities/getEnvConfig/index.ts
+++ b/src/app/lib/utilities/getEnvConfig/index.ts
@@ -23,7 +23,6 @@ export const getProcessEnvAppVariables = () => ({
process.env.SIMORGH_PUBLIC_STATIC_ASSETS_ORIGIN,
SIMORGH_PUBLIC_STATIC_ASSETS_PATH:
process.env.SIMORGH_PUBLIC_STATIC_ASSETS_PATH,
- SIMORGH_REVERB_SOURCE: process.env.SIMORGH_REVERB_SOURCE,
SIMORGH_WEBVITALS_REPORTING_ENDPOINT:
process.env.SIMORGH_WEBVITALS_REPORTING_ENDPOINT,
SIMORGH_WEBVITALS_DEFAULT_SAMPLING_RATE:
diff --git a/src/app/lib/utilities/getUrlHelpers/getRadioSchedulesUrls/index.jsx b/src/app/lib/utilities/getUrlHelpers/getRadioSchedulesUrls/index.jsx
new file mode 100644
index 00000000000..e72999aba40
--- /dev/null
+++ b/src/app/lib/utilities/getUrlHelpers/getRadioSchedulesUrls/index.jsx
@@ -0,0 +1,16 @@
+export const getRadioScheduleEndpoint = ({
+ service,
+ radioService = service,
+ env,
+ queryString,
+ baseUrl = '',
+}) => {
+ const query = env !== 'live' && queryString ? queryString : '';
+
+ return `${baseUrl}/${service}/bbc_${radioService}_radio/schedule.json${query}`;
+};
+
+export const getLocalRadioScheduleEndpoint = ({
+ service,
+ radioService = service,
+}) => `./data/${service}/bbc_${radioService}_radio/schedule.json`;
diff --git a/src/app/lib/utilities/getUrlHelpers/getRadioSchedulesUrls/index.test.jsx b/src/app/lib/utilities/getUrlHelpers/getRadioSchedulesUrls/index.test.jsx
new file mode 100644
index 00000000000..cfdbee1dc52
--- /dev/null
+++ b/src/app/lib/utilities/getUrlHelpers/getRadioSchedulesUrls/index.test.jsx
@@ -0,0 +1,74 @@
+import { getRadioScheduleEndpoint, getLocalRadioScheduleEndpoint } from '.';
+
+describe('getRadioScheduleEndpoint', () => {
+ it('should return endpoint when passed service', () => {
+ expect(getRadioScheduleEndpoint({ service: 'hausa' })).toBe(
+ '/hausa/bbc_hausa_radio/schedule.json',
+ );
+ });
+ it('should return endpoint when passed base URL and service', () => {
+ expect(
+ getRadioScheduleEndpoint({ service: 'hausa', baseUrl: 'bbc.com' }),
+ ).toBe('bbc.com/hausa/bbc_hausa_radio/schedule.json');
+ });
+ it('should return endpoint when passed service & radioService', () => {
+ expect(
+ getRadioScheduleEndpoint({ service: 'persian', radioService: 'dari' }),
+ ).toBe('/persian/bbc_dari_radio/schedule.json');
+ });
+ describe('query param override', () => {
+ it('should always return endpoint without query string on live', () => {
+ expect(
+ getRadioScheduleEndpoint({
+ service: 'hausa',
+ queryString: '?renderer_env=live',
+ env: 'live',
+ }),
+ ).toBe('/hausa/bbc_hausa_radio/schedule.json');
+ });
+ it('should return endpoint with query string on test', () => {
+ expect(
+ getRadioScheduleEndpoint({
+ service: 'hausa',
+ queryString: '?renderer_env=live',
+ env: 'test',
+ }),
+ ).toBe('/hausa/bbc_hausa_radio/schedule.json?renderer_env=live');
+ });
+ it('should return endpoint with query string on local', () => {
+ expect(
+ getRadioScheduleEndpoint({
+ service: 'hausa',
+ queryString: '?renderer_env=live',
+ env: 'local',
+ }),
+ ).toBe('/hausa/bbc_hausa_radio/schedule.json?renderer_env=live');
+ });
+ it('should return with query string when passed service & radioService', () => {
+ expect(
+ getRadioScheduleEndpoint({
+ service: 'persian',
+ radioService: 'dari',
+ queryString: '?renderer_env=live',
+ env: 'test',
+ }),
+ ).toBe('/persian/bbc_dari_radio/schedule.json?renderer_env=live');
+ });
+ });
+});
+
+describe('getLocalRadioScheduleEndpoint', () => {
+ it('should return endpoint when passed service', () => {
+ expect(getLocalRadioScheduleEndpoint({ service: 'hausa' })).toBe(
+ './data/hausa/bbc_hausa_radio/schedule.json',
+ );
+ });
+ it('should return endpoint when passed service & radioService', () => {
+ expect(
+ getLocalRadioScheduleEndpoint({
+ service: 'persian',
+ radioService: 'dari',
+ }),
+ ).toBe('./data/persian/bbc_dari_radio/schedule.json');
+ });
+});
diff --git a/src/app/lib/utilities/getUrlHelpers/index.js b/src/app/lib/utilities/getUrlHelpers/index.js
index 16e633eb5aa..065068bd831 100644
--- a/src/app/lib/utilities/getUrlHelpers/index.js
+++ b/src/app/lib/utilities/getUrlHelpers/index.js
@@ -1,7 +1,9 @@
import getMostReadUrls from './getMostReadUrls';
+import getRadioSchedulesUrls from './getRadioSchedulesUrls';
import getSecondaryColumnUrl from './getSecondaryColumnUrl';
export default {
getMostReadUrls,
+ getRadioSchedulesUrls,
getSecondaryColumnUrl,
};
diff --git a/src/app/lib/utilities/idSanitiser/index.js b/src/app/lib/utilities/idSanitiser/index.js
index 6a1c0e06de8..c83b828b649 100644
--- a/src/app/lib/utilities/idSanitiser/index.js
+++ b/src/app/lib/utilities/idSanitiser/index.js
@@ -1,6 +1,6 @@
// prettier-ignore
// eslint-disable-next-line no-useless-escape
-export const regexPunctuationSymbols = /[\[\]\.,\/?¿!$'"%^&*;:{}=\-_`~()؟؛٬«»!,。?、@#¥…(:;)《》“”〔〕’|]/gi;
+const regexPunctuationSymbols = /[\[\]\.,\/?¿!$'"%^&*;:{}=\-_`~()؟؛٬«»!,。?、@#¥…(:;)《》“”〔〕’|]/gi;
const regexSpaces = /\s+/g;
const idSanitiser = text =>
diff --git a/src/app/models/types/eventTracking.ts b/src/app/models/types/eventTracking.ts
index 156ae525614..f299ea81714 100644
--- a/src/app/models/types/eventTracking.ts
+++ b/src/app/models/types/eventTracking.ts
@@ -1,12 +1,5 @@
import { ReactSDKClient } from '@optimizely/react-sdk';
-export type ReverbClient = {
- isReady: () => boolean;
- initialise: () => Promise;
- viewEvent: () => void;
- userActionEvent: (...args: unknown[]) => void;
-};
-
export type EventTrackingMetadata = {
componentName: string;
detailedPlacement?: string;
diff --git a/src/app/models/types/serviceConfig.ts b/src/app/models/types/serviceConfig.ts
index c29cc1abdb0..ef28a24d7f2 100644
--- a/src/app/models/types/serviceConfig.ts
+++ b/src/app/models/types/serviceConfig.ts
@@ -12,27 +12,27 @@ import {
import { Translations } from './translations';
export type DefaultServiceConfig = {
- [_key in ServicesWithNoVariants['variant']]: ServiceConfig;
+ [key in ServicesWithNoVariants['variant']]: ServiceConfig;
};
export type SerbianConfig = {
- [_key in SerbianService['variant']]: ServiceConfig;
+ [key in SerbianService['variant']]: ServiceConfig;
};
export type ChineseConfig = {
- [_key in ChineseService['variant']]: ServiceConfig;
+ [key in ChineseService['variant']]: ServiceConfig;
};
export type ZhongwenConfig = {
- [_key in ZhongwenService['variant']]: ServiceConfig;
+ [key in ZhongwenService['variant']]: ServiceConfig;
};
export type UkrainianConfig = {
- [_key in UkrainianService['variant']]: ServiceConfig;
+ [key in UkrainianService['variant']]: ServiceConfig;
};
export type UzbekConfig = {
- [_key in UzbekService['variant']]: ServiceConfig;
+ [key in UzbekService['variant']]: ServiceConfig;
};
export type ServiceConfig = {
@@ -42,8 +42,6 @@ export type ServiceConfig = {
articleTimestampSuffix?: string;
atiAnalyticsAppName: string;
atiAnalyticsProducerId: string;
- atiAnalyticsProducerName?: string;
- useReverb?: boolean;
chartbeatDomain: string;
brandName: string;
product: string;
diff --git a/src/app/models/types/theming.ts b/src/app/models/types/theming.ts
index 01d5a6b4ec0..1a07ff49d48 100644
--- a/src/app/models/types/theming.ts
+++ b/src/app/models/types/theming.ts
@@ -38,9 +38,7 @@ interface Palette extends BrandPalette {
KINGFISHER: string;
LE_TEAL: string;
LIVE_LIGHT: string;
- LIVE_MEDIUM: string;
LIVE_DARK: string;
- LIVE_CORE: string;
LUNAR: string;
LUNAR_LIGHT: string;
METAL: string;
diff --git a/src/app/models/types/translations.ts b/src/app/models/types/translations.ts
index 3526009fe5a..52db8d19783 100644
--- a/src/app/models/types/translations.ts
+++ b/src/app/models/types/translations.ts
@@ -32,11 +32,7 @@ export interface Translations {
videoPlayer: string;
};
articlePage?: {
- jumpToTitle: {
- variation_1: string;
- variation_2: string;
- variation_3: string;
- };
+ jumpTo: string;
};
liveExperiencePage: {
liveLabel: string;
@@ -177,7 +173,6 @@ export interface Translations {
recentEpisodes?: string;
podcastExternalLinks?: string;
download?: string;
- closeVideo?: string;
};
socialEmbed: {
caption?: {
diff --git a/src/app/pages/ArticlePage/ArticlePage.styles.ts b/src/app/pages/ArticlePage/ArticlePage.styles.ts
index aa9a653cf7a..3ba306630a6 100644
--- a/src/app/pages/ArticlePage/ArticlePage.styles.ts
+++ b/src/app/pages/ArticlePage/ArticlePage.styles.ts
@@ -41,6 +41,14 @@ export default {
gridColumn: '1 / span 12',
paddingBottom: '2rem',
}),
+ aside: ({ mq }: Theme) =>
+ css({
+ display: 'none',
+
+ [mq.GROUP_3_MAX_WIDTH]: {
+ display: 'block',
+ },
+ }),
mainContent: ({ spacings }: Theme) =>
css({
paddingBottom: `${spacings.TRIPLE}rem`,
@@ -93,10 +101,18 @@ export default {
topStoriesSection: ({ spacings, mq }: Theme) =>
css({
marginBottom: `${spacings.TRIPLE}rem`,
-
[mq.GROUP_4_MIN_WIDTH]: {
+ display: 'block',
marginBottom: `${spacings.FULL}rem`,
padding: `${spacings.DOUBLE}rem`,
},
+ '[amp-x-topStoriesExperiment*="show"] &': {
+ display: 'none',
+ [mq.GROUP_4_MIN_WIDTH]: {
+ display: 'block',
+ marginBottom: `${spacings.FULL}rem`,
+ padding: `${spacings.DOUBLE}rem`,
+ },
+ },
}),
};
diff --git a/src/app/pages/ArticlePage/PagePromoSections/TopStoriesSection/TopStoriesItem/index.tsx b/src/app/pages/ArticlePage/PagePromoSections/TopStoriesSection/TopStoriesItem/index.tsx
index 77754f7248a..7ed0ce9de6f 100644
--- a/src/app/pages/ArticlePage/PagePromoSections/TopStoriesSection/TopStoriesItem/index.tsx
+++ b/src/app/pages/ArticlePage/PagePromoSections/TopStoriesSection/TopStoriesItem/index.tsx
@@ -24,7 +24,7 @@ const getArticleTopStoryItem = (item: TopStoryItem) => {
const mediaType = item?.media?.format ?? '';
const mediaDuration = item?.media?.duration ?? '';
- const isPhotoGallery = item?.cpsType === 'PGL';
+ const isPhotoGallery = item?.cpsType === 'PGL' ?? null;
const timestamp = item?.timestamp ?? null;
const assetUri = item?.locators?.assetUri ?? '';
diff --git a/src/app/pages/ArticlePage/PagePromoSections/TopStoriesSection/index.tsx b/src/app/pages/ArticlePage/PagePromoSections/TopStoriesSection/index.tsx
index 4bf1386a313..03797e3b524 100644
--- a/src/app/pages/ArticlePage/PagePromoSections/TopStoriesSection/index.tsx
+++ b/src/app/pages/ArticlePage/PagePromoSections/TopStoriesSection/index.tsx
@@ -7,7 +7,6 @@ import { EventTrackingBlock } from '#app/models/types/eventTracking';
import SectionLabel from '#psammead/psammead-section-label/src';
import PromoItem from '#components/OptimoPromos/PromoItem/index.styles';
import PromoList from '#components/OptimoPromos/PromoList';
-import { OptimizelyContext } from '@optimizely/react-sdk';
import { ServiceContext } from '../../../../contexts/ServiceContext';
import styles from './index.styles';
import TopStoriesItem from './TopStoriesItem';
@@ -53,23 +52,11 @@ const renderTopStoriesList = ({
);
};
-const TopStoriesSection = ({
- content = [],
- sendOptimizelyEvents,
-}: {
- content: TopStoryItem[];
- sendOptimizelyEvents?: boolean;
-}) => {
+const TopStoriesSection = ({ content = [] }: { content: TopStoryItem[] }) => {
const { translations, script, service } = useContext(ServiceContext);
- const { optimizely } = useContext(OptimizelyContext);
-
const eventTrackingData = {
block: {
componentName: 'top-stories',
- ...(sendOptimizelyEvents && {
- optimizely,
- optimizelyMetricNameOverride: 'top_stories',
- }),
},
};
const eventTrackingDataSend = eventTrackingData?.block;
diff --git a/src/app/pages/ArticlePage/SecondaryColumn.tsx b/src/app/pages/ArticlePage/SecondaryColumn.tsx
index 1cfd79210de..8928e63a5f6 100644
--- a/src/app/pages/ArticlePage/SecondaryColumn.tsx
+++ b/src/app/pages/ArticlePage/SecondaryColumn.tsx
@@ -8,13 +8,7 @@ import TopStoriesSection from './PagePromoSections/TopStoriesSection';
import styles from './ArticlePage.styles';
-const SecondaryColumn = ({
- pageData,
- sendOptimizelyEvents,
-}: {
- pageData: Article;
- sendOptimizelyEvents: boolean;
-}) => {
+const SecondaryColumn = ({ pageData }: { pageData: Article }) => {
const topStoriesContent = pageData?.secondaryColumn?.topStories;
const featuresContent = pageData?.secondaryColumn?.features;
@@ -32,17 +26,13 @@ const SecondaryColumn = ({
data-testid="top-stories"
data-experiment-position="secondaryColumn"
>
-
+
)}
{featuresContent && (
diff --git a/src/app/pages/ArticlePage/__snapshots__/index.test.tsx.snap b/src/app/pages/ArticlePage/__snapshots__/index.test.tsx.snap
index 3cad7115055..7ecee600a63 100644
--- a/src/app/pages/ArticlePage/__snapshots__/index.test.tsx.snap
+++ b/src/app/pages/ArticlePage/__snapshots__/index.test.tsx.snap
@@ -6,221 +6,388 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
.emotion-1 {
- max-width: 63rem;
- margin: 0 auto;
- display: grid;
- grid-template-columns: repeat(12, 1fr);
+ display: none;
}
-@media (min-width: 63rem) {
+@media (max-width: 62.9375rem) {
.emotion-1 {
- padding: 0 1rem;
- -webkit-column-gap: 1rem;
- column-gap: 1rem;
- }
-}
-
-.emotion-2 {
- grid-column: 1/span 12;
- padding-bottom: 2rem;
-}
-
-@media (min-width: 63rem) {
- .emotion-2 {
- grid-column: 1/span 8;
+ display: block;
}
}
-.emotion-3 {
- padding-bottom: 1.5rem;
-}
-
@media (max-width: 14.9375rem) {
- .emotion-4 {
- padding: 0 0.5rem;
+ .emotion-2 {
margin-left: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-4 {
- padding: 0 0.5rem;
+ .emotion-2 {
margin-left: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-4 {
- padding: 0 1rem;
+ .emotion-2 {
margin-left: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-4 {
- padding: 0 1rem;
+ .emotion-2 {
margin-left: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-4 {
- margin-left: 16.666666666666668%;
+ .emotion-2 {
+ margin-left: 20%;
}
}
@media (min-width: 80rem) {
- .emotion-4 {
- margin-left: 33.333333333333336%;
+ .emotion-2 {
+ margin-left: 40%;
}
}
@supports (display: grid) {
- .emotion-4 {
+ .emotion-2 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-4 {
+ .emotion-2 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
- padding: 0 0.5rem;
grid-column-start: 1;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-4 {
+ .emotion-2 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
- padding: 0 0.5rem;
grid-column-start: 1;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-4 {
+ .emotion-2 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
- padding: 0 1rem;
grid-column-start: 1;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-4 {
- grid-template-columns: repeat(6, 1fr);
- grid-column-end: span 6;
- padding: 0 1rem;
+ .emotion-2 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
grid-column-start: 1;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-4 {
- grid-template-columns: repeat(6, 1fr);
- grid-column-end: span 6;
+ .emotion-2 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
grid-column-start: 2;
}
}
@media (min-width: 80rem) {
- .emotion-4 {
- grid-template-columns: repeat(12, 1fr);
- grid-column-end: span 12;
+ .emotion-2 {
+ grid-template-columns: repeat(10, 1fr);
+ grid-column-end: span 10;
grid-column-start: 5;
}
}
}
+.emotion-4 {
+ display: block;
+ font-size: 1.125rem;
+ line-height: 1.375rem;
+ font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ margin-bottom: 1rem;
+ color: #3F3F42;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-4 {
+ font-size: 1.25rem;
+ line-height: 1.5rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-4 {
+ font-size: 1.5rem;
+ line-height: 1.75rem;
+ }
+}
+
+@media (min-width: 0rem) {
+ .emotion-4 {
+ margin-left: 0.5rem;
+ }
+}
+
+@media (min-width: 25rem) {
+ .emotion-4 {
+ margin-left: 1rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-4 {
+ margin-left: 0;
+ }
+}
+
.emotion-6 {
- font-size: 1.75rem;
- line-height: 2rem;
+ list-style: none;
+ padding-left: 0;
+ margin: 0;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow-x: scroll;
+ scroll-behavior: auto;
+ -webkit-overflow-scrolling: touch;
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+}
+
+.emotion-6::-webkit-scrollbar {
+ display: none;
+}
+
+.emotion-8 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+}
+
+@media (min-width: 0rem) {
+ .emotion-8 {
+ margin-left: 0.5rem;
+ }
+
+ .emotion-8:first-child {
+ margin-left: 0.5rem;
+ }
+
+ .emotion-8:last-child {
+ margin-right: 0.5rem;
+ }
+}
+
+@media (min-width: 25rem) {
+ .emotion-8 {
+ margin-left: 1rem;
+ }
+
+ .emotion-8:first-child {
+ margin-left: 1rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-8 {
+ margin-left: 1rem;
+ }
+
+ .emotion-8:first-child {
+ margin-left: 0;
+ }
+}
+
+.emotion-10 {
+ position: relative;
+ background-color: #FFFFFF;
+ padding: 1rem;
+ margin-bottom: 1.5rem;
+}
+
+@media (min-width: 0rem) {
+ .emotion-10 {
+ width: 14.8125rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-10 {
+ width: 11.125rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-10 {
+ width: 12.6875rem;
+ }
+}
+
+.emotion-12 {
+ position: static;
+ color: #222222;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ overflow-wrap: break-word;
+ display: inline-block;
+ font-size: 0.9375rem;
+ line-height: 1.25rem;
font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
font-weight: 700;
font-style: normal;
- color: #141414;
- display: block;
- margin: 0;
- padding: 2rem 0;
- overflow-wrap: anywhere;
+ width: 100%;
+ overflow-wrap: break-word;
+ text-overflow: ellipsis;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ overflow-x: hidden;
+ overflow-y: hidden;
+ display: -webkit-box;
+ -webkit-line-clamp: 4;
+ -webkit-box-orient: vertical;
+ color: #202224;
+}
+
+.emotion-12:before {
+ bottom: 0;
+ content: '';
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ top: 0;
+ white-space: nowrap;
+ z-index: 1;
+}
+
+.emotion-12:hover,
+.emotion-12:focus {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
+}
+
+.emotion-12:visited {
+ color: #6E6E73;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-6 {
- font-size: 2rem;
- line-height: 2.25rem;
+ .emotion-12 {
+ font-size: 1rem;
+ line-height: 1.25rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-6 {
- font-size: 2.75rem;
- line-height: 3rem;
+ .emotion-12 {
+ font-size: 1rem;
+ line-height: 1.25rem;
}
}
-@media (min-width: 37.5rem) {
- .emotion-6 {
- padding: 2.5rem 0;
+.emotion-12:hover,
+.emotion-12:focus {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
+}
+
+.emotion-12:visited {
+ color: #545658;
+}
+
+.emotion-38 {
+ max-width: 63rem;
+ margin: 0 auto;
+ display: grid;
+ grid-template-columns: repeat(12, 1fr);
+}
+
+@media (min-width: 63rem) {
+ .emotion-38 {
+ padding: 0 1rem;
+ -webkit-column-gap: 1rem;
+ column-gap: 1rem;
}
}
-.emotion-6:focus {
- outline: none;
+.emotion-39 {
+ grid-column: 1/span 12;
+ padding-bottom: 2rem;
+}
+
+@media (min-width: 63rem) {
+ .emotion-39 {
+ grid-column: 1/span 8;
+ }
+}
+
+.emotion-40 {
+ padding-bottom: 1.5rem;
}
@media (max-width: 14.9375rem) {
- .emotion-8 {
+ .emotion-41 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-8 {
+ .emotion-41 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-8 {
+ .emotion-41 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-8 {
+ .emotion-41 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-8 {
- margin-left: 20%;
+ .emotion-41 {
+ margin-left: 16.666666666666668%;
}
}
@media (min-width: 80rem) {
- .emotion-8 {
- margin-left: 40%;
+ .emotion-41 {
+ margin-left: 33.333333333333336%;
}
}
@supports (display: grid) {
- .emotion-8 {
+ .emotion-41 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-8 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -229,7 +396,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-8 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -238,7 +405,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-8 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 1rem;
@@ -247,32 +414,169 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-8 {
- grid-template-columns: repeat(5, 1fr);
- grid-column-end: span 5;
+ .emotion-41 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
padding: 0 1rem;
grid-column-start: 1;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-8 {
- grid-template-columns: repeat(5, 1fr);
- grid-column-end: span 5;
+ .emotion-41 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
grid-column-start: 2;
}
}
@media (min-width: 80rem) {
- .emotion-8 {
- grid-template-columns: repeat(10, 1fr);
- grid-column-end: span 10;
+ .emotion-41 {
+ grid-template-columns: repeat(12, 1fr);
+ grid-column-end: span 12;
grid-column-start: 5;
}
}
}
-.emotion-10 {
+.emotion-43 {
+ font-size: 1.75rem;
+ line-height: 2rem;
+ font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
+ font-weight: 700;
+ font-style: normal;
+ color: #141414;
+ display: block;
+ margin: 0;
+ padding: 2rem 0;
+ overflow-wrap: anywhere;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-43 {
+ font-size: 2rem;
+ line-height: 2.25rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-43 {
+ font-size: 2.75rem;
+ line-height: 3rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-43 {
+ padding: 2.5rem 0;
+ }
+}
+
+.emotion-43:focus {
+ outline: none;
+}
+
+@media (max-width: 14.9375rem) {
+ .emotion-45 {
+ padding: 0 0.5rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-45 {
+ padding: 0 0.5rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-45 {
+ padding: 0 1rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-45 {
+ padding: 0 1rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-45 {
+ margin-left: 20%;
+ }
+}
+
+@media (min-width: 80rem) {
+ .emotion-45 {
+ margin-left: 40%;
+ }
+}
+
+@supports (display: grid) {
+ .emotion-45 {
+ display: block;
+ width: initial;
+ margin: 0;
+ }
+
+ @media (max-width: 14.9375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 0.5rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 0.5rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 1rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
+ padding: 0 1rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
+ grid-column-start: 2;
+ }
+ }
+
+ @media (min-width: 80rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(10, 1fr);
+ grid-column-end: span 10;
+ grid-column-start: 5;
+ }
+ }
+}
+
+.emotion-47 {
font-size: 0.9375rem;
line-height: 1.25rem;
font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
@@ -284,27 +588,27 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-10 {
+ .emotion-47 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-10 {
+ .emotion-47 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 63rem) {
- .emotion-10 {
+ .emotion-47 {
padding-right: 2.5rem;
}
}
@media (max-width: 24.9375rem) {
- .emotion-12 {
+ .emotion-49 {
margin: 0 0.5rem;
padding-bottom: 1.5rem;
}
@@ -312,7 +616,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
@media (min-width: 25rem) {
@media (max-width: 62.9375rem) {
- .emotion-12 {
+ .emotion-49 {
margin: 0 1rem;
padding-bottom: 2rem;
}
@@ -320,21 +624,21 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-12 {
+ .emotion-49 {
margin: 0 1rem;
padding-bottom: 2.5rem;
}
}
@media (min-width: 80rem) {
- .emotion-12 {
+ .emotion-49 {
margin: 0 auto;
padding: 0 1rem 1.5rem;
max-width: 80rem;
}
}
-.emotion-13 {
+.emotion-50 {
position: relative;
z-index: 0;
color: #141414;
@@ -342,36 +646,36 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 37.5rem) {
- .emotion-13 {
+ .emotion-50 {
margin-top: 1.5rem;
}
}
@media (min-width: 63rem) {
- .emotion-13 {
+ .emotion-50 {
margin-bottom: 1.5rem;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-13 {
+ .emotion-50 {
margin-bottom: 1rem;
}
}
-.emotion-15 {
+.emotion-52 {
margin: 0;
padding: 0;
scroll-margin-top: 1rem;
}
-.emotion-15:focus-visible {
+.emotion-52:focus-visible {
outline: 0.1875rem solid #000000;
box-shadow: 0 0 0 0.1875rem #FFFFFF;
outline-offset: 0.1875rem;
}
-.emotion-17 {
+.emotion-54 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -381,7 +685,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
flex-direction: column;
}
-.emotion-19 {
+.emotion-56 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -401,7 +705,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 37.5rem) {
- .emotion-19 {
+ .emotion-56 {
-webkit-align-items: stretch;
-webkit-box-align: stretch;
-ms-flex-align: stretch;
@@ -409,7 +713,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
}
-.emotion-21 {
+.emotion-58 {
font-size: 1.125rem;
line-height: 1.375rem;
font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
@@ -429,32 +733,32 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-21 {
+ .emotion-58 {
font-size: 1.25rem;
line-height: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-21 {
+ .emotion-58 {
font-size: 1.5rem;
line-height: 1.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-21 {
+ .emotion-58 {
margin: 0;
}
}
@media (min-width: 37.5rem) {
- .emotion-21 {
+ .emotion-58 {
padding-right: 1rem;
}
}
-.emotion-23 {
+.emotion-60 {
list-style-type: none;
margin: 0;
padding: 0;
@@ -463,7 +767,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@supports (display: grid) {
- .emotion-23 {
+ .emotion-60 {
display: grid;
position: initial;
width: initial;
@@ -471,7 +775,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (max-width: 14.9375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 0.5rem;
@@ -479,7 +783,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 0.5rem;
@@ -487,7 +791,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 0.5rem;
@@ -495,7 +799,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 1rem;
@@ -503,7 +807,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(8, 1fr);
grid-column-end: span 8;
grid-column-gap: 1rem;
@@ -511,7 +815,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 80rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(20, 1fr);
grid-column-end: span 20;
grid-column-gap: 1rem;
@@ -520,24 +824,24 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 80rem) {
- .emotion-23 {
+ .emotion-60 {
grid-auto-flow: row;
}
}
@media (min-width: 37.5rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-rows: repeat(3, auto);
}
}
-.emotion-25 {
+.emotion-62 {
position: relative;
padding-bottom: 1.5rem;
}
@media (max-width: 14.9375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(100%);
display: inline-block;
vertical-align: top;
@@ -545,7 +849,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(100%);
display: inline-block;
vertical-align: top;
@@ -553,7 +857,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(100%);
display: inline-block;
vertical-align: top;
@@ -561,7 +865,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(50%);
display: inline-block;
vertical-align: top;
@@ -569,7 +873,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(50%);
display: inline-block;
vertical-align: top;
@@ -577,7 +881,7 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 80rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(20%);
display: inline-block;
vertical-align: top;
@@ -585,56 +889,56 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@supports (display: grid) {
- .emotion-25 {
+ .emotion-62 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(3, 1fr);
grid-column-end: span 3;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(4, 1fr);
grid-column-end: span 4;
}
}
@media (min-width: 80rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(4, 1fr);
grid-column-end: span 4;
}
}
}
-.emotion-27 {
+.emotion-64 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -647,50 +951,50 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (max-width: 14.9375rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 1.5rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 1.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 2rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 2rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 2rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 2rem;
}
}
-.emotion-29 {
+.emotion-66 {
font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
font-style: normal;
font-weight: 400;
@@ -703,32 +1007,32 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-29 {
+ .emotion-66 {
font-size: 2.5rem;
line-height: 2.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-29 {
+ .emotion-66 {
font-size: 3.5rem;
line-height: 3.75rem;
}
}
-.emotion-30 {
+.emotion-67 {
padding-top: 0.375rem;
padding-left: 1rem;
padding-right: 1rem;
}
@supports (grid-template-columns: fit-content(200px)) {
- .emotion-30 {
+ .emotion-67 {
padding-right: 0;
}
}
-.emotion-31 {
+.emotion-68 {
font-size: 0.9375rem;
line-height: 1.25rem;
font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
@@ -738,30 +1042,30 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1rem;
line-height: 1.25rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1rem;
line-height: 1.25rem;
}
}
-.emotion-31:hover,
-.emotion-31:focus {
+.emotion-68:hover,
+.emotion-68:focus {
-webkit-text-decoration: underline;
text-decoration: underline;
}
-.emotion-31:before {
+.emotion-68:before {
bottom: 0;
content: '';
left: 0;
@@ -774,31 +1078,31 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 25rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1.125rem;
line-height: 1.375rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1.125rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1.25rem;
line-height: 1.5rem;
}
}
}
-.emotion-32 {
+.emotion-69 {
padding-top: 0.5rem;
}
-.emotion-33 {
+.emotion-70 {
font-size: 0.875rem;
line-height: 1.125rem;
color: #545658;
@@ -809,14 +1113,14 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-33 {
+ .emotion-70 {
font-size: 0.875rem;
line-height: 1.125rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-33 {
+ .emotion-70 {
font-size: 0.8125rem;
line-height: 1rem;
}
@@ -830,22 +1134,123 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
chartbeat
-
+
+
+ Di one wey oda users dey read well well
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -853,11 +1258,11 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
A paragraph in Pidgin.
@@ -868,27 +1273,27 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
@@ -899,43 +1304,43 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
1
Teams wey qualify for Afcon 2023 and how things stand for each group
De one we dem update for: 19th June 2023
@@ -945,38 +1350,38 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
2
'We dey hear gospel songs den screaming' - Woman tok of Uganda school attack
De one we dem update for: 19th June 2023
@@ -986,38 +1391,38 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
3
Super Eagles qualify for Nations Cup afta beating Sierra Leone for Monrovia
De one we dem update for: 18th June 2023
@@ -1027,38 +1432,38 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
4
Forbes top ten list of highest paid athletes for 2023 and wetin dem earn
De one we dem update for: 3rd May 2023
@@ -1068,38 +1473,38 @@ exports[`Article Page should render a ltr article (pidgin) with most read correc
5
Tins to sabi about 2023 Sierra Leone general election
De one we dem update for: 18th June 2023
@@ -1120,221 +1525,388 @@ exports[`Article Page should render a news article correctly 1`] = `
}
.emotion-1 {
- max-width: 63rem;
- margin: 0 auto;
- display: grid;
- grid-template-columns: repeat(12, 1fr);
+ display: none;
}
-@media (min-width: 63rem) {
+@media (max-width: 62.9375rem) {
.emotion-1 {
- padding: 0 1rem;
- -webkit-column-gap: 1rem;
- column-gap: 1rem;
- }
-}
-
-.emotion-2 {
- grid-column: 1/span 12;
- padding-bottom: 2rem;
-}
-
-@media (min-width: 63rem) {
- .emotion-2 {
- grid-column: 1/span 8;
+ display: block;
}
}
-.emotion-3 {
- padding-bottom: 1.5rem;
-}
-
@media (max-width: 14.9375rem) {
- .emotion-4 {
- padding: 0 0.5rem;
+ .emotion-2 {
margin-left: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-4 {
- padding: 0 0.5rem;
+ .emotion-2 {
margin-left: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-4 {
- padding: 0 1rem;
+ .emotion-2 {
margin-left: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-4 {
- padding: 0 1rem;
+ .emotion-2 {
margin-left: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-4 {
- margin-left: 16.666666666666668%;
+ .emotion-2 {
+ margin-left: 20%;
}
}
@media (min-width: 80rem) {
- .emotion-4 {
- margin-left: 33.333333333333336%;
+ .emotion-2 {
+ margin-left: 40%;
}
}
@supports (display: grid) {
- .emotion-4 {
+ .emotion-2 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-4 {
+ .emotion-2 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
- padding: 0 0.5rem;
grid-column-start: 1;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-4 {
+ .emotion-2 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
- padding: 0 0.5rem;
grid-column-start: 1;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-4 {
+ .emotion-2 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
- padding: 0 1rem;
grid-column-start: 1;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-4 {
- grid-template-columns: repeat(6, 1fr);
- grid-column-end: span 6;
- padding: 0 1rem;
+ .emotion-2 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
grid-column-start: 1;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-4 {
- grid-template-columns: repeat(6, 1fr);
- grid-column-end: span 6;
- grid-column-start: 2;
+ .emotion-2 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
+ grid-column-start: 2;
}
}
@media (min-width: 80rem) {
- .emotion-4 {
- grid-template-columns: repeat(12, 1fr);
- grid-column-end: span 12;
+ .emotion-2 {
+ grid-template-columns: repeat(10, 1fr);
+ grid-column-end: span 10;
grid-column-start: 5;
}
}
}
+.emotion-4 {
+ display: block;
+ font-size: 1.125rem;
+ line-height: 1.375rem;
+ font-family: ReithSans,Helvetica,Arial,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ margin-bottom: 1rem;
+ color: #3F3F42;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-4 {
+ font-size: 1.25rem;
+ line-height: 1.5rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-4 {
+ font-size: 1.5rem;
+ line-height: 1.75rem;
+ }
+}
+
+@media (min-width: 0rem) {
+ .emotion-4 {
+ margin-left: 0.5rem;
+ }
+}
+
+@media (min-width: 25rem) {
+ .emotion-4 {
+ margin-left: 1rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-4 {
+ margin-left: 0;
+ }
+}
+
.emotion-6 {
- font-size: 1.75rem;
- line-height: 2rem;
+ list-style: none;
+ padding-left: 0;
+ margin: 0;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow-x: scroll;
+ scroll-behavior: auto;
+ -webkit-overflow-scrolling: touch;
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+}
+
+.emotion-6::-webkit-scrollbar {
+ display: none;
+}
+
+.emotion-8 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+}
+
+@media (min-width: 0rem) {
+ .emotion-8 {
+ margin-left: 0.5rem;
+ }
+
+ .emotion-8:first-child {
+ margin-left: 0.5rem;
+ }
+
+ .emotion-8:last-child {
+ margin-right: 0.5rem;
+ }
+}
+
+@media (min-width: 25rem) {
+ .emotion-8 {
+ margin-left: 1rem;
+ }
+
+ .emotion-8:first-child {
+ margin-left: 1rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-8 {
+ margin-left: 1rem;
+ }
+
+ .emotion-8:first-child {
+ margin-left: 0;
+ }
+}
+
+.emotion-10 {
+ position: relative;
+ background-color: #FFFFFF;
+ padding: 1rem;
+ margin-bottom: 1.5rem;
+}
+
+@media (min-width: 0rem) {
+ .emotion-10 {
+ width: 14.8125rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-10 {
+ width: 11.125rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-10 {
+ width: 12.6875rem;
+ }
+}
+
+.emotion-12 {
+ position: static;
+ color: #222222;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ overflow-wrap: break-word;
+ display: inline-block;
+ font-size: 0.9375rem;
+ line-height: 1.25rem;
font-family: ReithSerif,Helvetica,Arial,sans-serif;
- font-weight: 500;
+ font-weight: 700;
font-style: normal;
- color: #141414;
- display: block;
- margin: 0;
- padding: 2rem 0;
- overflow-wrap: anywhere;
+ width: 100%;
+ overflow-wrap: break-word;
+ text-overflow: ellipsis;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ overflow-x: hidden;
+ overflow-y: hidden;
+ display: -webkit-box;
+ -webkit-line-clamp: 4;
+ -webkit-box-orient: vertical;
+ color: #202224;
+}
+
+.emotion-12:before {
+ bottom: 0;
+ content: '';
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ top: 0;
+ white-space: nowrap;
+ z-index: 1;
+}
+
+.emotion-12:hover,
+.emotion-12:focus {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
+}
+
+.emotion-12:visited {
+ color: #6E6E73;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-6 {
- font-size: 2rem;
- line-height: 2.25rem;
+ .emotion-12 {
+ font-size: 1rem;
+ line-height: 1.25rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-6 {
- font-size: 2.75rem;
- line-height: 3rem;
+ .emotion-12 {
+ font-size: 1rem;
+ line-height: 1.25rem;
}
}
-@media (min-width: 37.5rem) {
- .emotion-6 {
- padding: 2.5rem 0;
+.emotion-12:hover,
+.emotion-12:focus {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
+}
+
+.emotion-12:visited {
+ color: #545658;
+}
+
+.emotion-38 {
+ max-width: 63rem;
+ margin: 0 auto;
+ display: grid;
+ grid-template-columns: repeat(12, 1fr);
+}
+
+@media (min-width: 63rem) {
+ .emotion-38 {
+ padding: 0 1rem;
+ -webkit-column-gap: 1rem;
+ column-gap: 1rem;
}
}
-.emotion-6:focus {
- outline: none;
+.emotion-39 {
+ grid-column: 1/span 12;
+ padding-bottom: 2rem;
+}
+
+@media (min-width: 63rem) {
+ .emotion-39 {
+ grid-column: 1/span 8;
+ }
+}
+
+.emotion-40 {
+ padding-bottom: 1.5rem;
}
@media (max-width: 14.9375rem) {
- .emotion-8 {
+ .emotion-41 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-8 {
+ .emotion-41 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-8 {
+ .emotion-41 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-8 {
+ .emotion-41 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-8 {
- margin-left: 20%;
+ .emotion-41 {
+ margin-left: 16.666666666666668%;
}
}
@media (min-width: 80rem) {
- .emotion-8 {
- margin-left: 40%;
+ .emotion-41 {
+ margin-left: 33.333333333333336%;
}
}
@supports (display: grid) {
- .emotion-8 {
+ .emotion-41 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-8 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -1343,7 +1915,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-8 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -1352,7 +1924,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-8 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 1rem;
@@ -1361,90 +1933,227 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-8 {
- grid-template-columns: repeat(5, 1fr);
- grid-column-end: span 5;
+ .emotion-41 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
padding: 0 1rem;
grid-column-start: 1;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-8 {
- grid-template-columns: repeat(5, 1fr);
- grid-column-end: span 5;
+ .emotion-41 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
grid-column-start: 2;
}
}
@media (min-width: 80rem) {
- .emotion-8 {
- grid-template-columns: repeat(10, 1fr);
- grid-column-end: span 10;
+ .emotion-41 {
+ grid-template-columns: repeat(12, 1fr);
+ grid-column-end: span 12;
grid-column-start: 5;
}
}
}
-.emotion-10 {
- font-size: 0.9375rem;
- line-height: 1.25rem;
- font-family: ReithSans,Helvetica,Arial,sans-serif;
- font-weight: 400;
+.emotion-43 {
+ font-size: 1.75rem;
+ line-height: 2rem;
+ font-family: ReithSerif,Helvetica,Arial,sans-serif;
+ font-weight: 500;
font-style: normal;
color: #141414;
- padding-bottom: 1.5rem;
+ display: block;
margin: 0;
+ padding: 2rem 0;
+ overflow-wrap: anywhere;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-10 {
- font-size: 1rem;
- line-height: 1.375rem;
+ .emotion-43 {
+ font-size: 2rem;
+ line-height: 2.25rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-10 {
- font-size: 1rem;
- line-height: 1.375rem;
+ .emotion-43 {
+ font-size: 2.75rem;
+ line-height: 3rem;
}
}
-@media (min-width: 63rem) {
- .emotion-10 {
- padding-right: 2.5rem;
+@media (min-width: 37.5rem) {
+ .emotion-43 {
+ padding: 2.5rem 0;
}
}
-.emotion-12 {
- max-width: 100%;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- margin-bottom: 1.5rem;
+.emotion-43:focus {
+ outline: none;
}
-@media (min-width: 25rem) {
- .emotion-12 {
- padding-left: 1rem;
- padding-right: 1rem;
+@media (max-width: 14.9375rem) {
+ .emotion-45 {
+ padding: 0 0.5rem;
+ margin-left: 0%;
}
}
-@media (min-width: 63rem) {
- .emotion-12 {
- padding-left: 0;
- padding-right: 0;
+@media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-45 {
+ padding: 0 0.5rem;
+ margin-left: 0%;
}
}
-.emotion-13 {
- margin: 0;
- padding-bottom: 1.5rem;
- width: 100%;
+@media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-45 {
+ padding: 0 1rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-45 {
+ padding: 0 1rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-45 {
+ margin-left: 20%;
+ }
+}
+
+@media (min-width: 80rem) {
+ .emotion-45 {
+ margin-left: 40%;
+ }
+}
+
+@supports (display: grid) {
+ .emotion-45 {
+ display: block;
+ width: initial;
+ margin: 0;
+ }
+
+ @media (max-width: 14.9375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 0.5rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 0.5rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 1rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
+ padding: 0 1rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
+ grid-column-start: 2;
+ }
+ }
+
+ @media (min-width: 80rem) {
+ .emotion-45 {
+ grid-template-columns: repeat(10, 1fr);
+ grid-column-end: span 10;
+ grid-column-start: 5;
+ }
+ }
+}
+
+.emotion-47 {
+ font-size: 0.9375rem;
+ line-height: 1.25rem;
+ font-family: ReithSans,Helvetica,Arial,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ color: #141414;
+ padding-bottom: 1.5rem;
+ margin: 0;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-47 {
+ font-size: 1rem;
+ line-height: 1.375rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-47 {
+ font-size: 1rem;
+ line-height: 1.375rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-47 {
+ padding-right: 2.5rem;
+ }
+}
+
+.emotion-49 {
+ max-width: 100%;
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+ margin-bottom: 1.5rem;
+}
+
+@media (min-width: 25rem) {
+ .emotion-49 {
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
}
-.emotion-14 {
+@media (min-width: 63rem) {
+ .emotion-49 {
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+
+.emotion-50 {
+ margin: 0;
+ padding-bottom: 1.5rem;
+ width: 100%;
+}
+
+.emotion-51 {
position: relative;
height: 0;
background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSI0NzkiIGhlaWdodD0iMTM2IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgZmlsbD0iI0Q1RDBDRCI+PGc+PHBhdGggZD0iTTQ0OS41NTYgOTEuNTUzbC0yLjMxIDEuNDFjLTExLjE2NyA2LjgxOC0yMy4zMTMgMTAuNDc0LTM0LjM0NiAxMC40Ny0yMy42MS0uMDktMzkuMTYzLTE0LjA4My0zOS4yMjctMzQuNDUzLjAzLTE5LjkxOCAxNi4yNy0zNC42NjMgMzguNjMzLTM0LjcxOCAxMS4zODcuMDEgMjEuNzAzIDIuOTU0IDMzLjk2MiA5LjY3MmwyLjI1MSAxLjI0di0xOC4xOWwtLjk2Mi0uMzc3Yy0xMy44MjQtNS40NTgtMjQuNTMtNy44OS0zNS4xMDMtNy44ODQtMTYuMzQ2LS4wMDYtMzAuNTMzIDUuMzk0LTQwLjYzNyAxNC41NTctMTAuMTA1IDkuMTYzLTE2LjEwNiAyMi4xMDItMTYuMDk5IDM2Ljk1My4wMDggMTAuMzQ4IDQuMjc5IDIyLjQ4IDEzLjQyIDMyLjEwNSA5LjEyMSA5LjYyOCAyMy4xNjUgMTYuNjQ4IDQyLjQzIDE2LjYzOWguMDYzYzE1Ljk4IDAgMjcuMDYyLTMuNTYzIDM3LjA3NC04LjQ5MmwuODUxLS40MTRWOTEuNTUzek0zMzQgMTM1LjY5N2gxNDQuMTk1VjBIMzM0djEzNS42OTd6Ii8+PHBhdGggZD0iTTI3Ni45MzcgODkuOTY4Yy4wNDEtMTIuMzMtOC4xNzEtMjEuNjk2LTIxLjMwOC0yNS4zIDMuNTQ0LTEuODA5IDYuMzUtNC4wMjMgOC40MDQtNi43MjcgMi43NS0zLjYyMiA0LjA2MS04LjA2NCA0LjA0Ni0xMy4yMzUuMDE1LTYuMzU5LTIuNDg2LTEyLjgzOS03Ljg1OC0xNy42ODctNS4zNzItNC44NDctMTMuNTI2LTcuOTk3LTI0LjY1NC03Ljk5MUgyMDQuODN2OTcuNzI4aDM2LjA3M2MxMi44NyAwIDIxLjkwNi0zLjQ4MiAyNy43MjItOC42NSA1LjgxOC01LjE1NSA4LjMyLTExLjkxIDguMzEyLTE4LjEzOHpNMTY3IDEzNS42OThoMTQ0LjE5N1YwSDE2N3YxMzUuNjk3eiIvPjxwYXRoIGQ9Ik0xMDkuOTM3IDg5Ljk2OGMuMDQxLTEyLjMzLTguMTcxLTIxLjY5Ni0yMS4zMDgtMjUuMyAzLjU0NC0xLjgwOSA2LjM1LTQuMDIzIDguNDA0LTYuNzI3IDIuNzUtMy42MjIgNC4wNjEtOC4wNjQgNC4wNDYtMTMuMjM1LjAxNS02LjM1OS0yLjQ4Ni0xMi44MzktNy44NTgtMTcuNjg3LTUuMzcyLTQuODQ3LTEzLjUyNi03Ljk5Ny0yNC42NTQtNy45OTFIMzcuODN2OTcuNzI4aDM2LjA3M2MxMi44NyAwIDIxLjkwNi0zLjQ4MiAyNy43MjItOC42NSA1LjgxOC01LjE1NSA4LjMyLTExLjkxIDguMzEyLTE4LjEzOHpNMCAxMzUuNjk4aDE0NC4xOTdWMEgwdjEzNS42OTd6Ii8+PHBhdGggZD0iTTI1OC42NjIgODguMTk4Yy0uMDEzIDMuMjI5LTEuMDA3IDYuNDc1LTMuODk2IDkuMDExLTIuODg0IDIuNTM3LTcuODczIDQuNDYzLTE2LjEzMyA0LjQ2M0gyMjJWNzVoMTUuODkzYzcuNDExIDAgMTIuNjcgMS41MDIgMTUuOTY1IDMuODUgMy4yODkgMi4zNjIgNC43NzYgNS40NjMgNC44MDQgOS4zNDgiLz48cGF0aCBkPSJNOTEuNjYyIDg4LjE5OGMtLjAxMyAzLjIyOS0xLjAwNyA2LjQ3NS0zLjg5NiA5LjAxMS0yLjg4NCAyLjUzNy03Ljg3NCA0LjQ2My0xNi4xMzMgNC40NjNINTVWNzVoMTUuODkyYzcuNDEyIDAgMTIuNjcyIDEuNTAyIDE1Ljk2NiAzLjg1IDMuMjg5IDIuMzYyIDQuNzc2IDUuNDYzIDQuODA0IDkuMzQ4Ii8+PHBhdGggZD0iTTI0NS4xODYgNTUuNzljMy4wOTYtMi4yMzcgNC41OS01LjM4NiA0LjYxMy0xMC4xMjQtLjAxNS0zLjI1LS45NDMtNi4wMzMtMy4yODEtOC4xMTEtMi4zNDYtMi4wNzgtNi4zMy0zLjU1NS0xMi43NTQtMy41NTVIMjIydjI1LjI3NWg4LjA3NmM2Ljk4OC4wMDQgMTEuOTk4LTEuMjQzIDE1LjExLTMuNDg2Ii8+PHBhdGggZD0iTTc4LjE4NiA1NS43OWMzLjA5Ni0yLjIzNyA0LjU5LTUuMzg2IDQuNjEzLTEwLjEyNC0uMDE1LTMuMjUtLjk0My02LjAzMy0zLjI4Mi04LjExMUM3Ny4xNzIgMzUuNDc3IDczLjE4OCAzNCA2Ni43NjQgMzRINTV2MjUuMjc1aDguMDc2YzYuOTg4LjAwNCAxMS45OTgtMS4yNDMgMTUuMTEtMy40ODYiLz48L2c+PC9nPjwvZz48L3N2Zz4K);
@@ -1457,27 +2166,27 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 25rem) {
- .emotion-14 {
+ .emotion-51 {
-webkit-background-size: 77px 22px;
background-size: 77px 22px;
}
}
@media (min-width: 63rem) {
- .emotion-14 {
+ .emotion-51 {
-webkit-background-size: 93px 27px;
background-size: 93px 27px;
}
}
-.emotion-15 {
+.emotion-52 {
width: 100%;
object-fit: cover;
height: auto;
}
@media (max-width: 24.9375rem) {
- .emotion-16 {
+ .emotion-53 {
margin: 0 0.5rem;
padding-bottom: 1.5rem;
}
@@ -1485,7 +2194,7 @@ exports[`Article Page should render a news article correctly 1`] = `
@media (min-width: 25rem) {
@media (max-width: 62.9375rem) {
- .emotion-16 {
+ .emotion-53 {
margin: 0 1rem;
padding-bottom: 2rem;
}
@@ -1493,21 +2202,21 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-16 {
+ .emotion-53 {
margin: 0 1rem;
padding-bottom: 2.5rem;
}
}
@media (min-width: 80rem) {
- .emotion-16 {
+ .emotion-53 {
margin: 0 auto;
padding: 0 1rem 1.5rem;
max-width: 80rem;
}
}
-.emotion-17 {
+.emotion-54 {
position: relative;
z-index: 0;
color: #141414;
@@ -1515,36 +2224,36 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 37.5rem) {
- .emotion-17 {
+ .emotion-54 {
margin-top: 1.5rem;
}
}
@media (min-width: 63rem) {
- .emotion-17 {
+ .emotion-54 {
margin-bottom: 1.5rem;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-17 {
+ .emotion-54 {
margin-bottom: 1rem;
}
}
-.emotion-19 {
+.emotion-56 {
margin: 0;
padding: 0;
scroll-margin-top: 1rem;
}
-.emotion-19:focus-visible {
+.emotion-56:focus-visible {
outline: 0.1875rem solid #000000;
box-shadow: 0 0 0 0.1875rem #FFFFFF;
outline-offset: 0.1875rem;
}
-.emotion-21 {
+.emotion-58 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -1554,7 +2263,7 @@ exports[`Article Page should render a news article correctly 1`] = `
flex-direction: column;
}
-.emotion-23 {
+.emotion-60 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -1574,7 +2283,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 37.5rem) {
- .emotion-23 {
+ .emotion-60 {
-webkit-align-items: stretch;
-webkit-box-align: stretch;
-ms-flex-align: stretch;
@@ -1582,7 +2291,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
}
-.emotion-25 {
+.emotion-62 {
font-size: 1.125rem;
line-height: 1.375rem;
font-family: ReithSans,Helvetica,Arial,sans-serif;
@@ -1602,32 +2311,32 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-25 {
+ .emotion-62 {
font-size: 1.25rem;
line-height: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-25 {
+ .emotion-62 {
font-size: 1.5rem;
line-height: 1.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-25 {
+ .emotion-62 {
margin: 0;
}
}
@media (min-width: 37.5rem) {
- .emotion-25 {
+ .emotion-62 {
padding-right: 1rem;
}
}
-.emotion-27 {
+.emotion-64 {
list-style-type: none;
margin: 0;
padding: 0;
@@ -1636,7 +2345,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@supports (display: grid) {
- .emotion-27 {
+ .emotion-64 {
display: grid;
position: initial;
width: initial;
@@ -1644,7 +2353,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (max-width: 14.9375rem) {
- .emotion-27 {
+ .emotion-64 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 0.5rem;
@@ -1652,7 +2361,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-27 {
+ .emotion-64 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 0.5rem;
@@ -1660,7 +2369,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-27 {
+ .emotion-64 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 0.5rem;
@@ -1668,7 +2377,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-27 {
+ .emotion-64 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 1rem;
@@ -1676,7 +2385,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-27 {
+ .emotion-64 {
grid-template-columns: repeat(8, 1fr);
grid-column-end: span 8;
grid-column-gap: 1rem;
@@ -1684,7 +2393,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 80rem) {
- .emotion-27 {
+ .emotion-64 {
grid-template-columns: repeat(20, 1fr);
grid-column-end: span 20;
grid-column-gap: 1rem;
@@ -1693,24 +2402,24 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 80rem) {
- .emotion-27 {
+ .emotion-64 {
grid-auto-flow: row;
}
}
@media (min-width: 37.5rem) {
- .emotion-27 {
+ .emotion-64 {
grid-template-rows: repeat(5, auto);
}
}
-.emotion-29 {
+.emotion-66 {
position: relative;
padding-bottom: 1.5rem;
}
@media (max-width: 14.9375rem) {
- .emotion-29 {
+ .emotion-66 {
width: calc(100%);
display: inline-block;
vertical-align: top;
@@ -1718,7 +2427,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-29 {
+ .emotion-66 {
width: calc(100%);
display: inline-block;
vertical-align: top;
@@ -1726,7 +2435,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-29 {
+ .emotion-66 {
width: calc(100%);
display: inline-block;
vertical-align: top;
@@ -1734,7 +2443,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-29 {
+ .emotion-66 {
width: calc(50%);
display: inline-block;
vertical-align: top;
@@ -1742,7 +2451,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-29 {
+ .emotion-66 {
width: calc(50%);
display: inline-block;
vertical-align: top;
@@ -1750,7 +2459,7 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 80rem) {
- .emotion-29 {
+ .emotion-66 {
width: calc(20%);
display: inline-block;
vertical-align: top;
@@ -1758,56 +2467,56 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@supports (display: grid) {
- .emotion-29 {
+ .emotion-66 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-29 {
+ .emotion-66 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-29 {
+ .emotion-66 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-29 {
+ .emotion-66 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-29 {
+ .emotion-66 {
grid-template-columns: repeat(3, 1fr);
grid-column-end: span 3;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-29 {
+ .emotion-66 {
grid-template-columns: repeat(4, 1fr);
grid-column-end: span 4;
}
}
@media (min-width: 80rem) {
- .emotion-29 {
+ .emotion-66 {
grid-template-columns: repeat(4, 1fr);
grid-column-end: span 4;
}
}
}
-.emotion-31 {
+.emotion-68 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -1820,50 +2529,50 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (max-width: 14.9375rem) {
- .emotion-32 {
+ .emotion-69 {
min-width: 2.5rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-32 {
+ .emotion-69 {
min-width: 2.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-32 {
+ .emotion-69 {
min-width: 3rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-32 {
+ .emotion-69 {
min-width: 4rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-32 {
+ .emotion-69 {
min-width: 2rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-32 {
+ .emotion-69 {
min-width: 2rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-32 {
+ .emotion-69 {
min-width: 2rem;
}
}
-.emotion-33 {
+.emotion-70 {
font-family: ReithSerif,Helvetica,Arial,sans-serif;
font-style: normal;
font-weight: 300;
@@ -1876,32 +2585,32 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-33 {
+ .emotion-70 {
font-size: 2.5rem;
line-height: 2.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-33 {
+ .emotion-70 {
font-size: 3.5rem;
line-height: 3.75rem;
}
}
-.emotion-34 {
+.emotion-71 {
padding-top: 0.375rem;
padding-left: 1rem;
padding-right: 1rem;
}
@supports (grid-template-columns: fit-content(200px)) {
- .emotion-34 {
+ .emotion-71 {
padding-right: 0;
}
}
-.emotion-35 {
+.emotion-72 {
font-size: 0.9375rem;
line-height: 1.25rem;
font-family: ReithSerif,Helvetica,Arial,sans-serif;
@@ -1911,30 +2620,30 @@ exports[`Article Page should render a news article correctly 1`] = `
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-35 {
+ .emotion-72 {
font-size: 1rem;
line-height: 1.25rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-35 {
+ .emotion-72 {
font-size: 1rem;
line-height: 1.25rem;
}
}
-.emotion-35:hover,
-.emotion-35:focus {
+.emotion-72:hover,
+.emotion-72:focus {
-webkit-text-decoration: underline;
text-decoration: underline;
}
-.emotion-35:before {
+.emotion-72:before {
bottom: 0;
content: '';
left: 0;
@@ -1947,31 +2656,31 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 25rem) {
- .emotion-35 {
+ .emotion-72 {
font-size: 1.125rem;
line-height: 1.375rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-35 {
+ .emotion-72 {
font-size: 1.125rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-35 {
+ .emotion-72 {
font-size: 1.25rem;
line-height: 1.5rem;
}
}
}
-.emotion-36 {
+.emotion-73 {
padding-top: 0.5rem;
}
-.emotion-37 {
+.emotion-74 {
font-size: 0.875rem;
line-height: 1.125rem;
color: #545658;
@@ -1982,235 +2691,235 @@ exports[`Article Page should render a news article correctly 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-37 {
+ .emotion-74 {
font-size: 0.875rem;
line-height: 1.125rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-37 {
+ .emotion-74 {
font-size: 0.8125rem;
line-height: 1rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-42 {
+ .emotion-79 {
min-width: 2.5rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-42 {
+ .emotion-79 {
min-width: 2.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-42 {
+ .emotion-79 {
min-width: 3rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-42 {
+ .emotion-79 {
min-width: 4rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-42 {
+ .emotion-79 {
min-width: 4rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-42 {
+ .emotion-79 {
min-width: 2rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-42 {
+ .emotion-79 {
min-width: 2rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-72 {
+ .emotion-109 {
min-width: 2.5rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-72 {
+ .emotion-109 {
min-width: 2.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-72 {
+ .emotion-109 {
min-width: 3rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-72 {
+ .emotion-109 {
min-width: 4rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-72 {
+ .emotion-109 {
min-width: 2rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-72 {
+ .emotion-109 {
min-width: 2rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-72 {
+ .emotion-109 {
min-width: 4rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-82 {
+ .emotion-119 {
min-width: 2.5rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-82 {
+ .emotion-119 {
min-width: 2.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-82 {
+ .emotion-119 {
min-width: 3rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-82 {
+ .emotion-119 {
min-width: 4rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-82 {
+ .emotion-119 {
min-width: 4rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-82 {
+ .emotion-119 {
min-width: 4rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-82 {
+ .emotion-119 {
min-width: 2rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-92 {
+ .emotion-129 {
min-width: 2.5rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-92 {
+ .emotion-129 {
min-width: 2.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-92 {
+ .emotion-129 {
min-width: 3rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-92 {
+ .emotion-129 {
min-width: 4rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-92 {
+ .emotion-129 {
min-width: 2rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-92 {
+ .emotion-129 {
min-width: 4rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-92 {
+ .emotion-129 {
min-width: 2rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-122 {
+ .emotion-159 {
min-width: 2.5rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-122 {
+ .emotion-159 {
min-width: 2.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-122 {
+ .emotion-159 {
min-width: 3rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-122 {
+ .emotion-159 {
min-width: 4rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-122 {
+ .emotion-159 {
min-width: 4rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-122 {
+ .emotion-159 {
min-width: 4rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-122 {
+ .emotion-159 {
min-width: 4rem;
}
}
@@ -2223,22 +2932,123 @@ exports[`Article Page should render a news article correctly 1`] = `
chartbeat
-
+
+
+ Most read
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2246,18 +3056,18 @@ exports[`Article Page should render a news article correctly 1`] = `
@@ -2336,43 +3146,43 @@ exports[`Article Page should render a news article correctly 1`] = `
1
Why the oxygen timeline on sub may not be so fixed
Last updated: 22 June 2023
@@ -2382,38 +3192,38 @@ exports[`Article Page should render a news article correctly 1`] = `
2
MasterChef contestant jailed for child abuse images
Last updated: 22 June 2023
@@ -2423,38 +3233,38 @@ exports[`Article Page should render a news article correctly 1`] = `
3
Musk and Zuckerberg agree to hold cage fight
Last updated: 22 June 2023
@@ -2464,38 +3274,38 @@ exports[`Article Page should render a news article correctly 1`] = `
4
Cindy Beale returns to EastEnders after 25 years
Last updated: 22 June 2023
@@ -2505,38 +3315,38 @@ exports[`Article Page should render a news article correctly 1`] = `
5
Mosquito-borne diseases risk increasing in Europe
Last updated: 22 June 2023
@@ -2546,38 +3356,38 @@ exports[`Article Page should render a news article correctly 1`] = `
6
Teenager guilty of murdering boy at train station
Last updated: 22 June 2023
@@ -2587,38 +3397,38 @@ exports[`Article Page should render a news article correctly 1`] = `
7
At least 30 migrants feared dead off Canary Islands
Last updated: 22 June 2023
@@ -2628,38 +3438,38 @@ exports[`Article Page should render a news article correctly 1`] = `
8
Bank boss warns interest rate hike hard for many
Last updated: 22 June 2023
@@ -2669,38 +3479,38 @@ exports[`Article Page should render a news article correctly 1`] = `
9
Ukraine strikes bridge to Crimea, says Russia
Last updated: 22 June 2023
@@ -2710,38 +3520,38 @@ exports[`Article Page should render a news article correctly 1`] = `
10
The woman who wants to end abortion in America
Last updated: 22 June 2023
@@ -2762,6 +3572,16 @@ exports[`Article Page should render a news article with headline in the middle c
}
.emotion-1 {
+ display: none;
+}
+
+@media (max-width: 62.9375rem) {
+ .emotion-1 {
+ display: block;
+ }
+}
+
+.emotion-2 {
max-width: 63rem;
margin: 0 auto;
display: grid;
@@ -2769,29 +3589,29 @@ exports[`Article Page should render a news article with headline in the middle c
}
@media (min-width: 63rem) {
- .emotion-1 {
+ .emotion-2 {
padding: 0 1rem;
-webkit-column-gap: 1rem;
column-gap: 1rem;
}
}
-.emotion-2 {
+.emotion-3 {
grid-column: 1/span 12;
padding-bottom: 2rem;
}
@media (min-width: 63rem) {
- .emotion-2 {
+ .emotion-3 {
grid-column: 1/span 8;
}
}
-.emotion-3 {
+.emotion-4 {
padding-bottom: 1.5rem;
}
-.emotion-4 {
+.emotion-5 {
-webkit-clip-path: inset(100%);
clip-path: inset(100%);
clip: rect(1px, 1px, 1px, 1px);
@@ -2803,54 +3623,446 @@ exports[`Article Page should render a news article with headline in the middle c
}
@media (max-width: 14.9375rem) {
- .emotion-5 {
+ .emotion-6 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-5 {
+ .emotion-6 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-5 {
+ .emotion-6 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-5 {
+ .emotion-6 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-5 {
+ .emotion-6 {
margin-left: 20%;
}
}
@media (min-width: 80rem) {
- .emotion-5 {
+ .emotion-6 {
+ margin-left: 40%;
+ }
+}
+
+@supports (display: grid) {
+ .emotion-6 {
+ display: block;
+ width: initial;
+ margin: 0;
+ }
+
+ @media (max-width: 14.9375rem) {
+ .emotion-6 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 0.5rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-6 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 0.5rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-6 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 1rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-6 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
+ padding: 0 1rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-6 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
+ grid-column-start: 2;
+ }
+ }
+
+ @media (min-width: 80rem) {
+ .emotion-6 {
+ grid-template-columns: repeat(10, 1fr);
+ grid-column-end: span 10;
+ grid-column-start: 5;
+ }
+ }
+}
+
+.emotion-8 {
+ font-size: 0.9375rem;
+ line-height: 1.25rem;
+ font-family: ReithSans,Helvetica,Arial,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ color: #141414;
+ padding-bottom: 1.5rem;
+ margin: 0;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-8 {
+ font-size: 1rem;
+ line-height: 1.375rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-8 {
+ font-size: 1rem;
+ line-height: 1.375rem;
+ }
+}
+
+@media (min-width: 63rem) {
+ .emotion-8 {
+ padding-right: 2.5rem;
+ }
+}
+
+@media (max-width: 14.9375rem) {
+ .emotion-10 {
+ padding: 0 0.5rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-10 {
+ padding: 0 0.5rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-10 {
+ padding: 0 1rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-10 {
+ padding: 0 1rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-10 {
+ margin-left: 16.666666666666668%;
+ }
+}
+
+@media (min-width: 80rem) {
+ .emotion-10 {
+ margin-left: 33.333333333333336%;
+ }
+}
+
+@supports (display: grid) {
+ .emotion-10 {
+ display: block;
+ width: initial;
+ margin: 0;
+ }
+
+ @media (max-width: 14.9375rem) {
+ .emotion-10 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 0.5rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-10 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 0.5rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-10 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 1rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-10 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ padding: 0 1rem;
+ grid-column-start: 1;
+ }
+ }
+
+ @media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-10 {
+ grid-template-columns: repeat(6, 1fr);
+ grid-column-end: span 6;
+ grid-column-start: 2;
+ }
+ }
+
+ @media (min-width: 80rem) {
+ .emotion-10 {
+ grid-template-columns: repeat(12, 1fr);
+ grid-column-end: span 12;
+ grid-column-start: 5;
+ }
+ }
+}
+
+.emotion-12 {
+ font-size: 1.75rem;
+ line-height: 2rem;
+ font-family: ReithSerif,Helvetica,Arial,sans-serif;
+ font-weight: 500;
+ font-style: normal;
+ color: #141414;
+ display: block;
+ margin: 0;
+ padding: 2rem 0;
+ overflow-wrap: anywhere;
+}
+
+@media (min-width: 20rem) and (max-width: 37.4375rem) {
+ .emotion-12 {
+ font-size: 2rem;
+ line-height: 2.25rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-12 {
+ font-size: 2.75rem;
+ line-height: 3rem;
+ }
+}
+
+@media (min-width: 37.5rem) {
+ .emotion-12 {
+ padding: 2.5rem 0;
+ }
+}
+
+.emotion-12:focus {
+ outline: none;
+}
+
+
+
+
+
+ chartbeat
+
+
+
+
+
+
+ SEO Headline
+
+
+
+ Paragraph above headline
+
+
+
+
+ Article Headline
+
+
+
+
+ Paragraph below headline
+
+
+
+
+
+
+
+`;
+
+exports[`Article Page should render a news article without headline correctly 1`] = `
+.emotion-0 {
+ background-color: #F6F6F6;
+}
+
+.emotion-1 {
+ display: none;
+}
+
+@media (max-width: 62.9375rem) {
+ .emotion-1 {
+ display: block;
+ }
+}
+
+.emotion-2 {
+ max-width: 63rem;
+ margin: 0 auto;
+ display: grid;
+ grid-template-columns: repeat(12, 1fr);
+}
+
+@media (min-width: 63rem) {
+ .emotion-2 {
+ padding: 0 1rem;
+ -webkit-column-gap: 1rem;
+ column-gap: 1rem;
+ }
+}
+
+.emotion-3 {
+ grid-column: 1/span 12;
+ padding-bottom: 2rem;
+}
+
+@media (min-width: 63rem) {
+ .emotion-3 {
+ grid-column: 1/span 8;
+ }
+}
+
+.emotion-4 {
+ padding-bottom: 1.5rem;
+}
+
+.emotion-5 {
+ -webkit-clip-path: inset(100%);
+ clip-path: inset(100%);
+ clip: rect(1px, 1px, 1px, 1px);
+ height: 1px;
+ overflow: hidden;
+ position: absolute;
+ width: 1px;
+ margin: 0;
+}
+
+@media (max-width: 14.9375rem) {
+ .emotion-6 {
+ padding: 0 0.5rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 15rem) and (max-width: 24.9375rem) {
+ .emotion-6 {
+ padding: 0 0.5rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 25rem) and (max-width: 37.4375rem) {
+ .emotion-6 {
+ padding: 0 1rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
+ .emotion-6 {
+ padding: 0 1rem;
+ margin-left: 0%;
+ }
+}
+
+@media (min-width: 63rem) and (max-width: 79.9375rem) {
+ .emotion-6 {
+ margin-left: 20%;
+ }
+}
+
+@media (min-width: 80rem) {
+ .emotion-6 {
margin-left: 40%;
}
}
@supports (display: grid) {
- .emotion-5 {
+ .emotion-6 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-5 {
+ .emotion-6 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -2859,7 +4071,7 @@ exports[`Article Page should render a news article with headline in the middle c
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-5 {
+ .emotion-6 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -2868,7 +4080,7 @@ exports[`Article Page should render a news article with headline in the middle c
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-5 {
+ .emotion-6 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 1rem;
@@ -2877,7 +4089,7 @@ exports[`Article Page should render a news article with headline in the middle c
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-5 {
+ .emotion-6 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
padding: 0 1rem;
@@ -2886,7 +4098,7 @@ exports[`Article Page should render a news article with headline in the middle c
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-5 {
+ .emotion-6 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
grid-column-start: 2;
@@ -2894,7 +4106,7 @@ exports[`Article Page should render a news article with headline in the middle c
}
@media (min-width: 80rem) {
- .emotion-5 {
+ .emotion-6 {
grid-template-columns: repeat(10, 1fr);
grid-column-end: span 10;
grid-column-start: 5;
@@ -2902,7 +4114,7 @@ exports[`Article Page should render a news article with headline in the middle c
}
}
-.emotion-7 {
+.emotion-8 {
font-size: 0.9375rem;
line-height: 1.25rem;
font-family: ReithSans,Helvetica,Arial,sans-serif;
@@ -2914,452 +4126,382 @@ exports[`Article Page should render a news article with headline in the middle c
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-7 {
+ .emotion-8 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-7 {
+ .emotion-8 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 63rem) {
- .emotion-7 {
+ .emotion-8 {
padding-right: 2.5rem;
}
}
+
+
+
+
+ chartbeat
+
+
+
+
+
+
+ Article Headline
+
+
+
+
+
+
+
+`;
+
+exports[`Article Page should render a rtl article (persian) with most read correctly 1`] = `
+.emotion-0 {
+ background-color: #F6F6F6;
+}
+
+.emotion-1 {
+ display: none;
+}
+
+@media (max-width: 62.9375rem) {
+ .emotion-1 {
+ display: block;
+ }
+}
+
@media (max-width: 14.9375rem) {
- .emotion-9 {
- padding: 0 0.5rem;
- margin-left: 0%;
+ .emotion-2 {
+ margin-right: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-9 {
- padding: 0 0.5rem;
- margin-left: 0%;
+ .emotion-2 {
+ margin-right: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-9 {
- padding: 0 1rem;
- margin-left: 0%;
+ .emotion-2 {
+ margin-right: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-9 {
- padding: 0 1rem;
- margin-left: 0%;
+ .emotion-2 {
+ margin-right: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-9 {
- margin-left: 16.666666666666668%;
+ .emotion-2 {
+ margin-right: 20%;
}
}
@media (min-width: 80rem) {
- .emotion-9 {
- margin-left: 33.333333333333336%;
+ .emotion-2 {
+ margin-right: 40%;
}
}
@supports (display: grid) {
- .emotion-9 {
+ .emotion-2 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-9 {
+ .emotion-2 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
- padding: 0 0.5rem;
grid-column-start: 1;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-9 {
+ .emotion-2 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
- padding: 0 0.5rem;
grid-column-start: 1;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-9 {
+ .emotion-2 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
- padding: 0 1rem;
grid-column-start: 1;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-9 {
- grid-template-columns: repeat(6, 1fr);
- grid-column-end: span 6;
- padding: 0 1rem;
+ .emotion-2 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
grid-column-start: 1;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-9 {
- grid-template-columns: repeat(6, 1fr);
- grid-column-end: span 6;
+ .emotion-2 {
+ grid-template-columns: repeat(5, 1fr);
+ grid-column-end: span 5;
grid-column-start: 2;
}
}
@media (min-width: 80rem) {
- .emotion-9 {
- grid-template-columns: repeat(12, 1fr);
- grid-column-end: span 12;
+ .emotion-2 {
+ grid-template-columns: repeat(10, 1fr);
+ grid-column-end: span 10;
grid-column-start: 5;
}
}
}
-.emotion-11 {
- font-size: 1.75rem;
- line-height: 2rem;
- font-family: ReithSerif,Helvetica,Arial,sans-serif;
- font-weight: 500;
- font-style: normal;
- color: #141414;
+.emotion-4 {
display: block;
- margin: 0;
- padding: 2rem 0;
- overflow-wrap: anywhere;
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ margin-bottom: 1rem;
+ color: #3F3F42;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-11 {
- font-size: 2rem;
- line-height: 2.25rem;
+ .emotion-4 {
+ font-size: 1.25rem;
+ line-height: 1.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-11 {
- font-size: 2.75rem;
- line-height: 3rem;
+ .emotion-4 {
+ font-size: 1.5rem;
+ line-height: 2rem;
}
}
-@media (min-width: 37.5rem) {
- .emotion-11 {
- padding: 2.5rem 0;
+@media (min-width: 0rem) {
+ .emotion-4 {
+ margin-right: 0.5rem;
}
}
-.emotion-11:focus {
- outline: none;
-}
-
-
-
-
-
- chartbeat
-
-
-
-
-
- SEO Headline
-
-
-
- Paragraph above headline
-
-
-
-
- Article Headline
-
-
-
-
- Paragraph below headline
-
-
-
-
-
-
-
-`;
-
-exports[`Article Page should render a news article without headline correctly 1`] = `
-.emotion-0 {
- background-color: #F6F6F6;
-}
-
-.emotion-1 {
- max-width: 63rem;
- margin: 0 auto;
- display: grid;
- grid-template-columns: repeat(12, 1fr);
-}
-
-@media (min-width: 63rem) {
- .emotion-1 {
- padding: 0 1rem;
- -webkit-column-gap: 1rem;
- column-gap: 1rem;
+@media (min-width: 25rem) {
+ .emotion-4 {
+ margin-right: 1rem;
}
}
-.emotion-2 {
- grid-column: 1/span 12;
- padding-bottom: 2rem;
-}
-
@media (min-width: 63rem) {
- .emotion-2 {
- grid-column: 1/span 8;
+ .emotion-4 {
+ margin-right: 0;
}
}
-.emotion-3 {
- padding-bottom: 1.5rem;
-}
-
-.emotion-4 {
- -webkit-clip-path: inset(100%);
- clip-path: inset(100%);
- clip: rect(1px, 1px, 1px, 1px);
- height: 1px;
- overflow: hidden;
- position: absolute;
- width: 1px;
+.emotion-6 {
+ list-style: none;
+ padding-right: 0;
margin: 0;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow-x: scroll;
+ scroll-behavior: auto;
+ -webkit-overflow-scrolling: touch;
+ scrollbar-width: none;
+ -ms-overflow-style: none;
}
-@media (max-width: 14.9375rem) {
- .emotion-5 {
- padding: 0 0.5rem;
- margin-left: 0%;
- }
-}
-
-@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-5 {
- padding: 0 0.5rem;
- margin-left: 0%;
- }
+.emotion-6::-webkit-scrollbar {
+ display: none;
}
-@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-5 {
- padding: 0 1rem;
- margin-left: 0%;
- }
+.emotion-8 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
}
-@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-5 {
- padding: 0 1rem;
- margin-left: 0%;
+@media (min-width: 0rem) {
+ .emotion-8 {
+ margin-right: 0.5rem;
}
-}
-@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-5 {
- margin-left: 20%;
+ .emotion-8:first-child {
+ margin-right: 0.5rem;
}
-}
-@media (min-width: 80rem) {
- .emotion-5 {
- margin-left: 40%;
+ .emotion-8:last-child {
+ margin-left: 0.5rem;
}
}
-@supports (display: grid) {
- .emotion-5 {
- display: block;
- width: initial;
- margin: 0;
+@media (min-width: 25rem) {
+ .emotion-8 {
+ margin-right: 1rem;
}
- @media (max-width: 14.9375rem) {
- .emotion-5 {
- grid-template-columns: repeat(6, 1fr);
- grid-column-end: span 6;
- padding: 0 0.5rem;
- grid-column-start: 1;
- }
+ .emotion-8:first-child {
+ margin-right: 1rem;
}
+}
- @media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-5 {
- grid-template-columns: repeat(6, 1fr);
- grid-column-end: span 6;
- padding: 0 0.5rem;
- grid-column-start: 1;
- }
+@media (min-width: 63rem) {
+ .emotion-8 {
+ margin-right: 1rem;
}
- @media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-5 {
- grid-template-columns: repeat(6, 1fr);
- grid-column-end: span 6;
- padding: 0 1rem;
- grid-column-start: 1;
- }
+ .emotion-8:first-child {
+ margin-right: 0;
}
+}
- @media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-5 {
- grid-template-columns: repeat(5, 1fr);
- grid-column-end: span 5;
- padding: 0 1rem;
- grid-column-start: 1;
- }
+.emotion-10 {
+ position: relative;
+ background-color: #FFFFFF;
+ padding: 1rem;
+ margin-bottom: 1.5rem;
+}
+
+@media (min-width: 0rem) {
+ .emotion-10 {
+ width: 14.8125rem;
}
+}
- @media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-5 {
- grid-template-columns: repeat(5, 1fr);
- grid-column-end: span 5;
- grid-column-start: 2;
- }
+@media (min-width: 37.5rem) {
+ .emotion-10 {
+ width: 11.125rem;
}
+}
- @media (min-width: 80rem) {
- .emotion-5 {
- grid-template-columns: repeat(10, 1fr);
- grid-column-end: span 10;
- grid-column-start: 5;
- }
+@media (min-width: 63rem) {
+ .emotion-10 {
+ width: 12.6875rem;
}
}
-.emotion-7 {
+.emotion-12 {
+ position: static;
+ color: #222222;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ overflow-wrap: break-word;
+ display: inline-block;
font-size: 0.9375rem;
- line-height: 1.25rem;
- font-family: ReithSans,Helvetica,Arial,sans-serif;
- font-weight: 400;
+ line-height: 1.5rem;
+ font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
+ font-weight: 700;
font-style: normal;
- color: #141414;
- padding-bottom: 1.5rem;
- margin: 0;
+ width: 100%;
+ overflow-wrap: break-word;
+ text-overflow: ellipsis;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ overflow-x: hidden;
+ overflow-y: hidden;
+ display: -webkit-box;
+ -webkit-line-clamp: 4;
+ -webkit-box-orient: vertical;
+ color: #202224;
+}
+
+.emotion-12:before {
+ bottom: 0;
+ content: '';
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ top: 0;
+ white-space: nowrap;
+ z-index: 1;
+}
+
+.emotion-12:hover,
+.emotion-12:focus {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
+}
+
+.emotion-12:visited {
+ color: #6E6E73;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-7 {
+ .emotion-12 {
font-size: 1rem;
- line-height: 1.375rem;
+ line-height: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-7 {
+ .emotion-12 {
font-size: 1rem;
- line-height: 1.375rem;
+ line-height: 1.5rem;
}
}
-@media (min-width: 63rem) {
- .emotion-7 {
- padding-right: 2.5rem;
- }
+.emotion-12:hover,
+.emotion-12:focus {
+ -webkit-text-decoration: underline;
+ text-decoration: underline;
}
-
-
-
-
- chartbeat
-
-
-
-
-
- Article Headline
-
-
-
-
-
-
-
-`;
-
-exports[`Article Page should render a rtl article (persian) with most read correctly 1`] = `
-.emotion-0 {
- background-color: #F6F6F6;
+.emotion-12:visited {
+ color: #545658;
}
-.emotion-1 {
+.emotion-38 {
max-width: 63rem;
margin: 0 auto;
display: grid;
@@ -3367,77 +4509,77 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 63rem) {
- .emotion-1 {
+ .emotion-38 {
padding: 0 1rem;
-webkit-column-gap: 1rem;
column-gap: 1rem;
}
}
-.emotion-2 {
+.emotion-39 {
grid-column: 1/span 12;
padding-bottom: 2rem;
}
@media (min-width: 63rem) {
- .emotion-2 {
+ .emotion-39 {
grid-column: 1/span 8;
}
}
-.emotion-3 {
+.emotion-40 {
padding-bottom: 1.5rem;
}
@media (max-width: 14.9375rem) {
- .emotion-4 {
+ .emotion-41 {
padding: 0 0.5rem;
margin-right: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-4 {
+ .emotion-41 {
padding: 0 0.5rem;
margin-right: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-4 {
+ .emotion-41 {
padding: 0 1rem;
margin-right: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-4 {
+ .emotion-41 {
padding: 0 1rem;
margin-right: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-4 {
+ .emotion-41 {
margin-right: 16.666666666666668%;
}
}
@media (min-width: 80rem) {
- .emotion-4 {
+ .emotion-41 {
margin-right: 33.333333333333336%;
}
}
@supports (display: grid) {
- .emotion-4 {
+ .emotion-41 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-4 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -3446,7 +4588,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-4 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -3455,7 +4597,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-4 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 1rem;
@@ -3464,7 +4606,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-4 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 1rem;
@@ -3473,7 +4615,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-4 {
+ .emotion-41 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-start: 2;
@@ -3481,7 +4623,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 80rem) {
- .emotion-4 {
+ .emotion-41 {
grid-template-columns: repeat(12, 1fr);
grid-column-end: span 12;
grid-column-start: 5;
@@ -3489,7 +4631,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
}
-.emotion-6 {
+.emotion-43 {
font-size: 1.5rem;
line-height: 2rem;
font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
@@ -3503,78 +4645,78 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-6 {
+ .emotion-43 {
font-size: 1.75rem;
line-height: 2.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-6 {
+ .emotion-43 {
font-size: 2.5rem;
line-height: 3.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-6 {
+ .emotion-43 {
padding: 2.5rem 0;
}
}
-.emotion-6:focus {
+.emotion-43:focus {
outline: none;
}
@media (max-width: 14.9375rem) {
- .emotion-8 {
+ .emotion-45 {
padding: 0 0.5rem;
margin-right: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-8 {
+ .emotion-45 {
padding: 0 0.5rem;
margin-right: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-8 {
+ .emotion-45 {
padding: 0 1rem;
margin-right: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-8 {
+ .emotion-45 {
padding: 0 1rem;
margin-right: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-8 {
+ .emotion-45 {
margin-right: 20%;
}
}
@media (min-width: 80rem) {
- .emotion-8 {
+ .emotion-45 {
margin-right: 40%;
}
}
@supports (display: grid) {
- .emotion-8 {
+ .emotion-45 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-8 {
+ .emotion-45 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -3583,7 +4725,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-8 {
+ .emotion-45 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -3592,7 +4734,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-8 {
+ .emotion-45 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 1rem;
@@ -3601,7 +4743,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-8 {
+ .emotion-45 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
padding: 0 1rem;
@@ -3610,7 +4752,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-8 {
+ .emotion-45 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
grid-column-start: 2;
@@ -3618,7 +4760,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 80rem) {
- .emotion-8 {
+ .emotion-45 {
grid-template-columns: repeat(10, 1fr);
grid-column-end: span 10;
grid-column-start: 5;
@@ -3626,7 +4768,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
}
-.emotion-10 {
+.emotion-47 {
font-size: 0.9375rem;
line-height: 1.5rem;
font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
@@ -3638,27 +4780,27 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-10 {
+ .emotion-47 {
font-size: 1rem;
line-height: 1.625rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-10 {
+ .emotion-47 {
font-size: 1rem;
line-height: 1.625rem;
}
}
@media (min-width: 63rem) {
- .emotion-10 {
+ .emotion-47 {
padding-left: 2.5rem;
}
}
@media (max-width: 24.9375rem) {
- .emotion-12 {
+ .emotion-49 {
margin: 0 0.5rem;
padding-bottom: 1.5rem;
}
@@ -3666,7 +4808,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
@media (min-width: 25rem) {
@media (max-width: 62.9375rem) {
- .emotion-12 {
+ .emotion-49 {
margin: 0 1rem;
padding-bottom: 2rem;
}
@@ -3674,21 +4816,21 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-12 {
+ .emotion-49 {
margin: 0 1rem;
padding-bottom: 2.5rem;
}
}
@media (min-width: 80rem) {
- .emotion-12 {
+ .emotion-49 {
margin: 0 auto;
padding: 0 1rem 1.5rem;
max-width: 80rem;
}
}
-.emotion-13 {
+.emotion-50 {
position: relative;
z-index: 0;
color: #141414;
@@ -3696,36 +4838,36 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 37.5rem) {
- .emotion-13 {
+ .emotion-50 {
margin-top: 1.5rem;
}
}
@media (min-width: 63rem) {
- .emotion-13 {
+ .emotion-50 {
margin-bottom: 1.5rem;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-13 {
+ .emotion-50 {
margin-bottom: 1rem;
}
}
-.emotion-15 {
+.emotion-52 {
margin: 0;
padding: 0;
scroll-margin-top: 1rem;
}
-.emotion-15:focus-visible {
+.emotion-52:focus-visible {
outline: 0.1875rem solid #000000;
box-shadow: 0 0 0 0.1875rem #FFFFFF;
outline-offset: 0.1875rem;
}
-.emotion-17 {
+.emotion-54 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -3735,7 +4877,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
flex-direction: column;
}
-.emotion-19 {
+.emotion-56 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -3755,7 +4897,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 37.5rem) {
- .emotion-19 {
+ .emotion-56 {
-webkit-align-items: stretch;
-webkit-box-align: stretch;
-ms-flex-align: stretch;
@@ -3763,7 +4905,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
}
-.emotion-21 {
+.emotion-58 {
font-size: 1.25rem;
line-height: 1.75rem;
font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
@@ -3783,32 +4925,32 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-21 {
+ .emotion-58 {
font-size: 1.25rem;
line-height: 1.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-21 {
+ .emotion-58 {
font-size: 1.5rem;
line-height: 2rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-21 {
+ .emotion-58 {
margin: 0;
}
}
@media (min-width: 37.5rem) {
- .emotion-21 {
+ .emotion-58 {
padding-left: 1rem;
}
}
-.emotion-23 {
+.emotion-60 {
list-style-type: none;
margin: 0;
padding: 0;
@@ -3817,7 +4959,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@supports (display: grid) {
- .emotion-23 {
+ .emotion-60 {
display: grid;
position: initial;
width: initial;
@@ -3825,7 +4967,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (max-width: 14.9375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 0.5rem;
@@ -3833,7 +4975,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 0.5rem;
@@ -3841,7 +4983,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 0.5rem;
@@ -3849,7 +4991,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
grid-column-gap: 1rem;
@@ -3857,7 +4999,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(8, 1fr);
grid-column-end: span 8;
grid-column-gap: 1rem;
@@ -3865,7 +5007,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 80rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-columns: repeat(20, 1fr);
grid-column-end: span 20;
grid-column-gap: 1rem;
@@ -3874,24 +5016,24 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 80rem) {
- .emotion-23 {
+ .emotion-60 {
grid-auto-flow: row;
}
}
@media (min-width: 37.5rem) {
- .emotion-23 {
+ .emotion-60 {
grid-template-rows: repeat(5, auto);
}
}
-.emotion-25 {
+.emotion-62 {
position: relative;
padding-bottom: 1.5rem;
}
@media (max-width: 14.9375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(100%);
display: inline-block;
vertical-align: top;
@@ -3899,7 +5041,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(100%);
display: inline-block;
vertical-align: top;
@@ -3907,7 +5049,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(100%);
display: inline-block;
vertical-align: top;
@@ -3915,7 +5057,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(50%);
display: inline-block;
vertical-align: top;
@@ -3923,7 +5065,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(50%);
display: inline-block;
vertical-align: top;
@@ -3931,7 +5073,7 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 80rem) {
- .emotion-25 {
+ .emotion-62 {
width: calc(20%);
display: inline-block;
vertical-align: top;
@@ -3939,56 +5081,56 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@supports (display: grid) {
- .emotion-25 {
+ .emotion-62 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(3, 1fr);
grid-column-end: span 3;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(4, 1fr);
grid-column-end: span 4;
}
}
@media (min-width: 80rem) {
- .emotion-25 {
+ .emotion-62 {
grid-template-columns: repeat(4, 1fr);
grid-column-end: span 4;
}
}
}
-.emotion-27 {
+.emotion-64 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -4001,50 +5143,50 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (max-width: 14.9375rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 1rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 1.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 2rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 1.5rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 1.5rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-28 {
+ .emotion-65 {
min-width: 1.5rem;
}
}
-.emotion-29 {
+.emotion-66 {
font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
font-style: normal;
font-weight: 400;
@@ -4057,32 +5199,32 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-29 {
+ .emotion-66 {
font-size: 2.5rem;
line-height: 2.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-29 {
+ .emotion-66 {
font-size: 3.5rem;
line-height: 3.75rem;
}
}
-.emotion-30 {
+.emotion-67 {
padding-top: 0.375rem;
padding-left: 1rem;
padding-right: 1rem;
}
@supports (grid-template-columns: fit-content(200px)) {
- .emotion-30 {
+ .emotion-67 {
padding-left: 0;
}
}
-.emotion-31 {
+.emotion-68 {
font-size: 0.9375rem;
line-height: 1.5rem;
font-family: "BBC Reith Qalam","Times New Roman",Arial,Verdana,Geneva,Helvetica,sans-serif;
@@ -4092,30 +5234,30 @@ exports[`Article Page should render a rtl article (persian) with most read corre
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1rem;
line-height: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1rem;
line-height: 1.5rem;
}
}
-.emotion-31:hover,
-.emotion-31:focus {
+.emotion-68:hover,
+.emotion-68:focus {
-webkit-text-decoration: underline;
text-decoration: underline;
}
-.emotion-31:before {
+.emotion-68:before {
bottom: 0;
content: '';
left: 0;
@@ -4128,31 +5270,31 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 25rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1.125rem;
line-height: 1.625rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1.125rem;
line-height: 1.625rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-31 {
+ .emotion-68 {
font-size: 1.25rem;
line-height: 1.75rem;
}
}
}
-.emotion-32 {
+.emotion-69 {
padding-top: 0.5rem;
}
-.emotion-33 {
+.emotion-70 {
font-size: 0.875rem;
line-height: 1.25rem;
color: #545658;
@@ -4163,235 +5305,235 @@ exports[`Article Page should render a rtl article (persian) with most read corre
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-33 {
+ .emotion-70 {
font-size: 0.875rem;
line-height: 1.25rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-33 {
+ .emotion-70 {
font-size: 0.8125rem;
line-height: 1.25rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-38 {
+ .emotion-75 {
min-width: 1rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-38 {
+ .emotion-75 {
min-width: 1.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-38 {
+ .emotion-75 {
min-width: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-38 {
+ .emotion-75 {
min-width: 2rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-38 {
+ .emotion-75 {
min-width: 2rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-38 {
+ .emotion-75 {
min-width: 1.5rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-38 {
+ .emotion-75 {
min-width: 1.5rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-68 {
+ .emotion-105 {
min-width: 1rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-68 {
+ .emotion-105 {
min-width: 1.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-68 {
+ .emotion-105 {
min-width: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-68 {
+ .emotion-105 {
min-width: 2rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-68 {
+ .emotion-105 {
min-width: 1.5rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-68 {
+ .emotion-105 {
min-width: 1.5rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-68 {
+ .emotion-105 {
min-width: 2rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-78 {
+ .emotion-115 {
min-width: 1rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-78 {
+ .emotion-115 {
min-width: 1.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-78 {
+ .emotion-115 {
min-width: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-78 {
+ .emotion-115 {
min-width: 2rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-78 {
+ .emotion-115 {
min-width: 2rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-78 {
+ .emotion-115 {
min-width: 2rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-78 {
+ .emotion-115 {
min-width: 1.5rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-88 {
+ .emotion-125 {
min-width: 1rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-88 {
+ .emotion-125 {
min-width: 1.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-88 {
+ .emotion-125 {
min-width: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-88 {
+ .emotion-125 {
min-width: 2rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-88 {
+ .emotion-125 {
min-width: 1.5rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-88 {
+ .emotion-125 {
min-width: 2rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-88 {
+ .emotion-125 {
min-width: 1.5rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-118 {
+ .emotion-155 {
min-width: 1rem;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-118 {
+ .emotion-155 {
min-width: 1.5rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-118 {
+ .emotion-155 {
min-width: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-118 {
+ .emotion-155 {
min-width: 2rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-118 {
+ .emotion-155 {
min-width: 2rem;
}
}
@supports (grid-template-columns: fit-content(200px)) {
@media (min-width: 37.5rem) {
- .emotion-118 {
+ .emotion-155 {
min-width: 2rem;
}
}
}
@media (min-width: 80rem) {
- .emotion-118 {
+ .emotion-155 {
min-width: 2rem;
}
}
@@ -4404,22 +5546,123 @@ exports[`Article Page should render a rtl article (persian) with most read corre
chartbeat
-
+
+
+ پربینندهترینها
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4427,11 +5670,11 @@ exports[`Article Page should render a rtl article (persian) with most read corre
یک پاراگراف.
@@ -4442,27 +5685,27 @@ exports[`Article Page should render a rtl article (persian) with most read corre
@@ -4473,43 +5716,43 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۱
ایران در آستانه بحران بنزین؛ تابستانی دشوار برای دولت رئیسی در پیش است
به روز شده در ۱۹ ژوئن ۲۰۲۳
@@ -4519,38 +5762,38 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۲
پرونده حمید نوری؛ وکلای مدافع: نوری فریب خورد
به روز شده در ۱۹ ژوئن ۲۰۲۳
@@ -4560,38 +5803,38 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۳
اما رادوکانو: گاهی آرزو میکنم که ای کاش قهرمان اوپن آمریکا نمیشدم
به روز شده در ۱۹ ژوئن ۲۰۲۳
@@ -4601,38 +5844,38 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۴
ملیپوش سابق هلند برای چاقو زدن به فامیلش به ۱۸ ماه حبس محکوم شد
به روز شده در ۱۹ ژوئن ۲۰۲۳
@@ -4642,38 +5885,38 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۵
وزیر خارجه آمریکا در پکن؛ شی: پیشرفتهایی در روابط حاصل شده است، بلینکن: رقابت نباید بدل به دشمنی شود
به روز شده در ۱۹ ژوئن ۲۰۲۳
@@ -4683,38 +5926,38 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۶
سگم سرطان پستان مرا تشخیص داد
به روز شده در ۱۸ ژوئن ۲۰۲۳
@@ -4724,38 +5967,38 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۷
لوح ۲۸۰۰ ساله از ایتالیا به عراق بازگردانده شد
به روز شده در ۱۸ ژوئن ۲۰۲۳
@@ -4765,38 +6008,38 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۸
نمایندگان کشورها و نهادها در اجلاس سازمان ملل خواستار پایان یافتن سیاستهای تبعیضآمیز طالبان علیه زنان شدند
به روز شده در ۱۹ ژوئن ۲۰۲۳
@@ -4806,38 +6049,38 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۹
چرا موبایل داغ میکند و چطور آن را خنک نگه داریم؟
به روز شده در ۱۸ ژوئن ۲۰۲۳
@@ -4847,38 +6090,38 @@ exports[`Article Page should render a rtl article (persian) with most read corre
۱۰
هشتگ «داستان_ما_یکیست» در چهلمین سالگرد اعدام ۱۰ زن بهائی در شیراز
به روز شده در ۱۸ ژوئن ۲۰۲۳
diff --git a/src/app/pages/ArticlePage/experimentTopStories/__snapshots__/helpers.test.tsx.snap b/src/app/pages/ArticlePage/experimentTopStories/__snapshots__/helpers.test.tsx.snap
new file mode 100644
index 00000000000..ae974aa1400
--- /dev/null
+++ b/src/app/pages/ArticlePage/experimentTopStories/__snapshots__/helpers.test.tsx.snap
@@ -0,0 +1,293 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`AMP top stories experiment getExperimentAnalyticsConfig() should create the analytics config with the correct parameters for news on live 1`] = `
+{
+ "requests": {
+ "topStoriesArticleBodyClick": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598285, 598287)&s2=64&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&atc=PUB-[article]-[top-stories-promo]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[articleBody]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesArticleBodyView": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598285, 598287)&s2=64&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&ati=PUB-[article]-[top-stories-section]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[articleBody]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesSecondaryColumnClick": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598285, 598287)&s2=64&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&atc=PUB-[article]-[top-stories-promo]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[secondaryColumn]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesSecondaryColumnView": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598285, 598287)&s2=64&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&ati=PUB-[article]-[top-stories-section]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[secondaryColumn]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ },
+ "triggers": {
+ "articleBodyHalfPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyHalf'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyHalfView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyHalf'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "articleBodyQuarterPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyQuarter'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyQuarterView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyQuarter'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "articleBodyThreeQuartersPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyThreeQuarters'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyThreeQuartersView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyThreeQuarters'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "secondaryColumnPromoClick": {
+ "on": "click",
+ "request": "topStoriesSecondaryColumnClick",
+ "selector": "div[data-experiment-position='secondaryColumn'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "secondaryColumnView": {
+ "on": "visible",
+ "request": "topStoriesSecondaryColumnView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='secondaryColumn'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ },
+}
+`;
+
+exports[`AMP top stories experiment getExperimentAnalyticsConfig() should create the analytics config with the correct parameters for news on test 1`] = `
+{
+ "requests": {
+ "topStoriesArticleBodyClick": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598286, 598288)&s2=64&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&atc=PUB-[article]-[top-stories-promo]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[articleBody]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesArticleBodyView": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598286, 598288)&s2=64&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&ati=PUB-[article]-[top-stories-section]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[articleBody]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesSecondaryColumnClick": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598286, 598288)&s2=64&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&atc=PUB-[article]-[top-stories-promo]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[secondaryColumn]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesSecondaryColumnView": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598286, 598288)&s2=64&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&ati=PUB-[article]-[top-stories-section]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[secondaryColumn]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ },
+ "triggers": {
+ "articleBodyHalfPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyHalf'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyHalfView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyHalf'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "articleBodyQuarterPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyQuarter'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyQuarterView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyQuarter'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "articleBodyThreeQuartersPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyThreeQuarters'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyThreeQuartersView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyThreeQuarters'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "secondaryColumnPromoClick": {
+ "on": "click",
+ "request": "topStoriesSecondaryColumnClick",
+ "selector": "div[data-experiment-position='secondaryColumn'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "secondaryColumnView": {
+ "on": "visible",
+ "request": "topStoriesSecondaryColumnView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='secondaryColumn'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ },
+}
+`;
+
+exports[`AMP top stories experiment getExperimentAnalyticsConfig() should create the analytics config with the correct parameters for sport on live 1`] = `
+{
+ "requests": {
+ "topStoriesArticleBodyClick": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598310, 598308)&s2=85&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&atc=PUB-[article]-[top-stories-promo]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[articleBody]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesArticleBodyView": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598310, 598308)&s2=85&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&ati=PUB-[article]-[top-stories-section]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[articleBody]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesSecondaryColumnClick": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598310, 598308)&s2=85&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&atc=PUB-[article]-[top-stories-promo]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[secondaryColumn]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesSecondaryColumnView": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598310, 598308)&s2=85&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&ati=PUB-[article]-[top-stories-section]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[secondaryColumn]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ },
+ "triggers": {
+ "articleBodyHalfPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyHalf'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyHalfView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyHalf'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "articleBodyQuarterPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyQuarter'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyQuarterView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyQuarter'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "articleBodyThreeQuartersPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyThreeQuarters'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyThreeQuartersView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyThreeQuarters'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "secondaryColumnPromoClick": {
+ "on": "click",
+ "request": "topStoriesSecondaryColumnClick",
+ "selector": "div[data-experiment-position='secondaryColumn'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "secondaryColumnView": {
+ "on": "visible",
+ "request": "topStoriesSecondaryColumnView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='secondaryColumn'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ },
+}
+`;
+
+exports[`AMP top stories experiment getExperimentAnalyticsConfig() should create the analytics config with the correct parameters for sport on test 1`] = `
+{
+ "requests": {
+ "topStoriesArticleBodyClick": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598311, 598309)&s2=85&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&atc=PUB-[article]-[top-stories-promo]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[articleBody]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesArticleBodyView": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598311, 598309)&s2=85&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&ati=PUB-[article]-[top-stories-section]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[articleBody]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesSecondaryColumnClick": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598311, 598309)&s2=85&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&atc=PUB-[article]-[top-stories-promo]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[secondaryColumn]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ "topStoriesSecondaryColumnView": "http://foobar.com?idclient=123-456-789&s=$IF($EQUALS($MATCH(\${ampGeo}, gbOrUnknown, 0), gbOrUnknown), 598311, 598309)&s2=85&p=SOURCE_URL&r=\${screenWidth}x\${screenHeight}x\${screenColorDepth}&re=\${availableScreenWidth}x\${availableScreenHeight}&hl=\${timestamp}&lng=\${browserLanguage}&ati=PUB-[article]-[top-stories-section]-[VARIANT(topStoriesExperiment)]-[]-[SOURCE_URL]-[secondaryColumn]-[]-[]&mv_test=Google Discover&mv_experiment_id=topStoriesExperiment&mv_creation=VARIANT(topStoriesExperiment)&type=AT",
+ },
+ "triggers": {
+ "articleBodyHalfPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyHalf'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyHalfView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyHalf'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "articleBodyQuarterPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyQuarter'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyQuarterView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyQuarter'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "articleBodyThreeQuartersPromoClick": {
+ "on": "click",
+ "request": "topStoriesArticleBodyClick",
+ "selector": "div[data-experiment-position='articleBodyThreeQuarters'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "articleBodyThreeQuartersView": {
+ "on": "visible",
+ "request": "topStoriesArticleBodyView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='articleBodyThreeQuarters'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ "secondaryColumnPromoClick": {
+ "on": "click",
+ "request": "topStoriesSecondaryColumnClick",
+ "selector": "div[data-experiment-position='secondaryColumn'] a[aria-labelledby*='top-stories-promo']",
+ },
+ "secondaryColumnView": {
+ "on": "visible",
+ "request": "topStoriesSecondaryColumnView",
+ "visibilitySpec": {
+ "continuousTimeMin": 200,
+ "selector": "div[data-experiment-position='secondaryColumn'] > section[aria-labelledby='top-stories-heading']",
+ "totalTimeMin": 500,
+ "visiblePercentageMin": 20,
+ },
+ },
+ },
+}
+`;
diff --git a/src/app/pages/ArticlePage/experimentTopStories/helpers.test.tsx b/src/app/pages/ArticlePage/experimentTopStories/helpers.test.tsx
new file mode 100644
index 00000000000..ad854fa8e45
--- /dev/null
+++ b/src/app/pages/ArticlePage/experimentTopStories/helpers.test.tsx
@@ -0,0 +1,149 @@
+import {
+ getExperimentAnalyticsConfig,
+ getExperimentTopStories,
+} from './helpers';
+import { topStoriesList } from '../PagePromoSections/TopStoriesSection/fixture/index';
+
+jest.mock('../../../lib/analyticsUtils', () => ({
+ ...jest.requireActual('../../../lib/analyticsUtils'),
+ getAtUserId: jest.fn().mockReturnValue('123-456-789'),
+}));
+
+describe('AMP top stories experiment', () => {
+ const mockTextBlock = {
+ type: 'text',
+ model: {
+ blocks: [],
+ },
+ };
+ const expectedExperimentTopStoriesBlock = (
+ variant: 'Quarter' | 'Half' | 'ThreeQuarters',
+ ) => {
+ return {
+ type: `experimentTopStories${variant}`,
+ model: topStoriesList,
+ id: `experimentTopStories${variant}`,
+ };
+ };
+
+ const blocksEvenLength = Array(14).fill(mockTextBlock);
+ const blocksOddLength = Array(15).fill(mockTextBlock);
+
+ describe('getExperimentTopStories()', () => {
+ it('returns shouldEnableExperimentTopStories as true if props match conditions.', () => {
+ const { shouldEnableExperimentTopStories } = getExperimentTopStories({
+ blocks: blocksEvenLength,
+ topStoriesContent: topStoriesList,
+ isAmp: true,
+ service: 'news',
+ });
+ expect(shouldEnableExperimentTopStories).toBe(true);
+ });
+
+ it.each`
+ testDescription | isAmp | service | blocksLength
+ ${'all props are undefined'} | ${false} | ${undefined} | ${undefined}
+ ${'only isAmp is true'} | ${true} | ${undefined} | ${undefined}
+ ${'only service is undefined'} | ${true} | ${undefined} | ${14}
+ ${'only service is defined and valid'} | ${false} | ${'news'} | ${undefined}
+ ${'all props defined but service is invalid'} | ${true} | ${'igbo'} | ${14}
+ ${'only blocks length is defined and valid'} | ${false} | ${undefined} | ${14}
+ ${'all props defined but blocks length is invalid'} | ${true} | ${'news'} | ${7}
+ `(
+ 'returns shouldEnableExperimentTopStories as false because $testDescription.',
+ ({ isAmp, service, blocksLength }) => {
+ const blocks = Array(blocksLength).fill(mockTextBlock, 0);
+ const { shouldEnableExperimentTopStories } = getExperimentTopStories({
+ blocks,
+ topStoriesContent: topStoriesList,
+ isAmp,
+ service,
+ });
+
+ expect(shouldEnableExperimentTopStories).toBe(false);
+ },
+ );
+
+ const expectedBlocksEvenLength = [
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ expectedExperimentTopStoriesBlock('Quarter'),
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ expectedExperimentTopStoriesBlock('Half'),
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ expectedExperimentTopStoriesBlock('ThreeQuarters'),
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ ];
+
+ const expectedBlocksOddLength = [
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ expectedExperimentTopStoriesBlock('Quarter'),
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ expectedExperimentTopStoriesBlock('Half'),
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ expectedExperimentTopStoriesBlock('ThreeQuarters'),
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ mockTextBlock,
+ ];
+
+ it.each`
+ testType | inputBlocks | expectedOutput
+ ${'even'} | ${blocksEvenLength} | ${expectedBlocksEvenLength}
+ ${'odd'} | ${blocksOddLength} | ${expectedBlocksOddLength}
+ `(
+ 'should insert experimentTopStories block into blocks array in the correct position when blocks.length is $testType.',
+ ({ inputBlocks, expectedOutput }) => {
+ const { transformedBlocks } = getExperimentTopStories({
+ blocks: inputBlocks,
+ topStoriesContent: topStoriesList,
+ isAmp: true,
+ service: 'news',
+ });
+ expect(transformedBlocks).toEqual(expectedOutput);
+ },
+ );
+ });
+
+ describe('getExperimentAnalyticsConfig()', () => {
+ process.env.SIMORGH_ATI_BASE_URL = 'http://foobar.com?';
+ const NEWS_PRODUCER_ID = 64;
+ const SPORT_PRODUCER_ID = 85;
+
+ it.each`
+ service | env | producerId
+ ${'news'} | ${'live'} | ${NEWS_PRODUCER_ID}
+ ${'news'} | ${'test'} | ${NEWS_PRODUCER_ID}
+ ${'sport'} | ${'live'} | ${SPORT_PRODUCER_ID}
+ ${'sport'} | ${'test'} | ${SPORT_PRODUCER_ID}
+ `(
+ 'should create the analytics config with the correct parameters for $service on $env.',
+ ({ env, service, producerId }) => {
+ const analyticsConfig = getExperimentAnalyticsConfig({
+ env,
+ service,
+ atiAnalyticsProducerId: producerId,
+ });
+ expect(analyticsConfig).toMatchSnapshot();
+ },
+ );
+ });
+});
diff --git a/src/app/pages/ArticlePage/experimentTopStories/helpers.tsx b/src/app/pages/ArticlePage/experimentTopStories/helpers.tsx
new file mode 100644
index 00000000000..81d26b8620f
--- /dev/null
+++ b/src/app/pages/ArticlePage/experimentTopStories/helpers.tsx
@@ -0,0 +1,328 @@
+/** @jsx jsx */
+import { jsx } from '@emotion/react';
+import { OptimoBlock } from '#app/models/types/optimo';
+import { TopStoryItem } from '#app/pages/ArticlePage/PagePromoSections/TopStoriesSection/types';
+import { buildATIEventTrackUrl } from '#app/components/ATIAnalytics/atiUrl';
+import { Services, Environments } from '#app/models/types/global';
+import TopStoriesSection from '../PagePromoSections/TopStoriesSection';
+import styles from './index.styles';
+
+export const experimentName = 'topStoriesExperiment';
+// Traffic allocation set at 40%
+export const experimentTopStoriesConfig = {
+ [experimentName]: {
+ variants: {
+ control: 10,
+ show_at_quarter: 10,
+ show_at_half: 10,
+ show_at_three_quarters: 10,
+ },
+ },
+};
+
+type VariantNames = 'Quarter' | 'Half' | 'ThreeQuarters';
+type Positions = 'articleBody' | 'secondaryColumn';
+type TrackingEventType = 'view' | 'click';
+
+const ARTICLE_LENGTH_THRESHOLD = 14;
+const enableExperimentTopStories = ({
+ isAmp,
+ service,
+ blocksLength,
+}: {
+ isAmp: boolean;
+ service: string;
+ blocksLength: number;
+}) => {
+ if (!isAmp || !service || blocksLength < ARTICLE_LENGTH_THRESHOLD) {
+ return false;
+ }
+ const experimentServices = ['news', 'sport'];
+ return isAmp && experimentServices.includes(service);
+};
+
+const insertBlockAtPosition = (
+ blocks: OptimoBlock[],
+ blockToInsert: OptimoBlock,
+ variantName: VariantNames,
+) => {
+ const insertionPercentages = {
+ Quarter: 0.25,
+ Half: 0.5,
+ ThreeQuarters: 0.75,
+ };
+ const percentage = insertionPercentages[variantName];
+
+ const renderedBlocksLength = blocks.length - 1;
+ const calculatedIndex = Math.floor(renderedBlocksLength * percentage);
+ const insertIndex = Math.max(calculatedIndex, 3);
+
+ const blocksClone = [...blocks];
+ blocksClone.splice(insertIndex, 0, blockToInsert);
+ return blocksClone;
+};
+
+const insertExperimentTopStories = ({
+ blocks,
+ topStoriesContent,
+}: {
+ blocks: OptimoBlock[];
+ topStoriesContent: TopStoryItem[];
+}) => {
+ const insertionPositions = ['Quarter', 'Half', 'ThreeQuarters'] as const;
+ return insertionPositions.reduce((currentBlocks, variantName) => {
+ const experimentTopStoriesBlock = {
+ type: `experimentTopStories${variantName}`,
+ model: topStoriesContent,
+ id: `experimentTopStories${variantName}`,
+ };
+
+ const transformedBlocks = insertBlockAtPosition(
+ currentBlocks,
+ experimentTopStoriesBlock,
+ variantName,
+ );
+
+ return transformedBlocks;
+ }, blocks);
+};
+
+export const getExperimentTopStories = ({
+ blocks,
+ topStoriesContent,
+ isAmp,
+ service,
+}: {
+ blocks: OptimoBlock[];
+ topStoriesContent: TopStoryItem[] | undefined;
+ isAmp: boolean;
+ service: string;
+}) => {
+ const shouldEnableExperimentTopStories = enableExperimentTopStories({
+ isAmp,
+ service,
+ blocksLength: blocks.length,
+ });
+
+ if (!topStoriesContent || !shouldEnableExperimentTopStories)
+ return {
+ transformedBlocks: blocks,
+ shouldEnableExperimentTopStories: false,
+ };
+
+ const transformedBlocks = insertExperimentTopStories({
+ blocks,
+ topStoriesContent,
+ });
+
+ return {
+ transformedBlocks,
+ shouldEnableExperimentTopStories,
+ };
+};
+
+export const ExperimentTopStories = ({
+ topStoriesContent,
+ variantName,
+}: {
+ topStoriesContent: TopStoryItem[];
+ variantName: VariantNames;
+}) => {
+ const variantKeys = {
+ Quarter: 'show_at_quarter',
+ Half: 'show_at_half',
+ ThreeQuarters: 'show_at_three_quarters',
+ };
+
+ return (
+
+
+
+ );
+};
+
+const getStatsDestinationKey = ({
+ env,
+ service,
+}: {
+ service: Services;
+ env: Environments;
+}) => {
+ if (env !== 'live') {
+ return service === 'news' ? 'NEWS_PS_TEST' : 'SPORT_PS_TEST';
+ }
+
+ return service === 'news' ? 'NEWS_PS' : 'SPORT_PS';
+};
+
+// SOURCE_URL and VARIANT(${experimentName}) are replaced with their actual values via AMP's variable substitution: https://github.com/ampproject/amphtml/blob/main/docs/spec/amp-var-substitutions.md
+const buildTopStoriesEventUrl = ({
+ type,
+ env,
+ service,
+ atiAnalyticsProducerId,
+ position,
+}: {
+ type: TrackingEventType;
+ env: Environments;
+ service: Services;
+ atiAnalyticsProducerId: string;
+ position?: Positions;
+}) => {
+ return buildATIEventTrackUrl({
+ ampExperimentName: `${experimentName}`,
+ campaignID: 'article',
+ componentName: `${type === 'view' ? 'top-stories-section' : 'top-stories-promo'}`,
+ detailedPlacement: position,
+ pageIdentifier: 'SOURCE_URL',
+ platform: 'amp',
+ producerId: atiAnalyticsProducerId,
+ statsDestination: `${getStatsDestinationKey({ env, service })}`,
+ experimentVariant: `VARIANT(${experimentName})`,
+ type,
+ });
+};
+
+const requestKeysMap = {
+ articleBody: {
+ view: 'topStoriesArticleBodyView',
+ click: 'topStoriesArticleBodyClick',
+ },
+ secondaryColumn: {
+ view: 'topStoriesSecondaryColumnView',
+ click: 'topStoriesSecondaryColumnClick',
+ },
+};
+
+const buildRequestUrls = ({
+ position,
+ env,
+ service,
+ atiAnalyticsProducerId,
+}: {
+ position: Positions;
+ env: Environments;
+ service: Services;
+ atiAnalyticsProducerId: string;
+}) => {
+ const requestKeys = requestKeysMap[position];
+
+ return {
+ [requestKeys.view]: buildTopStoriesEventUrl({
+ type: 'view',
+ env,
+ service,
+ atiAnalyticsProducerId,
+ position,
+ }),
+ [requestKeys.click]: buildTopStoriesEventUrl({
+ type: 'click',
+ env,
+ service,
+ atiAnalyticsProducerId,
+ position,
+ }),
+ };
+};
+
+const getQuerySelectors = ({ variantName }: { variantName?: VariantNames }) => {
+ const experimentPosition = variantName
+ ? `articleBody${variantName}`
+ : 'secondaryColumn';
+
+ return {
+ view: `div[data-experiment-position='${experimentPosition}'] > section[aria-labelledby='top-stories-heading']`,
+ click: `div[data-experiment-position='${experimentPosition}'] a[aria-labelledby*='top-stories-promo']`,
+ };
+};
+
+const getEventTriggerKeys = ({
+ variantName,
+}: {
+ variantName?: VariantNames;
+}) => {
+ if (!variantName) {
+ return {
+ view: `secondaryColumnView`,
+ click: `secondaryColumnPromoClick`,
+ };
+ }
+
+ return {
+ view: `articleBody${variantName}View`,
+ click: `articleBody${variantName}PromoClick`,
+ };
+};
+
+const buildEventTriggers = ({
+ position,
+ variantName,
+}: {
+ position: Positions;
+ variantName?: VariantNames;
+}) => {
+ const requestKeys = requestKeysMap[position];
+ const eventTriggerKeys = getEventTriggerKeys({ variantName });
+ const querySelectors = getQuerySelectors({ variantName });
+
+ return {
+ [eventTriggerKeys.view]: {
+ on: 'visible',
+ request: requestKeys.view,
+ visibilitySpec: {
+ selector: querySelectors.view,
+ visiblePercentageMin: 20,
+ totalTimeMin: 500,
+ continuousTimeMin: 200,
+ },
+ },
+ [eventTriggerKeys.click]: {
+ on: 'click',
+ request: requestKeys.click,
+ selector: querySelectors.click,
+ },
+ };
+};
+
+export const getExperimentAnalyticsConfig = ({
+ env,
+ service,
+ atiAnalyticsProducerId,
+}: {
+ env: Environments;
+ service: Services;
+ atiAnalyticsProducerId: string;
+}) => {
+ return {
+ requests: {
+ ...buildRequestUrls({
+ position: 'articleBody',
+ env,
+ service,
+ atiAnalyticsProducerId,
+ }),
+ ...buildRequestUrls({
+ position: 'secondaryColumn',
+ env,
+ service,
+ atiAnalyticsProducerId,
+ }),
+ },
+ triggers: {
+ ...buildEventTriggers({ position: 'secondaryColumn' }),
+ ...buildEventTriggers({
+ position: 'articleBody',
+ variantName: 'Quarter',
+ }),
+ ...buildEventTriggers({ position: 'articleBody', variantName: 'Half' }),
+ ...buildEventTriggers({
+ position: 'articleBody',
+ variantName: 'ThreeQuarters',
+ }),
+ },
+ };
+};
diff --git a/src/app/pages/ArticlePage/experimentTopStories/index.styles.ts b/src/app/pages/ArticlePage/experimentTopStories/index.styles.ts
new file mode 100644
index 00000000000..1dc0ad88e9a
--- /dev/null
+++ b/src/app/pages/ArticlePage/experimentTopStories/index.styles.ts
@@ -0,0 +1,18 @@
+import { css, Theme } from '@emotion/react';
+
+export default {
+ experimentTopStoriesSection:
+ (variant: string) =>
+ ({ spacings, mq }: Theme) => {
+ return css({
+ display: 'none',
+ marginBottom: `${spacings.TRIPLE}rem`,
+ [`[amp-x-topStoriesExperiment="${variant}"] &`]: {
+ display: 'block',
+ [mq.GROUP_4_MIN_WIDTH]: {
+ display: 'none',
+ },
+ },
+ });
+ },
+};
diff --git a/src/app/pages/ArticlePage/fixtureData.ts b/src/app/pages/ArticlePage/fixtureData.ts
index f2172c66ff2..f915090a733 100644
--- a/src/app/pages/ArticlePage/fixtureData.ts
+++ b/src/app/pages/ArticlePage/fixtureData.ts
@@ -260,6 +260,51 @@ export const articleDataNews = articleDataBuilder(
},
) as unknown as Article;
+export const articleDataNewsLongLength = articleDataBuilder(
+ 'c0000000001o',
+ 'News',
+ 'en-gb',
+ 'http://www.bbc.co.uk/ontologies/passport/home/News',
+ [
+ 'Article Headline',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ 'A paragraph.',
+ ],
+ 'Article Headline for SEO',
+ 'Article Headline for Promo',
+ 'Article summary.',
+ presetThings,
+ false,
+ blocksWithHeadlineAndText,
+ {
+ categoryName: 'Royal+Wedding+2018~Duchess+of+Sussex',
+ contentId: 'urn:bbc:optimo:c0000000001o',
+ contentType: 'article',
+ language: 'en-gb',
+ ldpThingIds:
+ '2351f2b2-ce36-4f44-996d-c3c4f7f90eaa~803eaeb9-c0c3-4f1b-9a66-90efac3df2dc',
+ ldpThingLabels: 'Royal+Wedding+2018~Duchess+of+Sussex',
+ nationsProducer: null,
+ pageIdentifier: 'news.articles.c0000000001o.page',
+ pageTitle: 'Article Headline for SEO',
+ timePublished: '2018-01-01T12:01:00.000Z',
+ timeUpdated: '2018-01-01T14:00:00.000Z',
+ },
+) as unknown as Article;
+
export const articleDataNewsWithEmbeds = articleDataBuilder(
'c0000000001o',
'News',
diff --git a/src/app/pages/ArticlePage/index.stories.tsx b/src/app/pages/ArticlePage/index.stories.tsx
index d0a1a3e455b..f0f2cd55fc1 100644
--- a/src/app/pages/ArticlePage/index.stories.tsx
+++ b/src/app/pages/ArticlePage/index.stories.tsx
@@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
-import React, { useMemo } from 'react';
+import React from 'react';
import ThemeProvider from '#app/components/ThemeProvider';
import { ToggleContextProvider } from '#contexts/ToggleContext';
import {
@@ -112,11 +112,6 @@ const ComponentWithServiceContext = ({
podcastEnabled = false,
electionBanner = false,
}: Props) => {
- const memoisedServiceContext = useMemo(
- () => ({ ...serviceContextMock, service }),
- [service],
- );
-
return (
(props: ComponentToRenderProps) => {
- const { blocks } = props;
- return (
- [
- `padding-top: ${spacings.TRIPLE}rem`,
- isCpsMap && styles.cafMediaPlayer,
- ]}
- >
-
-
- );
- };
-
-const getLegacyMediaComponent =
- (isCpsMap: boolean, headline: string) => (props: ComponentToRenderProps) => {
- const mediaOverrides: MediaOverrides = {
- model: { pageTitleOverride: headline },
- type: 'mediaOverrides',
- };
-
- return (
- [
- `padding-top: ${spacings.TRIPLE}rem`,
- isCpsMap && styles.cafMediaPlayer,
- ]}
- >
-
-
- );
- };
-
-const getBylineComponent =
- (
- hasByline: boolean,
- bylineContribBlocks: OptimoBylineContributorBlock[],
- firstPublished: string,
- lastPublished: string,
- ) =>
- () =>
- hasByline ? (
-
-
-
- ) : null;
-
-const Links = (props: ComponentToRenderProps) => ;
-
-const getImageComponent =
- (preloadLeadImageToggle: boolean) => (props: ComponentToRenderProps) => (
-
- );
-
-const getTimestampComponent =
- (showTimestamp: boolean) => (props: TimestampProps) =>
- showTimestamp ? : null;
-
const MediaArticlePage = ({ pageData }: { pageData: Article }) => {
const { pageType, service } = useContext(RequestContext);
const {
@@ -188,7 +122,9 @@ const MediaArticlePage = ({ pageData }: { pageData: Article }) => {
...(isCpsMap && { pageTitle: `${atiAnalytics.pageTitle} - ${brandName}` }),
};
- const isUzbekArticle = service === 'uzbek' && pageType === ARTICLE_PAGE;
+ const isTransliterated =
+ ['serbian', 'zhongwen', 'uzbek'].includes(service) &&
+ pageType === ARTICLE_PAGE;
const promoImageBlocks =
pageData?.promo?.images?.defaultPromoImage?.blocks ?? [];
@@ -206,7 +142,7 @@ const MediaArticlePage = ({ pageData }: { pageData: Article }) => {
const promoImage = promoImageRawBlock?.model?.locator;
const showTopics = Boolean(
- showRelatedTopics && topics.length > 0 && !isUzbekArticle,
+ showRelatedTopics && topics.length > 0 && !isTransliterated,
);
const isLiveMedia = checkIsLiveMedia(blocks);
@@ -218,24 +154,69 @@ const MediaArticlePage = ({ pageData }: { pageData: Article }) => {
visuallyHiddenHeadline,
headline: headings,
subheadline: headings,
- audio: getAudioVideoComponent(isCpsMap),
- video: getAudioVideoComponent(isCpsMap),
- legacyMedia: getLegacyMediaComponent(isCpsMap, headline),
+ audio: (props: ComponentToRenderProps) => (
+ [
+ `padding-top: ${spacings.TRIPLE}rem`,
+ isCpsMap && styles.cafMediaPlayer,
+ ]}
+ >
+
+
+ ),
+ video: (props: ComponentToRenderProps) => (
+ [
+ `padding-top: ${spacings.TRIPLE}rem`,
+ isCpsMap && styles.cafMediaPlayer,
+ ]}
+ >
+
+
+ ),
+ legacyMedia: (props: ComponentToRenderProps) => {
+ const mediaOverrides: MediaOverrides = {
+ model: { pageTitleOverride: headline },
+ type: 'mediaOverrides',
+ };
+
+ return (
+ [
+ `padding-top: ${spacings.TRIPLE}rem`,
+ isCpsMap && styles.cafMediaPlayer,
+ ]}
+ >
+
+
+ );
+ },
text,
- byline: getBylineComponent(
- hasByline,
- bylineContribBlocks,
- firstPublished,
- lastPublished,
+ byline: () =>
+ hasByline ? (
+
+
+
+ ) : null,
+ image: (props: ComponentToRenderProps) => (
+
),
- image: getImageComponent(preloadLeadImageToggle),
- timestamp: getTimestampComponent(showTimestamp),
+ timestamp: (props: TimestampProps) =>
+ showTimestamp ? : null,
social: SocialEmbedContainer,
- embedHtml: EmbedHtml,
- embedImages: EmbedImages,
- oEmbed: OEmbedLoader,
+ embedHtml: (props: EmbedHtmlProps) => ,
+ embedImages: (props: ComponentToRenderProps) => ,
+ oEmbed: (props: OEmbedProps) => ,
group: gist,
- links: Links,
+ links: (props: ComponentToRenderProps) => ,
};
return (
diff --git a/src/app/pages/MostReadPage/MostReadPage.jsx b/src/app/pages/MostReadPage/MostReadPage.jsx
index 5b2373f4a38..eee630dc6b4 100644
--- a/src/app/pages/MostReadPage/MostReadPage.jsx
+++ b/src/app/pages/MostReadPage/MostReadPage.jsx
@@ -36,53 +36,53 @@ const MarginWrapper = styled.div`
}
`;
-const MostReadWrapper = ({ children, header }) => (
- <>
- {header}
-
-
- {
+ const {
+ brandName,
+ lang,
+ mostRead: { header },
+ } = useContext(ServiceContext);
+
+ const MostReadWrapper = ({ children }) => (
+ <>
+ {header}
+
+
- {children}
-
-
-
- >
-);
-
-const MostReadPage = ({ pageData }) => {
- const {
- brandName,
- lang,
- mostRead: { header },
- } = useContext(ServiceContext);
+
+ {children}
+
+
+
+ >
+ );
const {
metadata: { atiAnalytics },
@@ -104,7 +104,7 @@ const MostReadPage = ({ pageData }) => {
-
+
diff --git a/src/app/pages/MostReadPage/__snapshots__/index.test.jsx.snap b/src/app/pages/MostReadPage/__snapshots__/index.test.jsx.snap
index 014e59c5504..0769e2c5181 100644
--- a/src/app/pages/MostReadPage/__snapshots__/index.test.jsx.snap
+++ b/src/app/pages/MostReadPage/__snapshots__/index.test.jsx.snap
@@ -471,7 +471,7 @@ exports[`Most Read Page Main should match snapshot for most read page 1`] = `
color: #222222;
-webkit-text-decoration: none;
text-decoration: none;
- display: inline-block;
+ margin-bottom: 0.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
@@ -614,7 +614,7 @@ exports[`Most Read Page Main should match snapshot for most read page 1`] = `
dir="ltr"
>
Teams wey qualify for Afcon 2023 and how things stand for each group
@@ -655,7 +655,7 @@ exports[`Most Read Page Main should match snapshot for most read page 1`] = `
dir="ltr"
>
'We dey hear gospel songs den screaming' - Woman tok of Uganda school attack
@@ -696,7 +696,7 @@ exports[`Most Read Page Main should match snapshot for most read page 1`] = `
dir="ltr"
>
Super Eagles qualify for Nations Cup afta beating Sierra Leone for Monrovia
@@ -737,7 +737,7 @@ exports[`Most Read Page Main should match snapshot for most read page 1`] = `
dir="ltr"
>
Forbes top ten list of highest paid athletes for 2023 and wetin dem earn
@@ -778,7 +778,7 @@ exports[`Most Read Page Main should match snapshot for most read page 1`] = `
dir="ltr"
>
Tins to sabi about 2023 Sierra Leone general election
diff --git a/src/app/pages/TopicPage/fixtures.js b/src/app/pages/TopicPage/fixtures.js
index 4940ec87e0e..5649a2a4b37 100644
--- a/src/app/pages/TopicPage/fixtures.js
+++ b/src/app/pages/TopicPage/fixtures.js
@@ -458,6 +458,7 @@ export const pidginSingleCurationEmptyStringSubheading = {
],
activePage: 1,
pageCount: 5,
+ variantTopicId: null,
metadata: {
analytics: {
name: 'pidgin.topics.c3l19z3k1ert.page',
@@ -630,6 +631,7 @@ export const mundoMultipleCurations = {
],
activePage: null,
pageCount: null,
+ variantTopicId: null,
contentType: 'application/json; charset=utf-8',
};
diff --git a/src/app/pages/utils/getNthCurationByStyleAndProminence/index.ts b/src/app/pages/utils/getNthCurationByStyleAndProminence/index.ts
index 585d27d58fe..372f93d4901 100644
--- a/src/app/pages/utils/getNthCurationByStyleAndProminence/index.ts
+++ b/src/app/pages/utils/getNthCurationByStyleAndProminence/index.ts
@@ -39,5 +39,5 @@ export default ({
`${visualStyle}_${visualProminence}`,
);
- return positions.findIndex((x: number) => x === position) + 1;
+ return positions?.findIndex((x: number) => x === position) + 1;
};
diff --git a/src/app/routes/frontPage/getInitialData/index.js b/src/app/routes/frontPage/getInitialData/index.js
index 81fab7a9cd6..fe0fa38587d 100644
--- a/src/app/routes/frontPage/getInitialData/index.js
+++ b/src/app/routes/frontPage/getInitialData/index.js
@@ -1,5 +1,6 @@
import pipe from 'ramda/src/pipe';
import path from 'ramda/src/path';
+import withRadioSchedule from '#app/routes/utils/withRadioSchedule';
import filterUnknownContentTypes from '#app/routes/utils/sharedDataTransformers/filterUnknownContentTypes';
import filterEmptyGroupItems from '#app/routes/utils/sharedDataTransformers/filterEmptyGroupItems';
import squashTopStories from '#app/routes/utils/sharedDataTransformers/squashTopStories';
@@ -22,6 +23,7 @@ const transformJson = pipe(
filterGroupsWithoutStraplines,
);
+const getRadioScheduleToggle = path(['frontPageRadioSchedule', 'enabled']);
const getRadioSchedulePosition = path(['frontPageRadioSchedule', 'value']);
export default async ({
@@ -40,9 +42,16 @@ export default async ({
getAgent,
});
+ const radioScheduleIsEnabled = getRadioScheduleToggle(toggles);
const radioSchedulePosition = getRadioSchedulePosition(toggles);
- const { json, status } = await pageDataPromise;
+ const { json, status } = radioScheduleIsEnabled
+ ? await withRadioSchedule({
+ pageDataPromise,
+ service,
+ path: pathname,
+ })
+ : await pageDataPromise;
if (!json?.data?.article) {
throw handleError('Front page data is malformed', 500);
diff --git a/src/app/routes/frontPage/getInitialData/index.test.js b/src/app/routes/frontPage/getInitialData/index.test.js
index e7f896ac4e5..e420254d22d 100644
--- a/src/app/routes/frontPage/getInitialData/index.test.js
+++ b/src/app/routes/frontPage/getInitialData/index.test.js
@@ -1,4 +1,5 @@
import frontPageJsonSerbian from '#data/serbian/frontpage/lat.json';
+import radioScheduleJson from '#data/hausa/bbc_hausa_radio/schedule.json';
import { CPS_ASSET as pageType } from '#app/routes/utils/pageTypes';
import * as fetchPageData from '#app/routes/utils/fetchPageData';
import { BFF_FETCH_ERROR } from '#app/lib/logger.const';
@@ -165,4 +166,89 @@ describe('Front Page - Get Initial Data', () => {
status: 500,
});
});
+
+ describe('with Radio Schedule', () => {
+ // Set all radio scheduled dates to the future
+ radioScheduleJson.schedules[2].publishedTimeStart = Date.now() - 100000;
+
+ it('should return data for a page without radio schedule', async () => {
+ const { pageData } = await getInitialData({
+ path: '/serbian/lat',
+ service: 'serbian',
+ variant: 'lat',
+ pageType,
+ getAgent: mockGetAgent,
+ });
+
+ expect(pageData.metadata.language).toEqual('sr-Latn');
+ expect(pageData.metadata.summary).toEqual(
+ 'BBC na srpskom nudi ekskluzivan sadržaj - analitičko, istraživačko i nepristrasno izveštavanje u tekstovima i video prilozima prilagođenim i društvenim mrežama.',
+ );
+ expect(pageData.promo.name).toEqual('Početna strana');
+ expect(pageData.content.groups.length).toBeTruthy();
+
+ expect(pageData.radioScheduleData).toBeUndefined();
+ });
+
+ it('should return data to render a front page with radio schedules', async () => {
+ fetch.mockResponseOnce(JSON.stringify(frontPageJsonSerbian));
+ fetch.mockResponseOnce(JSON.stringify(radioScheduleJson));
+
+ const { pageData } = await getInitialData({
+ path: '/serbian/lat',
+ service: 'serbian',
+ variant: 'lat',
+ pageType,
+ toggles: {
+ frontPageRadioSchedule: {
+ enabled: true,
+ value: 'Features',
+ },
+ },
+ getAgent: mockGetAgent,
+ });
+
+ expect(pageData.content.groups.length).toBeTruthy();
+ expect(pageData.radioScheduleData.length).toBe(4);
+ });
+
+ it('should return data for service with radio schedules, but toggle is disabled', async () => {
+ const { pageData } = await getInitialData({
+ path: '/serbian/lat',
+ service: 'serbian',
+ variant: 'lat',
+ pageType,
+ toggles: {
+ frontPageRadioSchedule: {
+ enabled: false,
+ },
+ },
+ getAgent: mockGetAgent,
+ });
+
+ expect(pageData.content.groups.length).toBeTruthy();
+ expect(pageData.radioScheduleData).toBeUndefined();
+ });
+
+ it('should return page data for misconfigured service without radio schedules, but with radio schedules on front page', async () => {
+ fetch.mockResponseOnce(JSON.stringify(frontPageJsonSerbian));
+ fetch.mockResponseOnce(null);
+
+ const { pageData } = await getInitialData({
+ path: '/serbian/lat',
+ service: 'serbian',
+ variant: 'lat',
+ pageType,
+ toggles: {
+ frontPageRadioSchedule: {
+ enabled: true,
+ },
+ },
+ getAgent: mockGetAgent,
+ });
+
+ expect(pageData.content.groups.length).toBeTruthy();
+ expect(pageData.radioScheduleData).toBeNull();
+ });
+ });
});
diff --git a/src/app/routes/homePage/getInitialData/page-config.ts b/src/app/routes/homePage/getInitialData/page-config.ts
index 421a73edde7..a2a7ae3bb6a 100644
--- a/src/app/routes/homePage/getInitialData/page-config.ts
+++ b/src/app/routes/homePage/getInitialData/page-config.ts
@@ -3,7 +3,7 @@ import { Services } from '../../../models/types/global';
type Envs = 'test' | 'live';
export const HOME_PAGE_CONFIG: {
- [_service in Services]: { [_env in Envs]: string };
+ [service in Services]: { [env in Envs]: string };
} = {
kyrgyz: {
test: 'cm7682qz7v1t',
diff --git a/src/app/routes/onDemandAudio/getInitialData/index.ts b/src/app/routes/onDemandAudio/getInitialData/index.ts
index 37ab93d02ff..b953b2f85b8 100644
--- a/src/app/routes/onDemandAudio/getInitialData/index.ts
+++ b/src/app/routes/onDemandAudio/getInitialData/index.ts
@@ -59,8 +59,8 @@ export default async ({
? await getPodcastExternalLinks(
service,
brandId,
- externalLinkVersionId,
variant,
+ externalLinkVersionId,
)
: [];
return {
diff --git a/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/hindi.js b/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/hindi.js
index f755ed27cd8..d9d50adcc03 100644
--- a/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/hindi.js
+++ b/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/hindi.js
@@ -238,25 +238,6 @@ const externalLinks = {
linkType: 'gaana',
},
],
- p0kjf03y: [
- {
- linkText: 'Spotify',
- linkUrl: 'https://open.spotify.com/show/33zf2Pgpq1w0BXp1Vhe9vz',
- linkType: 'spotify',
- },
- {
- linkText: 'Apple',
- linkUrl:
- 'https://podcasts.apple.com/us/podcast/the-lens-मुकेश-शर्मा-के-साथ/id1791099679',
- linkType: 'apple',
- },
- {
- linkText: 'Jio Saavn',
- linkUrl:
- 'https://www.jiosaavn.com/shows/the-lens-%e0%a4%ae%e0%a5%81%e0%a4%95%e0%a5%87%e0%a4%b6-%e0%a4%b6%e0%a4%b0%e0%a5%8d%e0%a4%ae%e0%a4%be-%e0%a4%95%e0%a5%87-%e0%a4%b8%e0%a4%be%e0%a4%a5/1/ESz7PpxJiiA_',
- linkType: 'gaana',
- },
- ],
},
};
diff --git a/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/index.js b/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/index.js
index dee305e8a5c..5f9a4d9e187 100644
--- a/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/index.js
+++ b/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/index.js
@@ -38,8 +38,8 @@ const getDownloadLink = versionId => ({
export const getPodcastExternalLinks = async (
service,
brandPid,
- versionId,
variant = 'default',
+ versionId,
) => {
try {
const linkData = await podcastExternalLinks[service]();
diff --git a/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/index.test.js b/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/index.test.js
index 1a72396e486..e3da1adc608 100644
--- a/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/index.test.js
+++ b/src/app/routes/onDemandAudio/tempData/podcastExternalLinks/index.test.js
@@ -7,6 +7,7 @@ describe('getPodcastExternalLinks', () => {
const links = await getPodcastExternalLinks(
'hausa',
'p08mlgcb',
+ 'default',
'p0967t2j',
);
const expectedLinks = [
@@ -37,7 +38,12 @@ describe('getPodcastExternalLinks', () => {
});
it('should return rss feed when brand is not found', async () => {
- const otherLinks = await getPodcastExternalLinks('hausa', 'bar', 'h455a');
+ const otherLinks = await getPodcastExternalLinks(
+ 'hausa',
+ 'bar',
+ 'default',
+ 'h455a',
+ );
expect(otherLinks).toEqual([
{
linkText: 'RSS',
@@ -57,8 +63,8 @@ describe('getPodcastExternalLinks', () => {
const links = await getPodcastExternalLinks(
'zhongwen',
'p02pc9xp',
- 'p0967t2j',
'simp',
+ 'p0967t2j',
);
const expectedLinks = [
...zhongwenExternalLinks.simp.p02pc9xp,
@@ -81,8 +87,8 @@ describe('getPodcastExternalLinks', () => {
const links = await getPodcastExternalLinks(
'burmese',
'p02pc9lh',
- 'p0967t2j',
undefined,
+ 'p0967t2j',
);
expect(links[3].linkUrl).toEqual(
'https://open.live.bbc.co.uk/mediaselector/6/redir/version/2.0/mediaset/audio-nondrm-download-low/proto/https/vpid/p0967t2j.mp3',
diff --git a/src/app/routes/topic/getInitialData/index.js b/src/app/routes/topic/getInitialData/index.js
index e0567065b8e..8a929646632 100644
--- a/src/app/routes/topic/getInitialData/index.js
+++ b/src/app/routes/topic/getInitialData/index.js
@@ -35,6 +35,8 @@ export default async ({ service, path: pathname, variant, page, getAgent }) => {
const imageData = data.imageData || null;
+ const scriptSwitchId = data.variantTopicId;
+
return {
status,
pageData: {
@@ -44,6 +46,8 @@ export default async ({ service, path: pathname, variant, page, getAgent }) => {
curations: data.curations,
activePage: data.activePage || 1,
pageCount: data.pageCount,
+ scriptSwitchId,
+ renderScriptSwitch: Boolean(scriptSwitchId),
metadata: {
...data.metadata,
type: 'Topic',
diff --git a/src/app/routes/topic/getInitialData/index.test.js b/src/app/routes/topic/getInitialData/index.test.js
index 5a78bebc84a..36d6c891613 100644
--- a/src/app/routes/topic/getInitialData/index.test.js
+++ b/src/app/routes/topic/getInitialData/index.test.js
@@ -24,10 +24,12 @@ const topicJSON = {
],
activePage: 1,
pageCount: 14,
+ variantTopicId: null,
},
],
activePage: 1,
pageCount: 14,
+ variantTopicId: null,
metadata: {
type: 'Topic',
analytics: {
@@ -87,6 +89,7 @@ describe('get initial data for topic', () => {
expect(curations[0].summaries[0].link).toEqual('mock-link');
expect(curations[0].summaries[0].imageAlt).toEqual('mock-image-alt');
expect(curations[0].summaries[0].id).toEqual('54321');
+ expect(pageData.scriptSwitchId).toBeNull();
expect(pageData.activePage).toEqual(1);
expect(pageData.pageCount).toEqual(14);
});
diff --git a/src/app/routes/topic/getInitialData/page-config.ts b/src/app/routes/topic/getInitialData/page-config.ts
index 02ad2d5f76f..5c09a74c351 100644
--- a/src/app/routes/topic/getInitialData/page-config.ts
+++ b/src/app/routes/topic/getInitialData/page-config.ts
@@ -3,7 +3,7 @@ import { Environments } from '../../../models/types/global';
export type TopicPagePaths = '/persian/afghanistan';
export const TOPIC_PAGE_CONFIG: {
- [_path in TopicPagePaths]: { [_env in Environments]: string };
+ [path in TopicPagePaths]: { [env in Environments]: string };
} = {
'/persian/afghanistan': {
local: 'crezq2dg9zwt',
diff --git a/src/app/routes/utils/constructPageFetchUrl/index.test.ts b/src/app/routes/utils/constructPageFetchUrl/index.test.ts
index 54464ba3b9e..695ef006871 100644
--- a/src/app/routes/utils/constructPageFetchUrl/index.test.ts
+++ b/src/app/routes/utils/constructPageFetchUrl/index.test.ts
@@ -109,7 +109,7 @@ describe('constructPageFetchUrl', () => {
${TOPIC_PAGE} | ${null} | ${null} | ${'local'} | ${'/ukrainian/topics/c0000000000t'} | ${'http://localhost/ukrainian/topics/c0000000000t'}
${TOPIC_PAGE} | ${null} | ${null} | ${'test'} | ${'/ukrainian/topics/c0000000000t'} | ${'https://mock-bff-path/?id=c0000000000t&service=ukrainian&pageType=topic&serviceEnv=test'}
${TOPIC_PAGE} | ${null} | ${null} | ${'live'} | ${'/ukrainian/topics/c0000000000t'} | ${'https://mock-bff-path/?id=c0000000000t&service=ukrainian&pageType=topic&serviceEnv=live'}
- ${TOPIC_PAGE} | ${null} | ${'ru-UA'} | ${'local'} | ${'/ukrainian/topics/c0000000000t'} | ${'http://localhost/ukrainian/topics/c0000000000t/ru-UA'}
+ ${TOPIC_PAGE} | ${null} | ${'ru-UA'} | ${'local'} | ${'/ukrainian/topics/c0000000000t'} | ${'http://localhost/ukrainian/ru-UA/topics/c0000000000t'}
${TOPIC_PAGE} | ${null} | ${'ru-UA'} | ${'test'} | ${'/ukrainian/topics/c0000000000t'} | ${'https://mock-bff-path/?id=c0000000000t&service=ukrainian&pageType=topic&variant=ru-UA&serviceEnv=test'}
${TOPIC_PAGE} | ${null} | ${'ru-UA'} | ${'live'} | ${'/ukrainian/topics/c0000000000t'} | ${'https://mock-bff-path/?id=c0000000000t&service=ukrainian&pageType=topic&variant=ru-UA&serviceEnv=live'}
${TOPIC_PAGE} | ${'persian'} | ${null} | ${'local'} | ${'/persian/afghanistan'} | ${'http://localhost/persian/topics/crezq2dg9zwt'}
@@ -121,12 +121,6 @@ describe('constructPageFetchUrl', () => {
${TOPIC_PAGE} | ${'persian'} | ${null} | ${'local'} | ${'/persian/topics/c00000000000t'} | ${'http://localhost/persian/topics/c00000000000t'}
${TOPIC_PAGE} | ${'persian'} | ${null} | ${'test'} | ${'/persian/topics/c00000000000t'} | ${'https://mock-bff-path/?id=c00000000000t&service=persian&pageType=topic&serviceEnv=test'}
${TOPIC_PAGE} | ${'persian'} | ${null} | ${'live'} | ${'/persian/topics/c00000000000t'} | ${'https://mock-bff-path/?id=c00000000000t&service=persian&pageType=topic&serviceEnv=live'}
- ${TOPIC_PAGE} | ${'zhongwen'} | ${'trad'} | ${'local'} | ${'/zhongwen/topics/cpydz21p02et/trad'} | ${'http://localhost/zhongwen/topics/cpydz21p02et/trad'}
- ${TOPIC_PAGE} | ${'zhongwen'} | ${'simp'} | ${'local'} | ${'/zhongwen/topics/c4vmr03pyn6t/simp'} | ${'http://localhost/zhongwen/topics/c4vmr03pyn6t/simp'}
- ${TOPIC_PAGE} | ${'zhongwen'} | ${'trad'} | ${'test'} | ${'/zhongwen/topics/cpydz21p02et/trad'} | ${'https://mock-bff-path/?id=cpydz21p02et&service=zhongwen&pageType=topic&variant=trad&serviceEnv=test'}
- ${TOPIC_PAGE} | ${'zhongwen'} | ${'simp'} | ${'test'} | ${'/zhongwen/topics/c4vmr03pyn6t/simp'} | ${'https://mock-bff-path/?id=c4vmr03pyn6t&service=zhongwen&pageType=topic&variant=simp&serviceEnv=test'}
- ${TOPIC_PAGE} | ${'zhongwen'} | ${'trad'} | ${'live'} | ${'/zhongwen/topics/cpydz21p02et/trad'} | ${'https://mock-bff-path/?id=cpydz21p02et&service=zhongwen&pageType=topic&variant=trad&serviceEnv=live'}
- ${TOPIC_PAGE} | ${'zhongwen'} | ${'simp'} | ${'live'} | ${'/zhongwen/topics/c4vmr03pyn6t/simp'} | ${'https://mock-bff-path/?id=c4vmr03pyn6t&service=zhongwen&pageType=topic&variant=simp&serviceEnv=live'}
${UGC_PAGE} | ${'mundo'} | ${null} | ${'local'} | ${'/u50853489'} | ${'http://localhost/api/local/mundo/send/u50853489'}
${TV_PAGE} | ${'hausa'} | ${null} | ${'local'} | ${'/hausa/bbc_hausa_tv/tv/w172yjj7rfhxp1p'} | ${'http://localhost/hausa/bbc_hausa_tv/tv/w172yjj7rfhxp1p'}
${TV_PAGE} | ${'hindi'} | ${null} | ${'local'} | ${'/hindi/bbc_hindi_tv/tv_programmes/w13xttlw'} | ${'http://localhost/hindi/bbc_hindi_tv/tv_programmes/w13xttlw'}
diff --git a/src/app/routes/utils/constructPageFetchUrl/index.ts b/src/app/routes/utils/constructPageFetchUrl/index.ts
index 4e2ec0a105f..ce142ed33e4 100644
--- a/src/app/routes/utils/constructPageFetchUrl/index.ts
+++ b/src/app/routes/utils/constructPageFetchUrl/index.ts
@@ -250,7 +250,7 @@ const constructPageFetchUrl = ({
break;
case TOPIC_PAGE: {
const variantPath = variant ? `/${variant}` : '';
- fetchUrl = Url(`/${service}/topics/${id}${variantPath}`);
+ fetchUrl = Url(`/${service}${variantPath}/topics/${id}`);
break;
}
case LIVE_PAGE: {
diff --git a/src/app/routes/utils/getPlaceholderImageUrl/index.js b/src/app/routes/utils/getPlaceholderImageUrl/index.js
new file mode 100644
index 00000000000..28e5013730f
--- /dev/null
+++ b/src/app/routes/utils/getPlaceholderImageUrl/index.js
@@ -0,0 +1,18 @@
+import is from 'ramda/src/is';
+import { getEnvConfig } from '#app/lib/utilities/getEnvConfig';
+
+export const FALLBACK_PLACEHOLDER_IMAGE_URL = `${
+ getEnvConfig().SIMORGH_PUBLIC_STATIC_ASSETS_ORIGIN
+}${
+ getEnvConfig().SIMORGH_PUBLIC_STATIC_ASSETS_PATH
+}images/media_placeholder.png`;
+
+const getPlaceholderImageUrl = imageUrl => {
+ if (imageUrl && is(String, imageUrl)) {
+ return `https://${imageUrl.replace('$recipe', '1024x576')}`;
+ }
+
+ return FALLBACK_PLACEHOLDER_IMAGE_URL;
+};
+
+export default getPlaceholderImageUrl;
diff --git a/src/app/routes/utils/getPlaceholderImageUrl/index.test.js b/src/app/routes/utils/getPlaceholderImageUrl/index.test.js
new file mode 100644
index 00000000000..c3d5581ac93
--- /dev/null
+++ b/src/app/routes/utils/getPlaceholderImageUrl/index.test.js
@@ -0,0 +1,17 @@
+import getPlaceholderImageUrl from '.';
+
+describe('generatePlaceholderImageUrl', () => {
+ test('should generate correct image url when url provided', () => {
+ const url = getPlaceholderImageUrl(
+ 'ichef.bbci.co.uk/images/ic/$recipe/p063j1dv.jpg',
+ );
+ expect(url).toEqual(
+ 'https://ichef.bbci.co.uk/images/ic/1024x576/p063j1dv.jpg',
+ );
+ });
+
+ test('should use placeholder when image not provided', () => {
+ const url = getPlaceholderImageUrl(null);
+ expect(url).toEqual('http://localhost:7080/images/media_placeholder.png');
+ });
+});
diff --git a/src/app/routes/utils/getRadioService/index.js b/src/app/routes/utils/getRadioService/index.js
new file mode 100644
index 00000000000..ed2517dff71
--- /dev/null
+++ b/src/app/routes/utils/getRadioService/index.js
@@ -0,0 +1,17 @@
+const RADIO_SERVICE_MAPPINGS = {
+ indonesia: 'indonesian',
+ persian: 'dari',
+ afaanoromoo: 'oromo',
+ bengali: 'bangla',
+};
+
+export default ({ service, pathname }) => {
+ const isPodcast = pathname.includes('podcasts');
+ const isPersianRadioMasterBrand = pathname.includes('bbc_persian_radio');
+
+ if (service === 'persian' && (isPersianRadioMasterBrand || isPodcast)) {
+ return 'persian';
+ }
+
+ return RADIO_SERVICE_MAPPINGS[service] || service;
+};
diff --git a/src/app/routes/utils/getRadioService/index.test.js b/src/app/routes/utils/getRadioService/index.test.js
new file mode 100644
index 00000000000..a98d888766a
--- /dev/null
+++ b/src/app/routes/utils/getRadioService/index.test.js
@@ -0,0 +1,69 @@
+import getRadioService from '.';
+
+it('should return "indonesian" for the indonesia service', () => {
+ const actual = getRadioService({
+ service: 'indonesia',
+ pathname: 'bbc_indonesian_radio',
+ });
+ const expected = 'indonesian';
+
+ expect(actual).toEqual(expected);
+});
+
+it('should return "dari" for the persian service', () => {
+ const actual = getRadioService({
+ service: 'persian',
+ pathname: 'bbc_dari_radio',
+ });
+ const expected = 'dari';
+
+ expect(actual).toEqual(expected);
+});
+
+it('should return "persian" for the persian service when pathname includes bbc_persian_radio', () => {
+ const actual = getRadioService({
+ service: 'persian',
+ pathname: 'bbc_persian_radio',
+ });
+ const expected = 'persian';
+
+ expect(actual).toEqual(expected);
+});
+
+it('should return "oromo" for the afaanoromoo service', () => {
+ const actual = getRadioService({
+ service: 'afaanoromoo',
+ pathname: 'bbc_afaanoromoo_radio',
+ });
+ const expected = 'oromo';
+
+ expect(actual).toEqual(expected);
+});
+
+it('should return "bangla" for the bengali service', () => {
+ const actual = getRadioService({
+ service: 'bengali',
+ pathname: 'bbc_bangla_radio',
+ });
+ const expected = 'bangla';
+
+ expect(actual).toEqual(expected);
+});
+
+it('should return service passed in when there is no mapping', () => {
+ const actual = getRadioService({
+ service: 'pidgin',
+ pathname: 'mock-pathname',
+ });
+
+ expect(actual).toEqual('pidgin');
+});
+
+it('should return persian for podcast when there is no bbc_persian_radio masterbrand', () => {
+ const actual = getRadioService({
+ service: 'persian',
+ pathname: '/persian/podcasts/example',
+ });
+
+ expect(actual).toEqual('persian');
+});
diff --git a/src/app/routes/utils/pageTypes.ts b/src/app/routes/utils/pageTypes.ts
index 7fbfa0e2d4d..0bf58b78254 100644
--- a/src/app/routes/utils/pageTypes.ts
+++ b/src/app/routes/utils/pageTypes.ts
@@ -1,6 +1,7 @@
export const ARTICLE_PAGE = 'article' as const;
export const MEDIA_ARTICLE_PAGE = 'mediaArticle' as const;
export const FRONT_PAGE = 'frontPage' as const;
+export const MEDIA_PAGE = 'media' as const;
export const MOST_READ_PAGE = 'mostRead' as const;
export const ERROR_PAGE = 'error' as const;
export const FEATURE_INDEX_PAGE = 'FIX' as const;
diff --git a/src/app/routes/utils/regex/index.test.js b/src/app/routes/utils/regex/index.test.js
index 2a304ee71d9..097c29a2149 100644
--- a/src/app/routes/utils/regex/index.test.js
+++ b/src/app/routes/utils/regex/index.test.js
@@ -562,26 +562,3 @@ describe('frontPage -> homePage migration', () => {
shouldNotMatchInvalidRoutes(liveFrontPageRoutes, homePageRegex);
});
});
-
-describe('topicPath', () => {
- const validRoutes = [
- '/zhongwen/topics/cd6qem06z92t/trad',
- '/zhongwen/topics/c1ez1k4emn0t/trad',
- '/serbian/topics/cr50vdy9q6wt/lat',
- '/serbian/topics/c2lej05e1eqt/lat',
- '/pidgin/topics/c2dwqd1zr92t',
- ];
- shouldMatchValidRoutes(validRoutes, topicPath);
-
- const invalidRoutes = [
- '/serbian/lat/topics/c2lej05e1eqt',
- '/serbian/lat/topics/c2lej05qwesae1eqt',
- '/zhongwen/c1ez1k4emn0t',
- '/zhongwen/trad/topics',
- '/hindi/topic/c5jje4ejkqv',
- '/mundo/topic/',
- '/serbian/topic/c5jje4ejkqvo/foobar',
- '/urdu/topic/c5jje4ejkqvo/.amp',
- ];
- shouldNotMatchInvalidRoutes(invalidRoutes, topicPath);
-});
diff --git a/src/app/routes/utils/regex/utils/__snapshots__/index.test.js.snap b/src/app/routes/utils/regex/utils/__snapshots__/index.test.js.snap
index d6ece1b3e72..75a2cdd36ee 100644
--- a/src/app/routes/utils/regex/utils/__snapshots__/index.test.js.snap
+++ b/src/app/routes/utils/regex/utils/__snapshots__/index.test.js.snap
@@ -82,4 +82,4 @@ exports[`regex utils snapshots should create expected regex from getSwRegex when
exports[`regex utils snapshots should create expected regex from getTopicPageRegex when isLive = false 1`] = `"/:service(afaanoromoo|afrique|amharic|arabic|archive|azeri|bengali|burmese|cymrufyw|gahuza|gujarati|hausa|hindi|igbo|indonesia|japanese|korean|kyrgyz|marathi|mundo|naidheachdan|nepali|news|newsround|pashto|persian|pidgin|portuguese|punjabi|russian|scotland|serbian|sinhala|somali|sport|swahili|tamil|telugu|thai|tigrinya|turkce|ukchina|ukrainian|urdu|uzbek|vietnamese|ws|yoruba|zhongwen)/topics/:id([a-z0-9]+)?:variant(/simp|/trad|/cyr|/lat)?:lite(.lite)?"`;
-exports[`regex utils snapshots should create expected regex from getTopicPageRegex when isLive = true 1`] = `"/:service(afaanoromoo|afrique|amharic|arabic|archive|azeri|bengali|burmese|cymrufyw|gahuza|gujarati|hausa|hindi|igbo|indonesia|japanese|korean|kyrgyz|marathi|mundo|naidheachdan|nepali|news|newsround|pashto|persian|pidgin|portuguese|punjabi|russian|scotland|serbian|sinhala|somali|sport|swahili|tamil|telugu|thai|tigrinya|turkce|ukchina|ukrainian|urdu|uzbek|vietnamese|ws|yoruba|zhongwen)/topics/:id([a-z0-9]+)?:variant(/simp|/trad|/cyr|/lat)?:lite(.lite)?"`;
+exports[`regex utils snapshots should create expected regex from getTopicPageRegex when isLive = true 1`] = `"/:service(afaanoromoo|afrique|amharic|arabic|archive|azeri|bengali|burmese|cymrufyw|gahuza|gujarati|hausa|hindi|igbo|indonesia|japanese|korean|kyrgyz|marathi|mundo|naidheachdan|nepali|news|newsround|pashto|persian|pidgin|portuguese|punjabi|russian|scotland|serbian|sinhala|somali|sport|swahili|tamil|telugu|thai|tigrinya|turkce|ukchina|ukrainian|urdu|uzbek|vietnamese|ws|yoruba|zhongwen):variant(/simp|/trad|/cyr|/lat)?/topics/:id([a-z0-9]+)?:lite(.lite)?"`;
diff --git a/src/app/routes/utils/regex/utils/index.js b/src/app/routes/utils/regex/utils/index.js
index 1a5188d593d..6b17668f034 100644
--- a/src/app/routes/utils/regex/utils/index.js
+++ b/src/app/routes/utils/regex/utils/index.js
@@ -146,7 +146,7 @@ export const getOnDemandTvRegex = services => {
export const getTopicPageRegex = services => {
const serviceRegex = getServiceRegex(services);
- return `/:service(${serviceRegex})/topics/:id(${topicIdRegex})?:variant(${variantRegex})?:lite(${liteRegex})?`;
+ return `/:service(${serviceRegex}):variant(${variantRegex})?/topics/:id(${topicIdRegex})?:lite(${liteRegex})?`;
};
export const getErrorPageRegex = services => {
diff --git a/src/app/routes/utils/withRadioSchedule/index.js b/src/app/routes/utils/withRadioSchedule/index.js
new file mode 100644
index 00000000000..eb67cb9bc48
--- /dev/null
+++ b/src/app/routes/utils/withRadioSchedule/index.js
@@ -0,0 +1,65 @@
+import nodeLogger from '#lib/logger.node';
+import { getRadioScheduleEndpoint } from '#lib/utilities/getUrlHelpers/getRadioSchedulesUrls';
+import { getQueryString } from '#lib/utilities/urlParser';
+import processRadioSchedule from '#containers/RadioSchedule/utilities/processRadioSchedule';
+import { RADIO_SCHEDULE_FETCH_ERROR } from '#lib/logger.const';
+import { getEnvConfig } from '#app/lib/utilities/getEnvConfig';
+
+const logger = nodeLogger(__filename);
+
+const fetchData = url => {
+ const handleResponse = async response => {
+ const { status } = response;
+
+ if (!response.ok) {
+ throw Error(
+ `Unexpected upstream response (HTTP status code ${status}) when requesting ${url}`,
+ );
+ }
+
+ return response.json();
+ };
+
+ const handleError = e => {
+ const error = e && e.toString();
+ logger.error(RADIO_SCHEDULE_FETCH_ERROR, { error });
+ };
+
+ return fetch(url).then(handleResponse).catch(handleError);
+};
+
+const withRadioSchedule = async ({
+ pageDataPromise,
+ service,
+ path,
+ radioService,
+}) => {
+ const { SIMORGH_APP_ENV, SIMORGH_BASE_URL } = getEnvConfig();
+
+ const radioScheduleUrl = getRadioScheduleEndpoint({
+ service,
+ radioService,
+ env: SIMORGH_APP_ENV,
+ queryString: getQueryString(path),
+ baseUrl: SIMORGH_BASE_URL,
+ });
+ const radioSchedulePromise = fetchData(radioScheduleUrl);
+
+ const [{ json: pageData, ...rest }, radioScheduleJson] = await Promise.all([
+ pageDataPromise,
+ radioSchedulePromise,
+ ]);
+
+ const radioScheduleData = processRadioSchedule(
+ radioScheduleJson,
+ service,
+ Date.now(),
+ );
+
+ return {
+ ...rest,
+ ...(pageData && { json: { ...pageData, radioScheduleData } }),
+ };
+};
+
+export default withRadioSchedule;
diff --git a/src/app/routes/utils/withRadioSchedule/index.test.js b/src/app/routes/utils/withRadioSchedule/index.test.js
new file mode 100644
index 00000000000..bc78ec1959c
--- /dev/null
+++ b/src/app/routes/utils/withRadioSchedule/index.test.js
@@ -0,0 +1,117 @@
+import loggerMock from '#testHelpers/loggerMock';
+import { RADIO_SCHEDULE_FETCH_ERROR } from '#lib/logger.const';
+import radioScheduleJson from '#data/hausa/bbc_hausa_radio/schedule.json';
+import withRadioSchedule from '.';
+
+const pageDataPromise = Promise.resolve({
+ json: { foo: 'bar' },
+ status: 200,
+});
+
+const service = 'hausa';
+const path = 'http://localhost/mock-frontpage-path';
+
+describe('withRadioSchedule', () => {
+ beforeEach(() => {
+ process.env.SIMORGH_BASE_URL = 'http://localhost';
+ });
+
+ afterEach(() => {
+ jest.resetAllMocks();
+ fetch.resetMocks();
+ });
+
+ describe('page data and radio schedule promises resolve with data', () => {
+ it('should merge radio schedule data into page data', async () => {
+ fetch.mockResponse(JSON.stringify(radioScheduleJson));
+
+ const {
+ json: { radioScheduleData, foo },
+ ...rest
+ } = await withRadioSchedule({
+ pageDataPromise,
+ service,
+ path,
+ });
+
+ expect(radioScheduleData.length).toBeTruthy();
+ expect(foo).toBe('bar');
+ expect(rest.status).toBe(200);
+ });
+ });
+
+ describe('if either page data or radio schedule fetch returns non-ok status code', () => {
+ it('should not merge radio schedule data into page data if radio schedule fetch returns non-ok status code', async () => {
+ fetch.mockResponse(JSON.stringify({ status: 404 }));
+
+ const {
+ json: { radioScheduleData, foo },
+ ...rest
+ } = await withRadioSchedule({ pageDataPromise, service, path });
+
+ expect(radioScheduleData).toBeUndefined();
+ expect(foo).toBe('bar');
+ expect(rest.status).toBe(200);
+ });
+
+ it('should not merge radio schedule data into page data if page data fetch returns non-ok status code', async () => {
+ fetch.mockResponse(JSON.stringify(radioScheduleJson));
+
+ const failedPageDataPromise = Promise.resolve({
+ status: 404,
+ });
+
+ const { json, status } = await withRadioSchedule({
+ pageDataPromise: failedPageDataPromise,
+ service,
+ path,
+ });
+
+ expect(json).toBeUndefined();
+ expect(status).toBe(404);
+ });
+
+ it('should not merge radio schedule data into page data if both page data and radio schedule return non-ok status code', async () => {
+ fetch.mockResponse(JSON.stringify({ status: 404 }));
+
+ const failedPageDataPromise = Promise.resolve({
+ status: 404,
+ });
+
+ const { json, status } = await withRadioSchedule({
+ pageDataPromise: failedPageDataPromise,
+ service,
+ path,
+ });
+
+ expect(json).toBeUndefined();
+ expect(status).toBe(404);
+ });
+
+ describe('fetch API promises rejected', () => {
+ it('should return page data without radio schedules if radio schedule fetch promise is rejected', async () => {
+ fetch.mockReject(Error('Server not found'));
+
+ const {
+ json: { radioScheduleData, foo },
+ ...rest
+ } = await withRadioSchedule({
+ pageDataPromise,
+ service,
+ path,
+ });
+
+ expect(radioScheduleData).toBeNull();
+ expect(foo).toBe('bar');
+ expect(rest.status).toBe(200);
+
+ expect(loggerMock.error).toHaveBeenCalledWith(
+ RADIO_SCHEDULE_FETCH_ERROR,
+ {
+ error: 'Error: Server not found',
+ },
+ );
+ });
+ });
+ });
+});
diff --git a/src/global.d.ts b/src/global.d.ts
index 4a9a61f0cc4..1b34f28d0b7 100644
--- a/src/global.d.ts
+++ b/src/global.d.ts
@@ -1,16 +1,9 @@
-import { ReverbClient } from '#models/types/eventTracking';
-import { BumpType } from '#app/components/MediaLoader/types';
-
declare global {
interface Window {
- __reverb: {
- __reverbLoadedPromise: Promise;
- };
requirejs: (
bumpVersion: string[],
callback: (Bump: BumpType) => void,
) => void;
- mediaPlayers: Record;
dotcom: {
ads: {
getAdTag: () => Promise;
diff --git a/src/integration/pages/articles/hausa/__snapshots__/__snapshots__/amp.test.js.snap b/src/integration/pages/articles/hausa/__snapshots__/__snapshots__/amp.test.js.snap
index 0205291777f..f4ad39d6ff8 100644
--- a/src/integration/pages/articles/hausa/__snapshots__/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/articles/hausa/__snapshots__/__snapshots__/amp.test.js.snap
@@ -145,7 +145,7 @@ exports[`AMP Articles Footer Anchors should match text and url 7`] = `
exports[`AMP Articles Footer Anchors should match text and url 8`] = `
{
- "text": "Labaran BBC a sauran harsuna",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -166,7 +166,7 @@ exports[`AMP Articles Footer Cookie Settings Button should match text and on han
exports[`AMP Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/hausa"`;
-exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
+exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
exports[`AMP Articles Header I can see the branding 1`] = `"BBC News, Hausa"`;
diff --git a/src/integration/pages/articles/hausa/__snapshots__/__snapshots__/canonical.test.js.snap b/src/integration/pages/articles/hausa/__snapshots__/__snapshots__/canonical.test.js.snap
index de99bd21dd0..f52de3c522f 100644
--- a/src/integration/pages/articles/hausa/__snapshots__/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/articles/hausa/__snapshots__/__snapshots__/canonical.test.js.snap
@@ -87,7 +87,7 @@ exports[`Canonical Articles Footer Anchors should match text and url 7`] = `
exports[`Canonical Articles Footer Anchors should match text and url 8`] = `
{
- "text": "Labaran BBC a sauran harsuna",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -101,7 +101,7 @@ exports[`Canonical Articles Footer Anchors should match text and url 9`] = `
exports[`Canonical Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/hausa"`;
-exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
+exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
exports[`Canonical Articles Header I can see the branding 1`] = `"BBC News, Hausa"`;
diff --git a/src/integration/pages/articles/news/__snapshots__/amp.test.js.snap b/src/integration/pages/articles/news/__snapshots__/amp.test.js.snap
index 3c562ed5d38..1f9e2e39209 100644
--- a/src/integration/pages/articles/news/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/articles/news/__snapshots__/amp.test.js.snap
@@ -166,7 +166,7 @@ exports[`AMP Articles Footer Cookie Settings Button should match text and on han
exports[`AMP Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/news"`;
-exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2025 BBC. The BBC is not responsible for the content of external sites. Read about our approach to external linking."`;
+exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2024 BBC. The BBC is not responsible for the content of external sites. Read about our approach to external linking."`;
exports[`AMP Articles Header I can see the branding 1`] = `"BBC News"`;
diff --git a/src/integration/pages/articles/news/__snapshots__/canonical.test.js.snap b/src/integration/pages/articles/news/__snapshots__/canonical.test.js.snap
index 4aabb95a1cb..746982e6a35 100644
--- a/src/integration/pages/articles/news/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/articles/news/__snapshots__/canonical.test.js.snap
@@ -128,7 +128,7 @@ exports[`Canonical Articles Footer Anchors should match text and url 9`] = `
exports[`Canonical Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/news"`;
-exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2025 BBC. The BBC is not responsible for the content of external sites. Read about our approach to external linking."`;
+exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2024 BBC. The BBC is not responsible for the content of external sites. Read about our approach to external linking."`;
exports[`Canonical Articles Header I can see the branding 1`] = `"BBC News"`;
diff --git a/src/integration/pages/articles/persian/__snapshots__/amp.test.js.snap b/src/integration/pages/articles/persian/__snapshots__/amp.test.js.snap
index cc05e6550d1..4ef13ceb332 100644
--- a/src/integration/pages/articles/persian/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/articles/persian/__snapshots__/amp.test.js.snap
@@ -145,7 +145,7 @@ exports[`AMP Articles Footer Anchors should match text and url 7`] = `
exports[`AMP Articles Footer Anchors should match text and url 8`] = `
{
- "text": "اخبار به زبانهای دیگر",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -166,7 +166,7 @@ exports[`AMP Articles Footer Cookie Settings Button should match text and on han
exports[`AMP Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/persian"`;
-exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2025 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
+exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2024 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
exports[`AMP Articles Header I can see the branding 1`] = `"BBC News, فارسی"`;
@@ -185,76 +185,83 @@ exports[`AMP Articles Header Navigation link should match text and url 2`] = `
`;
exports[`AMP Articles Header Navigation link should match text and url 3`] = `
+{
+ "text": "انتخابات آمریکا",
+ "url": "/persian/topics/cj1gj22k6z6t",
+}
+`;
+
+exports[`AMP Articles Header Navigation link should match text and url 4`] = `
{
"text": "پخش زنده",
"url": "/persian/media-49522521",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 4`] = `
+exports[`AMP Articles Header Navigation link should match text and url 5`] = `
{
"text": "ویدیو",
"url": "/persian/topics/c6z7mnr559gt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 5`] = `
+exports[`AMP Articles Header Navigation link should match text and url 6`] = `
{
"text": "تلویزیون",
"url": "/persian/tv-and-radio-37434377",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 6`] = `
+exports[`AMP Articles Header Navigation link should match text and url 7`] = `
{
"text": "ايران",
"url": "/persian/topics/ckdxnwvwwjnt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 7`] = `
+exports[`AMP Articles Header Navigation link should match text and url 8`] = `
{
"text": "افغانستان",
"url": "/persian/afghanistan",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 8`] = `
+exports[`AMP Articles Header Navigation link should match text and url 9`] = `
{
"text": "جهان",
"url": "/persian/topics/c1d8ye58xl8t",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 9`] = `
+exports[`AMP Articles Header Navigation link should match text and url 10`] = `
{
"text": "هنر",
"url": "/persian/topics/c9wpm0epm45t",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 10`] = `
+exports[`AMP Articles Header Navigation link should match text and url 11`] = `
{
"text": "ورزش",
"url": "/persian/topics/cnq6879k7yjt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 11`] = `
+exports[`AMP Articles Header Navigation link should match text and url 12`] = `
{
"text": "اقتصاد",
"url": "/persian/topics/cl8l9mvlllqt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 12`] = `
+exports[`AMP Articles Header Navigation link should match text and url 13`] = `
{
"text": "دانش",
"url": "/persian/topics/ckdxnwr4r1yt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 13`] = `
+exports[`AMP Articles Header Navigation link should match text and url 14`] = `
{
"text": "فراتر از خبر",
"url": "/persian/topics/cxr3ex12k6et",
diff --git a/src/integration/pages/articles/persian/__snapshots__/canonical.test.js.snap b/src/integration/pages/articles/persian/__snapshots__/canonical.test.js.snap
index f55f1592757..8967a4e460d 100644
--- a/src/integration/pages/articles/persian/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/articles/persian/__snapshots__/canonical.test.js.snap
@@ -105,7 +105,7 @@ exports[`Canonical Articles Footer Anchors should match text and url 7`] = `
exports[`Canonical Articles Footer Anchors should match text and url 8`] = `
{
- "text": "اخبار به زبانهای دیگر",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -119,7 +119,7 @@ exports[`Canonical Articles Footer Anchors should match text and url 9`] = `
exports[`Canonical Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/persian"`;
-exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2025 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
+exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2024 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
exports[`Canonical Articles Header I can see the branding 1`] = `"BBC News, فارسی"`;
@@ -138,76 +138,83 @@ exports[`Canonical Articles Header Navigation link should match text and url 2`]
`;
exports[`Canonical Articles Header Navigation link should match text and url 3`] = `
+{
+ "text": "انتخابات آمریکا",
+ "url": "/persian/topics/cj1gj22k6z6t",
+}
+`;
+
+exports[`Canonical Articles Header Navigation link should match text and url 4`] = `
{
"text": "پخش زنده",
"url": "/persian/media-49522521",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 4`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 5`] = `
{
"text": "ویدیو",
"url": "/persian/topics/c6z7mnr559gt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 5`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 6`] = `
{
"text": "تلویزیون",
"url": "/persian/tv-and-radio-37434377",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 6`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 7`] = `
{
"text": "ايران",
"url": "/persian/topics/ckdxnwvwwjnt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 7`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 8`] = `
{
"text": "افغانستان",
"url": "/persian/afghanistan",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 8`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 9`] = `
{
"text": "جهان",
"url": "/persian/topics/c1d8ye58xl8t",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 9`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 10`] = `
{
"text": "هنر",
"url": "/persian/topics/c9wpm0epm45t",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 10`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 11`] = `
{
"text": "ورزش",
"url": "/persian/topics/cnq6879k7yjt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 11`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 12`] = `
{
"text": "اقتصاد",
"url": "/persian/topics/cl8l9mvlllqt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 12`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 13`] = `
{
"text": "دانش",
"url": "/persian/topics/ckdxnwr4r1yt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 13`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 14`] = `
{
"text": "فراتر از خبر",
"url": "/persian/topics/cxr3ex12k6et",
diff --git a/src/integration/pages/articles/persianMediaPlayer/__snapshots__/amp.test.js.snap b/src/integration/pages/articles/persianMediaPlayer/__snapshots__/amp.test.js.snap
index 5a1841a98e9..dc648422156 100644
--- a/src/integration/pages/articles/persianMediaPlayer/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/articles/persianMediaPlayer/__snapshots__/amp.test.js.snap
@@ -145,7 +145,7 @@ exports[`AMP Articles Footer Anchors should match text and url 7`] = `
exports[`AMP Articles Footer Anchors should match text and url 8`] = `
{
- "text": "اخبار به زبانهای دیگر",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -166,7 +166,7 @@ exports[`AMP Articles Footer Cookie Settings Button should match text and on han
exports[`AMP Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/persian"`;
-exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2025 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
+exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2024 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
exports[`AMP Articles Header I can see the branding 1`] = `"BBC News, فارسی"`;
@@ -185,76 +185,83 @@ exports[`AMP Articles Header Navigation link should match text and url 2`] = `
`;
exports[`AMP Articles Header Navigation link should match text and url 3`] = `
+{
+ "text": "انتخابات آمریکا",
+ "url": "/persian/topics/cj1gj22k6z6t",
+}
+`;
+
+exports[`AMP Articles Header Navigation link should match text and url 4`] = `
{
"text": "پخش زنده",
"url": "/persian/media-49522521",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 4`] = `
+exports[`AMP Articles Header Navigation link should match text and url 5`] = `
{
"text": "ویدیو",
"url": "/persian/topics/c6z7mnr559gt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 5`] = `
+exports[`AMP Articles Header Navigation link should match text and url 6`] = `
{
"text": "تلویزیون",
"url": "/persian/tv-and-radio-37434377",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 6`] = `
+exports[`AMP Articles Header Navigation link should match text and url 7`] = `
{
"text": "ايران",
"url": "/persian/topics/ckdxnwvwwjnt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 7`] = `
+exports[`AMP Articles Header Navigation link should match text and url 8`] = `
{
"text": "افغانستان",
"url": "/persian/afghanistan",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 8`] = `
+exports[`AMP Articles Header Navigation link should match text and url 9`] = `
{
"text": "جهان",
"url": "/persian/topics/c1d8ye58xl8t",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 9`] = `
+exports[`AMP Articles Header Navigation link should match text and url 10`] = `
{
"text": "هنر",
"url": "/persian/topics/c9wpm0epm45t",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 10`] = `
+exports[`AMP Articles Header Navigation link should match text and url 11`] = `
{
"text": "ورزش",
"url": "/persian/topics/cnq6879k7yjt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 11`] = `
+exports[`AMP Articles Header Navigation link should match text and url 12`] = `
{
"text": "اقتصاد",
"url": "/persian/topics/cl8l9mvlllqt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 12`] = `
+exports[`AMP Articles Header Navigation link should match text and url 13`] = `
{
"text": "دانش",
"url": "/persian/topics/ckdxnwr4r1yt",
}
`;
-exports[`AMP Articles Header Navigation link should match text and url 13`] = `
+exports[`AMP Articles Header Navigation link should match text and url 14`] = `
{
"text": "فراتر از خبر",
"url": "/persian/topics/cxr3ex12k6et",
diff --git a/src/integration/pages/articles/persianMediaPlayer/__snapshots__/canonical.test.js.snap b/src/integration/pages/articles/persianMediaPlayer/__snapshots__/canonical.test.js.snap
index 71bee75b634..cb3765bf458 100644
--- a/src/integration/pages/articles/persianMediaPlayer/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/articles/persianMediaPlayer/__snapshots__/canonical.test.js.snap
@@ -102,7 +102,7 @@ exports[`Canonical Articles Footer Anchors should match text and url 7`] = `
exports[`Canonical Articles Footer Anchors should match text and url 8`] = `
{
- "text": "اخبار به زبانهای دیگر",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -116,7 +116,7 @@ exports[`Canonical Articles Footer Anchors should match text and url 9`] = `
exports[`Canonical Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/persian"`;
-exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2025 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
+exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2024 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
exports[`Canonical Articles Header I can see the branding 1`] = `"BBC News, فارسی"`;
@@ -135,76 +135,83 @@ exports[`Canonical Articles Header Navigation link should match text and url 2`]
`;
exports[`Canonical Articles Header Navigation link should match text and url 3`] = `
+{
+ "text": "انتخابات آمریکا",
+ "url": "/persian/topics/cj1gj22k6z6t",
+}
+`;
+
+exports[`Canonical Articles Header Navigation link should match text and url 4`] = `
{
"text": "پخش زنده",
"url": "/persian/media-49522521",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 4`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 5`] = `
{
"text": "ویدیو",
"url": "/persian/topics/c6z7mnr559gt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 5`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 6`] = `
{
"text": "تلویزیون",
"url": "/persian/tv-and-radio-37434377",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 6`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 7`] = `
{
"text": "ايران",
"url": "/persian/topics/ckdxnwvwwjnt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 7`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 8`] = `
{
"text": "افغانستان",
"url": "/persian/afghanistan",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 8`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 9`] = `
{
"text": "جهان",
"url": "/persian/topics/c1d8ye58xl8t",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 9`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 10`] = `
{
"text": "هنر",
"url": "/persian/topics/c9wpm0epm45t",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 10`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 11`] = `
{
"text": "ورزش",
"url": "/persian/topics/cnq6879k7yjt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 11`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 12`] = `
{
"text": "اقتصاد",
"url": "/persian/topics/cl8l9mvlllqt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 12`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 13`] = `
{
"text": "دانش",
"url": "/persian/topics/ckdxnwr4r1yt",
}
`;
-exports[`Canonical Articles Header Navigation link should match text and url 13`] = `
+exports[`Canonical Articles Header Navigation link should match text and url 14`] = `
{
"text": "فراتر از خبر",
"url": "/persian/topics/cxr3ex12k6et",
diff --git a/src/integration/pages/articles/scotland/__snapshots__/amp.test.js.snap b/src/integration/pages/articles/scotland/__snapshots__/amp.test.js.snap
index 4a05c0eb507..7e3da973fc6 100644
--- a/src/integration/pages/articles/scotland/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/articles/scotland/__snapshots__/amp.test.js.snap
@@ -159,7 +159,7 @@ exports[`AMP Articles Footer Cookie Settings Button should match text and on han
exports[`AMP Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/scotland"`;
-exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2025 BBC. The BBC is not responsible for the content of external sites. Read about our approach to external linking."`;
+exports[`AMP Articles Footer Paragraphs should match text 1`] = `"© 2024 BBC. The BBC is not responsible for the content of external sites. Read about our approach to external linking."`;
exports[`AMP Articles Header I can see the branding 1`] = `"BBC Scotland"`;
diff --git a/src/integration/pages/articles/scotland/__snapshots__/canonical.test.js.snap b/src/integration/pages/articles/scotland/__snapshots__/canonical.test.js.snap
index 5cecd4da950..eaeb4a0c196 100644
--- a/src/integration/pages/articles/scotland/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/articles/scotland/__snapshots__/canonical.test.js.snap
@@ -112,7 +112,7 @@ exports[`Canonical Articles Footer Anchors should match text and url 8`] = `
exports[`Canonical Articles Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/scotland"`;
-exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2025 BBC. The BBC is not responsible for the content of external sites. Read about our approach to external linking."`;
+exports[`Canonical Articles Footer Paragraphs should match text 1`] = `"© 2024 BBC. The BBC is not responsible for the content of external sites. Read about our approach to external linking."`;
exports[`Canonical Articles Header I can see the branding 1`] = `"BBC Scotland"`;
diff --git a/src/integration/pages/featureIdxPage/afrique/__snapshots__/amp.test.js.snap b/src/integration/pages/featureIdxPage/afrique/__snapshots__/amp.test.js.snap
index ec6af17ac82..4797f294947 100644
--- a/src/integration/pages/featureIdxPage/afrique/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/featureIdxPage/afrique/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Feature Index page Footer Anchors should match text and url 7`] = `
exports[`AMP Feature Index page Footer Anchors should match text and url 8`] = `
{
- "text": "Autres langues",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Feature Index page Footer Cookie Settings Button should match text
exports[`AMP Feature Index page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/afrique"`;
-exports[`AMP Feature Index page Footer Paragraphs should match text 1`] = `"© 2025 BBC. La BBC n'est pas responsable du contenu des sites externes. Découvrez notre approche en matière de liens externes."`;
+exports[`AMP Feature Index page Footer Paragraphs should match text 1`] = `"© 2024 BBC. La BBC n'est pas responsable du contenu des sites externes. Découvrez notre approche en matière de liens externes."`;
exports[`AMP Feature Index page Header I can see the branding 1`] = `"BBC News, Afrique"`;
@@ -222,69 +222,62 @@ exports[`AMP Feature Index page Header Navigation link should match text and url
`;
exports[`AMP Feature Index page Header Navigation link should match text and url 2`] = `
-{
- "text": "Conflit en RDC",
- "url": "/afrique/topics/cge72ry253jt",
-}
-`;
-
-exports[`AMP Feature Index page Header Navigation link should match text and url 3`] = `
{
"text": "Ecoutez en direct",
"url": "/afrique/bbc_afrique_radio/liveradio",
}
`;
-exports[`AMP Feature Index page Header Navigation link should match text and url 4`] = `
+exports[`AMP Feature Index page Header Navigation link should match text and url 3`] = `
{
"text": "Afrique",
"url": "/afrique/topics/cvqxn2k7kv7t",
}
`;
-exports[`AMP Feature Index page Header Navigation link should match text and url 5`] = `
+exports[`AMP Feature Index page Header Navigation link should match text and url 4`] = `
{
"text": "Monde",
"url": "/afrique/topics/cvqxn21vx11t",
}
`;
-exports[`AMP Feature Index page Header Navigation link should match text and url 6`] = `
+exports[`AMP Feature Index page Header Navigation link should match text and url 5`] = `
{
"text": "Santé",
"url": "/afrique/topics/c06gq9jxz3rt",
}
`;
-exports[`AMP Feature Index page Header Navigation link should match text and url 7`] = `
+exports[`AMP Feature Index page Header Navigation link should match text and url 6`] = `
{
"text": "Science et technologie",
"url": "/afrique/topics/crezq2zk0q4t",
}
`;
-exports[`AMP Feature Index page Header Navigation link should match text and url 8`] = `
+exports[`AMP Feature Index page Header Navigation link should match text and url 7`] = `
{
"text": "Economie",
"url": "/afrique/topics/cnq687nr9v1t",
}
`;
-exports[`AMP Feature Index page Header Navigation link should match text and url 9`] = `
+exports[`AMP Feature Index page Header Navigation link should match text and url 8`] = `
{
"text": "Culture",
"url": "/afrique/topics/cnq687nrrw8t",
}
`;
-exports[`AMP Feature Index page Header Navigation link should match text and url 10`] = `
+exports[`AMP Feature Index page Header Navigation link should match text and url 9`] = `
{
"text": "Vidéos",
"url": "/afrique/topics/cz4vn9gyd6rt",
}
`;
-exports[`AMP Feature Index page Header Navigation link should match text and url 11`] = `
+exports[`AMP Feature Index page Header Navigation link should match text and url 10`] = `
{
"text": "Nos émissions",
"url": "/afrique/topics/c88nzggm8gxt",
diff --git a/src/integration/pages/featureIdxPage/afrique/__snapshots__/canonical.test.js.snap b/src/integration/pages/featureIdxPage/afrique/__snapshots__/canonical.test.js.snap
index 0f094c60fbc..974be7c9c8a 100644
--- a/src/integration/pages/featureIdxPage/afrique/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/featureIdxPage/afrique/__snapshots__/canonical.test.js.snap
@@ -105,7 +105,7 @@ exports[`Canonical Feature Index page Footer Anchors should match text and url 7
exports[`Canonical Feature Index page Footer Anchors should match text and url 8`] = `
{
- "text": "Autres langues",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -119,7 +119,7 @@ exports[`Canonical Feature Index page Footer Anchors should match text and url 9
exports[`Canonical Feature Index page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/afrique"`;
-exports[`Canonical Feature Index page Footer Paragraphs should match text 1`] = `"© 2025 BBC. La BBC n'est pas responsable du contenu des sites externes. Découvrez notre approche en matière de liens externes."`;
+exports[`Canonical Feature Index page Footer Paragraphs should match text 1`] = `"© 2024 BBC. La BBC n'est pas responsable du contenu des sites externes. Découvrez notre approche en matière de liens externes."`;
exports[`Canonical Feature Index page Header I can see the branding 1`] = `"BBC News, Afrique"`;
@@ -131,69 +131,62 @@ exports[`Canonical Feature Index page Header Navigation link should match text a
`;
exports[`Canonical Feature Index page Header Navigation link should match text and url 2`] = `
-{
- "text": "Conflit en RDC",
- "url": "/afrique/topics/cge72ry253jt",
-}
-`;
-
-exports[`Canonical Feature Index page Header Navigation link should match text and url 3`] = `
{
"text": "Ecoutez en direct",
"url": "/afrique/bbc_afrique_radio/liveradio",
}
`;
-exports[`Canonical Feature Index page Header Navigation link should match text and url 4`] = `
+exports[`Canonical Feature Index page Header Navigation link should match text and url 3`] = `
{
"text": "Afrique",
"url": "/afrique/topics/cvqxn2k7kv7t",
}
`;
-exports[`Canonical Feature Index page Header Navigation link should match text and url 5`] = `
+exports[`Canonical Feature Index page Header Navigation link should match text and url 4`] = `
{
"text": "Monde",
"url": "/afrique/topics/cvqxn21vx11t",
}
`;
-exports[`Canonical Feature Index page Header Navigation link should match text and url 6`] = `
+exports[`Canonical Feature Index page Header Navigation link should match text and url 5`] = `
{
"text": "Santé",
"url": "/afrique/topics/c06gq9jxz3rt",
}
`;
-exports[`Canonical Feature Index page Header Navigation link should match text and url 7`] = `
+exports[`Canonical Feature Index page Header Navigation link should match text and url 6`] = `
{
"text": "Science et technologie",
"url": "/afrique/topics/crezq2zk0q4t",
}
`;
-exports[`Canonical Feature Index page Header Navigation link should match text and url 8`] = `
+exports[`Canonical Feature Index page Header Navigation link should match text and url 7`] = `
{
"text": "Economie",
"url": "/afrique/topics/cnq687nr9v1t",
}
`;
-exports[`Canonical Feature Index page Header Navigation link should match text and url 9`] = `
+exports[`Canonical Feature Index page Header Navigation link should match text and url 8`] = `
{
"text": "Culture",
"url": "/afrique/topics/cnq687nrrw8t",
}
`;
-exports[`Canonical Feature Index page Header Navigation link should match text and url 10`] = `
+exports[`Canonical Feature Index page Header Navigation link should match text and url 9`] = `
{
"text": "Vidéos",
"url": "/afrique/topics/cz4vn9gyd6rt",
}
`;
-exports[`Canonical Feature Index page Header Navigation link should match text and url 11`] = `
+exports[`Canonical Feature Index page Header Navigation link should match text and url 10`] = `
{
"text": "Nos émissions",
"url": "/afrique/topics/c88nzggm8gxt",
diff --git a/src/integration/pages/featureIdxPage/urdu/__snapshots__/amp.test.js.snap b/src/integration/pages/featureIdxPage/urdu/__snapshots__/amp.test.js.snap
index 64f72d07614..dd5c6daf37f 100644
--- a/src/integration/pages/featureIdxPage/urdu/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/featureIdxPage/urdu/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Feature Index page Footer Anchors should match text and url 7`] = `
exports[`AMP Feature Index page Footer Anchors should match text and url 8`] = `
{
- "text": "بی بی سی نیوز دیگر زبانوں میں",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Feature Index page Footer Cookie Settings Button should match text
exports[`AMP Feature Index page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/urdu"`;
-exports[`AMP Feature Index page Footer Paragraphs should match text 1`] = `"© 2025 بی بی سی. بی بی سی بیرونی ویب سائٹس کے مواد کا ذمہ دار نہیں بیرونی لنکس کے بارے میں ہماری پالیسی."`;
+exports[`AMP Feature Index page Footer Paragraphs should match text 1`] = `"© 2024 بی بی سی. بی بی سی بیرونی ویب سائٹس کے مواد کا ذمہ دار نہیں بیرونی لنکس کے بارے میں ہماری پالیسی."`;
exports[`AMP Feature Index page Header I can see the branding 1`] = `"BBC News, اردو"`;
diff --git a/src/integration/pages/featureIdxPage/urdu/__snapshots__/canonical.test.js.snap b/src/integration/pages/featureIdxPage/urdu/__snapshots__/canonical.test.js.snap
index 00a8ec44bf1..1dbe5fe118d 100644
--- a/src/integration/pages/featureIdxPage/urdu/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/featureIdxPage/urdu/__snapshots__/canonical.test.js.snap
@@ -105,7 +105,7 @@ exports[`Canonical Feature Index page Footer Anchors should match text and url 7
exports[`Canonical Feature Index page Footer Anchors should match text and url 8`] = `
{
- "text": "بی بی سی نیوز دیگر زبانوں میں",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -119,7 +119,7 @@ exports[`Canonical Feature Index page Footer Anchors should match text and url 9
exports[`Canonical Feature Index page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/urdu"`;
-exports[`Canonical Feature Index page Footer Paragraphs should match text 1`] = `"© 2025 بی بی سی. بی بی سی بیرونی ویب سائٹس کے مواد کا ذمہ دار نہیں بیرونی لنکس کے بارے میں ہماری پالیسی."`;
+exports[`Canonical Feature Index page Footer Paragraphs should match text 1`] = `"© 2024 بی بی سی. بی بی سی بیرونی ویب سائٹس کے مواد کا ذمہ دار نہیں بیرونی لنکس کے بارے میں ہماری پالیسی."`;
exports[`Canonical Feature Index page Header I can see the branding 1`] = `"BBC News, اردو"`;
diff --git a/src/integration/pages/homePage/arabic/__snapshots__/amp.test.js.snap b/src/integration/pages/homePage/arabic/__snapshots__/amp.test.js.snap
index bf11dfc8ae1..2b234a76fa0 100644
--- a/src/integration/pages/homePage/arabic/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/homePage/arabic/__snapshots__/amp.test.js.snap
@@ -228,7 +228,7 @@ exports[`AMP Home Page Footer Anchors should match text and url 7`] = `
exports[`AMP Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "بي بي سي نيوز عربي في لغات أخرى",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -249,7 +249,7 @@ exports[`AMP Home Page Footer Cookie Settings Button should match text and on ha
exports[`AMP Home Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/arabic"`;
-exports[`AMP Home Page Footer Paragraphs should match text 1`] = `"© 2025 بي بي سي. بي بي سي ليست مسؤولة عن محتوى المواقع الخارجية. سياستنا بخصوص الروابط الخارجية."`;
+exports[`AMP Home Page Footer Paragraphs should match text 1`] = `"© 2024 بي بي سي. بي بي سي ليست مسؤولة عن محتوى المواقع الخارجية. سياستنا بخصوص الروابط الخارجية."`;
exports[`AMP Home Page Header I can see the branding 1`] = `"BBC News, عربي"`;
diff --git a/src/integration/pages/homePage/arabic/__snapshots__/canonical.test.js.snap b/src/integration/pages/homePage/arabic/__snapshots__/canonical.test.js.snap
index 08f0ea61c1d..dd265f3f7b1 100644
--- a/src/integration/pages/homePage/arabic/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/homePage/arabic/__snapshots__/canonical.test.js.snap
@@ -113,7 +113,7 @@ exports[`Canonical Home Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "بي بي سي نيوز عربي في لغات أخرى",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -134,7 +134,7 @@ exports[`Canonical Home Page Footer Anchors should match text and url 10`] = `
exports[`Canonical Home Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/arabic"`;
-exports[`Canonical Home Page Footer Paragraphs should match text 1`] = `"© 2025 بي بي سي. بي بي سي ليست مسؤولة عن محتوى المواقع الخارجية. سياستنا بخصوص الروابط الخارجية."`;
+exports[`Canonical Home Page Footer Paragraphs should match text 1`] = `"© 2024 بي بي سي. بي بي سي ليست مسؤولة عن محتوى المواقع الخارجية. سياستنا بخصوص الروابط الخارجية."`;
exports[`Canonical Home Page Header I can see the branding 1`] = `"BBC News, عربي"`;
diff --git a/src/integration/pages/homePage/hindi/__snapshots__/amp.test.js.snap b/src/integration/pages/homePage/hindi/__snapshots__/amp.test.js.snap
index 160bc8420b7..a7d826cd57f 100644
--- a/src/integration/pages/homePage/hindi/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/homePage/hindi/__snapshots__/amp.test.js.snap
@@ -178,7 +178,7 @@ exports[`AMP Home Page Footer Anchors should match text and url 7`] = `
exports[`AMP Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "अन्य भाषाएँ",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -201,7 +201,7 @@ exports[`AMP Home Page Footer I can click on the BBC branding and it would take
exports[`AMP Home Page Footer Paragraphs should match text 1`] = `"बीबीसी के लिए कलेक्टिव न्यूज़रूम की ओर से प्रकाशित"`;
-exports[`AMP Home Page Footer Paragraphs should match text 2`] = `"© 2025 BBC. बाहरी साइटों की सामग्री के लिए बीबीसी ज़िम्मेदार नहीं है. बाहरी साइटों का लिंक देने की हमारी नीति के बारे में पढ़ें."`;
+exports[`AMP Home Page Footer Paragraphs should match text 2`] = `"© 2024 BBC. बाहरी साइटों की सामग्री के लिए बीबीसी ज़िम्मेदार नहीं है. बाहरी साइटों का लिंक देने की हमारी नीति के बारे में पढ़ें."`;
exports[`AMP Home Page Header I can see the branding 1`] = `"BBC News, हिंदी"`;
@@ -213,62 +213,55 @@ exports[`AMP Home Page Header Navigation link should match text and url 1`] = `
`;
exports[`AMP Home Page Header Navigation link should match text and url 2`] = `
-{
- "text": "दिल्ली विधानसभा चुनाव",
- "url": "/hindi/topics/c8dqegnm6d9t",
-}
-`;
-
-exports[`AMP Home Page Header Navigation link should match text and url 3`] = `
{
"text": "भारत",
"url": "/hindi/topics/ckdxnkz7607t",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 4`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 3`] = `
{
"text": "विदेश",
"url": "/hindi/topics/c9wpm0en87xt",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 5`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 4`] = `
{
"text": "मनोरंजन",
"url": "/hindi/topics/c06gq3n0pp7t",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 6`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 5`] = `
{
"text": "खेल",
"url": "/hindi/topics/cwr9j8g1kj9t",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 7`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 6`] = `
{
"text": "विज्ञान-टेक्नॉलॉजी",
"url": "/hindi/topics/c2lej0594knt",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 8`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 7`] = `
{
"text": "सोशल",
"url": "/hindi/topics/c2e4q0z9qznt",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 9`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 8`] = `
{
"text": "वीडियो",
"url": "/hindi/topics/cw9kv0kpxydt",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 10`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 9`] = `
{
"text": "पॉडकास्ट",
"url": "/hindi/institutional-61824775",
diff --git a/src/integration/pages/homePage/hindi/__snapshots__/canonical.test.js.snap b/src/integration/pages/homePage/hindi/__snapshots__/canonical.test.js.snap
index 467306671eb..51941f6dd8b 100644
--- a/src/integration/pages/homePage/hindi/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/homePage/hindi/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical Home Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "अन्य भाषाएँ",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -115,7 +115,7 @@ exports[`Canonical Home Page Footer I can click on the BBC branding and it would
exports[`Canonical Home Page Footer Paragraphs should match text 1`] = `"बीबीसी के लिए कलेक्टिव न्यूज़रूम की ओर से प्रकाशित"`;
-exports[`Canonical Home Page Footer Paragraphs should match text 2`] = `"© 2025 BBC. बाहरी साइटों की सामग्री के लिए बीबीसी ज़िम्मेदार नहीं है. बाहरी साइटों का लिंक देने की हमारी नीति के बारे में पढ़ें."`;
+exports[`Canonical Home Page Footer Paragraphs should match text 2`] = `"© 2024 BBC. बाहरी साइटों की सामग्री के लिए बीबीसी ज़िम्मेदार नहीं है. बाहरी साइटों का लिंक देने की हमारी नीति के बारे में पढ़ें."`;
exports[`Canonical Home Page Header I can see the branding 1`] = `"BBC News, हिंदी"`;
@@ -127,62 +127,55 @@ exports[`Canonical Home Page Header Navigation link should match text and url 1`
`;
exports[`Canonical Home Page Header Navigation link should match text and url 2`] = `
-{
- "text": "दिल्ली विधानसभा चुनाव",
- "url": "/hindi/topics/c8dqegnm6d9t",
-}
-`;
-
-exports[`Canonical Home Page Header Navigation link should match text and url 3`] = `
{
"text": "भारत",
"url": "/hindi/topics/ckdxnkz7607t",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 4`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 3`] = `
{
"text": "विदेश",
"url": "/hindi/topics/c9wpm0en87xt",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 5`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 4`] = `
{
"text": "मनोरंजन",
"url": "/hindi/topics/c06gq3n0pp7t",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 6`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 5`] = `
{
"text": "खेल",
"url": "/hindi/topics/cwr9j8g1kj9t",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 7`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 6`] = `
{
"text": "विज्ञान-टेक्नॉलॉजी",
"url": "/hindi/topics/c2lej0594knt",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 8`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 7`] = `
{
"text": "सोशल",
"url": "/hindi/topics/c2e4q0z9qznt",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 9`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 8`] = `
{
"text": "वीडियो",
"url": "/hindi/topics/cw9kv0kpxydt",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 10`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 9`] = `
{
"text": "पॉडकास्ट",
"url": "/hindi/institutional-61824775",
diff --git a/src/integration/pages/homePage/kyrgyz/__snapshots__/amp.test.js.snap b/src/integration/pages/homePage/kyrgyz/__snapshots__/amp.test.js.snap
index 36a46bf0a69..6ae00709349 100644
--- a/src/integration/pages/homePage/kyrgyz/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/homePage/kyrgyz/__snapshots__/amp.test.js.snap
@@ -178,7 +178,7 @@ exports[`AMP Home Page Footer Anchors should match text and url 7`] = `
exports[`AMP Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "Башка тилдерде",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -199,7 +199,7 @@ exports[`AMP Home Page Footer Cookie Settings Button should match text and on ha
exports[`AMP Home Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/kyrgyz"`;
-exports[`AMP Home Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
+exports[`AMP Home Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
exports[`AMP Home Page Header I can see the branding 1`] = `"BBC News, Кыргыз КызMATы"`;
diff --git a/src/integration/pages/homePage/kyrgyz/__snapshots__/canonical.test.js.snap b/src/integration/pages/homePage/kyrgyz/__snapshots__/canonical.test.js.snap
index 280e2ce2a98..22d436cdf4c 100644
--- a/src/integration/pages/homePage/kyrgyz/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/homePage/kyrgyz/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical Home Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "Башка тилдерде",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical Home Page Footer Anchors should match text and url 9`] = `
exports[`Canonical Home Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/kyrgyz"`;
-exports[`Canonical Home Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
+exports[`Canonical Home Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
exports[`Canonical Home Page Header I can see the branding 1`] = `"BBC News, Кыргыз КызMATы"`;
diff --git a/src/integration/pages/homePage/serbianCyr/__snapshots__/amp.test.js.snap b/src/integration/pages/homePage/serbianCyr/__snapshots__/amp.test.js.snap
index 4065efce225..fb96745d64f 100644
--- a/src/integration/pages/homePage/serbianCyr/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/homePage/serbianCyr/__snapshots__/amp.test.js.snap
@@ -178,7 +178,7 @@ exports[`AMP Home Page Footer Anchors should match text and url 7`] = `
exports[`AMP Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News на другим језицима",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -199,7 +199,7 @@ exports[`AMP Home Page Footer Cookie Settings Button should match text and on ha
exports[`AMP Home Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/serbian/cyr"`;
-exports[`AMP Home Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. ББЦ није одговоран за садржај других сајтова. Прочитајте наша правила о линковању других сајтова."`;
+exports[`AMP Home Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. ББЦ није одговоран за садржај других сајтова. Прочитајте наша правила о линковању других сајтова."`;
exports[`AMP Home Page Header I can see the branding 1`] = `"BBC News, на српском"`;
@@ -211,41 +211,6 @@ exports[`AMP Home Page Header Navigation link should match text and url 1`] = `
`;
exports[`AMP Home Page Header Navigation link should match text and url 2`] = `
-{
- "text": "Студентске блокаде",
- "url": "/serbian/topics/cly9dd4w09wt/cyr",
-}
-`;
-
-exports[`AMP Home Page Header Navigation link should match text and url 3`] = `
-{
- "text": "Србија",
- "url": "/serbian/topics/cr50vdy9q6wt/cyr",
-}
-`;
-
-exports[`AMP Home Page Header Navigation link should match text and url 4`] = `
-{
- "text": "Балкан",
- "url": "/serbian/topics/c06g87137jgt/cyr",
-}
-`;
-
-exports[`AMP Home Page Header Navigation link should match text and url 5`] = `
-{
- "text": "Свет",
- "url": "/serbian/topics/c2lej05e1eqt/cyr",
-}
-`;
-
-exports[`AMP Home Page Header Navigation link should match text and url 6`] = `
-{
- "text": "Видео",
- "url": "/serbian/topics/c44vyp5g049t/cyr",
-}
-`;
-
-exports[`AMP Home Page Header Navigation link should match text and url 7`] = `
{
"text": "Најпопуларније",
"url": "/serbian/cyr/popular/read",
diff --git a/src/integration/pages/homePage/serbianCyr/__snapshots__/canonical.test.js.snap b/src/integration/pages/homePage/serbianCyr/__snapshots__/canonical.test.js.snap
index bd8a2e56bef..45c68413fee 100644
--- a/src/integration/pages/homePage/serbianCyr/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/homePage/serbianCyr/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical Home Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News на другим језицима",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical Home Page Footer Anchors should match text and url 9`] = `
exports[`Canonical Home Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/serbian/cyr"`;
-exports[`Canonical Home Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. ББЦ није одговоран за садржај других сајтова. Прочитајте наша правила о линковању других сајтова."`;
+exports[`Canonical Home Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. ББЦ није одговоран за садржај других сајтова. Прочитајте наша правила о линковању других сајтова."`;
exports[`Canonical Home Page Header I can see the branding 1`] = `"BBC News, на српском"`;
@@ -125,41 +125,6 @@ exports[`Canonical Home Page Header Navigation link should match text and url 1`
`;
exports[`Canonical Home Page Header Navigation link should match text and url 2`] = `
-{
- "text": "Студентске блокаде",
- "url": "/serbian/topics/cly9dd4w09wt/cyr",
-}
-`;
-
-exports[`Canonical Home Page Header Navigation link should match text and url 3`] = `
-{
- "text": "Србија",
- "url": "/serbian/topics/cr50vdy9q6wt/cyr",
-}
-`;
-
-exports[`Canonical Home Page Header Navigation link should match text and url 4`] = `
-{
- "text": "Балкан",
- "url": "/serbian/topics/c06g87137jgt/cyr",
-}
-`;
-
-exports[`Canonical Home Page Header Navigation link should match text and url 5`] = `
-{
- "text": "Свет",
- "url": "/serbian/topics/c2lej05e1eqt/cyr",
-}
-`;
-
-exports[`Canonical Home Page Header Navigation link should match text and url 6`] = `
-{
- "text": "Видео",
- "url": "/serbian/topics/c44vyp5g049t/cyr",
-}
-`;
-
-exports[`Canonical Home Page Header Navigation link should match text and url 7`] = `
{
"text": "Најпопуларније",
"url": "/serbian/cyr/popular/read",
diff --git a/src/integration/pages/homePage/serbianLat/__snapshots__/amp.test.js.snap b/src/integration/pages/homePage/serbianLat/__snapshots__/amp.test.js.snap
index b0628084556..2a579459a87 100644
--- a/src/integration/pages/homePage/serbianLat/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/homePage/serbianLat/__snapshots__/amp.test.js.snap
@@ -178,7 +178,7 @@ exports[`AMP Home Page Footer Anchors should match text and url 7`] = `
exports[`AMP Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News na drugim jezicima",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -199,7 +199,7 @@ exports[`AMP Home Page Footer Cookie Settings Button should match text and on ha
exports[`AMP Home Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/serbian/lat"`;
-exports[`AMP Home Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC nije odgovoran za sadržaj drugih sajtova. Pročitajte naša pravila o linkovanju drugih sajtova."`;
+exports[`AMP Home Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC nije odgovoran za sadržaj drugih sajtova. Pročitajte naša pravila o linkovanju drugih sajtova."`;
exports[`AMP Home Page Header I can see the branding 1`] = `"BBC News, na srpskom"`;
@@ -211,41 +211,34 @@ exports[`AMP Home Page Header Navigation link should match text and url 1`] = `
`;
exports[`AMP Home Page Header Navigation link should match text and url 2`] = `
-{
- "text": "Studentske blokade",
- "url": "/serbian/topics/cly9dd4w09wt/lat",
-}
-`;
-
-exports[`AMP Home Page Header Navigation link should match text and url 3`] = `
{
"text": "Srbija",
- "url": "/serbian/topics/cr50vdy9q6wt/lat",
+ "url": "/serbian/lat/topics/cr50vdy9q6wt",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 4`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 3`] = `
{
"text": "Balkan",
- "url": "/serbian/topics/c06g87137jgt/lat",
+ "url": "/serbian/lat/topics/c06g87137jgt",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 5`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 4`] = `
{
"text": "Svet",
- "url": "/serbian/topics/c2lej05e1eqt/lat",
+ "url": "/serbian/lat/topics/c2lej05e1eqt",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 6`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 5`] = `
{
"text": "Video",
- "url": "/serbian/topics/c44vyp5g049t/lat",
+ "url": "/serbian/lat/topics/c44vyp5g049t",
}
`;
-exports[`AMP Home Page Header Navigation link should match text and url 7`] = `
+exports[`AMP Home Page Header Navigation link should match text and url 6`] = `
{
"text": "Najpopularnije",
"url": "/serbian/lat/popular/read",
diff --git a/src/integration/pages/homePage/serbianLat/__snapshots__/canonical.test.js.snap b/src/integration/pages/homePage/serbianLat/__snapshots__/canonical.test.js.snap
index 2e8f171711f..5f9f611c677 100644
--- a/src/integration/pages/homePage/serbianLat/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/homePage/serbianLat/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical Home Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Home Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News na drugim jezicima",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical Home Page Footer Anchors should match text and url 9`] = `
exports[`Canonical Home Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/serbian/lat"`;
-exports[`Canonical Home Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC nije odgovoran za sadržaj drugih sajtova. Pročitajte naša pravila o linkovanju drugih sajtova."`;
+exports[`Canonical Home Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC nije odgovoran za sadržaj drugih sajtova. Pročitajte naša pravila o linkovanju drugih sajtova."`;
exports[`Canonical Home Page Header I can see the branding 1`] = `"BBC News, na srpskom"`;
@@ -125,41 +125,34 @@ exports[`Canonical Home Page Header Navigation link should match text and url 1`
`;
exports[`Canonical Home Page Header Navigation link should match text and url 2`] = `
-{
- "text": "Studentske blokade",
- "url": "/serbian/topics/cly9dd4w09wt/lat",
-}
-`;
-
-exports[`Canonical Home Page Header Navigation link should match text and url 3`] = `
{
"text": "Srbija",
- "url": "/serbian/topics/cr50vdy9q6wt/lat",
+ "url": "/serbian/lat/topics/cr50vdy9q6wt",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 4`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 3`] = `
{
"text": "Balkan",
- "url": "/serbian/topics/c06g87137jgt/lat",
+ "url": "/serbian/lat/topics/c06g87137jgt",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 5`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 4`] = `
{
"text": "Svet",
- "url": "/serbian/topics/c2lej05e1eqt/lat",
+ "url": "/serbian/lat/topics/c2lej05e1eqt",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 6`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 5`] = `
{
"text": "Video",
- "url": "/serbian/topics/c44vyp5g049t/lat",
+ "url": "/serbian/lat/topics/c44vyp5g049t",
}
`;
-exports[`Canonical Home Page Header Navigation link should match text and url 7`] = `
+exports[`Canonical Home Page Header Navigation link should match text and url 6`] = `
{
"text": "Najpopularnije",
"url": "/serbian/lat/popular/read",
diff --git a/src/integration/pages/liveRadio/gahuza/__snapshots__/canonical.test.js.snap b/src/integration/pages/liveRadio/gahuza/__snapshots__/canonical.test.js.snap
index 52e3e8a039e..31ad7c10507 100644
--- a/src/integration/pages/liveRadio/gahuza/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/liveRadio/gahuza/__snapshots__/canonical.test.js.snap
@@ -113,7 +113,7 @@ exports[`Canonical Live Radio Footer Anchors should match text and url 9`] = `
exports[`Canonical Live Radio Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/gahuza"`;
-exports[`Canonical Live Radio Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC ntibazwa ibivuye ku zindi mbuga. Soma ibijanye n'aho duhagaze ku mihora ijana ahandi"`;
+exports[`Canonical Live Radio Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC ntibazwa ibivuye ku zindi mbuga. Soma ibijanye n'aho duhagaze ku mihora ijana ahandi"`;
exports[`Canonical Live Radio Header I can see the branding 1`] = `"BBC News, Gahuza"`;
@@ -125,41 +125,34 @@ exports[`Canonical Live Radio Header Navigation link should match text and url 1
`;
exports[`Canonical Live Radio Header Navigation link should match text and url 2`] = `
-{
- "text": "Ibitero bya M23 muri Congo",
- "url": "/gahuza/topics/cx2qn9pqx4yt",
-}
-`;
-
-exports[`Canonical Live Radio Header Navigation link should match text and url 3`] = `
{
"text": "Ibiyaga binini",
"url": "/gahuza/topics/c06gq67y3w5t",
}
`;
-exports[`Canonical Live Radio Header Navigation link should match text and url 4`] = `
+exports[`Canonical Live Radio Header Navigation link should match text and url 3`] = `
{
"text": "Afrika",
"url": "/gahuza/topics/crvnv566zx9t",
}
`;
-exports[`Canonical Live Radio Header Navigation link should match text and url 5`] = `
+exports[`Canonical Live Radio Header Navigation link should match text and url 4`] = `
{
"text": "Mpuzamahanga",
"url": "/gahuza/topics/c9dvd93jjkkt",
}
`;
-exports[`Canonical Live Radio Header Navigation link should match text and url 6`] = `
+exports[`Canonical Live Radio Header Navigation link should match text and url 5`] = `
{
"text": "Imikino",
"url": "/gahuza/topics/c5qvpq0jzy7t",
}
`;
-exports[`Canonical Live Radio Header Navigation link should match text and url 7`] = `
+exports[`Canonical Live Radio Header Navigation link should match text and url 6`] = `
{
"text": "Amajwi n’amashusho",
"url": "/gahuza/topics/crldzm936jmt",
diff --git a/src/integration/pages/liveRadio/korean/__snapshots__/canonical.test.js.snap b/src/integration/pages/liveRadio/korean/__snapshots__/canonical.test.js.snap
index b145d2d160e..dfd979328b4 100644
--- a/src/integration/pages/liveRadio/korean/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/liveRadio/korean/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical Korean Live Radio Page Footer Anchors should match text and u
exports[`Canonical Korean Live Radio Page Footer Anchors should match text and url 8`] = `
{
- "text": "다른 언어로 보기",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical Korean Live Radio Page Footer Anchors should match text and u
exports[`Canonical Korean Live Radio Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/korean"`;
-exports[`Canonical Korean Live Radio Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC는 외부 사이트 및 타사 콘텐츠에 대한 책임을 지지 않습니다 외부 링크에 대한 본사 정책 보기"`;
+exports[`Canonical Korean Live Radio Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC는 외부 사이트 및 타사 콘텐츠에 대한 책임을 지지 않습니다 외부 링크에 대한 본사 정책 보기"`;
exports[`Canonical Korean Live Radio Page Header I can see the branding 1`] = `"BBC News, 코리아"`;
diff --git a/src/integration/pages/liveRadio/kyrgyz/__snapshots__/canonical.test.js.snap b/src/integration/pages/liveRadio/kyrgyz/__snapshots__/canonical.test.js.snap
index d529c87cd0d..8e9539408ed 100644
--- a/src/integration/pages/liveRadio/kyrgyz/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/liveRadio/kyrgyz/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical Kyrgyz Live Radio Page Footer Anchors should match text and u
exports[`Canonical Kyrgyz Live Radio Page Footer Anchors should match text and url 8`] = `
{
- "text": "Башка тилдерде",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical Kyrgyz Live Radio Page Footer Anchors should match text and u
exports[`Canonical Kyrgyz Live Radio Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/kyrgyz"`;
-exports[`Canonical Kyrgyz Live Radio Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
+exports[`Canonical Kyrgyz Live Radio Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
exports[`Canonical Kyrgyz Live Radio Page Header I can see the branding 1`] = `"BBC News, Кыргыз КызMATы"`;
diff --git a/src/integration/pages/mediaArticlePage/pidgin/__snapshots__/amp.test.js.snap b/src/integration/pages/mediaArticlePage/pidgin/__snapshots__/amp.test.js.snap
index 2751632bad2..cadda1f7b41 100644
--- a/src/integration/pages/mediaArticlePage/pidgin/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/mediaArticlePage/pidgin/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Media Article Page Footer Anchors should match text and url 7`] = `
exports[`AMP Media Article Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News for oda languages",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Media Article Page Footer Cookie Settings Button should match text
exports[`AMP Media Article Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pidgin"`;
-exports[`AMP Media Article Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. De external site no concern BBC. De way wey we de take go external link."`;
+exports[`AMP Media Article Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. De external site no concern BBC. De way wey we de take go external link."`;
exports[`AMP Media Article Page Header I can see the branding 1`] = `"BBC News, Pidgin"`;
diff --git a/src/integration/pages/mediaArticlePage/pidgin/__snapshots__/canonical.test.js.snap b/src/integration/pages/mediaArticlePage/pidgin/__snapshots__/canonical.test.js.snap
index c73bf270c82..72dc3ecbf2b 100644
--- a/src/integration/pages/mediaArticlePage/pidgin/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/mediaArticlePage/pidgin/__snapshots__/canonical.test.js.snap
@@ -114,7 +114,7 @@ exports[`Canonical Media Article Page Footer Anchors should match text and url 7
exports[`Canonical Media Article Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News for oda languages",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -128,7 +128,7 @@ exports[`Canonical Media Article Page Footer Anchors should match text and url 9
exports[`Canonical Media Article Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pidgin"`;
-exports[`Canonical Media Article Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. De external site no concern BBC. De way wey we de take go external link."`;
+exports[`Canonical Media Article Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. De external site no concern BBC. De way wey we de take go external link."`;
exports[`Canonical Media Article Page Header I can see the branding 1`] = `"BBC News, Pidgin"`;
diff --git a/src/integration/pages/mediaAssetPage/arabicTC2/__snapshots__/amp.test.js.snap b/src/integration/pages/mediaAssetPage/arabicTC2/__snapshots__/amp.test.js.snap
index aa76fab43f2..7d25f7bd483 100644
--- a/src/integration/pages/mediaAssetPage/arabicTC2/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/mediaAssetPage/arabicTC2/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Media Asset Page Footer Anchors should match text and url 7`] = `
exports[`AMP Media Asset Page Footer Anchors should match text and url 8`] = `
{
- "text": "بي بي سي نيوز عربي في لغات أخرى",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Media Asset Page Footer Cookie Settings Button should match text an
exports[`AMP Media Asset Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/arabic"`;
-exports[`AMP Media Asset Page Footer Paragraphs should match text 1`] = `"© 2025 بي بي سي. بي بي سي ليست مسؤولة عن محتوى المواقع الخارجية. سياستنا بخصوص الروابط الخارجية."`;
+exports[`AMP Media Asset Page Footer Paragraphs should match text 1`] = `"© 2024 بي بي سي. بي بي سي ليست مسؤولة عن محتوى المواقع الخارجية. سياستنا بخصوص الروابط الخارجية."`;
exports[`AMP Media Asset Page Header I can see the branding 1`] = `"BBC News, عربي"`;
diff --git a/src/integration/pages/mediaAssetPage/arabicTC2/__snapshots__/canonical.test.js.snap b/src/integration/pages/mediaAssetPage/arabicTC2/__snapshots__/canonical.test.js.snap
index ca7f49678f5..523179b6018 100644
--- a/src/integration/pages/mediaAssetPage/arabicTC2/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/mediaAssetPage/arabicTC2/__snapshots__/canonical.test.js.snap
@@ -102,7 +102,7 @@ exports[`Canonical Media Asset Page Footer Anchors should match text and url 7`]
exports[`Canonical Media Asset Page Footer Anchors should match text and url 8`] = `
{
- "text": "بي بي سي نيوز عربي في لغات أخرى",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -116,7 +116,7 @@ exports[`Canonical Media Asset Page Footer Anchors should match text and url 9`]
exports[`Canonical Media Asset Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/arabic"`;
-exports[`Canonical Media Asset Page Footer Paragraphs should match text 1`] = `"© 2025 بي بي سي. بي بي سي ليست مسؤولة عن محتوى المواقع الخارجية. سياستنا بخصوص الروابط الخارجية."`;
+exports[`Canonical Media Asset Page Footer Paragraphs should match text 1`] = `"© 2024 بي بي سي. بي بي سي ليست مسؤولة عن محتوى المواقع الخارجية. سياستنا بخصوص الروابط الخارجية."`;
exports[`Canonical Media Asset Page Header I can see the branding 1`] = `"BBC News, عربي"`;
diff --git a/src/integration/pages/mediaAssetPage/persian/__snapshots__/amp.test.js.snap b/src/integration/pages/mediaAssetPage/persian/__snapshots__/amp.test.js.snap
index 0cf210ed59b..3cd8e162892 100644
--- a/src/integration/pages/mediaAssetPage/persian/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/mediaAssetPage/persian/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Media Asset Page Footer Anchors should match text and url 7`] = `
exports[`AMP Media Asset Page Footer Anchors should match text and url 8`] = `
{
- "text": "اخبار به زبانهای دیگر",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Media Asset Page Footer Cookie Settings Button should match text an
exports[`AMP Media Asset Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/persian"`;
-exports[`AMP Media Asset Page Footer Paragraphs should match text 1`] = `"© 2025 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
+exports[`AMP Media Asset Page Footer Paragraphs should match text 1`] = `"© 2024 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
exports[`AMP Media Asset Page Header I can see the branding 1`] = `"BBC News, فارسی"`;
@@ -229,76 +229,83 @@ exports[`AMP Media Asset Page Header Navigation link should match text and url 2
`;
exports[`AMP Media Asset Page Header Navigation link should match text and url 3`] = `
+{
+ "text": "انتخابات آمریکا",
+ "url": "/persian/topics/cj1gj22k6z6t",
+}
+`;
+
+exports[`AMP Media Asset Page Header Navigation link should match text and url 4`] = `
{
"text": "پخش زنده",
"url": "/persian/media-49522521",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 4`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 5`] = `
{
"text": "ویدیو",
"url": "/persian/topics/c6z7mnr559gt",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 5`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 6`] = `
{
"text": "تلویزیون",
"url": "/persian/tv-and-radio-37434377",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 6`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 7`] = `
{
"text": "ايران",
"url": "/persian/topics/ckdxnwvwwjnt",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 7`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 8`] = `
{
"text": "افغانستان",
"url": "/persian/afghanistan",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 8`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 9`] = `
{
"text": "جهان",
"url": "/persian/topics/c1d8ye58xl8t",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 9`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 10`] = `
{
"text": "هنر",
"url": "/persian/topics/c9wpm0epm45t",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 10`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 11`] = `
{
"text": "ورزش",
"url": "/persian/topics/cnq6879k7yjt",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 11`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 12`] = `
{
"text": "اقتصاد",
"url": "/persian/topics/cl8l9mvlllqt",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 12`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 13`] = `
{
"text": "دانش",
"url": "/persian/topics/ckdxnwr4r1yt",
}
`;
-exports[`AMP Media Asset Page Header Navigation link should match text and url 13`] = `
+exports[`AMP Media Asset Page Header Navigation link should match text and url 14`] = `
{
"text": "فراتر از خبر",
"url": "/persian/topics/cxr3ex12k6et",
diff --git a/src/integration/pages/mediaAssetPage/persian/__snapshots__/canonical.test.js.snap b/src/integration/pages/mediaAssetPage/persian/__snapshots__/canonical.test.js.snap
index 404765963a6..a2f73be717a 100644
--- a/src/integration/pages/mediaAssetPage/persian/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/mediaAssetPage/persian/__snapshots__/canonical.test.js.snap
@@ -105,7 +105,7 @@ exports[`Canonical Media Asset Page Footer Anchors should match text and url 7`]
exports[`Canonical Media Asset Page Footer Anchors should match text and url 8`] = `
{
- "text": "اخبار به زبانهای دیگر",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -119,7 +119,7 @@ exports[`Canonical Media Asset Page Footer Anchors should match text and url 9`]
exports[`Canonical Media Asset Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/persian"`;
-exports[`Canonical Media Asset Page Footer Paragraphs should match text 1`] = `"© 2025 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
+exports[`Canonical Media Asset Page Footer Paragraphs should match text 1`] = `"© 2024 بی بی سی. بی بی سی مسئول محتوای سایت های دیگر نیست. سیاست ما درباره لینک دادن به سایت های دیگر."`;
exports[`Canonical Media Asset Page Header I can see the branding 1`] = `"BBC News, فارسی"`;
@@ -138,76 +138,83 @@ exports[`Canonical Media Asset Page Header Navigation link should match text and
`;
exports[`Canonical Media Asset Page Header Navigation link should match text and url 3`] = `
+{
+ "text": "انتخابات آمریکا",
+ "url": "/persian/topics/cj1gj22k6z6t",
+}
+`;
+
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 4`] = `
{
"text": "پخش زنده",
"url": "/persian/media-49522521",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 4`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 5`] = `
{
"text": "ویدیو",
"url": "/persian/topics/c6z7mnr559gt",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 5`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 6`] = `
{
"text": "تلویزیون",
"url": "/persian/tv-and-radio-37434377",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 6`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 7`] = `
{
"text": "ايران",
"url": "/persian/topics/ckdxnwvwwjnt",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 7`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 8`] = `
{
"text": "افغانستان",
"url": "/persian/afghanistan",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 8`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 9`] = `
{
"text": "جهان",
"url": "/persian/topics/c1d8ye58xl8t",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 9`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 10`] = `
{
"text": "هنر",
"url": "/persian/topics/c9wpm0epm45t",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 10`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 11`] = `
{
"text": "ورزش",
"url": "/persian/topics/cnq6879k7yjt",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 11`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 12`] = `
{
"text": "اقتصاد",
"url": "/persian/topics/cl8l9mvlllqt",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 12`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 13`] = `
{
"text": "دانش",
"url": "/persian/topics/ckdxnwr4r1yt",
}
`;
-exports[`Canonical Media Asset Page Header Navigation link should match text and url 13`] = `
+exports[`Canonical Media Asset Page Header Navigation link should match text and url 14`] = `
{
"text": "فراتر از خبر",
"url": "/persian/topics/cxr3ex12k6et",
diff --git a/src/integration/pages/mediaAssetPage/pidgin/__snapshots__/amp.test.js.snap b/src/integration/pages/mediaAssetPage/pidgin/__snapshots__/amp.test.js.snap
index bed09d0e998..5a3f1997887 100644
--- a/src/integration/pages/mediaAssetPage/pidgin/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/mediaAssetPage/pidgin/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Media Asset Page Footer Anchors should match text and url 7`] = `
exports[`AMP Media Asset Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News for oda languages",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Media Asset Page Footer Cookie Settings Button should match text an
exports[`AMP Media Asset Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pidgin"`;
-exports[`AMP Media Asset Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. De external site no concern BBC. De way wey we de take go external link."`;
+exports[`AMP Media Asset Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. De external site no concern BBC. De way wey we de take go external link."`;
exports[`AMP Media Asset Page Header I can see the branding 1`] = `"BBC News, Pidgin"`;
diff --git a/src/integration/pages/mediaAssetPage/pidgin/__snapshots__/canonical.test.js.snap b/src/integration/pages/mediaAssetPage/pidgin/__snapshots__/canonical.test.js.snap
index 0a61733703c..39a71cfaf36 100644
--- a/src/integration/pages/mediaAssetPage/pidgin/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/mediaAssetPage/pidgin/__snapshots__/canonical.test.js.snap
@@ -111,7 +111,7 @@ exports[`Canonical Media Asset Page Footer Anchors should match text and url 7`]
exports[`Canonical Media Asset Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News for oda languages",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -125,7 +125,7 @@ exports[`Canonical Media Asset Page Footer Anchors should match text and url 9`]
exports[`Canonical Media Asset Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pidgin"`;
-exports[`Canonical Media Asset Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. De external site no concern BBC. De way wey we de take go external link."`;
+exports[`Canonical Media Asset Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. De external site no concern BBC. De way wey we de take go external link."`;
exports[`Canonical Media Asset Page Header I can see the branding 1`] = `"BBC News, Pidgin"`;
diff --git a/src/integration/pages/mostReadPage/mundo/__snapshots__/amp.test.js.snap b/src/integration/pages/mostReadPage/mundo/__snapshots__/amp.test.js.snap
index 51ecf11f087..c9512a2b463 100644
--- a/src/integration/pages/mostReadPage/mundo/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/mostReadPage/mundo/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Most Read Page Footer Anchors should match text and url 7`] = `
exports[`AMP Most Read Page Footer Anchors should match text and url 8`] = `
{
- "text": "Otros idiomas",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Most Read Page Footer Cookie Settings Button should match text and
exports[`AMP Most Read Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/mundo"`;
-exports[`AMP Most Read Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
+exports[`AMP Most Read Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
exports[`AMP Most Read Page Header I can see the branding 1`] = `"BBC News, Mundo"`;
diff --git a/src/integration/pages/mostReadPage/mundo/__snapshots__/canonical.test.js.snap b/src/integration/pages/mostReadPage/mundo/__snapshots__/canonical.test.js.snap
index a63eafdc16f..120af82da9e 100644
--- a/src/integration/pages/mostReadPage/mundo/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/mostReadPage/mundo/__snapshots__/canonical.test.js.snap
@@ -102,7 +102,7 @@ exports[`Canonical Most Read Page Footer Anchors should match text and url 7`] =
exports[`Canonical Most Read Page Footer Anchors should match text and url 8`] = `
{
- "text": "Otros idiomas",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -116,7 +116,7 @@ exports[`Canonical Most Read Page Footer Anchors should match text and url 9`] =
exports[`Canonical Most Read Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/mundo"`;
-exports[`Canonical Most Read Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
+exports[`Canonical Most Read Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
exports[`Canonical Most Read Page Header I can see the branding 1`] = `"BBC News, Mundo"`;
diff --git a/src/integration/pages/mostReadPage/vietnamese/__snapshots__/amp.test.js.snap b/src/integration/pages/mostReadPage/vietnamese/__snapshots__/amp.test.js.snap
index 795a8d825a5..f9a898406a2 100644
--- a/src/integration/pages/mostReadPage/vietnamese/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/mostReadPage/vietnamese/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Most Read Page Footer Anchors should match text and url 7`] = `
exports[`AMP Most Read Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News các ngôn ngữ khác",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Most Read Page Footer Cookie Settings Button should match text and
exports[`AMP Most Read Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/vietnamese"`;
-exports[`AMP Most Read Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC không chịu trách nhiệm nội dung các trang ngoài. Tìm hiểu cách chúng tôi tiếp cận việc dẫn tới trang ngoài"`;
+exports[`AMP Most Read Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC không chịu trách nhiệm nội dung các trang ngoài. Tìm hiểu cách chúng tôi tiếp cận việc dẫn tới trang ngoài"`;
exports[`AMP Most Read Page Header I can see the branding 1`] = `"BBC News, Tiếng Việt"`;
diff --git a/src/integration/pages/mostReadPage/vietnamese/__snapshots__/canonical.test.js.snap b/src/integration/pages/mostReadPage/vietnamese/__snapshots__/canonical.test.js.snap
index 4a23f8b8943..f45403b1da1 100644
--- a/src/integration/pages/mostReadPage/vietnamese/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/mostReadPage/vietnamese/__snapshots__/canonical.test.js.snap
@@ -102,7 +102,7 @@ exports[`Canonical Most Read Page Footer Anchors should match text and url 7`] =
exports[`Canonical Most Read Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News các ngôn ngữ khác",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -116,7 +116,7 @@ exports[`Canonical Most Read Page Footer Anchors should match text and url 9`] =
exports[`Canonical Most Read Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/vietnamese"`;
-exports[`Canonical Most Read Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC không chịu trách nhiệm nội dung các trang ngoài. Tìm hiểu cách chúng tôi tiếp cận việc dẫn tới trang ngoài"`;
+exports[`Canonical Most Read Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC không chịu trách nhiệm nội dung các trang ngoài. Tìm hiểu cách chúng tôi tiếp cận việc dẫn tới trang ngoài"`;
exports[`Canonical Most Read Page Header I can see the branding 1`] = `"BBC News, Tiếng Việt"`;
diff --git a/src/integration/pages/onDemandAudioPage/gahuza.expired/__snapshots__/canonical.test.js.snap b/src/integration/pages/onDemandAudioPage/gahuza.expired/__snapshots__/canonical.test.js.snap
index 8d141189096..0bd054b9887 100644
--- a/src/integration/pages/onDemandAudioPage/gahuza.expired/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/onDemandAudioPage/gahuza.expired/__snapshots__/canonical.test.js.snap
@@ -125,7 +125,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/gahuza"`;
-exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC ntibazwa ibivuye ku zindi mbuga. Soma ibijanye n'aho duhagaze ku mihora ijana ahandi"`;
+exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC ntibazwa ibivuye ku zindi mbuga. Soma ibijanye n'aho duhagaze ku mihora ijana ahandi"`;
exports[`Canonical On Demand Audio Page Header I can see the branding 1`] = `"BBC News, Gahuza"`;
@@ -137,41 +137,34 @@ exports[`Canonical On Demand Audio Page Header Navigation link should match text
`;
exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 2`] = `
-{
- "text": "Ibitero bya M23 muri Congo",
- "url": "/gahuza/topics/cx2qn9pqx4yt",
-}
-`;
-
-exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 3`] = `
{
"text": "Ibiyaga binini",
"url": "/gahuza/topics/c06gq67y3w5t",
}
`;
-exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 4`] = `
+exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 3`] = `
{
"text": "Afrika",
"url": "/gahuza/topics/crvnv566zx9t",
}
`;
-exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 5`] = `
+exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 4`] = `
{
"text": "Mpuzamahanga",
"url": "/gahuza/topics/c9dvd93jjkkt",
}
`;
-exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 6`] = `
+exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 5`] = `
{
"text": "Imikino",
"url": "/gahuza/topics/c5qvpq0jzy7t",
}
`;
-exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 7`] = `
+exports[`Canonical On Demand Audio Page Header Navigation link should match text and url 6`] = `
{
"text": "Amajwi n’amashusho",
"url": "/gahuza/topics/crldzm936jmt",
diff --git a/src/integration/pages/onDemandAudioPage/indonesia.expired/__snapshots__/canonical.test.js.snap b/src/integration/pages/onDemandAudioPage/indonesia.expired/__snapshots__/canonical.test.js.snap
index fd2afe99fb7..9594fb913f4 100644
--- a/src/integration/pages/onDemandAudioPage/indonesia.expired/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/onDemandAudioPage/indonesia.expired/__snapshots__/canonical.test.js.snap
@@ -111,7 +111,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer Anchors should match text and url 8`] = `
{
- "text": "BC News dalam bahasa-bahasa lain",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -125,7 +125,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/indonesia"`;
-exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC tidak bertanggung jawab atas konten dari situs eksternal. Baca tentang peraturan baru terkait link eksternal."`;
+exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC tidak bertanggung jawab atas konten dari situs eksternal. Baca tentang peraturan baru terkait link eksternal."`;
exports[`Canonical On Demand Audio Page Header I can see the branding 1`] = `"BBC News, Indonesia"`;
diff --git a/src/integration/pages/onDemandAudioPage/indonesia/__snapshots__/canonical.test.js.snap b/src/integration/pages/onDemandAudioPage/indonesia/__snapshots__/canonical.test.js.snap
index dc302a0e0bf..8435249f494 100644
--- a/src/integration/pages/onDemandAudioPage/indonesia/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/onDemandAudioPage/indonesia/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer Anchors should match text and url 8`] = `
{
- "text": "BC News dalam bahasa-bahasa lain",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/indonesia"`;
-exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC tidak bertanggung jawab atas konten dari situs eksternal. Baca tentang peraturan baru terkait link eksternal."`;
+exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC tidak bertanggung jawab atas konten dari situs eksternal. Baca tentang peraturan baru terkait link eksternal."`;
exports[`Canonical On Demand Audio Page Header I can see the branding 1`] = `"BBC News, Indonesia"`;
diff --git a/src/integration/pages/onDemandAudioPage/pashto.expired/__snapshots__/canonical.test.js.snap b/src/integration/pages/onDemandAudioPage/pashto.expired/__snapshots__/canonical.test.js.snap
index d8296a2b961..fc9638a74a9 100644
--- a/src/integration/pages/onDemandAudioPage/pashto.expired/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/onDemandAudioPage/pashto.expired/__snapshots__/canonical.test.js.snap
@@ -111,7 +111,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer Anchors should match text and url 8`] = `
{
- "text": "نورې ژبې",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -125,7 +125,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pashto"`;
-exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2025 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
+exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2024 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
exports[`Canonical On Demand Audio Page Header I can see the branding 1`] = `"BBC News, پښتو"`;
diff --git a/src/integration/pages/onDemandAudioPage/pashto/__snapshots__/canonical.test.js.snap b/src/integration/pages/onDemandAudioPage/pashto/__snapshots__/canonical.test.js.snap
index d252c63a4da..931d8024f79 100644
--- a/src/integration/pages/onDemandAudioPage/pashto/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/onDemandAudioPage/pashto/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer Anchors should match text and url 8`] = `
{
- "text": "نورې ژبې",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pashto"`;
-exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2025 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
+exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2024 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
exports[`Canonical On Demand Audio Page Header I can see the branding 1`] = `"BBC News, پښتو"`;
diff --git a/src/integration/pages/onDemandAudioPage/pashtoBrand/__snapshots__/canonical.test.js.snap b/src/integration/pages/onDemandAudioPage/pashtoBrand/__snapshots__/canonical.test.js.snap
index c004fee2b06..8969c773aa2 100644
--- a/src/integration/pages/onDemandAudioPage/pashtoBrand/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/onDemandAudioPage/pashtoBrand/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer Anchors should match text and url 8`] = `
{
- "text": "نورې ژبې",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical On Demand Audio Page Footer Anchors should match text and url
exports[`Canonical On Demand Audio Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pashto"`;
-exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2025 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
+exports[`Canonical On Demand Audio Page Footer Paragraphs should match text 1`] = `"© 2024 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
exports[`Canonical On Demand Audio Page Header I can see the branding 1`] = `"BBC News, پښتو"`;
diff --git a/src/integration/pages/onDemandTVPage/hausa/__snapshots__/canonical.test.js.snap b/src/integration/pages/onDemandTVPage/hausa/__snapshots__/canonical.test.js.snap
index 3412542b921..0dd7139d413 100644
--- a/src/integration/pages/onDemandTVPage/hausa/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/onDemandTVPage/hausa/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical On Demand T V Page Footer Anchors should match text and url 7
exports[`Canonical On Demand T V Page Footer Anchors should match text and url 8`] = `
{
- "text": "Labaran BBC a sauran harsuna",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical On Demand T V Page Footer Anchors should match text and url 9
exports[`Canonical On Demand T V Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/hausa"`;
-exports[`Canonical On Demand T V Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
+exports[`Canonical On Demand T V Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
exports[`Canonical On Demand T V Page Header I can see the branding 1`] = `"BBC News, Hausa"`;
diff --git a/src/integration/pages/onDemandTVPage/pashto.expired/__snapshots__/canonical.test.js.snap b/src/integration/pages/onDemandTVPage/pashto.expired/__snapshots__/canonical.test.js.snap
index 3e9513503e9..0fe2fad0cff 100644
--- a/src/integration/pages/onDemandTVPage/pashto.expired/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/onDemandTVPage/pashto.expired/__snapshots__/canonical.test.js.snap
@@ -109,7 +109,7 @@ exports[`Canonical Pashto On Demand TV Page Footer Anchors should match text and
exports[`Canonical Pashto On Demand TV Page Footer Anchors should match text and url 8`] = `
{
- "text": "نورې ژبې",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -123,7 +123,7 @@ exports[`Canonical Pashto On Demand TV Page Footer Anchors should match text and
exports[`Canonical Pashto On Demand TV Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pashto"`;
-exports[`Canonical Pashto On Demand TV Page Footer Paragraphs should match text 1`] = `"© 2025 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
+exports[`Canonical Pashto On Demand TV Page Footer Paragraphs should match text 1`] = `"© 2024 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
exports[`Canonical Pashto On Demand TV Page Header I can see the branding 1`] = `"BBC News, پښتو"`;
diff --git a/src/integration/pages/onDemandTVPage/pashtoBrand/__snapshots__/canonical.test.js.snap b/src/integration/pages/onDemandTVPage/pashtoBrand/__snapshots__/canonical.test.js.snap
index e1db260bf38..7ba57599fda 100644
--- a/src/integration/pages/onDemandTVPage/pashtoBrand/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/onDemandTVPage/pashtoBrand/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical On Demand T V Page Footer Anchors should match text and url 7
exports[`Canonical On Demand T V Page Footer Anchors should match text and url 8`] = `
{
- "text": "نورې ژبې",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical On Demand T V Page Footer Anchors should match text and url 9
exports[`Canonical On Demand T V Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pashto"`;
-exports[`Canonical On Demand T V Page Footer Paragraphs should match text 1`] = `"© 2025 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
+exports[`Canonical On Demand T V Page Footer Paragraphs should match text 1`] = `"© 2024 بي بي سي. بي بي سي د نورو ویبپاڼو د محتوا مسوله نه ده. د نورو ویبپاڼو لینکولو په اړه زموږ تګلاره."`;
exports[`Canonical On Demand T V Page Header I can see the branding 1`] = `"BBC News, پښتو"`;
diff --git a/src/integration/pages/photoGalleryPage/mundo/__snapshots__/amp.test.js.snap b/src/integration/pages/photoGalleryPage/mundo/__snapshots__/amp.test.js.snap
index 2411ee9b650..371e67b60af 100644
--- a/src/integration/pages/photoGalleryPage/mundo/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/photoGalleryPage/mundo/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Photo Gallery Page Footer Anchors should match text and url 7`] = `
exports[`AMP Photo Gallery Page Footer Anchors should match text and url 8`] = `
{
- "text": "Otros idiomas",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Photo Gallery Page Footer Cookie Settings Button should match text
exports[`AMP Photo Gallery Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/mundo"`;
-exports[`AMP Photo Gallery Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
+exports[`AMP Photo Gallery Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
exports[`AMP Photo Gallery Page Header I can see the branding 1`] = `"BBC News, Mundo"`;
diff --git a/src/integration/pages/photoGalleryPage/mundo/__snapshots__/canonical.test.js.snap b/src/integration/pages/photoGalleryPage/mundo/__snapshots__/canonical.test.js.snap
index fcf9e05a1df..fdf8fd965d1 100644
--- a/src/integration/pages/photoGalleryPage/mundo/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/photoGalleryPage/mundo/__snapshots__/canonical.test.js.snap
@@ -105,7 +105,7 @@ exports[`Canonical Photo Gallery Page Footer Anchors should match text and url 7
exports[`Canonical Photo Gallery Page Footer Anchors should match text and url 8`] = `
{
- "text": "Otros idiomas",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -119,7 +119,7 @@ exports[`Canonical Photo Gallery Page Footer Anchors should match text and url 9
exports[`Canonical Photo Gallery Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/mundo"`;
-exports[`Canonical Photo Gallery Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
+exports[`Canonical Photo Gallery Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
exports[`Canonical Photo Gallery Page Header I can see the branding 1`] = `"BBC News, Mundo"`;
diff --git a/src/integration/pages/photoGalleryPage/thai/__snapshots__/amp.test.js.snap b/src/integration/pages/photoGalleryPage/thai/__snapshots__/amp.test.js.snap
index 37efbb9b393..e0ae0bf2d0b 100644
--- a/src/integration/pages/photoGalleryPage/thai/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/photoGalleryPage/thai/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Photo Gallery Page Footer Anchors should match text and url 7`] = `
exports[`AMP Photo Gallery Page Footer Anchors should match text and url 8`] = `
{
- "text": "บีบีซีนิวส์ภาษาอื่น ๆ",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Photo Gallery Page Footer Cookie Settings Button should match text
exports[`AMP Photo Gallery Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/thai"`;
-exports[`AMP Photo Gallery Page Footer Paragraphs should match text 1`] = `"© 2025 บีบีซี. บีบีซีไม่มีส่วนรับผิดชอบต่อเนื้อหาของเว็บไซต์ภายนอก. นโยบายของเราเรื่องการเชื่อมต่อไปยังลิงก์ภายนอก. อ่านเกี่ยวกับแนวทางของเราในการติดต่อกับลิงก์ภายนอก"`;
+exports[`AMP Photo Gallery Page Footer Paragraphs should match text 1`] = `"© 2024 บีบีซี. บีบีซีไม่มีส่วนรับผิดชอบต่อเนื้อหาของเว็บไซต์ภายนอก. นโยบายของเราเรื่องการเชื่อมต่อไปยังลิงก์ภายนอก. อ่านเกี่ยวกับแนวทางของเราในการติดต่อกับลิงก์ภายนอก"`;
exports[`AMP Photo Gallery Page Header I can see the branding 1`] = `"BBC News, ไทย"`;
diff --git a/src/integration/pages/photoGalleryPage/thai/__snapshots__/canonical.test.js.snap b/src/integration/pages/photoGalleryPage/thai/__snapshots__/canonical.test.js.snap
index 806bbd627c4..4d95524f9ee 100644
--- a/src/integration/pages/photoGalleryPage/thai/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/photoGalleryPage/thai/__snapshots__/canonical.test.js.snap
@@ -111,7 +111,7 @@ exports[`Canonical Photo Gallery Page Footer Anchors should match text and url 7
exports[`Canonical Photo Gallery Page Footer Anchors should match text and url 8`] = `
{
- "text": "บีบีซีนิวส์ภาษาอื่น ๆ",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -125,7 +125,7 @@ exports[`Canonical Photo Gallery Page Footer Anchors should match text and url 9
exports[`Canonical Photo Gallery Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/thai"`;
-exports[`Canonical Photo Gallery Page Footer Paragraphs should match text 1`] = `"© 2025 บีบีซี. บีบีซีไม่มีส่วนรับผิดชอบต่อเนื้อหาของเว็บไซต์ภายนอก. นโยบายของเราเรื่องการเชื่อมต่อไปยังลิงก์ภายนอก. อ่านเกี่ยวกับแนวทางของเราในการติดต่อกับลิงก์ภายนอก"`;
+exports[`Canonical Photo Gallery Page Footer Paragraphs should match text 1`] = `"© 2024 บีบีซี. บีบีซีไม่มีส่วนรับผิดชอบต่อเนื้อหาของเว็บไซต์ภายนอก. นโยบายของเราเรื่องการเชื่อมต่อไปยังลิงก์ภายนอก. อ่านเกี่ยวกับแนวทางของเราในการติดต่อกับลิงก์ภายนอก"`;
exports[`Canonical Photo Gallery Page Header I can see the branding 1`] = `"BBC News, ไทย"`;
diff --git a/src/integration/pages/podcastPage/portugueseBrand/__snapshots__/canonical.test.js.snap b/src/integration/pages/podcastPage/portugueseBrand/__snapshots__/canonical.test.js.snap
index 2839aa2f9ac..91a20515d0a 100644
--- a/src/integration/pages/podcastPage/portugueseBrand/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/podcastPage/portugueseBrand/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical Podcast Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Podcast Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News em outras línguas",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical Podcast Page Footer Anchors should match text and url 9`] = `
exports[`Canonical Podcast Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/portuguese"`;
-exports[`Canonical Podcast Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. A BBC não se responsabiliza pelo conteúdo de sites externos. Leia sobre nossa política em relação a links externos."`;
+exports[`Canonical Podcast Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. A BBC não se responsabiliza pelo conteúdo de sites externos. Leia sobre nossa política em relação a links externos."`;
exports[`Canonical Podcast Page Header I can see the branding 1`] = `"BBC News, Brasil"`;
diff --git a/src/integration/pages/podcastPage/portugueseEpisode/__snapshots__/canonical.test.js.snap b/src/integration/pages/podcastPage/portugueseEpisode/__snapshots__/canonical.test.js.snap
index 0dd0424267d..e20831cdbbd 100644
--- a/src/integration/pages/podcastPage/portugueseEpisode/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/podcastPage/portugueseEpisode/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical Podcast Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Podcast Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News em outras línguas",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical Podcast Page Footer Anchors should match text and url 9`] = `
exports[`Canonical Podcast Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/portuguese"`;
-exports[`Canonical Podcast Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. A BBC não se responsabiliza pelo conteúdo de sites externos. Leia sobre nossa política em relação a links externos."`;
+exports[`Canonical Podcast Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. A BBC não se responsabiliza pelo conteúdo de sites externos. Leia sobre nossa política em relação a links externos."`;
exports[`Canonical Podcast Page Header I can see the branding 1`] = `"BBC News, Brasil"`;
diff --git a/src/integration/pages/storyPage/hausa/__snapshots__/amp.test.js.snap b/src/integration/pages/storyPage/hausa/__snapshots__/amp.test.js.snap
index a212ba5eb3a..6ec6bdd2db0 100644
--- a/src/integration/pages/storyPage/hausa/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/storyPage/hausa/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Story Page Footer Anchors should match text and url 7`] = `
exports[`AMP Story Page Footer Anchors should match text and url 8`] = `
{
- "text": "Labaran BBC a sauran harsuna",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Story Page Footer Cookie Settings Button should match text and on h
exports[`AMP Story Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/hausa"`;
-exports[`AMP Story Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
+exports[`AMP Story Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
exports[`AMP Story Page Header I can see the branding 1`] = `"BBC News, Hausa"`;
diff --git a/src/integration/pages/storyPage/hausa/__snapshots__/canonical.test.js.snap b/src/integration/pages/storyPage/hausa/__snapshots__/canonical.test.js.snap
index 06736866033..471c33e201c 100644
--- a/src/integration/pages/storyPage/hausa/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/storyPage/hausa/__snapshots__/canonical.test.js.snap
@@ -105,7 +105,7 @@ exports[`Canonical Story Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Story Page Footer Anchors should match text and url 8`] = `
{
- "text": "Labaran BBC a sauran harsuna",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -126,7 +126,7 @@ exports[`Canonical Story Page Footer Anchors should match text and url 10`] = `
exports[`Canonical Story Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/hausa"`;
-exports[`Canonical Story Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
+exports[`Canonical Story Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC ba za ta dauki alhakin abubuwan da wasu shafukan daban suka wallafa ba. Karanta hanyoyin da muke bi dangane da adireshin waje."`;
exports[`Canonical Story Page Header I can see the branding 1`] = `"BBC News, Hausa"`;
diff --git a/src/integration/pages/storyPage/kyrgyz/__snapshots__/amp.test.js.snap b/src/integration/pages/storyPage/kyrgyz/__snapshots__/amp.test.js.snap
index 738504acf37..b9d0de5e888 100644
--- a/src/integration/pages/storyPage/kyrgyz/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/storyPage/kyrgyz/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Story Page Footer Anchors should match text and url 7`] = `
exports[`AMP Story Page Footer Anchors should match text and url 8`] = `
{
- "text": "Башка тилдерде",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Story Page Footer Cookie Settings Button should match text and on h
exports[`AMP Story Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/kyrgyz"`;
-exports[`AMP Story Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
+exports[`AMP Story Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
exports[`AMP Story Page Header I can see the branding 1`] = `"BBC News, Кыргыз КызMATы"`;
diff --git a/src/integration/pages/storyPage/kyrgyz/__snapshots__/canonical.test.js.snap b/src/integration/pages/storyPage/kyrgyz/__snapshots__/canonical.test.js.snap
index 8fd7792be28..6b3edce5f5d 100644
--- a/src/integration/pages/storyPage/kyrgyz/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/storyPage/kyrgyz/__snapshots__/canonical.test.js.snap
@@ -105,7 +105,7 @@ exports[`Canonical Story Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Story Page Footer Anchors should match text and url 8`] = `
{
- "text": "Башка тилдерде",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -119,7 +119,7 @@ exports[`Canonical Story Page Footer Anchors should match text and url 9`] = `
exports[`Canonical Story Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/kyrgyz"`;
-exports[`Canonical Story Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
+exports[`Canonical Story Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. Би-Би-Си сырткы интернет сайттардын мазмуну үчүн жооптуу эмес. Башка интернет сайттардын мазмуну боюнча биздин позиция."`;
exports[`Canonical Story Page Header I can see the branding 1`] = `"BBC News, Кыргыз КызMATы"`;
diff --git a/src/integration/pages/storyPage/mundo/__snapshots__/amp.test.js.snap b/src/integration/pages/storyPage/mundo/__snapshots__/amp.test.js.snap
index dabae08310c..8c96c705fd0 100644
--- a/src/integration/pages/storyPage/mundo/__snapshots__/amp.test.js.snap
+++ b/src/integration/pages/storyPage/mundo/__snapshots__/amp.test.js.snap
@@ -189,7 +189,7 @@ exports[`AMP Story Page Footer Anchors should match text and url 7`] = `
exports[`AMP Story Page Footer Anchors should match text and url 8`] = `
{
- "text": "Otros idiomas",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -210,7 +210,7 @@ exports[`AMP Story Page Footer Cookie Settings Button should match text and on h
exports[`AMP Story Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/mundo"`;
-exports[`AMP Story Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
+exports[`AMP Story Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
exports[`AMP Story Page Header I can see the branding 1`] = `"BBC News, Mundo"`;
diff --git a/src/integration/pages/storyPage/mundo/__snapshots__/canonical.test.js.snap b/src/integration/pages/storyPage/mundo/__snapshots__/canonical.test.js.snap
index 7c88ea09974..f93a225fd81 100644
--- a/src/integration/pages/storyPage/mundo/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/storyPage/mundo/__snapshots__/canonical.test.js.snap
@@ -111,7 +111,7 @@ exports[`Canonical Story Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Story Page Footer Anchors should match text and url 8`] = `
{
- "text": "Otros idiomas",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -132,7 +132,7 @@ exports[`Canonical Story Page Footer Anchors should match text and url 10`] = `
exports[`Canonical Story Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/mundo"`;
-exports[`Canonical Story Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
+exports[`Canonical Story Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
exports[`Canonical Story Page Header I can see the branding 1`] = `"BBC News, Mundo"`;
diff --git a/src/integration/pages/topicPage/pidgin/__snapshots__/canonical.test.js.snap b/src/integration/pages/topicPage/pidgin/__snapshots__/canonical.test.js.snap
index a16b0eacf62..174ef0f4c8a 100644
--- a/src/integration/pages/topicPage/pidgin/__snapshots__/canonical.test.js.snap
+++ b/src/integration/pages/topicPage/pidgin/__snapshots__/canonical.test.js.snap
@@ -99,7 +99,7 @@ exports[`Canonical Topic Page Footer Anchors should match text and url 7`] = `
exports[`Canonical Topic Page Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News for oda languages",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -113,7 +113,7 @@ exports[`Canonical Topic Page Footer Anchors should match text and url 9`] = `
exports[`Canonical Topic Page Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/pidgin"`;
-exports[`Canonical Topic Page Footer Paragraphs should match text 1`] = `"© 2025 BBC. De external site no concern BBC. De way wey we de take go external link."`;
+exports[`Canonical Topic Page Footer Paragraphs should match text 1`] = `"© 2024 BBC. De external site no concern BBC. De way wey we de take go external link."`;
exports[`Canonical Topic Page Header I can see the branding 1`] = `"BBC News, Pidgin"`;
diff --git a/src/integration/utils/customResourceLoader.js b/src/integration/utils/customResourceLoader.js
deleted file mode 100644
index e1c4dbc4647..00000000000
--- a/src/integration/utils/customResourceLoader.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const jsdom = require('jsdom');
-const dotenv = require('dotenv');
-
-class CustomResourceLoader extends jsdom.ResourceLoader {
- fetch(url, options) {
- if (url === dotenv.config().parsed.SIMORGH_REVERB_SOURCE) {
- return super.fetch(url, options);
- }
-
- return null;
- }
-}
-
-module.exports = CustomResourceLoader;
diff --git a/src/integration/utils/fetchDom.js b/src/integration/utils/fetchDom.js
index 00a68be1a7c..6b831795058 100644
--- a/src/integration/utils/fetchDom.js
+++ b/src/integration/utils/fetchDom.js
@@ -8,8 +8,6 @@ dns.setDefaultResultOrder('ipv4first');
const { JSDOM } = require('jsdom');
const retry = require('retry');
-const CustomResourceLoader = require('./customResourceLoader');
-
const faultTolerantDomFetch = ({ url, runScripts, headers }) =>
new Promise((resolve, reject) => {
const oneSecond = 1000;
@@ -33,12 +31,7 @@ const faultTolerantDomFetch = ({ url, runScripts, headers }) =>
const html = await response.text();
const dom = new JSDOM(html, {
url,
- ...(runScripts
- ? {
- runScripts: 'dangerously',
- resources: new CustomResourceLoader(),
- }
- : {}),
+ ...(runScripts ? { runScripts: 'dangerously' } : {}),
});
resolve(dom);
diff --git a/src/server/Document/Renderers/CanonicalRenderer.tsx b/src/server/Document/Renderers/CanonicalRenderer.tsx
index fe44cecc7ec..62528debe55 100644
--- a/src/server/Document/Renderers/CanonicalRenderer.tsx
+++ b/src/server/Document/Renderers/CanonicalRenderer.tsx
@@ -2,10 +2,7 @@
import React from 'react';
import IfAboveIE9 from '#app/legacy/components/IfAboveIE9Comment';
import NO_JS_CLASSNAME from '#app/lib/noJs.const';
-import {
- getEnvConfig,
- getProcessEnvAppVariables,
-} from '#app/lib/utilities/getEnvConfig';
+import { getProcessEnvAppVariables } from '#app/lib/utilities/getEnvConfig';
import serialiseForScript from '#app/lib/utilities/serialiseForScript';
import { BaseRendererProps } from './types';
@@ -38,22 +35,6 @@ export default function CanonicalRenderer({
return (
-
@@ -271,7 +271,7 @@ exports[`Document Component should render correctly 1`] = `
.css-7prgni-StyledLink{display:inline-block;}
diff --git a/src/server/Document/component.test.jsx b/src/server/Document/component.test.jsx
index 2f76c64f627..e6b42b3e5b3 100644
--- a/src/server/Document/component.test.jsx
+++ b/src/server/Document/component.test.jsx
@@ -2,27 +2,12 @@ import React from 'react';
import { renderToString, renderToStaticMarkup } from 'react-dom/server';
import { Helmet } from 'react-helmet';
import { JSDOM } from 'jsdom';
-import dotenv from 'dotenv';
import DocumentComponent from './component';
Helmet.canUseDOM = false;
describe('Document Component', () => {
- const originalProcessEnv = process.env;
-
- // Load environment variables into process.env to ensure CanonicalRenderer
- // uses values set in the .env file in lieu of mocked values
- dotenv.config();
-
- beforeEach(() => {
- process.env.SIMORGH_APP_ENV = 'local';
- });
-
- afterEach(() => {
- process.env = originalProcessEnv;
- });
-
const data = { test: 'data' };
const legacyScripts = (
<>
@@ -40,9 +25,9 @@ describe('Document Component', () => {
);
const links = (
<>
-
-
-
+
+
+
>
);
diff --git a/src/server/index.jsx b/src/server/index.jsx
index fe1c36d495a..c02a3ac0a1c 100644
--- a/src/server/index.jsx
+++ b/src/server/index.jsx
@@ -34,7 +34,6 @@ import getAgent from './utilities/getAgent';
import { getMvtExperiments, getMvtVaryHeaders } from './utilities/mvtHeader';
import getAssetOrigins from './utilities/getAssetOrigins';
import extractHeaders from './utilities/extractHeaders';
-import addPlatformToRequestChainHeader from './utilities/addPlatformToRequestChainHeader';
const morgan = require('morgan');
@@ -161,14 +160,6 @@ const injectDefaultCacheHeader = (req, res, next) => {
next();
};
-const injectPlatformToRequestChainHeader = (req, res, next) => {
- res.set(
- 'req-svc-chain',
- addPlatformToRequestChainHeader({ headers: req.headers }),
- );
- next();
-};
-
const injectResourceHintsHeader = (req, res, next) => {
const thisService = req.originalUrl.split('/')[1];
@@ -201,7 +192,6 @@ server.get(
injectDefaultCacheHeader,
injectReferrerPolicyHeader,
injectResourceHintsHeader,
- injectPlatformToRequestChainHeader,
],
async ({ url, query, headers, path: urlPath }, res) => {
let derivedPageType = 'Unknown';
diff --git a/src/server/index.test.jsx b/src/server/index.test.jsx
index b1ed0df2cad..45c745bf24e 100644
--- a/src/server/index.test.jsx
+++ b/src/server/index.test.jsx
@@ -10,7 +10,7 @@ import {
SERVER_SIDE_RENDER_REQUEST_RECEIVED,
SERVER_SIDE_REQUEST_FAILED,
} from '#lib/logger.const';
-import { FRONT_PAGE, LIVE_RADIO_PAGE } from '#app/routes/utils/pageTypes';
+import { FRONT_PAGE, MEDIA_PAGE } from '#app/routes/utils/pageTypes';
import Document from './Document/component';
import routes from '../app/routes';
import * as renderDocument from './Document';
@@ -396,100 +396,6 @@ const testArticles = ({ platform, service, variant, queryString = '' }) => {
});
};
-const testTopics = ({ service, variant, queryString = '' }) => {
- describe(`Tipo Topic: /${service}/topics/tipoId/${variant}${queryString}`, () => {
- const successDataResponse = {
- data: { some: 'data' },
- service: 'someService',
- status: 200,
- };
-
- const notFoundDataResponse = {
- data: { some: 'data' },
- service: 'someService',
- status: 404,
- };
-
- const id = `c0000000001o`;
- const topicURL = `/${service}/topics/${id}/${variant}${queryString}`;
-
- describe('Successful render', () => {
- describe('200 status code', () => {
- beforeEach(() => {
- mockRouteProps({
- id,
- service,
- dataResponse: successDataResponse,
- variant,
- });
- });
-
- const configs = {
- url: topicURL,
- service,
- successDataResponse,
- variant,
- };
-
- it('should respond with rendered data', testRenderedData(configs));
- });
-
- describe('404 status code', () => {
- const pageType = 'topic';
-
- beforeEach(() => {
- mockRouteProps({
- id,
- service,
- dataResponse: notFoundDataResponse,
- variant,
- pageType,
- });
- });
-
- it('should respond with a rendered 404', async () => {
- const { status, text } = await makeRequest(topicURL);
- expect(status).toBe(404);
- expect(text).toEqual(
- 'Mock app ',
- );
- });
-
- assertNon200ResponseCustomMetrics({
- requestUrl: topicURL,
- pageType,
- statusCode: 404,
- });
- });
- });
-
- describe('Unknown error within the data fetch, react router or its dependencies', () => {
- const pageType = 'topic';
- beforeEach(() => {
- mockRouteProps({
- id,
- service,
- dataResponse: Error('Error!'),
- responseType: 'reject',
- variant,
- pageType,
- });
- });
-
- it('should respond with a 500', async () => {
- const { status, text } = await makeRequest(topicURL);
- expect(status).toEqual(500);
- expect(text).toEqual('Internal server error');
- });
-
- assertNon200ResponseCustomMetrics({
- requestUrl: topicURL,
- pageType,
- });
- });
- });
-};
-
const testAssetPages = ({
platform,
service,
@@ -656,7 +562,7 @@ const testMediaPages = ({
});
describe('404 status code', () => {
- const pageType = LIVE_RADIO_PAGE;
+ const pageType = MEDIA_PAGE;
beforeEach(() => {
mockRouteProps({
@@ -683,7 +589,7 @@ const testMediaPages = ({
});
describe('Unknown error within the data fetch, react router or its dependencies', () => {
- const pageType = LIVE_RADIO_PAGE;
+ const pageType = 'liveRadio';
beforeEach(() => {
mockRouteProps({
@@ -938,11 +844,6 @@ describe('Server', () => {
jest.clearAllMocks();
});
- it('should add SIMORGH platform to the service request chain header', async () => {
- const { header } = await makeRequest('/*');
- expect(header['req-svc-chain']).toBe('SIMORGH');
- });
-
describe('/status', () => {
it('should respond with a 200', async () => {
const { statusCode, text } = await makeRequest('/status');
@@ -1300,10 +1201,6 @@ describe('Server', () => {
queryString: QUERY_STRING,
});
- testTopics({ service: 'pidgin' });
-
- testTopics({ service: 'zhongwen', variant: 'simp' });
-
testMediaPages({
platform: 'amp',
service: 'korean',
diff --git a/src/server/utilities/addPlatformToRequestChainHeader/index.test.ts b/src/server/utilities/addPlatformToRequestChainHeader/index.test.ts
deleted file mode 100644
index 9893b89ae75..00000000000
--- a/src/server/utilities/addPlatformToRequestChainHeader/index.test.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import addPlatformToRequestChainHeader from '.';
-
-describe('addPlatformToRequestChainHeader', () => {
- it('appends SIMORGH to the req-svc-chain header if it exists', () => {
- const headers = { 'req-svc-chain': 'SERVICE_1,SERVICE_2' };
- const result = addPlatformToRequestChainHeader({
- headers,
- });
-
- expect(result).toStrictEqual('SERVICE_1,SERVICE_2,SIMORGH');
- });
-
- it('does not append SIMORGH to the req-svc-chain header if it is the final service', () => {
- const headers = { 'req-svc-chain': 'SERVICE_1,SERVICE_2,SIMORGH' };
- const result = addPlatformToRequestChainHeader({
- headers,
- });
-
- expect(result).toStrictEqual('SERVICE_1,SERVICE_2,SIMORGH');
- });
-
- it('returns SIMORGH if the req-svc-chain header does not exist', () => {
- const headers = { 'header-name': 'header-value' };
- const result = addPlatformToRequestChainHeader({
- headers,
- });
-
- expect(result).toStrictEqual('SIMORGH');
- });
-});
diff --git a/src/server/utilities/addPlatformToRequestChainHeader/index.ts b/src/server/utilities/addPlatformToRequestChainHeader/index.ts
deleted file mode 100644
index a7fccdd687d..00000000000
--- a/src/server/utilities/addPlatformToRequestChainHeader/index.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-export default ({
- headers,
-}: {
- headers: { [x: string]: string } | Headers;
-}) => {
- const requestHeaders = new Headers(headers);
-
- let requestServiceChain = requestHeaders.get('req-svc-chain');
-
- const simorghPlatform = 'SIMORGH';
-
- if (requestServiceChain) {
- if (!requestServiceChain.endsWith(simorghPlatform)) {
- requestServiceChain = `${requestServiceChain},${simorghPlatform}`;
- }
- } else {
- requestServiceChain = simorghPlatform;
- }
-
- return requestServiceChain;
-};
diff --git a/src/server/utilities/serviceConfigs/index.ts b/src/server/utilities/serviceConfigs/index.ts
index 341df90a6fd..ff0d7987f8a 100644
--- a/src/server/utilities/serviceConfigs/index.ts
+++ b/src/server/utilities/serviceConfigs/index.ts
@@ -58,8 +58,8 @@ import { Services, Variants } from '../../../app/models/types/global';
import { ServiceConfig } from '../../../app/models/types/serviceConfig';
type AllServices = {
- [_service in Services]: {
- [_variant in Variants]: ServiceConfig;
+ [s in Services]: {
+ [v in Variants]: ServiceConfig;
};
};
diff --git a/src/testHelpers/jest-setup.js b/src/testHelpers/jest-setup.js
index 8c48ad1d210..e706d1a1127 100644
--- a/src/testHelpers/jest-setup.js
+++ b/src/testHelpers/jest-setup.js
@@ -37,6 +37,12 @@ window.matchMedia = jest.fn().mockImplementation(query => {
// Mock RequireJS globally and let individual tests mock it as needed
window.require = jest.fn();
+global.fetch = fetch;
+global.AbortSignal = {
+ timeout: jest.fn(),
+};
+global.ReadableStream = ReadableStream;
+
process.env.SIMORGH_PUBLIC_STATIC_ASSETS_ORIGIN = 'http://localhost:7080';
process.env.SIMORGH_PUBLIC_STATIC_ASSETS_PATH = '/';
process.env.SIMORGH_ASSETS_MANIFEST_PATH = path.resolve(
diff --git a/ws-nextjs-app/integration/pages/live/serbian/__snapshots__/canonical.test.ts.snap b/ws-nextjs-app/integration/pages/live/serbian/__snapshots__/canonical.test.ts.snap
index fe0c1ab9838..4c75327e7d6 100644
--- a/ws-nextjs-app/integration/pages/live/serbian/__snapshots__/canonical.test.ts.snap
+++ b/ws-nextjs-app/integration/pages/live/serbian/__snapshots__/canonical.test.ts.snap
@@ -53,7 +53,7 @@ exports[`Canonical Live Footer Anchors should match text and url 7`] = `
exports[`Canonical Live Footer Anchors should match text and url 8`] = `
{
- "text": "BBC News na drugim jezicima",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -67,7 +67,7 @@ exports[`Canonical Live Footer Anchors should match text and url 9`] = `
exports[`Canonical Live Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/serbian/lat"`;
-exports[`Canonical Live Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC nije odgovoran za sadržaj drugih sajtova. Pročitajte naša pravila o linkovanju drugih sajtova."`;
+exports[`Canonical Live Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC nije odgovoran za sadržaj drugih sajtova. Pročitajte naša pravila o linkovanju drugih sajtova."`;
exports[`Canonical Live Header I can see the branding 1`] = `"BBC News, na srpskom"`;
@@ -79,41 +79,34 @@ exports[`Canonical Live Header Navigation link should match text and url 1`] = `
`;
exports[`Canonical Live Header Navigation link should match text and url 2`] = `
-{
- "text": "Studentske blokade",
- "url": "/serbian/topics/cly9dd4w09wt/lat",
-}
-`;
-
-exports[`Canonical Live Header Navigation link should match text and url 3`] = `
{
"text": "Srbija",
- "url": "/serbian/topics/cr50vdy9q6wt/lat",
+ "url": "/serbian/lat/topics/cr50vdy9q6wt",
}
`;
-exports[`Canonical Live Header Navigation link should match text and url 4`] = `
+exports[`Canonical Live Header Navigation link should match text and url 3`] = `
{
"text": "Balkan",
- "url": "/serbian/topics/c06g87137jgt/lat",
+ "url": "/serbian/lat/topics/c06g87137jgt",
}
`;
-exports[`Canonical Live Header Navigation link should match text and url 5`] = `
+exports[`Canonical Live Header Navigation link should match text and url 4`] = `
{
"text": "Svet",
- "url": "/serbian/topics/c2lej05e1eqt/lat",
+ "url": "/serbian/lat/topics/c2lej05e1eqt",
}
`;
-exports[`Canonical Live Header Navigation link should match text and url 6`] = `
+exports[`Canonical Live Header Navigation link should match text and url 5`] = `
{
"text": "Video",
- "url": "/serbian/topics/c44vyp5g049t/lat",
+ "url": "/serbian/lat/topics/c44vyp5g049t",
}
`;
-exports[`Canonical Live Header Navigation link should match text and url 7`] = `
+exports[`Canonical Live Header Navigation link should match text and url 6`] = `
{
"text": "Najpopularnije",
"url": "/serbian/lat/popular/read",
diff --git a/ws-nextjs-app/integration/pages/send/mundo/__snapshots__/canonical.test.ts.snap b/ws-nextjs-app/integration/pages/send/mundo/__snapshots__/canonical.test.ts.snap
index 6cebc99c902..12b4e87d7e4 100644
--- a/ws-nextjs-app/integration/pages/send/mundo/__snapshots__/canonical.test.ts.snap
+++ b/ws-nextjs-app/integration/pages/send/mundo/__snapshots__/canonical.test.ts.snap
@@ -53,7 +53,7 @@ exports[`Canonical Send Footer Anchors should match text and url 7`] = `
exports[`Canonical Send Footer Anchors should match text and url 8`] = `
{
- "text": "Otros idiomas",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -67,7 +67,7 @@ exports[`Canonical Send Footer Anchors should match text and url 9`] = `
exports[`Canonical Send Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/mundo"`;
-exports[`Canonical Send Footer Paragraphs should match text 1`] = `"© 2025 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
+exports[`Canonical Send Footer Paragraphs should match text 1`] = `"© 2024 BBC. La BBC no se hace responsable del contenido de sitios externos. Lee sobre nuestra postura acerca de enlaces externos."`;
exports[`Canonical Send Header I can see the branding 1`] = `"BBC News, Mundo"`;
diff --git a/ws-nextjs-app/integration/pages/send/somaliFileUpload/__snapshots__/canonical.test.ts.snap b/ws-nextjs-app/integration/pages/send/somaliFileUpload/__snapshots__/canonical.test.ts.snap
index aa819222490..a066adc79b4 100644
--- a/ws-nextjs-app/integration/pages/send/somaliFileUpload/__snapshots__/canonical.test.ts.snap
+++ b/ws-nextjs-app/integration/pages/send/somaliFileUpload/__snapshots__/canonical.test.ts.snap
@@ -53,7 +53,7 @@ exports[`Canonical Send Footer Anchors should match text and url 7`] = `
exports[`Canonical Send Footer Anchors should match text and url 8`] = `
{
- "text": "Wararka BBC ee luqadaha kale",
+ "text": "Other Languages",
"url": "https://www.bbc.com/ws/languages",
}
`;
@@ -67,7 +67,7 @@ exports[`Canonical Send Footer Anchors should match text and url 9`] = `
exports[`Canonical Send Footer I can click on the BBC branding and it would take me to the homepage 1`] = `"/somali"`;
-exports[`Canonical Send Footer Paragraphs should match text 1`] = `"© 2025 BBC. BBC masuul kama ahan macluumadka bogagga kale ee dibadda. Akhri xogta ku saabsan sida aan u abaarno bogagga dibadda."`;
+exports[`Canonical Send Footer Paragraphs should match text 1`] = `"© 2024 BBC. BBC masuul kama ahan macluumadka bogagga kale ee dibadda. Akhri xogta ku saabsan sida aan u abaarno bogagga dibadda."`;
exports[`Canonical Send Header I can see the branding 1`] = `"BBC News, Somali"`;
diff --git a/ws-nextjs-app/jest.config.ts b/ws-nextjs-app/jest.config.ts
index 0c935a548b8..78ab6c76887 100644
--- a/ws-nextjs-app/jest.config.ts
+++ b/ws-nextjs-app/jest.config.ts
@@ -70,7 +70,6 @@ const unitTests = {
const config: import('jest').Config = {
projects: [unitTests, canonicalIntegrationTests, ampIntegrationTests],
- workerIdleMemoryLimit: '512MB',
};
export default config;
diff --git a/ws-nextjs-app/middleware.page.ts b/ws-nextjs-app/middleware.page.ts
index 49b2aa629e9..53ab75298b7 100644
--- a/ws-nextjs-app/middleware.page.ts
+++ b/ws-nextjs-app/middleware.page.ts
@@ -1,14 +1,13 @@
/* eslint-disable import/prefer-default-export */
-import { NextResponse, NextRequest } from 'next/server';
+import { NextResponse } from 'next/server';
+import { NextRequest } from 'next/server';
-import addPlatformToRequestChainHeader from '#server/utilities/addPlatformToRequestChainHeader';
import cspHeaderResponse from './utilities/cspHeaderResponse';
const LOCALHOST_DOMAINS = ['localhost', '127.0.0.1'];
export function middleware(request: NextRequest) {
const hostname = request.headers.get('host') ?? request.nextUrl.hostname;
- let response = NextResponse.next();
// Service worker is registered at the root (e.g. /pidgin) so will work as is on Test/Live
// but will not work on localhost. This middleware rewrites the request to the sw.js file found in the 'public' folder
@@ -17,15 +16,10 @@ export function middleware(request: NextRequest) {
return NextResponse.rewrite(new URL('/sw.js', request.url));
}
} else if (process.env.NODE_ENV === 'production') {
- response = cspHeaderResponse({ request });
+ return cspHeaderResponse({
+ request,
+ });
}
- response.headers.set(
- 'req-svc-chain',
- addPlatformToRequestChainHeader({
- headers: request.headers,
- }),
- );
-
- return response;
+ return NextResponse.next();
}
diff --git a/ws-nextjs-app/pages/[service]/av-embeds/AvEmbedsMetadata.test.tsx b/ws-nextjs-app/pages/[service]/av-embeds/AvEmbedsMetadata.test.tsx
index 3cf947bc4ab..284ac3af6b4 100644
--- a/ws-nextjs-app/pages/[service]/av-embeds/AvEmbedsMetadata.test.tsx
+++ b/ws-nextjs-app/pages/[service]/av-embeds/AvEmbedsMetadata.test.tsx
@@ -2,11 +2,11 @@ import React from 'react';
import {
render,
waitFor,
-} from '#app/components/react-testing-library-with-providers';
-import serbianCyrCps from '#data/serbian/av-embeds/cyr/srbija-68707945.json';
-import { AV_EMBEDS } from '#app/routes/utils/pageTypes';
-import { MediaBlock } from '#app/components/MediaLoader/types';
+} from '../../../../src/app/components/react-testing-library-with-providers';
+import serbianCyrCps from '../../../../data/serbian/av-embeds/cyr/srbija-68707945.json';
import AvEmbedsMetadata from './AvEmbedsMetadata';
+import { AV_EMBEDS } from '../../../../src/app/routes/utils/pageTypes';
+import { MediaBlock } from '../../../../src/app/components/MediaLoader/types';
const avEmbedsMetadataProps = {
pageData: {
@@ -30,18 +30,6 @@ const avEmbedsMetadataProps = {
};
describe('AV Embeds Page', () => {
- it('should render the noindex meta tag', async () => {
- render( );
-
- await waitFor(() => {
- const actual = document
- .querySelector('head > meta[name="robots"]')
- ?.getAttribute('content');
-
- expect(actual).toEqual('noindex');
- });
- });
-
it('should render the viewport meta tag', async () => {
render( );
diff --git a/ws-nextjs-app/pages/[service]/av-embeds/AvEmbedsMetadata.tsx b/ws-nextjs-app/pages/[service]/av-embeds/AvEmbedsMetadata.tsx
index feec19b339c..5f74ce386cc 100644
--- a/ws-nextjs-app/pages/[service]/av-embeds/AvEmbedsMetadata.tsx
+++ b/ws-nextjs-app/pages/[service]/av-embeds/AvEmbedsMetadata.tsx
@@ -10,7 +10,6 @@ const AvEmbedsMetadata = ({ pageData }: AvEmbedsPageProps) => {
return (
-
{
const helmetMetaTags = Helmet.peek()?.metaTags;
expect(helmetMetaTags).toEqual([
- { name: 'robots', content: 'noindex' },
{
name: 'viewport',
content: 'width=device-width, initial-scale=1, user-scalable=1',
diff --git a/ws-nextjs-app/pages/[service]/av-embeds/handleAvRoute.test.ts b/ws-nextjs-app/pages/[service]/av-embeds/handleAvRoute.test.ts
index 264e82e746d..eea5af4d322 100644
--- a/ws-nextjs-app/pages/[service]/av-embeds/handleAvRoute.test.ts
+++ b/ws-nextjs-app/pages/[service]/av-embeds/handleAvRoute.test.ts
@@ -71,15 +71,6 @@ describe('Handle AV Route', () => {
});
});
- it('should set the x-robots-tag header to noindex', async () => {
- await handleAvRoute(mockGetServerSidePropsContext);
-
- expect(mockGetServerSidePropsContext.res.setHeader).toHaveBeenCalledWith(
- 'x-robots-tag',
- 'noindex',
- );
- });
-
it('should remove the x-frame-options header', async () => {
await handleAvRoute(mockGetServerSidePropsContext);
diff --git a/ws-nextjs-app/pages/[service]/av-embeds/handleAvRoute.ts b/ws-nextjs-app/pages/[service]/av-embeds/handleAvRoute.ts
index 6c829579c40..3850703996f 100644
--- a/ws-nextjs-app/pages/[service]/av-embeds/handleAvRoute.ts
+++ b/ws-nextjs-app/pages/[service]/av-embeds/handleAvRoute.ts
@@ -26,19 +26,16 @@ export default async (context: GetServerSidePropsContext) => {
let pageStatus;
let pageJson;
- // Set x-robots-tag header to prevent search engine indexing
- context.res.setHeader('x-robots-tag', 'noindex');
+ // Remove x-frame-options header to allow embedding
+ context.res.removeHeader('x-frame-options');
+
+ const parsedRoute = parseAvRoute(resolvedUrl);
context.res.setHeader(
'Cache-Control',
'public, stale-if-error=90, stale-while-revalidate=30, max-age=30',
);
- // Remove x-frame-options header to allow embedding
- context.res.removeHeader('x-frame-options');
-
- const parsedRoute = parseAvRoute(resolvedUrl);
-
const avEmbedsUrl = constructPageFetchUrl({
pageType: AV_EMBEDS,
pathname: resolvedUrl,
diff --git a/ws-nextjs-app/pages/[service]/live/[id]/Header/LiveLabelHeader/index.styles.ts b/ws-nextjs-app/pages/[service]/live/[id]/Header/LiveLabelHeader/index.styles.ts
index f620f8ff0f1..81d8f948fce 100644
--- a/ws-nextjs-app/pages/[service]/live/[id]/Header/LiveLabelHeader/index.styles.ts
+++ b/ws-nextjs-app/pages/[service]/live/[id]/Header/LiveLabelHeader/index.styles.ts
@@ -25,13 +25,7 @@ const styles = {
color: 'canvasText',
},
}),
- liveLabelTextWithImage: ({
- palette,
- spacings,
- fontSizes,
- fontVariants,
- mq,
- }: Theme) =>
+ liveLabelTextWithImage: ({ palette, fontSizes, fontVariants, mq }: Theme) =>
css({
'span:first-of-type': {
color: palette.LIVE_LIGHT,
@@ -42,9 +36,6 @@ const styles = {
...fontSizes.paragon,
},
},
- 'span:nth-of-type(3)': {
- marginTop: `${spacings.DOUBLE}rem`,
- },
}),
liveLabelTextWithoutImage: ({
mq,
diff --git a/ws-nextjs-app/pages/[service]/live/[id]/Header/LiveLabelHeader/index.tsx b/ws-nextjs-app/pages/[service]/live/[id]/Header/LiveLabelHeader/index.tsx
index c3277ba58ef..4a66e8ec7cf 100644
--- a/ws-nextjs-app/pages/[service]/live/[id]/Header/LiveLabelHeader/index.tsx
+++ b/ws-nextjs-app/pages/[service]/live/[id]/Header/LiveLabelHeader/index.tsx
@@ -2,8 +2,7 @@
import { PropsWithChildren } from 'react';
import { jsx } from '@emotion/react';
import { LiveLabelProps } from '#app/components/LiveLabel/types';
-import LivePulse from '#app/components/LivePulse';
-import LiveText from '#app/components/LiveText';
+import LiveLabel from '#app/components/LiveLabel';
import styles from './index.styles';
interface LiveLabelPromoProps extends LiveLabelProps {
@@ -20,13 +19,13 @@ const LiveLabelHeader = ({
}: PropsWithChildren) => {
return (
-
-
{children}
-
+
);
};
diff --git a/ws-nextjs-app/pages/[service]/live/[id]/Header/index.stories.tsx b/ws-nextjs-app/pages/[service]/live/[id]/Header/index.stories.tsx
index 9cd2b5d93e5..ed05f7e3506 100644
--- a/ws-nextjs-app/pages/[service]/live/[id]/Header/index.stories.tsx
+++ b/ws-nextjs-app/pages/[service]/live/[id]/Header/index.stories.tsx
@@ -1,6 +1,4 @@
import React from 'react';
-import mundoLiveFixture from '#data/mundo/live/c7dkx155e626t.json';
-import { MediaCollection } from '#app/components/MediaLoader/types';
import Header from '.';
import metadata from './metadata.json';
@@ -11,7 +9,6 @@ interface ComponentProps {
imageUrl?: string;
imageUrlTemplate?: string;
imageWidth?: number;
- mediaCollections?: MediaCollection[] | null;
}
const Component = ({
@@ -21,7 +18,6 @@ const Component = ({
imageUrl,
imageUrlTemplate,
imageWidth,
- mediaCollections,
}: ComponentProps) => {
return (
);
};
@@ -138,17 +133,3 @@ export const TitleAndDescriptionWithLiveLabelAndImageExtraLongText = () => (
imageWidth={660}
/>
);
-
-export const WithLiveMediaStream = () => (
-
-);
diff --git a/ws-nextjs-app/pages/[service]/live/[id]/Header/index.tsx b/ws-nextjs-app/pages/[service]/live/[id]/Header/index.tsx
index 7eec08f4af7..892153afa5c 100644
--- a/ws-nextjs-app/pages/[service]/live/[id]/Header/index.tsx
+++ b/ws-nextjs-app/pages/[service]/live/[id]/Header/index.tsx
@@ -2,11 +2,8 @@
import { jsx } from '@emotion/react';
import Heading from '#app/components/Heading';
import Text from '#app/components/Text';
-import LiveHeaderMedia from '#app/components/LiveHeaderMedia';
-import { MediaCollection } from '#app/components/MediaLoader/types';
import MaskedImage from '#app/components/MaskedImage';
-import { useState } from 'react';
import LiveLabelHeader from './LiveLabelHeader';
import styles from './styles';
@@ -17,7 +14,6 @@ const Header = ({
imageUrl,
imageUrlTemplate,
imageWidth,
- mediaCollections,
}: {
showLiveLabel: boolean;
title: string;
@@ -25,19 +21,12 @@ const Header = ({
imageUrl?: string;
imageUrlTemplate?: string;
imageWidth?: number;
- mediaCollections?: MediaCollection[] | null;
}) => {
- const [isMediaOpen, setLiveMediaOpen] = useState(false);
const isHeaderImage = !!imageUrl && !!imageUrlTemplate && !!imageWidth;
- const isWithImageLayout = isHeaderImage || !!mediaCollections;
-
- const watchVideoClickHandler = () => {
- setLiveMediaOpen(!isMediaOpen);
- };
const Title = (
{title}
@@ -49,21 +38,19 @@ const Header = ({
-
- {isHeaderImage ? (
-
- ) : null}
-
+ {isHeaderImage ? (
+
+ ) : null}
{showLiveLabel ? (
-
+
{Title}
) : (
@@ -86,7 +73,7 @@ const Header = ({
css={[
styles.description,
showLiveLabel &&
- !isWithImageLayout &&
+ !isHeaderImage &&
styles.layoutWithLiveLabelNoImage,
]}
>
@@ -94,14 +81,6 @@ const Header = ({
)}
- {mediaCollections && (
-
-
-
- )}
);
diff --git a/ws-nextjs-app/pages/[service]/live/[id]/Header/styles.tsx b/ws-nextjs-app/pages/[service]/live/[id]/Header/styles.tsx
index 526300cd7e8..07a3996cba5 100644
--- a/ws-nextjs-app/pages/[service]/live/[id]/Header/styles.tsx
+++ b/ws-nextjs-app/pages/[service]/live/[id]/Header/styles.tsx
@@ -17,12 +17,6 @@ export default {
outline: 'none',
},
}),
- hideMaskedImage: ({ mq }: Theme) =>
- css({
- [mq.GROUP_4_MIN_WIDTH]: {
- opacity: 0,
- },
- }),
backgroundContainer: () =>
css({
position: 'absolute',
@@ -48,31 +42,6 @@ export default {
width: '100%',
},
}),
- liveMedia: ({ mq, spacings }: Theme) =>
- css({
- padding: `0rem ${spacings.FULL}rem ${spacings.DOUBLE}rem`,
- [mq.GROUP_2_MIN_WIDTH]: {
- padding: `0rem ${spacings.DOUBLE}rem ${spacings.DOUBLE}rem`,
- },
- [mq.GROUP_4_MIN_WIDTH]: {
- padding: `${spacings.DOUBLE}rem ${spacings.DOUBLE}rem ${pixelsToRem(40)}rem`,
- maxWidth: '50%', // determines width of text overlay.
- },
- }),
- liveMediaOpen: ({ mq }: Theme) =>
- css({
- [mq.GROUP_4_MIN_WIDTH]: {
- maxWidth: '100%',
- },
- }),
- fixedHeight: ({ mq, spacings }: Theme) =>
- css({
- [mq.GROUP_4_MIN_WIDTH]: {
- minHeight: '0',
- padding: `${pixelsToRem(40)}rem ${spacings.DOUBLE}rem 0`,
- maxWidth: '50%', // determines width of text overlay.
- },
- }),
textContainerWithoutImage: ({ mq, gridWidths, spacings }: Theme) =>
css({
position: 'relative',
@@ -82,6 +51,7 @@ export default {
[mq.GROUP_2_MIN_WIDTH]: {
padding: `${spacings.DOUBLE}rem`,
},
+
[mq.GROUP_4_MIN_WIDTH]: {
paddingTop: `${spacings.TRIPLE}rem`,
paddingBottom: `${spacings.QUADRUPLE}rem`,
diff --git a/ws-nextjs-app/pages/[service]/live/[id]/LivePageLayout.tsx b/ws-nextjs-app/pages/[service]/live/[id]/LivePageLayout.tsx
index 02c124a4db9..89070a1eafb 100644
--- a/ws-nextjs-app/pages/[service]/live/[id]/LivePageLayout.tsx
+++ b/ws-nextjs-app/pages/[service]/live/[id]/LivePageLayout.tsx
@@ -11,7 +11,6 @@ import { RequestContext } from '#app/contexts/RequestContext';
import MetadataContainer from '#app/components/Metadata';
import LinkedDataContainer from '#app/components/LinkedData';
import getLiveBlogPostingSchema from '#app/lib/seoUtils/getLiveBlogPostingSchema';
-import { MediaCollection } from '#app/components/MediaLoader/types';
import Stream from './Stream';
import Header from './Header';
import KeyPoints from './KeyPoints';
@@ -29,7 +28,7 @@ interface LivePromoImage {
copyright?: string;
}
-export type ComponentProps = {
+type ComponentProps = {
pageData: {
title: string;
description?: string;
@@ -54,7 +53,6 @@ export type ComponentProps = {
startDateTime?: string;
endDateTime?: string;
metadata: { atiAnalytics: ATIData };
- mediaCollections: MediaCollection[] | null;
};
};
@@ -74,7 +72,6 @@ const LivePage = ({ pageData }: ComponentProps) => {
metadata: { atiAnalytics = undefined } = {},
headerImage,
promoImage,
- mediaCollections,
} = pageData;
const {
@@ -154,7 +151,6 @@ const LivePage = ({ pageData }: ComponentProps) => {
imageUrl={imageUrl}
imageUrlTemplate={imageUrlTemplate}
imageWidth={imageWidth}
- mediaCollections={mediaCollections}
/>
diff --git a/ws-nextjs-app/pages/[service]/live/[id]/__snapshots__/live.test.tsx.snap b/ws-nextjs-app/pages/[service]/live/[id]/__snapshots__/live.test.tsx.snap
index 3d5020bd544..2a1d91d41bb 100644
--- a/ws-nextjs-app/pages/[service]/live/[id]/__snapshots__/live.test.tsx.snap
+++ b/ws-nextjs-app/pages/[service]/live/[id]/__snapshots__/live.test.tsx.snap
@@ -43,7 +43,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
}
-.emotion-5 {
+.emotion-4 {
position: relative;
padding: 1rem 0.5rem;
max-width: 80rem;
@@ -51,19 +51,19 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 25rem) {
- .emotion-5 {
+ .emotion-4 {
padding: 1rem;
}
}
@media (min-width: 63rem) {
- .emotion-5 {
+ .emotion-4 {
padding-top: 1.5rem;
padding-bottom: 2rem;
}
}
-.emotion-6 {
+.emotion-5 {
color: #141414;
font-size: 1.25rem;
line-height: 1.5rem;
@@ -74,37 +74,37 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-6 {
+ .emotion-5 {
font-size: 1.5rem;
line-height: 1.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-6 {
+ .emotion-5 {
font-size: 2rem;
line-height: 2.25rem;
}
}
-.emotion-6:focus {
+.emotion-5:focus {
outline: none;
}
-.emotion-7 {
+.emotion-6 {
display: block;
color: #FEFEFE;
margin-top: 1rem;
}
@media (max-width: 14.9375rem) {
- .emotion-7 {
+ .emotion-6 {
margin-top: 0.5rem;
}
}
@media (min-width: 63rem) {
- .emotion-7 {
+ .emotion-6 {
width: calc(100% / 3 * 2);
display: -webkit-inline-box;
display: -webkit-inline-flex;
@@ -115,7 +115,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 80rem) {
- .emotion-7 {
+ .emotion-6 {
display: -webkit-inline-box;
display: -webkit-inline-flex;
display: -ms-inline-flexbox;
@@ -124,7 +124,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
}
-.emotion-8 {
+.emotion-7 {
color: #141414;
font-size: 0.9375rem;
line-height: 1.25rem;
@@ -137,20 +137,20 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-8 {
+ .emotion-7 {
font-size: 1rem;
line-height: 1.25rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-8 {
+ .emotion-7 {
font-size: 1rem;
line-height: 1.25rem;
}
}
-.emotion-9 {
+.emotion-8 {
max-width: 80rem;
margin: 0 auto;
display: grid;
@@ -159,13 +159,13 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 25rem) {
- .emotion-9 {
+ .emotion-8 {
padding: 1rem;
}
}
@media (min-width: 63rem) {
- .emotion-9 {
+ .emotion-8 {
-webkit-padding-start: 1rem;
padding-inline-start: 1rem;
-webkit-padding-end: 1rem;
@@ -177,23 +177,23 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
}
-.emotion-10 {
+.emotion-9 {
grid-column: 1/13;
}
@media (min-width: 63rem) {
- .emotion-10 {
+ .emotion-9 {
grid-column: 1/5;
}
}
@media (min-width: 80rem) {
- .emotion-10 {
+ .emotion-9 {
grid-column: 1/4;
}
}
-.emotion-11 {
+.emotion-10 {
color: #141414;
font-size: 1.25rem;
line-height: 1.5rem;
@@ -205,40 +205,40 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-11 {
+ .emotion-10 {
font-size: 1.5rem;
line-height: 1.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-11 {
+ .emotion-10 {
font-size: 2rem;
line-height: 2.25rem;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-11 {
+ .emotion-10 {
padding-top: 0;
}
}
@media (min-width: 37.5rem) {
- .emotion-11 {
+ .emotion-10 {
font-size: 1.125rem;
line-height: 1.375rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-11 {
+ .emotion-10 {
font-size: 1.25rem;
line-height: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-11 {
+ .emotion-10 {
font-size: 1.5rem;
line-height: 1.75rem;
}
@@ -246,12 +246,12 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 63rem) {
- .emotion-11 {
+ .emotion-10 {
padding-top: 1rem;
}
}
-.emotion-12 {
+.emotion-11 {
color: #141414;
background-color: #F6F6F6;
border: solid 0.1875rem transparent;
@@ -259,37 +259,37 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 25rem) {
- .emotion-12 {
+ .emotion-11 {
padding: 1rem 0 1rem;
}
}
@media (min-width: 63rem) {
- .emotion-12 {
+ .emotion-11 {
padding: 1rem 1rem 1rem;
}
}
-.emotion-12 li {
+.emotion-11 li {
-webkit-padding-start: 0.1875rem;
padding-inline-start: 0.1875rem;
}
-.emotion-12 li:last-child {
+.emotion-11 li:last-child {
margin-bottom: 0;
}
-.emotion-12 ul {
+.emotion-11 ul {
-webkit-padding-start: 1rem;
padding-inline-start: 1rem;
margin-bottom: 0;
}
-.emotion-12 p {
+.emotion-11 p {
padding-bottom: 0;
}
-.emotion-12 a {
+.emotion-11 a {
color: #141414;
font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
font-style: normal;
@@ -297,63 +297,63 @@ exports[`Live Page creates snapshot of the live page 1`] = `
border-bottom: 0.0625rem solid #141414;
}
-.emotion-12 a:visited {
+.emotion-11 a:visited {
color: #545658;
}
-.emotion-14 {
+.emotion-13 {
margin-bottom: 1.5rem;
}
@media (max-width: 14.9375rem) {
- .emotion-14 {
+ .emotion-13 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-14 {
+ .emotion-13 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-14 {
+ .emotion-13 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-14 {
+ .emotion-13 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-14 {
+ .emotion-13 {
margin-left: 20%;
}
}
@media (min-width: 80rem) {
- .emotion-14 {
+ .emotion-13 {
margin-left: 40%;
}
}
@supports (display: grid) {
- .emotion-14 {
+ .emotion-13 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-14 {
+ .emotion-13 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -362,7 +362,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-14 {
+ .emotion-13 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -371,7 +371,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-14 {
+ .emotion-13 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 1rem;
@@ -380,7 +380,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-14 {
+ .emotion-13 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
padding: 0 1rem;
@@ -389,7 +389,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-14 {
+ .emotion-13 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
grid-column-start: 2;
@@ -397,7 +397,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 80rem) {
- .emotion-14 {
+ .emotion-13 {
grid-template-columns: repeat(10, 1fr);
grid-column-end: span 10;
grid-column-start: 5;
@@ -405,7 +405,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
}
-.emotion-16 {
+.emotion-15 {
margin-top: 0;
list-style-type: none;
font-size: 0.9375rem;
@@ -416,25 +416,25 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-16 {
+ .emotion-15 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-16 {
+ .emotion-15 {
font-size: 1rem;
line-height: 1.375rem;
}
}
-.emotion-16>li {
+.emotion-15>li {
position: relative;
color: inherit;
}
-.emotion-16>li::before {
+.emotion-15>li::before {
top: 0.5rem;
content: "";
position: absolute;
@@ -442,51 +442,51 @@ exports[`Live Page creates snapshot of the live page 1`] = `
inset-inline-start: -1rem;
}
-.emotion-16>li::before {
+.emotion-15>li::before {
border: 0.1875rem solid #141414;
background-color: #141414;
border-radius: 0;
}
-.emotion-17 {
+.emotion-16 {
margin-bottom: 1rem;
}
-.emotion-20 {
+.emotion-19 {
color: #222222;
border-bottom: 1px solid #B80000;
-webkit-text-decoration: none;
text-decoration: none;
}
-.emotion-20:visited {
+.emotion-19:visited {
color: #6E6E73;
border-bottom: 1px solid #6E6E73;
}
-.emotion-20:focus,
-.emotion-20:hover {
+.emotion-19:focus,
+.emotion-19:hover {
border-bottom: 2px solid #B80000;
color: #B80000;
}
-.emotion-22 {
+.emotion-21 {
grid-column: 1/13;
}
@media (min-width: 63rem) {
- .emotion-22 {
+ .emotion-21 {
grid-column: 5/13;
}
}
@media (min-width: 80rem) {
- .emotion-22 {
+ .emotion-21 {
grid-column: 4/10;
}
}
-.emotion-23 {
+.emotion-22 {
color: #141414;
font-size: 1.25rem;
line-height: 1.5rem;
@@ -498,35 +498,35 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-23 {
+ .emotion-22 {
font-size: 1.5rem;
line-height: 1.75rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-23 {
+ .emotion-22 {
font-size: 2rem;
line-height: 2.25rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-23 {
+ .emotion-22 {
font-size: 1.125rem;
line-height: 1.375rem;
padding-top: 1.5rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-23 {
+ .emotion-22 {
font-size: 1.25rem;
line-height: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-23 {
+ .emotion-22 {
font-size: 1.5rem;
line-height: 1.75rem;
}
@@ -534,12 +534,12 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 63rem) {
- .emotion-23 {
+ .emotion-22 {
padding-top: 1rem;
}
}
-.emotion-24 {
+.emotion-23 {
color: #141414;
font-size: 0.9375rem;
line-height: 1.25rem;
@@ -551,59 +551,59 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-24 {
+ .emotion-23 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-24 {
+ .emotion-23 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-24 {
+ .emotion-23 {
padding-bottom: 1.5rem;
}
}
-.emotion-25 {
+.emotion-24 {
margin-block: 0;
padding-inline: 0;
}
-.emotion-26 {
+.emotion-25 {
list-style-type: none;
}
-.emotion-27 {
+.emotion-26 {
background-color: #F6F6F6;
margin: 0 0 1rem;
}
@media (min-width: 25rem) {
- .emotion-27 {
+ .emotion-26 {
margin: 0 0 1.5rem;
}
}
@media (min-width: 63rem) {
- .emotion-27 {
+ .emotion-26 {
margin: 0 0 1rem;
}
}
@media screen and (forced-colors: active) {
- .emotion-27 {
+ .emotion-26 {
border: solid 0.1875rem transparent;
border-top: solid 0.0625rem transparent;
}
}
-.emotion-28 {
+.emotion-27 {
color: #141414;
font-size: 1.125rem;
line-height: 1.375rem;
@@ -614,26 +614,26 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-28 {
+ .emotion-27 {
font-size: 1.25rem;
line-height: 1.5rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-28 {
+ .emotion-27 {
font-size: 1.5rem;
line-height: 1.75rem;
}
}
@media (min-width: 15rem) {
- .emotion-28 {
+ .emotion-27 {
line-height: 0;
}
}
-.emotion-29 {
+.emotion-28 {
border-top: solid 0.125rem #B80000;
display: inline-block;
width: 100%;
@@ -641,12 +641,12 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media screen and (forced-colors: active) {
- .emotion-29 {
+ .emotion-28 {
border-bottom: solid 0.1875rem transparent;
}
}
-.emotion-30 {
+.emotion-29 {
font-size: 0.875rem;
line-height: 1.125rem;
color: #545658;
@@ -666,34 +666,34 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-30 {
+ .emotion-29 {
font-size: 0.875rem;
line-height: 1.125rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-30 {
+ .emotion-29 {
font-size: 0.8125rem;
line-height: 1rem;
}
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-30 {
+ .emotion-29 {
font-size: 0.875rem;
line-height: 1.125rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-30 {
+ .emotion-29 {
font-size: 0.8125rem;
line-height: 1rem;
}
}
-.emotion-32 {
+.emotion-31 {
color: #141414;
font-size: 0.875rem;
line-height: 1.125rem;
@@ -707,20 +707,20 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-32 {
+ .emotion-31 {
font-size: 0.875rem;
line-height: 1.125rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-32 {
+ .emotion-31 {
font-size: 0.8125rem;
line-height: 1rem;
}
}
-.emotion-33 {
+.emotion-32 {
-webkit-clip-path: inset(100%);
clip-path: inset(100%);
clip: rect(1px, 1px, 1px, 1px);
@@ -731,7 +731,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
margin: 0;
}
-.emotion-34 {
+.emotion-33 {
color: #141414;
font-size: 1.125rem;
line-height: 1.375rem;
@@ -746,84 +746,84 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-34 {
+ .emotion-33 {
font-size: 1.125rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-34 {
+ .emotion-33 {
font-size: 1.25rem;
line-height: 1.5rem;
}
}
-.emotion-35 {
+.emotion-34 {
padding: 1rem 0.5rem 0.5rem;
}
@media (min-width: 25rem) {
- .emotion-35 {
+ .emotion-34 {
padding: 1rem 0 0.5rem 0;
}
}
@media (min-width: 63rem) {
- .emotion-35 {
+ .emotion-34 {
padding: 1rem 1rem 0.5rem;
}
}
@media (max-width: 14.9375rem) {
- .emotion-36 {
+ .emotion-35 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-36 {
+ .emotion-35 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-36 {
+ .emotion-35 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-36 {
+ .emotion-35 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-36 {
+ .emotion-35 {
margin-left: 20%;
}
}
@media (min-width: 80rem) {
- .emotion-36 {
+ .emotion-35 {
margin-left: 40%;
}
}
@supports (display: grid) {
- .emotion-36 {
+ .emotion-35 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-36 {
+ .emotion-35 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -832,7 +832,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-36 {
+ .emotion-35 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -841,7 +841,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-36 {
+ .emotion-35 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 1rem;
@@ -850,7 +850,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-36 {
+ .emotion-35 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
padding: 0 1rem;
@@ -859,7 +859,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-36 {
+ .emotion-35 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
grid-column-start: 2;
@@ -867,7 +867,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 80rem) {
- .emotion-36 {
+ .emotion-35 {
grid-template-columns: repeat(10, 1fr);
grid-column-end: span 10;
grid-column-start: 5;
@@ -875,7 +875,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
}
-.emotion-38 {
+.emotion-37 {
font-size: 0.9375rem;
line-height: 1.25rem;
font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
@@ -890,58 +890,58 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-38 {
+ .emotion-37 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-38 {
+ .emotion-37 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 63rem) {
- .emotion-38 {
+ .emotion-37 {
padding-right: 2.5rem;
}
}
-.emotion-38 ul {
+.emotion-37 ul {
padding-bottom: 1rem;
-webkit-padding-start: 1.5rem;
padding-inline-start: 1.5rem;
}
@media (min-width: 63rem) {
- .emotion-38 ul {
+ .emotion-37 ul {
padding-bottom: 0;
}
}
-.emotion-38 li {
+.emotion-37 li {
margin-bottom: 0.5rem;
}
-.emotion-38 li:last-child {
+.emotion-37 li:last-child {
margin-bottom: 0;
}
-.emotion-43 {
+.emotion-42 {
border-top: solid 0.125rem #B80000;
display: inline-block;
width: 100%;
}
@media screen and (forced-colors: active) {
- .emotion-43 {
+ .emotion-42 {
border-bottom: solid 0.1875rem transparent;
}
}
-.emotion-60 {
+.emotion-59 {
color: #141414;
font-size: 0.875rem;
line-height: 1.125rem;
@@ -956,41 +956,41 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-60 {
+ .emotion-59 {
font-size: 0.875rem;
line-height: 1.125rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-60 {
+ .emotion-59 {
font-size: 0.8125rem;
line-height: 1rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-60 {
+ .emotion-59 {
font-size: 0.9375rem;
line-height: 1.125rem;
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-60 {
+ .emotion-59 {
font-size: 0.9375rem;
line-height: 1.125rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-60 {
+ .emotion-59 {
font-size: 0.875rem;
line-height: 1.125rem;
}
}
}
-.emotion-66 {
+.emotion-65 {
font-family: Helmet,Freesans,Helvetica,Arial,sans-serif;
font-weight: 400;
font-style: italic;
@@ -998,7 +998,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
font-weight: inherit;
}
-.emotion-69 {
+.emotion-68 {
margin-bottom: 1.5rem;
color: #000000;
margin: 0;
@@ -1006,54 +1006,54 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (max-width: 14.9375rem) {
- .emotion-69 {
+ .emotion-68 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-69 {
+ .emotion-68 {
padding: 0 0.5rem;
margin-left: 0%;
}
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-69 {
+ .emotion-68 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-69 {
+ .emotion-68 {
padding: 0 1rem;
margin-left: 0%;
}
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-69 {
+ .emotion-68 {
margin-left: 20%;
}
}
@media (min-width: 80rem) {
- .emotion-69 {
+ .emotion-68 {
margin-left: 40%;
}
}
@supports (display: grid) {
- .emotion-69 {
+ .emotion-68 {
display: block;
width: initial;
margin: 0;
}
@media (max-width: 14.9375rem) {
- .emotion-69 {
+ .emotion-68 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -1062,7 +1062,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 15rem) and (max-width: 24.9375rem) {
- .emotion-69 {
+ .emotion-68 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 0.5rem;
@@ -1071,7 +1071,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 25rem) and (max-width: 37.4375rem) {
- .emotion-69 {
+ .emotion-68 {
grid-template-columns: repeat(6, 1fr);
grid-column-end: span 6;
padding: 0 1rem;
@@ -1080,7 +1080,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 37.5rem) and (max-width: 62.9375rem) {
- .emotion-69 {
+ .emotion-68 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
padding: 0 1rem;
@@ -1089,7 +1089,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 63rem) and (max-width: 79.9375rem) {
- .emotion-69 {
+ .emotion-68 {
grid-template-columns: repeat(5, 1fr);
grid-column-end: span 5;
grid-column-start: 2;
@@ -1097,7 +1097,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 80rem) {
- .emotion-69 {
+ .emotion-68 {
grid-template-columns: repeat(10, 1fr);
grid-column-end: span 10;
grid-column-start: 5;
@@ -1105,27 +1105,27 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
}
-.emotion-69 ul {
+.emotion-68 ul {
padding-bottom: 1rem;
-webkit-padding-start: 1.5rem;
padding-inline-start: 1.5rem;
}
@media (min-width: 63rem) {
- .emotion-69 ul {
+ .emotion-68 ul {
padding-bottom: 0;
}
}
-.emotion-69 li {
+.emotion-68 li {
margin-bottom: 0.5rem;
}
-.emotion-69 li:last-child {
+.emotion-68 li:last-child {
margin-bottom: 0;
}
-.emotion-71 {
+.emotion-70 {
margin-top: 0;
list-style-type: none;
font-size: 0.9375rem;
@@ -1136,25 +1136,25 @@ exports[`Live Page creates snapshot of the live page 1`] = `
}
@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-71 {
+ .emotion-70 {
font-size: 1rem;
line-height: 1.375rem;
}
}
@media (min-width: 37.5rem) {
- .emotion-71 {
+ .emotion-70 {
font-size: 1rem;
line-height: 1.375rem;
}
}
-.emotion-71>li {
+.emotion-70>li {
position: relative;
color: inherit;
}
-.emotion-71>li::before {
+.emotion-70>li::before {
top: 0.5rem;
content: "";
position: absolute;
@@ -1162,7 +1162,7 @@ exports[`Live Page creates snapshot of the live page 1`] = `
inset-inline-start: -1rem;
}
-.emotion-71>li::before {
+.emotion-70>li::before {
border: 0.1875rem solid #3F3F42;
background-color: #3F3F42;
border-radius: 50%;
@@ -1186,23 +1186,20 @@ exports[`Live Page creates snapshot of the live page 1`] = `
>
-
Israeli tanks shell Jabalia camp as heavy fighting continues in north Gaza
The refugee camp has been hit by hundreds of shells, where Hamas says 100,000 people are still sheltering
@@ -1210,10 +1207,10 @@ exports[`Live Page creates snapshot of the live page 1`] = `
Summary
Live Coverage
Not a random dude
@@ -1299,42 +1296,42 @@ exports[`Live Page creates snapshot of the live page 1`] = `
role="text"
>
9 May 2023
Breaking
,
Breaking news
Breaking news
@@ -1344,13 +1341,13 @@ exports[`Live Page creates snapshot of the live page 1`] = `
@@ -1358,31 +1355,31 @@ exports[`Live Page creates snapshot of the live page 1`] = `
role="text"
>
9 May 2023
Published 6.07pm Tues 9th
Timestamp test
@@ -1392,13 +1389,13 @@ exports[`Live Page creates snapshot of the live page 1`] = `
@@ -1406,87 +1403,87 @@ exports[`Live Page creates snapshot of the live page 1`] = `
role="text"
>
21 March 2023
Another post
,
Another post sub headline
one
two
three
@@ -1494,48 +1491,48 @@ exports[`Live Page creates snapshot of the live page 1`] = `
Bullet 1
Bullet 2
Bullet 3
@@ -1543,25 +1540,25 @@ exports[`Live Page creates snapshot of the live page 1`] = `
Here is a
Link
@@ -1572,13 +1569,13 @@ exports[`Live Page creates snapshot of the live page 1`] = `
@@ -1586,41 +1583,41 @@ exports[`Live Page creates snapshot of the live page 1`] = `
role="text"
>
21 March 2023
Post headline
,
Post sub headline
Some short form text
diff --git a/ws-nextjs-app/pages/[service]/live/[id]/live.stories.tsx b/ws-nextjs-app/pages/[service]/live/[id]/live.stories.tsx
index 7ae18ff9317..7cd63c75142 100644
--- a/ws-nextjs-app/pages/[service]/live/[id]/live.stories.tsx
+++ b/ws-nextjs-app/pages/[service]/live/[id]/live.stories.tsx
@@ -1,12 +1,8 @@
import React from 'react';
import PageLayoutWrapper from '#app/components/PageLayoutWrapper';
import liveFixture from '#data/pidgin/live/c7p765ynk9qt.json';
-import liveFixtureWithLiveMedia from '#data/mundo/live/c7dkx155e626t.json';
import postFixture from '#data/pidgin/posts/postFixtureCleaned.json';
-import Live, { ComponentProps } from './LivePageLayout';
-
-const mockLiveData =
- liveFixtureWithLiveMedia.data as ComponentProps['pageData'];
+import Live from './LivePageLayout';
const mockPageData = {
...liveFixture.data,
@@ -18,13 +14,12 @@ const mockPageData = {
block: 'Its a block',
},
metadata: { atiAnalytics: {} },
- mediaCollections: null,
};
-const Component = ({ pageData }: ComponentProps) => (
+const Component = () => (
// @ts-expect-error partial data required for storybook
-
-
+
+
);
@@ -33,5 +28,4 @@ export default {
Component,
};
-export const Example = () => ;
-export const WithLiveStream = () => ;
+export const Example = Component;
diff --git a/ws-nextjs-app/pages/[service]/send/[id]/FormScreen/__snapshots__/index.test.tsx.snap b/ws-nextjs-app/pages/[service]/send/[id]/FormScreen/__snapshots__/index.test.tsx.snap
index 32c5520bcea..c8428ef207f 100644
--- a/ws-nextjs-app/pages/[service]/send/[id]/FormScreen/__snapshots__/index.test.tsx.snap
+++ b/ws-nextjs-app/pages/[service]/send/[id]/FormScreen/__snapshots__/index.test.tsx.snap
@@ -214,88 +214,6 @@ exports[`Form should render and match snapshot 1`] = `
outline-offset: 0.1875rem;
}
-.emotion-8 {
- scroll-margin-top: 2.75rem;
- border: solid 0.0625rem #141414;
- outline: solid 0.0625rem transparent;
- width: 100%;
- min-height: 2.75rem;
- padding: 0.5rem;
- font-family: ReithSans,Helvetica,Arial,sans-serif;
- font-style: normal;
- font-weight: 400;
- font-size: 0.9375rem;
- line-height: 1.25rem;
-}
-
-@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-8 {
- font-size: 1rem;
- line-height: 1.25rem;
- }
-}
-
-@media (min-width: 37.5rem) {
- .emotion-8 {
- font-size: 1rem;
- line-height: 1.25rem;
- }
-}
-
-@media screen and (forced-colors: active) {
- .emotion-8 {
- border-color: canvasText;
- outline: 0;
- }
-}
-
-.emotion-8:focus {
- outline: 0.1875rem solid #FFFFFF;
- box-shadow: 0 0 0 0.1875rem #000000;
- outline-offset: 0.1875rem;
-}
-
-.emotion-14 {
- scroll-margin-top: 2.75rem;
- border: solid 0.0625rem #141414;
- outline: solid 0.0625rem transparent;
- width: 100%;
- min-height: 2.75rem;
- padding: 0.5rem;
- font-family: ReithSans,Helvetica,Arial,sans-serif;
- font-style: normal;
- font-weight: 400;
- font-size: 0.9375rem;
- line-height: 1.25rem;
-}
-
-@media (min-width: 20rem) and (max-width: 37.4375rem) {
- .emotion-14 {
- font-size: 1rem;
- line-height: 1.25rem;
- }
-}
-
-@media (min-width: 37.5rem) {
- .emotion-14 {
- font-size: 1rem;
- line-height: 1.25rem;
- }
-}
-
-@media screen and (forced-colors: active) {
- .emotion-14 {
- border-color: canvasText;
- outline: 0;
- }
-}
-
-.emotion-14:focus {
- outline: 0.1875rem solid #FFFFFF;
- box-shadow: 0 0 0 0.1875rem #000000;
- outline-offset: 0.1875rem;
-}
-
.emotion-17 {
scroll-margin-top: 2.75rem;
border: solid 0.0625rem #141414;
@@ -661,7 +579,7 @@ exports[`Form should render and match snapshot 1`] = `