From a209953a1f2bfea344a6111a92746ca92006699b Mon Sep 17 00:00:00 2001 From: Emma Imber Date: Thu, 9 May 2024 16:43:06 +0100 Subject: [PATCH 1/3] Remove AB test version of enhance placeholders --- dotcom-rendering/src/model/enhanceBlocks.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/dotcom-rendering/src/model/enhanceBlocks.ts b/dotcom-rendering/src/model/enhanceBlocks.ts index 250f5998622..05f7907d2f2 100644 --- a/dotcom-rendering/src/model/enhanceBlocks.ts +++ b/dotcom-rendering/src/model/enhanceBlocks.ts @@ -3,7 +3,6 @@ import type { ServerSideTests } from '../types/config'; import type { FEElement, ImageForLightbox, Newsletter } from '../types/content'; import type { RenderingTarget } from '../types/renderingTarget'; import { enhanceAdPlaceholders } from './enhance-ad-placeholders'; -import { enhanceAdPlaceholders as enhanceAdPlaceholders_AB_TEST_CONTROL } from './enhance-ad-placeholders_AB_TEST_CONTROL'; import { enhanceBlockquotes } from './enhance-blockquotes'; import { enhanceDisclaimer } from './enhance-disclaimer'; import { enhanceDividers } from './enhance-dividers'; @@ -66,12 +65,7 @@ export const enhanceElements = options.promotedNewsletter, blockId, ), - options.abTests.commercialMegaTestControl === 'control' - ? enhanceAdPlaceholders_AB_TEST_CONTROL( - format, - options.renderingTarget, - ) - : enhanceAdPlaceholders(format, options.renderingTarget), + enhanceAdPlaceholders(format, options.renderingTarget), enhanceDisclaimer(options.hasAffiliateLinksDisclaimer), ].reduce( (enhancedBlocks, enhancer) => enhancer(enhancedBlocks), From 5bd59cc9473ff0e0002999d20d1b269d30e2056e Mon Sep 17 00:00:00 2001 From: Emma Imber Date: Thu, 9 May 2024 16:43:33 +0100 Subject: [PATCH 2/3] Remove reference to ab test enhancePlaceholders --- ...enhance-ad-placeholders_AB_TEST_CONTROL.ts | 115 ------------------ 1 file changed, 115 deletions(-) delete mode 100644 dotcom-rendering/src/model/enhance-ad-placeholders_AB_TEST_CONTROL.ts diff --git a/dotcom-rendering/src/model/enhance-ad-placeholders_AB_TEST_CONTROL.ts b/dotcom-rendering/src/model/enhance-ad-placeholders_AB_TEST_CONTROL.ts deleted file mode 100644 index c13b7f76128..00000000000 --- a/dotcom-rendering/src/model/enhance-ad-placeholders_AB_TEST_CONTROL.ts +++ /dev/null @@ -1,115 +0,0 @@ -/** - * The previous implementation of insertAdPlaceholders - * - * The purpose of reinstating this function is so that Commercial - * can AB test the effect of the change. - */ -import { ArticleDesign } from '@guardian/libs'; -import type { AdPlaceholderBlockElement, FEElement } from '../types/content'; -import type { RenderingTarget } from '../types/renderingTarget'; - -/** - * Positioning rules: - * - * - Is further than 3 paragraphs in - * - Is every 6 paragraphs - * - No more than 15 ads in an article - * - Last paragraph should not be followed by an ad - */ -const isSuitablePosition = ( - paragraphCounter: number, - numberOfAdsInserted: number, - isLastElement: boolean, - isParagraph: boolean, -): boolean => { - // Rules for ad placement - const adEveryNParagraphs = 6; - const firstAdIndex = 3; - const maxAds = 15; - - // Don't insert more than `maxAds` ads - if (numberOfAdsInserted >= maxAds) { - return false; - } - - // Don't insert advert in final position - if (isLastElement) { - return false; - } - - // Insert an ad placeholder every `adEveryNParagraphs` paragraphs, - // starting from the paragraph at `firstAdIndex` and only after a paragraph - return ( - isParagraph && - (paragraphCounter - firstAdIndex) % adEveryNParagraphs === 0 - ); -}; - -const isParagraph = (element: FEElement) => - element._type === 'model.dotcomrendering.pageElements.TextBlockElement'; - -const insertPlaceholder = (elements: FEElement[]): FEElement[] => { - const placeholder: AdPlaceholderBlockElement = { - _type: 'model.dotcomrendering.pageElements.AdPlaceholderBlockElement', - }; - return [...elements, placeholder]; -}; - -type ReducerAccumulator = { - elements: FEElement[]; - paragraphCounter: number; - numberOfAdsInserted: number; -}; - -/** - * Inserts advert placeholders - */ -const insertAdPlaceholders = (elements: FEElement[]): FEElement[] => { - const elementsWithReducerContext = elements.reduce( - ( - prev: ReducerAccumulator, - currentElement: FEElement, - idx: number, - ): ReducerAccumulator => { - const paragraphCounter = isParagraph(currentElement) - ? prev.paragraphCounter + 1 - : prev.paragraphCounter; - - const shouldInsertAd = isSuitablePosition( - paragraphCounter, - prev.numberOfAdsInserted, - elements.length === idx + 1, - isParagraph(currentElement), - ); - - const currentElements = [...prev.elements, currentElement]; - - return { - elements: shouldInsertAd - ? insertPlaceholder(currentElements) - : currentElements, - paragraphCounter, - numberOfAdsInserted: shouldInsertAd - ? prev.numberOfAdsInserted + 1 - : prev.numberOfAdsInserted, - }; - }, - // Initial value for reducer function - { - elements: [], - paragraphCounter: 0, - numberOfAdsInserted: 0, - }, - ); - - return elementsWithReducerContext.elements; -}; - -export const enhanceAdPlaceholders = - (format: ArticleFormat, renderingTarget: RenderingTarget) => - (elements: FEElement[]): FEElement[] => - renderingTarget === 'Apps' && - format.design !== ArticleDesign.LiveBlog && - format.design !== ArticleDesign.DeadBlog - ? insertAdPlaceholders(elements) - : elements; From fa29f6444751b7f0134a294748cfc22e3245a4df Mon Sep 17 00:00:00 2001 From: Emma Imber Date: Fri, 10 May 2024 10:25:48 +0100 Subject: [PATCH 3/3] Don't pass abtests into enhanceBlocks --- dotcom-rendering/src/lib/article.ts | 11 +---------- dotcom-rendering/src/model/enhanceBlocks.ts | 7 ++----- dotcom-rendering/src/server/handler.article.web.ts | 1 - 3 files changed, 3 insertions(+), 16 deletions(-) diff --git a/dotcom-rendering/src/lib/article.ts b/dotcom-rendering/src/lib/article.ts index 87a0f769b5e..c5d6d54653e 100644 --- a/dotcom-rendering/src/lib/article.ts +++ b/dotcom-rendering/src/lib/article.ts @@ -6,7 +6,6 @@ import { enhanceCommercialProperties } from '../model/enhanceCommercialPropertie import { enhanceStandfirst } from '../model/enhanceStandfirst'; import { enhanceTableOfContents } from '../model/enhanceTableOfContents'; import { validateAsArticleType } from '../model/validate'; -import type { ServerSideTests } from '../types/config'; import { type DCRArticle } from '../types/frontend'; import { type RenderingTarget } from '../types/renderingTarget'; import { decideFormat } from './decideFormat'; @@ -14,7 +13,6 @@ import { decideFormat } from './decideFormat'; const enhancePinnedPost = ( format: ArticleFormat, renderingTarget: RenderingTarget, - abTests: ServerSideTests, block?: Block, ) => { if (!block) return; @@ -24,7 +22,6 @@ const enhancePinnedPost = ( imagesForLightbox: [], promotedNewsletter: undefined, hasAffiliateLinksDisclaimer: false, - abTests, })[0]; }; @@ -44,7 +41,6 @@ export const enhanceArticleType = ( promotedNewsletter: data.promotedNewsletter, imagesForLightbox, hasAffiliateLinksDisclaimer: !!data.affiliateLinksDisclaimer, - abTests: data.config.abTests, }); const mainMediaElements = enhanceMainMedia( @@ -57,12 +53,7 @@ export const enhanceArticleType = ( ...data, mainMediaElements, blocks: enhancedBlocks, - pinnedPost: enhancePinnedPost( - format, - renderingTarget, - data.config.abTests, - data.pinnedPost, - ), + pinnedPost: enhancePinnedPost(format, renderingTarget, data.pinnedPost), standfirst: enhanceStandfirst(data.standfirst), commercialProperties: enhanceCommercialProperties( data.commercialProperties, diff --git a/dotcom-rendering/src/model/enhanceBlocks.ts b/dotcom-rendering/src/model/enhanceBlocks.ts index 05f7907d2f2..4c499c6562e 100644 --- a/dotcom-rendering/src/model/enhanceBlocks.ts +++ b/dotcom-rendering/src/model/enhanceBlocks.ts @@ -1,5 +1,4 @@ import { type ArticleFormat } from '@guardian/libs'; -import type { ServerSideTests } from '../types/config'; import type { FEElement, ImageForLightbox, Newsletter } from '../types/content'; import type { RenderingTarget } from '../types/renderingTarget'; import { enhanceAdPlaceholders } from './enhance-ad-placeholders'; @@ -23,7 +22,6 @@ type Options = { promotedNewsletter: Newsletter | undefined; imagesForLightbox: ImageForLightbox[]; hasAffiliateLinksDisclaimer: boolean; - abTests: ServerSideTests; }; const enhanceNewsletterSignup = @@ -47,8 +45,8 @@ const enhanceNewsletterSignup = // as they both effect SubheadingBlockElement export const enhanceElements = (format: ArticleFormat, blockId: string, options: Options) => - (elements: FEElement[]): FEElement[] => { - return [ + (elements: FEElement[]): FEElement[] => + [ enhanceLists(enhanceElements(format, blockId, options)), enhanceTimeline(enhanceElements(format, blockId, options)), enhanceDividers, @@ -71,7 +69,6 @@ export const enhanceElements = (enhancedBlocks, enhancer) => enhancer(enhancedBlocks), elements, ); - }; export const enhanceMainMedia = ( diff --git a/dotcom-rendering/src/server/handler.article.web.ts b/dotcom-rendering/src/server/handler.article.web.ts index dad15fee6b7..cb76d2e3ba0 100644 --- a/dotcom-rendering/src/server/handler.article.web.ts +++ b/dotcom-rendering/src/server/handler.article.web.ts @@ -77,7 +77,6 @@ export const handleBlocks: RequestHandler = ({ body }, res) => { promotedNewsletter: undefined, imagesForLightbox: [], hasAffiliateLinksDisclaimer: false, - abTests: abTests ?? {}, }); const html = renderBlocks({ blocks: enhancedBlocks,