Skip to content

Commit 41d0b51

Browse files
authored
Merge pull request #14068 from guardian/add-meta-for-gallery
Add meta for gallery
2 parents ef6f193 + 007e0cb commit 41d0b51

File tree

11 files changed

+6029
-23
lines changed

11 files changed

+6029
-23
lines changed

dotcom-rendering/fixtures/generated/fe-articles/GalleryLabs.ts

Lines changed: 5712 additions & 0 deletions
Large diffs are not rendered by default.

dotcom-rendering/scripts/test-data/gen-fixtures.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ const articles = [
3838
name: 'Gallery',
3939
url: 'https://www.theguardian.com/artanddesign/gallery/2025/jun/06/the-week-around-the-world-in-20-pictures',
4040
},
41+
{
42+
name: 'GalleryLabs',
43+
url: 'https://www.theguardian.com/uncommon-holidays/gallery/2025/apr/28/mysterious-islands-medieval-castles-monets-gardens-must-see-places-normandy-in-pictures',
44+
},
4145
{
4246
name: 'Audio',
4347
url: 'https://www.theguardian.com/world/2013/jun/06/nsa-phone-records-verizon-court-order',

dotcom-rendering/src/components/ArticleMeta.apps.stories.tsx

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@ import type { Meta, StoryObj } from '@storybook/react';
22
import { leftColumnDecorator } from '../../.storybook/decorators/gridDecorators';
33
import { defaultFormats } from '../../.storybook/decorators/splitThemeDecorator';
44
import { allModes } from '../../.storybook/modes';
5+
import { GalleryLabs as GalleryLabsFixture } from '../../fixtures/generated/fe-articles/GalleryLabs';
6+
import type { ArticleFormat } from '../lib/articleFormat';
57
import {
68
ArticleDesign,
79
ArticleDisplay,
810
getAllThemes,
911
Pillar,
1012
} from '../lib/articleFormat';
13+
import { palette } from '../palette';
14+
import { enhanceArticleType } from '../types/article';
1115
import { ArticleMetaApps } from './ArticleMeta.apps';
1216

1317
const meta = {
@@ -58,7 +62,9 @@ export const WithFollowStory = {
5862
config: {
5963
renderingTarget: 'Apps',
6064
},
61-
formats: defaultFormats,
65+
formats: defaultFormats.filter(
66+
(format: ArticleFormat) => format.design !== ArticleDesign.Gallery,
67+
),
6268
},
6369
} satisfies Story;
6470

@@ -186,3 +192,56 @@ export const WithBrandingStoryForAdvertisingPartner = {
186192
},
187193
},
188194
} satisfies Story;
195+
196+
export const GalleryDesign = {
197+
args: {
198+
...WithFollowStory.args,
199+
isCommentable: true,
200+
},
201+
parameters: {
202+
formats: getAllThemes({
203+
display: ArticleDisplay.Standard,
204+
design: ArticleDesign.Gallery,
205+
}),
206+
config: {
207+
renderingTarget: 'Apps',
208+
},
209+
colourSchemeBackground: {
210+
light: palette('--article-background'),
211+
dark: palette('--article-background'),
212+
},
213+
},
214+
} satisfies Story;
215+
216+
const appArticle = enhanceArticleType(GalleryLabsFixture, 'Web');
217+
export const GalleryLabsWithBranding = {
218+
args: {
219+
branding:
220+
appArticle.frontendData.commercialProperties[
221+
appArticle.frontendData.editionId
222+
].branding,
223+
format: {
224+
design: appArticle.design,
225+
display: appArticle.display,
226+
theme: appArticle.theme,
227+
},
228+
pageId: appArticle.frontendData.pageId,
229+
byline: appArticle.frontendData.byline,
230+
tags: appArticle.frontendData.tags,
231+
primaryDateline: appArticle.frontendData.webPublicationDateDisplay,
232+
secondaryDateline:
233+
appArticle.frontendData.webPublicationSecondaryDateDisplay,
234+
isCommentable: appArticle.frontendData.isCommentable,
235+
discussionApiUrl: appArticle.frontendData.config.discussionApiUrl,
236+
shortUrlId: appArticle.frontendData.config.shortUrlId,
237+
},
238+
parameters: {
239+
config: {
240+
renderingTarget: 'Apps',
241+
},
242+
colourSchemeBackground: {
243+
light: palette('--article-background'),
244+
dark: palette('--article-background'),
245+
},
246+
},
247+
} satisfies Story;

dotcom-rendering/src/components/ArticleMeta.apps.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { isUndefined } from '@guardian/libs';
33
import { from, space, until } from '@guardian/source/foundations';
44
import { StraightLines } from '@guardian/source-development-kitchen/react-components';
55
import type { ReactNode } from 'react';
6+
import { grid } from '../grid';
67
import { interactiveLegacyClasses } from '../layouts/lib/interactiveLegacyStyling';
78
import {
89
ArticleDesign,
@@ -224,6 +225,7 @@ export const ArticleMetaApps = ({
224225
const isImmersive = format.display === ArticleDisplay.Immersive;
225226
const isAnalysis = format.design === ArticleDesign.Analysis;
226227
const isLiveBlog = format.design === ArticleDesign.LiveBlog;
228+
const isGallery = format.design === ArticleDesign.Gallery;
227229

228230
const shouldShowFollowButtons = (layoutOrDesignType: boolean) =>
229231
layoutOrDesignType && !!byline && !isUndefined(soleContributor);
@@ -239,7 +241,16 @@ export const ArticleMetaApps = ({
239241
className={
240242
isInteractive ? interactiveLegacyClasses.metaContainer : ''
241243
}
242-
css={metaContainerMargins}
244+
css={[
245+
metaContainerMargins,
246+
isGallery ? grid.column.centre : undefined,
247+
isGallery
248+
? {
249+
marginLeft: space[3],
250+
paddingBottom: space[2],
251+
}
252+
: undefined,
253+
]}
243254
>
244255
<div
245256
css={[

dotcom-rendering/src/components/ArticleMeta.web.stories.tsx

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@ import type { Meta, StoryObj } from '@storybook/react';
99
import { leftColumnDecorator } from '../../.storybook/decorators/gridDecorators';
1010
import { defaultFormats } from '../../.storybook/decorators/splitThemeDecorator';
1111
import { allModes } from '../../.storybook/modes';
12+
import { GalleryLabs as GalleryLabsFixture } from '../../fixtures/generated/fe-articles/GalleryLabs';
1213
import {
1314
ArticleDesign,
1415
ArticleDisplay,
16+
type ArticleFormat,
1517
getAllThemes,
1618
Pillar,
1719
} from '../lib/articleFormat';
1820
import { palette } from '../palette';
21+
import { enhanceArticleType } from '../types/article';
1922
import { ArticleMeta } from './ArticleMeta.web';
2023

2124
const meta = {
@@ -64,7 +67,9 @@ export const Default = {
6467
shortUrlId: '',
6568
},
6669
parameters: {
67-
formats: defaultFormats,
70+
formats: defaultFormats.filter(
71+
(format: ArticleFormat) => format.design !== ArticleDesign.Gallery,
72+
),
6873
},
6974
decorators: [leftColumnDecorator],
7075
} satisfies Story;
@@ -328,3 +333,59 @@ export const VideoDesignWithSource = {
328333
}),
329334
},
330335
} satisfies Story;
336+
337+
export const GalleryDesign = {
338+
args: {
339+
...Default.args,
340+
isCommentable: true,
341+
discussionApiUrl: 'https://discussion.theguardian.com/discussion-api',
342+
shortUrlId: '/p/d8ex5',
343+
},
344+
345+
parameters: {
346+
...Default.parameters,
347+
formats: getAllThemes({
348+
display: ArticleDisplay.Standard,
349+
design: ArticleDesign.Gallery,
350+
}),
351+
colourSchemeBackground: {
352+
light: palette('--article-background'),
353+
dark: palette('--article-background'),
354+
},
355+
},
356+
decorators: [leftColumnDecorator],
357+
} satisfies Story;
358+
359+
const webArticle = enhanceArticleType(GalleryLabsFixture, 'Web');
360+
361+
export const GalleryLabsWithBranding = {
362+
args: {
363+
branding:
364+
webArticle.frontendData.commercialProperties[
365+
webArticle.frontendData.editionId
366+
].branding,
367+
format: {
368+
design: webArticle.design,
369+
display: webArticle.display,
370+
theme: webArticle.theme,
371+
},
372+
pageId: webArticle.frontendData.pageId,
373+
webTitle: webArticle.frontendData.webTitle,
374+
byline: webArticle.frontendData.byline,
375+
tags: webArticle.frontendData.tags,
376+
primaryDateline: webArticle.frontendData.webPublicationDateDisplay,
377+
secondaryDateline:
378+
webArticle.frontendData.webPublicationSecondaryDateDisplay,
379+
isCommentable: webArticle.frontendData.isCommentable,
380+
discussionApiUrl: webArticle.frontendData.config.discussionApiUrl,
381+
shortUrlId: webArticle.frontendData.config.shortUrlId,
382+
},
383+
384+
parameters: {
385+
colourSchemeBackground: {
386+
light: palette('--article-background'),
387+
dark: palette('--article-background'),
388+
},
389+
},
390+
decorators: [leftColumnDecorator],
391+
} satisfies Story;

dotcom-rendering/src/components/ArticleMeta.web.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { css } from '@emotion/react';
22
import { between, from, space, until } from '@guardian/source/foundations';
33
import { StraightLines } from '@guardian/source-development-kitchen/react-components';
4+
import { grid } from '../../src/grid';
45
import type { FEArticle } from '../frontend/feArticle';
56
import { interactiveLegacyClasses } from '../layouts/lib/interactiveLegacyStyling';
67
import {
@@ -57,6 +58,10 @@ const meta = (format: ArticleFormat) => {
5758
`;
5859
}
5960

61+
if (format.design === ArticleDesign.Gallery) {
62+
return '';
63+
}
64+
6065
return css`
6166
${between.tablet.and.leftCol} {
6267
order: 3;
@@ -182,6 +187,13 @@ export const metaContainer = (format: ArticleFormat) => {
182187
case ArticleDesign.DeadBlog: {
183188
return '';
184189
}
190+
case ArticleDesign.Gallery:
191+
return css`
192+
${grid.column.centre}
193+
margin-bottom: ${space[3]}px;
194+
margin-left: ${space[3]}px;
195+
margin-right: ${space[3]}px;
196+
`;
185197
default:
186198
return defaultMargins;
187199
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,11 @@ function decideArticleLogo(
134134
const maybeDarkLogo = branding.logoForDarkBackground ?? branding.logo;
135135

136136
const useDarkColourScheme =
137-
(format.design === ArticleDesign.Video ||
137+
format.design === ArticleDesign.Gallery ||
138+
((format.design === ArticleDesign.Video ||
138139
format.design === ArticleDesign.Audio ||
139-
format.design === ArticleDesign.Gallery ||
140140
format.design === ArticleDesign.Picture) &&
141-
format.theme !== ArticleSpecial.Labs;
141+
format.theme !== ArticleSpecial.Labs);
142142

143143
return (
144144
<picture>

dotcom-rendering/src/components/Contributor.tsx

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { css } from '@emotion/react';
22
import {
33
headlineMedium17,
4+
palette as sourcePalette,
45
textSansItalic17,
56
until,
67
} from '@guardian/source/foundations';
@@ -29,24 +30,44 @@ const standfirstColourBelowDesktop = css`
2930
}
3031
`;
3132

32-
const bylineStyles = css`
33-
${headlineMedium17}
33+
const bylineStyles = (format: ArticleFormat) => {
34+
const defaultStyles = css`
35+
${headlineMedium17}
3436
35-
padding-bottom: 8px;
36-
font-style: italic;
37+
padding-bottom: 8px;
38+
font-style: italic;
3739
38-
color: ${schemedPalette('--byline')};
40+
color: ${schemedPalette('--byline')};
3941
40-
a {
41-
color: ${schemedPalette('--byline-anchor')};
42-
font-weight: 700;
43-
text-decoration: none;
44-
font-style: normal;
45-
:hover {
46-
text-decoration: underline;
42+
a {
43+
color: ${schemedPalette('--byline-anchor')};
44+
font-weight: 700;
45+
text-decoration: none;
46+
font-style: normal;
47+
:hover {
48+
text-decoration: underline;
49+
}
4750
}
51+
`;
52+
53+
switch (format.design) {
54+
case ArticleDesign.Gallery:
55+
return css`
56+
${defaultStyles}
57+
a {
58+
font-style: italic;
59+
border-bottom: 0.5px solid ${sourcePalette.neutral[46]};
60+
:hover {
61+
text-decoration: none;
62+
border-color: ${schemedPalette('--byline-anchor')};
63+
}
64+
}
65+
`;
66+
67+
default:
68+
return defaultStyles;
4869
}
49-
`;
70+
};
5071

5172
const labsBylineStyles = css`
5273
${textSansItalic17};
@@ -74,7 +95,7 @@ export const Contributor = ({ byline, tags, format, source }: Props) => (
7495
: ''
7596
}
7697
css={[
77-
bylineStyles,
98+
bylineStyles(format),
7899
format.theme === ArticleSpecial.Labs && labsBylineStyles,
79100
format.design === ArticleDesign.LiveBlog &&
80101
standfirstColourBelowDesktop,

0 commit comments

Comments
 (0)