From 4409b257db0c5ea090f03f08acd01a06d24ea917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ra=C4=8D=C3=A1k?= Date: Fri, 30 Aug 2024 12:14:08 +0200 Subject: [PATCH 1/5] Add a way of marking articles as deprecated --- adminSiteClient/gdocsDeploy.ts | 1 + baker/algolia/algoliaUtils.tsx | 15 ++- db/model/Gdoc/GdocBase.ts | 8 +- db/model/Gdoc/GdocFactory.ts | 8 +- db/model/Gdoc/GdocPost.ts | 5 + db/model/Gdoc/archieToEnriched.ts | 10 +- db/model/Post.ts | 15 ++- .../types/src/domainTypes/Author.ts | 4 + .../types/src/gdocTypes/Gdoc.ts | 1 + public/archived-thumbnail.jpg | Bin 0 -> 76823 bytes site/gdocs/OwidGdocPage.tsx | 17 ++-- site/gdocs/components/OwidGdocHeader.tsx | 45 +++++---- site/gdocs/components/ProminentLink.tsx | 1 + site/gdocs/components/centered-article.scss | 61 ++++++++++++- site/gdocs/pages/GdocPost.tsx | 86 +++++++++++++++--- 15 files changed, 225 insertions(+), 52 deletions(-) create mode 100644 public/archived-thumbnail.jpg diff --git a/adminSiteClient/gdocsDeploy.ts b/adminSiteClient/gdocsDeploy.ts index 1c59e6d509e..7c738e49317 100644 --- a/adminSiteClient/gdocsDeploy.ts +++ b/adminSiteClient/gdocsDeploy.ts @@ -86,6 +86,7 @@ export const checkIsLightningUpdate = ( "atom-excerpt": false, // requires updating the atom feed / blog roll "atom-title": false, // requires updating the atom feed / blog roll "featured-image": false, // requires updating references to this article + "deprecation-notice": false, // requires updating references to this article authors: false, // requires updating references to this article excerpt: false, // requires updating references to this article faqs: false, // requires updating datapages diff --git a/baker/algolia/algoliaUtils.tsx b/baker/algolia/algoliaUtils.tsx index 8803b3cc8be..822abcc9b1e 100644 --- a/baker/algolia/algoliaUtils.tsx +++ b/baker/algolia/algoliaUtils.tsx @@ -157,6 +157,16 @@ async function generateWordpressRecords( return records } +function gdocThumbnailUrl(gdoc: OwidGdocPostInterface): string { + if (gdoc.content["deprecation-notice"]) { + return "/archived-thumbnail.jpg" + } + if (gdoc.content["featured-image"]) { + return getThumbnailPath(gdoc.content["featured-image"]) + } + return "/default-thumbnail.jpg" +} + function generateGdocRecords( gdocs: OwidGdocPostInterface[], pageviews: Record @@ -199,10 +209,7 @@ function generateGdocRecords( const chunks = generateChunksFromHtmlText(renderedPostContent) const postTypeAndImportance = getPostTypeAndImportance(gdoc) let i = 0 - - const thumbnailUrl = gdoc.content["featured-image"] - ? getThumbnailPath(gdoc.content["featured-image"]) - : "/default-thumbnail.jpg" + const thumbnailUrl = gdocThumbnailUrl(gdoc) for (const chunk of chunks) { const record = { diff --git a/db/model/Gdoc/GdocBase.ts b/db/model/Gdoc/GdocBase.ts index b63ae07fcc7..3ab069d0ebc 100644 --- a/db/model/Gdoc/GdocBase.ts +++ b/db/model/Gdoc/GdocBase.ts @@ -866,6 +866,7 @@ export async function getMinimalGdocPostsByIds( excerpt: string type: string "featured-image": string + isDeprecated: number }>( knex, `-- sql @@ -879,7 +880,8 @@ export async function getMinimalGdocPostsByIds( content ->> '$.subtitle' as subtitle, content ->> '$.excerpt' as excerpt, type, - content ->> '$."featured-image"' as "featured-image" + content ->> '$."featured-image"' as "featured-image", + (content ->> '$."deprecation-notice"' IS NOT NULL) as isDeprecated FROM posts_gdocs WHERE id in (:ids)`, { ids } @@ -895,7 +897,9 @@ export async function getMinimalGdocPostsByIds( subtitle: row.subtitle, excerpt: row.excerpt, type: row.type as OwidGdocType, - "featured-image": row["featured-image"], + "featured-image": row.isDeprecated + ? "/archived-thumbnail.jpg" + : row["featured-image"], } satisfies OwidGdocMinimalPostInterface }) } diff --git a/db/model/Gdoc/GdocFactory.ts b/db/model/Gdoc/GdocFactory.ts index 05c7632bb42..b06a7e029b3 100644 --- a/db/model/Gdoc/GdocFactory.ts +++ b/db/model/Gdoc/GdocFactory.ts @@ -197,6 +197,7 @@ export async function getAllMinimalGdocBaseObjects( excerpt: string type: string "featured-image": string + isDeprecated: number }>( knex, `-- sql @@ -210,7 +211,8 @@ export async function getAllMinimalGdocBaseObjects( content ->> '$.subtitle' as subtitle, content ->> '$.excerpt' as excerpt, type, - content ->> '$."featured-image"' as "featured-image" + content ->> '$."featured-image"' as "featured-image", + (content ->> '$."deprecation-notice"' IS NOT NULL) as isDeprecated FROM posts_gdocs WHERE published = 1 AND publishedAt <= NOW()`, @@ -227,7 +229,9 @@ export async function getAllMinimalGdocBaseObjects( subtitle: row.subtitle, excerpt: row.excerpt, type: row.type as OwidGdocType, - "featured-image": row["featured-image"], + "featured-image": row.isDeprecated + ? "/archived-thumbnail.jpg" + : row["featured-image"], } satisfies OwidGdocMinimalPostInterface }) } diff --git a/db/model/Gdoc/GdocPost.ts b/db/model/Gdoc/GdocPost.ts index 712625c11d7..9aea3b3c175 100644 --- a/db/model/Gdoc/GdocPost.ts +++ b/db/model/Gdoc/GdocPost.ts @@ -68,6 +68,11 @@ export class GdocPost extends GdocBase implements OwidGdocPostInterface { enrichedBlocks.push(...refBlocks) } + const deprecationNotice = gdoc.content["deprecation-notice"] + if (deprecationNotice) { + enrichedBlocks.push(...deprecationNotice) + } + return enrichedBlocks } diff --git a/db/model/Gdoc/archieToEnriched.ts b/db/model/Gdoc/archieToEnriched.ts index 554e1958978..38b6e1d79d3 100644 --- a/db/model/Gdoc/archieToEnriched.ts +++ b/db/model/Gdoc/archieToEnriched.ts @@ -24,7 +24,11 @@ import { isEmpty, } from "@ourworldindata/utils" import { convertHeadingTextToId } from "@ourworldindata/components" -import { parseRawBlocksToEnrichedBlocks, parseRefs } from "./rawToEnriched.js" +import { + parseRawBlocksToEnrichedBlocks, + parseRefs, + parseText, +} from "./rawToEnriched.js" import urlSlug from "url-slug" import { extractUrl, parseAuthors, spansToSimpleString } from "./gdocUtils.js" import { htmlToSimpleTextBlock } from "./htmlToEnriched.js" @@ -316,6 +320,10 @@ export const archieToEnriched = ( // Parse elements of the ArchieML into enrichedBlocks parsed.body = compact(parsed.body.map(parseRawBlocksToEnrichedBlocks)) + const deprecationNotice = parsed["deprecation-notice"] + if (deprecationNotice) { + parsed["deprecation-notice"] = compact(deprecationNotice.map(parseText)) + } const parsedRefs = parseRefs({ refs: [...(parsed.refs ?? []), ...rawInlineRefs], diff --git a/db/model/Post.ts b/db/model/Post.ts index adf1a3e1f7f..be87ffb69b5 100644 --- a/db/model/Post.ts +++ b/db/model/Post.ts @@ -307,6 +307,16 @@ export const getBlogIndex = memoize( } ) +function gdocThumbnail(gdoc: OwidGdocPostInterface): string { + let thumbnailPath = "/default-thumbnail.jpg" + if (gdoc.content["deprecation-notice"]) { + thumbnailPath = "/archived-thumbnail.jpg" + } else if (gdoc.content["featured-image"]) { + thumbnailPath = `${IMAGES_DIRECTORY}${gdoc.content["featured-image"]}` + } + return `${BAKED_BASE_URL}${thumbnailPath}` +} + export const mapGdocsToWordpressPosts = ( gdocs: OwidGdocPostInterface[] ): IndexPost[] => { @@ -318,9 +328,7 @@ export const mapGdocsToWordpressPosts = ( modifiedDate: gdoc.updatedAt as Date, authors: gdoc.content.authors, excerpt: gdoc.content["atom-excerpt"] || gdoc.content.excerpt, - imageUrl: gdoc.content["featured-image"] - ? `${BAKED_BASE_URL}${IMAGES_DIRECTORY}${gdoc.content["featured-image"]}` - : `${BAKED_BASE_URL}/default-thumbnail.jpg`, + imageUrl: gdocThumbnail(gdoc), })) } @@ -619,6 +627,7 @@ export const getLatestWorkByAuthor = async ( pg.content->>'$.subtitle' AS subtitle, pg.content->>'$.authors' AS authors, pg.content->>'$."featured-image"' AS "featured-image", + (pg.content->>'$."deprecation-notice"' IS NOT NULL) AS isDeprecated, pg.publishedAt FROM posts_gdocs pg diff --git a/packages/@ourworldindata/types/src/domainTypes/Author.ts b/packages/@ourworldindata/types/src/domainTypes/Author.ts index 75e4850f93f..4eaeafd596b 100644 --- a/packages/@ourworldindata/types/src/domainTypes/Author.ts +++ b/packages/@ourworldindata/types/src/domainTypes/Author.ts @@ -5,6 +5,7 @@ export interface DbRawLatestWork { subtitle: string | null authors: string "featured-image": string | null + isDeprecated: number publishedAt: string | null } @@ -24,5 +25,8 @@ export const parseLatestWork = ( return { ...latestWork, authors: JSON.parse(latestWork.authors), + "featured-image": latestWork.isDeprecated + ? "/archived-thumbnail.jpg" + : latestWork["featured-image"], } } diff --git a/packages/@ourworldindata/types/src/gdocTypes/Gdoc.ts b/packages/@ourworldindata/types/src/gdocTypes/Gdoc.ts index 7060f22d64b..6f15c14f15a 100644 --- a/packages/@ourworldindata/types/src/gdocTypes/Gdoc.ts +++ b/packages/@ourworldindata/types/src/gdocTypes/Gdoc.ts @@ -285,6 +285,7 @@ export interface OwidGdocPostContent { excerpt?: string refs?: { definitions: RefDictionary; errors: OwidGdocErrorMessage[] } summary?: EnrichedBlockText[] + "deprecation-notice"?: EnrichedBlockText[] "hide-citation"?: boolean toc?: TocHeadingWithTitleSupertitle[] "cover-image"?: string diff --git a/public/archived-thumbnail.jpg b/public/archived-thumbnail.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28e2c4c36c6b233089ab02a0881cf5f7c8a93e46 GIT binary patch literal 76823 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%0A2b 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 literal 0 HcmV?d00001 diff --git a/site/gdocs/OwidGdocPage.tsx b/site/gdocs/OwidGdocPage.tsx index 78c4857b63f..358aeb45313 100644 --- a/site/gdocs/OwidGdocPage.tsx +++ b/site/gdocs/OwidGdocPage.tsx @@ -89,18 +89,23 @@ export default function OwidGdocPage({ const isDataInsight = gdoc.content.type === OwidGdocType.DataInsight const isAuthor = gdoc.content.type === OwidGdocType.Author + let imageUrl + if ( + gdoc.content.type === OwidGdocType.Article && + gdoc.content["deprecation-notice"] + ) { + imageUrl = `${baseUrl}/archived-thumbnail.jpg` + } else if (featuredImageFilename) { + imageUrl = `${baseUrl}${IMAGES_DIRECTORY}${featuredImageFilename}` + } + return ( diff --git a/site/gdocs/components/OwidGdocHeader.tsx b/site/gdocs/components/OwidGdocHeader.tsx index fbcdec15155..c97ba5a92ac 100644 --- a/site/gdocs/components/OwidGdocHeader.tsx +++ b/site/gdocs/components/OwidGdocHeader.tsx @@ -18,10 +18,12 @@ function OwidArticleHeader({ content, publishedAt, breadcrumbs, + isDeprecated, }: { content: OwidGdocPostContent publishedAt: Date | null breadcrumbs?: BreadcrumbItem[] + isDeprecated?: boolean }) { const coverStyle = content["cover-color"] ? { backgroundColor: `var(--${content["cover-color"]})` } @@ -75,7 +77,13 @@ function OwidArticleHeader({ ) : null}
-
+
{content.authors.length > 0 && (
@@ -86,25 +94,27 @@ function OwidArticleHeader({ (publishedAt && formatDate(publishedAt))}
-
- {!content["hide-citation"] && ( + {!isDeprecated && ( + +
+ )}
@@ -158,6 +168,7 @@ export function OwidGdocHeader(props: { content: OwidGdocPostContent publishedAt: Date | null breadcrumbs?: BreadcrumbItem[] + isDeprecated?: boolean }) { if (props.content.type === OwidGdocType.Article) return diff --git a/site/gdocs/components/ProminentLink.tsx b/site/gdocs/components/ProminentLink.tsx index f2ead43cd08..c32af42873f 100644 --- a/site/gdocs/components/ProminentLink.tsx +++ b/site/gdocs/components/ProminentLink.tsx @@ -66,6 +66,7 @@ export const ProminentLink = (props: { const Thumbnail = ({ thumbnail }: { thumbnail: string }) => { if ( thumbnail.startsWith(BAKED_GRAPHER_EXPORTS_BASE_URL) || + thumbnail.endsWith("archived-thumbnail.jpg") || thumbnail.endsWith("default-thumbnail.jpg") ) { return diff --git a/site/gdocs/components/centered-article.scss b/site/gdocs/components/centered-article.scss index 8cd669a62f7..f0eb3c34a7f 100644 --- a/site/gdocs/components/centered-article.scss +++ b/site/gdocs/components/centered-article.scss @@ -195,6 +195,62 @@ $banner-height: 200px; margin-bottom: 32px; } +.deprecation-notice { + --bg-color: #fff5d8; + position: sticky; + top: 0; + left: 0; + right: 0; + background-color: var(--bg-color); + border-radius: 4px; + padding: 16px; + padding-bottom: 0; + margin-bottom: 24px; + + &::before { + content: ""; + position: absolute; + top: 0; + left: 50%; + right: 50%; + height: 100%; + background-color: var(--bg-color); + transition: all 0.3s ease; + z-index: -1; + } + + &--sticky::before { + left: -50vw; + right: -50vw; + } + + .article-block__text, + .article-block__list, + .article-block__html, + .article-block__numbered-list { + @include body-3-regular; + } +} + +.deprecation-notice__heading { + @include h4-semibold; + margin-top: 0; + margin-bottom: 8px; + color: $vermillion; +} + +.deprecation-notice__icon { + margin-right: 8px; +} + +.citation-deprecated-notice { + font-weight: 700; + + &__highlight { + color: $vermillion; + } +} + .centered-article-header { background: $white; margin: 80px 0 24px; @@ -470,14 +526,14 @@ h3.article-block__heading.has-supertitle { } @include sm-up { - > div:first-child { + > div:not(:last-child) { border-right: 1px solid $blue-10; } } @include sm-only { padding: 16px 0; - > div:first-child { + > div:not(:last-child) { border-bottom: 1px solid $blue-10; padding-bottom: 16px; margin-bottom: 16px; @@ -557,7 +613,6 @@ h3.article-block__heading.has-supertitle { padding-top: 48px; h3 { margin-top: 0; - text-align: center; } p { margin-bottom: 16px; diff --git a/site/gdocs/pages/GdocPost.tsx b/site/gdocs/pages/GdocPost.tsx index 08f2d02dd03..23f5d477f50 100644 --- a/site/gdocs/pages/GdocPost.tsx +++ b/site/gdocs/pages/GdocPost.tsx @@ -1,5 +1,8 @@ import React from "react" import cx from "classnames" +import { useIntersectionObserver } from "usehooks-ts" +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" +import { faBoxArchive } from "@fortawesome/free-solid-svg-icons" import { ArticleBlocks } from "../components/ArticleBlocks.js" import Footnotes from "../components/Footnotes.js" import { @@ -9,6 +12,7 @@ import { isEmpty, OwidGdocType, formatAuthors, + EnrichedBlockText, } from "@ourworldindata/utils" import { CodeSnippet } from "@ourworldindata/components" import { BAKED_BASE_URL } from "../../../settings/clientSettings.js" @@ -56,6 +60,7 @@ export function GdocPost({ ) const citationText = `${shortPageCitation} Published online at OurWorldInData.org. Retrieved from: '${`${BAKED_BASE_URL}/${slug}`}' [Online Resource]` const hasSidebarToc = content["sidebar-toc"] + const isDeprecated = Boolean(content["deprecation-notice"]) const bibtex = `@article{owid-${slug.replace(/\//g, "-")}, author = {${formatAuthors({ @@ -85,7 +90,11 @@ export function GdocPost({ content={content} publishedAt={publishedAt} breadcrumbs={breadcrumbs ?? undefined} + isDeprecated={isDeprecated} /> + {content["deprecation-notice"] && ( + + )} {hasSidebarToc && content.toc ? (
-

Cite this work

+

+ Cite this work +

+ {isDeprecated && ( +

+ + This content is outdated + {" "} + but if you would still like to use it, here is + how to cite it. +
+

+ )}

{citationDescription}

@@ -147,12 +172,16 @@ export function GdocPost({ className="grid grid-cols-12-full-width col-start-1 col-end-limit" >
- Our World in Data logo -

Reuse this work freely

+ {!isDeprecated && ( + <> + Our World in Data logo +

Reuse this work freely

+ + )}

All visualizations, data, and code produced by Our World @@ -176,15 +205,44 @@ export function GdocPost({ documentation, so you should always check the license of any such third-party data before use and redistribution.

-

- All of{" "} - - our charts can be embedded - {" "} - in any site. -

+ {!isDeprecated && ( +

+ All of{" "} + + our charts can be embedded + {" "} + in any site. +

+ )}
) } + +function DeprecationNotice({ blocks }: { blocks: EnrichedBlockText[] }) { + const { isIntersecting, ref } = useIntersectionObserver() + return ( + <> + {/* Non-sticky sentinel element for observing intersection. */} +
+
+

+ + This article is outdated +

+ +
+ + ) +} From c532a76f6d89f03605c90b6732ce0f2083b29897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ra=C4=8D=C3=A1k?= Date: Wed, 4 Sep 2024 10:10:33 +0200 Subject: [PATCH 2/5] Update copy of deprecated citation Co-authored-by: Ike Saunders <11844404+ikesau@users.noreply.github.com> --- site/gdocs/pages/GdocPost.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/site/gdocs/pages/GdocPost.tsx b/site/gdocs/pages/GdocPost.tsx index 23f5d477f50..2432a79b3e9 100644 --- a/site/gdocs/pages/GdocPost.tsx +++ b/site/gdocs/pages/GdocPost.tsx @@ -149,9 +149,9 @@ export function GdocPost({

This content is outdated - {" "} - but if you would still like to use it, here is - how to cite it. + + , but if you would still like to use it, here is + how to cite it:

)} From 8cd162713f668b616f14582c5e5c2613151b6505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ra=C4=8D=C3=A1k?= Date: Wed, 4 Sep 2024 10:11:21 +0200 Subject: [PATCH 3/5] Implement review suggestions --- adminSiteClient/gdocsValidation.ts | 17 +++++++++++++++++ baker/algolia/algoliaUtils.tsx | 4 ++-- db/model/Gdoc/GdocBase.ts | 2 +- db/model/Gdoc/GdocFactory.ts | 2 +- db/model/Post.ts | 4 ++-- .../components/src/styles/variables.scss | 1 + .../types/src/domainTypes/Author.ts | 2 +- site/gdocs/components/centered-article.scss | 1 + site/gdocs/pages/GdocPost.tsx | 8 +++++--- 9 files changed, 31 insertions(+), 10 deletions(-) diff --git a/adminSiteClient/gdocsValidation.ts b/adminSiteClient/gdocsValidation.ts index cc3d2e8458b..de14af70eb3 100644 --- a/adminSiteClient/gdocsValidation.ts +++ b/adminSiteClient/gdocsValidation.ts @@ -53,6 +53,22 @@ function validateContentType(gdoc: OwidGdoc, errors: OwidGdocErrorMessage[]) { } } +function validateDeprecationNotice( + gdoc: OwidGdoc, + errors: OwidGdocErrorMessage[] +) { + if ( + "deprecation-notice" in gdoc.content && + gdoc.content.type !== OwidGdocType.Article + ) { + errors.push({ + property: "deprecation-notice", + type: OwidGdocErrorMessageType.Error, + message: "Deprecation notice is only supported in articles.", + }) + } +} + function validateBody(gdoc: OwidGdoc, errors: OwidGdocErrorMessage[]) { if (!gdoc.content.body) { errors.push(getMissingContentPropertyError("body")) @@ -236,6 +252,7 @@ export const getErrors = (gdoc: OwidGdoc): OwidGdocErrorMessage[] => { validateBody(gdoc, errors) validatePublishedAt(gdoc, errors) validateContentType(gdoc, errors) + validateDeprecationNotice(gdoc, errors) if (checkIsGdocPost(gdoc)) { validateRefs(gdoc, errors) diff --git a/baker/algolia/algoliaUtils.tsx b/baker/algolia/algoliaUtils.tsx index 822abcc9b1e..aeb10a381f5 100644 --- a/baker/algolia/algoliaUtils.tsx +++ b/baker/algolia/algoliaUtils.tsx @@ -157,7 +157,7 @@ async function generateWordpressRecords( return records } -function gdocThumbnailUrl(gdoc: OwidGdocPostInterface): string { +function getGdocThumbnailUrl(gdoc: OwidGdocPostInterface): string { if (gdoc.content["deprecation-notice"]) { return "/archived-thumbnail.jpg" } @@ -209,7 +209,7 @@ function generateGdocRecords( const chunks = generateChunksFromHtmlText(renderedPostContent) const postTypeAndImportance = getPostTypeAndImportance(gdoc) let i = 0 - const thumbnailUrl = gdocThumbnailUrl(gdoc) + const thumbnailUrl = getGdocThumbnailUrl(gdoc) for (const chunk of chunks) { const record = { diff --git a/db/model/Gdoc/GdocBase.ts b/db/model/Gdoc/GdocBase.ts index 3ab069d0ebc..889e0e95067 100644 --- a/db/model/Gdoc/GdocBase.ts +++ b/db/model/Gdoc/GdocBase.ts @@ -866,7 +866,7 @@ export async function getMinimalGdocPostsByIds( excerpt: string type: string "featured-image": string - isDeprecated: number + isDeprecated: 0 | 1 }>( knex, `-- sql diff --git a/db/model/Gdoc/GdocFactory.ts b/db/model/Gdoc/GdocFactory.ts index b06a7e029b3..2c297846f49 100644 --- a/db/model/Gdoc/GdocFactory.ts +++ b/db/model/Gdoc/GdocFactory.ts @@ -197,7 +197,7 @@ export async function getAllMinimalGdocBaseObjects( excerpt: string type: string "featured-image": string - isDeprecated: number + isDeprecated: 0 | 1 }>( knex, `-- sql diff --git a/db/model/Post.ts b/db/model/Post.ts index be87ffb69b5..6363e6e0319 100644 --- a/db/model/Post.ts +++ b/db/model/Post.ts @@ -307,7 +307,7 @@ export const getBlogIndex = memoize( } ) -function gdocThumbnail(gdoc: OwidGdocPostInterface): string { +function getGdocThumbnail(gdoc: OwidGdocPostInterface): string { let thumbnailPath = "/default-thumbnail.jpg" if (gdoc.content["deprecation-notice"]) { thumbnailPath = "/archived-thumbnail.jpg" @@ -328,7 +328,7 @@ export const mapGdocsToWordpressPosts = ( modifiedDate: gdoc.updatedAt as Date, authors: gdoc.content.authors, excerpt: gdoc.content["atom-excerpt"] || gdoc.content.excerpt, - imageUrl: gdocThumbnail(gdoc), + imageUrl: getGdocThumbnail(gdoc), })) } diff --git a/packages/@ourworldindata/components/src/styles/variables.scss b/packages/@ourworldindata/components/src/styles/variables.scss index 1487b854c93..e0d9e6979af 100644 --- a/packages/@ourworldindata/components/src/styles/variables.scss +++ b/packages/@ourworldindata/components/src/styles/variables.scss @@ -147,6 +147,7 @@ $xxlg: 1536px; */ $zindex-input: 1; +$zindex-deprecation-notice: 10; $zindex-global-entity-select: 11; $zindex-footnote: 15; $zindex-sidebar: 20; diff --git a/packages/@ourworldindata/types/src/domainTypes/Author.ts b/packages/@ourworldindata/types/src/domainTypes/Author.ts index 4eaeafd596b..a324b031209 100644 --- a/packages/@ourworldindata/types/src/domainTypes/Author.ts +++ b/packages/@ourworldindata/types/src/domainTypes/Author.ts @@ -5,7 +5,7 @@ export interface DbRawLatestWork { subtitle: string | null authors: string "featured-image": string | null - isDeprecated: number + isDeprecated: 0 | 1 publishedAt: string | null } diff --git a/site/gdocs/components/centered-article.scss b/site/gdocs/components/centered-article.scss index f0eb3c34a7f..69b4fef9b14 100644 --- a/site/gdocs/components/centered-article.scss +++ b/site/gdocs/components/centered-article.scss @@ -206,6 +206,7 @@ $banner-height: 200px; padding: 16px; padding-bottom: 0; margin-bottom: 24px; + z-index: $zindex-deprecation-notice; &::before { content: ""; diff --git a/site/gdocs/pages/GdocPost.tsx b/site/gdocs/pages/GdocPost.tsx index 2432a79b3e9..23e33326df0 100644 --- a/site/gdocs/pages/GdocPost.tsx +++ b/site/gdocs/pages/GdocPost.tsx @@ -60,7 +60,9 @@ export function GdocPost({ ) const citationText = `${shortPageCitation} Published online at OurWorldInData.org. Retrieved from: '${`${BAKED_BASE_URL}/${slug}`}' [Online Resource]` const hasSidebarToc = content["sidebar-toc"] - const isDeprecated = Boolean(content["deprecation-notice"]) + const isDeprecated = + postType === OwidGdocType.Article && + Boolean(content["deprecation-notice"]) const bibtex = `@article{owid-${slug.replace(/\//g, "-")}, author = {${formatAuthors({ @@ -92,7 +94,7 @@ export function GdocPost({ breadcrumbs={breadcrumbs ?? undefined} isDeprecated={isDeprecated} /> - {content["deprecation-notice"] && ( + {isDeprecated && content["deprecation-notice"] && ( )} {hasSidebarToc && content.toc ? ( @@ -102,7 +104,7 @@ export function GdocPost({ pageTitle={content.title || ""} /> ) : null} - {content.type === "topic-page" && stickyNavLinks?.length ? ( + {postType === OwidGdocType.TopicPage && stickyNavLinks?.length ? (