From 4fea5cb904428e8e33085940a980529868ef03d9 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:23:03 -0500 Subject: [PATCH 01/30] Add env prop for enabling content meter --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index fb1eaaac..b6230091 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,6 +28,7 @@ x-env-defaults: &env SENDGRID_API_KEY: ${SENDGRID_API_KEY-(unset)} SENDGRID_DEV_TO: developer@endeavorb2b.com YARN_CACHE_FOLDER: /.yarn-cache + ENABLE_CONTENT_METER: ${ENABLE_CONTENT_METER-false} x-env-virgon: &env-virgon GRAPHQL_URI: ${GRAPHQL_URI-https://virgon.graphql.base.parameter1.com} From 5512a8527e6529bbf52e35dfdaab74054e7db037 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:23:53 -0500 Subject: [PATCH 02/30] Add global content meter block --- .../components/blocks/content-meter.marko | 74 +++++++++++++++++++ packages/global/components/blocks/marko.json | 3 + 2 files changed, 77 insertions(+) create mode 100644 packages/global/components/blocks/content-meter.marko diff --git a/packages/global/components/blocks/content-meter.marko b/packages/global/components/blocks/content-meter.marko new file mode 100644 index 00000000..c778b27e --- /dev/null +++ b/packages/global/components/blocks/content-meter.marko @@ -0,0 +1,74 @@ +$ const { config, site, contentMeterState } = out.global; +$ const { + displayGate, + displayOverlay, + viewLimit, + views, +} = contentMeterState; +$ const additionalEventData = { + promoCode: site.get("contentMeter.promoCode", undefined), + views, + viewLimit, + displayGate, + displayOverlay, +}; + +$ const setTextVariables = () => { + // Set title based on views remaining + let dynamicTitle = "Create an account" + if (views < viewLimit) dynamicTitle = `You have ${viewLimit - views} article views remaining.`; + if (viewLimit - views === 1) dynamicTitle = `You have 1 article view remaining.`; + if (viewLimit === views && !displayOverlay) dynamicTitle = `This is your last free article.`; + + return [ + dynamicTitle, + "Create a free account", + `Create a free ${config.siteName()} account to continue reading`, + "Continue", + ]; +} +$ const [title, collapsedTitle, callToAction, registerText] = setTextVariables(); + +$ const classes = [ + "content-meter", + "content-meter--open", + `${(displayGate && displayOverlay) ? "content-meter--display-overlay" : "" }`, +].join(" "); + + +
+ +
+ +
+ +
+ +
+

+ $!{callToAction} +

+
+ +
+
+
+ diff --git a/packages/global/components/blocks/marko.json b/packages/global/components/blocks/marko.json index 7f58efff..289d7913 100644 --- a/packages/global/components/blocks/marko.json +++ b/packages/global/components/blocks/marko.json @@ -8,6 +8,9 @@ "": { "template": "./featured-jobs.marko" }, + "": { + "template": "./content-meter.marko" + }, "": { "template": "./featured-jobs-list.marko", "@alias": "string", From 8cee5ffc9e3f3ac590201c4fa4eb93e07da7eb46 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:25:22 -0500 Subject: [PATCH 03/30] Update newsletter middleware This is a port for the update version use in other repos/orgs --- .../global/middleware/newsletter-state.js | 73 ++++++++++++++++--- 1 file changed, 64 insertions(+), 9 deletions(-) diff --git a/packages/global/middleware/newsletter-state.js b/packages/global/middleware/newsletter-state.js index 8d78bed3..bd42f70d 100644 --- a/packages/global/middleware/newsletter-state.js +++ b/packages/global/middleware/newsletter-state.js @@ -1,20 +1,75 @@ +const parser = require('ua-parser-js'); +const defaultValue = require('@parameter1/base-cms-marko-core/utils/default-value'); const { get } = require('@parameter1/base-cms-object-path'); const cookieName = 'enlPrompted'; -module.exports = () => (req, res, next) => { - const hasCookie = get(req, `cookies.${cookieName}`); - const utmMedium = get(req, 'query.utm_medium'); - const olyEncId = get(req, 'query.oly_enc_id'); - const fromEmail = utmMedium === 'email' || olyEncId || false; +const newsletterState = ({ setCookie = true } = {}) => (req, res, next) => { + // account for site level enabling of initially expanded + const newsletterConfig = req.app.locals.site.getAsObject('newsletter'); + if (newsletterConfig.pushdown) { + const { device } = parser(req.headers['user-agent']); + const disableMobileCBIE = defaultValue(newsletterConfig.pushdown.disableMobileCBIE, false); + const disableExpandOnMobile = disableMobileCBIE && (device && device.type === 'mobile'); + const siteConfigCBIE = defaultValue(newsletterConfig.pushdown.canBeInitiallyExpanded, true); + const hasCookie = Boolean(get(req, `cookies.${cookieName}`)); + const utmMedium = get(req, 'query.utm_medium'); + const olyEncId = get(req, 'query.oly_enc_id'); + const disabled = get(req, 'query.newsletterDisabled'); + const fromEmail = utmMedium === 'email' || olyEncId || false; + const canBeInitiallyExpanded = siteConfigCBIE && !( + disableExpandOnMobile + || hasCookie + || fromEmail + || disabled + ); + const initiallyExpanded = (setCookie === true) && canBeInitiallyExpanded; - if (!hasCookie) { // Expire in 14 days (2yr if already signed up) const days = fromEmail ? 365 * 2 : 14; const maxAge = days * 24 * 60 * 60 * 1000; - res.cookie(cookieName, true, { maxAge }); - } - res.locals.newsletterState = { hasCookie, fromEmail }; + if (initiallyExpanded) { + res.cookie(cookieName, true, { maxAge }); + } + + res.locals.newsletterState = { + hasCookie, + fromEmail, + disabled, + initiallyExpanded, + // set this for other middlewares to know it can be set later + // if formatContentResponse conditions are met + canBeInitiallyExpanded, + cookie: { name: cookieName, maxAge }, + }; + } next(); }; + +const formatContentResponse = ({ res, content }) => { + if (!res.locals.newsletterState) return; + const { + initiallyExpanded, + canBeInitiallyExpanded, + hasCookie, + fromEmail, + disabled, + cookie, + } = res.locals.newsletterState; + + if (get(content, 'userRegistration.isCurrentlyRequired') === true) { + res.locals.newsletterState.initiallyExpanded = false; + } else if ( + canBeInitiallyExpanded + && (!initiallyExpanded && !hasCookie && !disabled && !fromEmail) + ) { + res.cookie(cookie.name, true, { maxAge: cookie.maxAge }); + res.locals.newsletterState.initiallyExpanded = true; + } +}; + +module.exports = { + newsletterState, + formatContentResponse, +}; From 96883656c1acac92fceda20b41ad4d73d3f2937a Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:26:13 -0500 Subject: [PATCH 04/30] Add content-meter middleware ported from rr --- packages/global/middleware/content-meter.js | 115 ++++++++++++++++++++ packages/global/package.json | 3 +- 2 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 packages/global/middleware/content-meter.js diff --git a/packages/global/middleware/content-meter.js b/packages/global/middleware/content-meter.js new file mode 100644 index 00000000..69930fa6 --- /dev/null +++ b/packages/global/middleware/content-meter.js @@ -0,0 +1,115 @@ +const parser = require('ua-parser-js'); +const { get } = require('@parameter1/base-cms-object-path'); +const defaultValue = require('@parameter1/base-cms-marko-core/utils/default-value'); + +const { asyncRoute } = require('@parameter1/base-cms-utils'); +const { content: loader } = require('@parameter1/base-cms-web-common/page-loaders'); +const buildContentInput = require('@parameter1/base-cms-marko-web/utils/build-content-input'); +const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/content-meter'); + +const cookieName = 'contentMeter'; +const now = new Date().getTime(); + +async function shouldMeter(req) { + const { apollo, params } = req; + const config = req.app.locals.site.getAsObject('contentMeter'); + + // If broserser Facebook do not display content meter gate. + if (parser(req.headers['user-agent']).browser.name === 'Facebook') return false; + + const { id } = params; + const additionalInput = buildContentInput({ req }); + const content = await loader(apollo, { id, additionalInput, queryFragment }); + + // @todo implement how the gate should be restricted + // By type || By section || By primarySection + // excludeContentTypes: Excludes content metering on page if type matches exclusions + const excludeContentTypes = defaultValue(config.excludeContentTypes, []); + if (excludeContentTypes.includes(content.type)) { + return false; + } + // excludePrimarySectionIds: Excludes content metering on page that matches primarySection + const excludePrimarySectionIds = defaultValue(config.excludePrimarySectionIds, []); + if (excludePrimarySectionIds.includes(content.primarySection.id)) { + return false; + } + // excludePrimarySectionAliass: Excludes content metering on page that matches primarySection + const excludePrimarySectionAliass = defaultValue(config.excludePrimarySectionAliass, []); + if (excludePrimarySectionAliass.includes(content.primarySection.alias)) { + return false; + } + // excludeLabels: Excludes content metering on page that matches labels + const excludeLabels = defaultValue(config.excludeLabels, []); + const contentLabels = defaultValue(content.labels, []); + if (excludeLabels.some((r) => contentLabels.indexOf(r) >= 0)) { + return false; + } + return true; +} + +const getId = (value) => { + if (!value) return null; + const trimmed = `${value}`.trim(); + return /^[a-z0-9]{15}$/i.test(trimmed) ? trimmed : null; +}; + +module.exports = () => asyncRoute(async (req, res, next) => { + const { + identityX, + params, + query, + cookies, + } = req; + const bypassMeter = get(query, 'bypassContentMetering') === 'true'; + const config = req.app.locals.site.getAsObject('contentMeter'); + const { id } = params; + const idxObj = { isEnabled: true, requiredAccessLevelIds: [] }; + const contentAccess = await identityX.checkContentAccess(idxObj); + const { isLoggedIn, requiresUserInput } = contentAccess; + // oly_enc_id getting of query param or if cookie is present + const idFromQuery = getId(query.oly_enc_id); + const idFromCookie = cookies.oly_enc_id ? getId(cookies.oly_enc_id.replace(/^"/, '').replace(/"$/, '')) : undefined; + const olyEncId = idFromQuery || idFromCookie; + // Prop to see if the newsletterState is going to attempt to be initiallyExpanded + // If it can. Allow it to win and add prop check to list to disable contentMeter + const pushdownWins = Boolean(get(res, 'locals.newsletterState.canBeInitiallyExpanded')); + // If disabled, not logged in & have a oly_enc_id or logged in and have all required fields + if (!config.enable || (!isLoggedIn && olyEncId) || (isLoggedIn && !requiresUserInput)); + + else if (isLoggedIn && requiresUserInput && await shouldMeter(req)) { + res.locals.contentMeterState = { + isLoggedIn: true, + requiresUserInput, + displayGate: false, + }; + } else if (config.enable && await shouldMeter(req)) { + const hasCookie = Boolean(get(req, `cookies.${cookieName}`)); + + const value = (hasCookie) ? JSON.parse(get(req, `cookies.${cookieName}`)) : []; + let valid = value.filter((pageView) => pageView.viewed > now - config.timeframe); + + if (valid.find((v) => v.id === id)) { + valid = valid.map((pageview) => { + const { id: viewId } = pageview; + if (viewId === id) return { id, viewed: now }; + return pageview; + }); + } else if (valid.length < config.viewLimit) { + valid.push({ id, viewed: now }); + } + + const displayOverlay = (valid.length >= config.viewLimit && !valid.find((v) => v.id === id)) + && !bypassMeter; + + res.locals.contentMeterState = { + ...config, + views: valid.length, + isLoggedIn: false, + requiresUserInput: true, + displayGate: (config.enable && !pushdownWins && !bypassMeter), + displayOverlay, + }; + res.cookie(cookieName, JSON.stringify(valid), { maxAge: config.timeframe }); + } + next(); +}); diff --git a/packages/global/package.json b/packages/global/package.json index 7c5bb04d..c9a93848 100644 --- a/packages/global/package.json +++ b/packages/global/package.json @@ -48,7 +48,8 @@ "node-fetch": "^2.6.1", "object-path": "^0.11.5", "slug": "^4.0.2", - "vue-slick-carousel": "^1.0.6" + "vue-slick-carousel": "^1.0.6", + "ua-parser-js": "^1.0.33" }, "engines": { "node": ">=14.15" From e03f0713b523e0b8061a0b9a5da4ca7a74dc7053 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:26:29 -0500 Subject: [PATCH 05/30] add content meter css --- .../global/scss/components/content-meter.scss | 145 ++++++++++++++++++ packages/global/scss/core.scss | 3 + 2 files changed, 148 insertions(+) create mode 100644 packages/global/scss/components/content-meter.scss diff --git a/packages/global/scss/components/content-meter.scss b/packages/global/scss/components/content-meter.scss new file mode 100644 index 00000000..057fbe67 --- /dev/null +++ b/packages/global/scss/components/content-meter.scss @@ -0,0 +1,145 @@ +$content-meter-mobile-breakpoint: 600px !default; +.content-meter { + $self: &; + ~ .site-footer { + margin-bottom: 72px; + } + &--display-overlay { + ~ .site-footer { + display: none; + margin-bottom: 0; + } + ~ .document-container { + height: 0; + overflow: hidden; + } + } + &__overlay { + position: fixed; + top: 0; + bottom: 0; + z-index: 1499; + width: 100%; + visibility: visible; + background-color: rgba(0, 0, 0, .7); + transition: visibility 0s, opacity .5s linear; + } + &__bar { + #{ $self } { + &__call-to-action { + @include skin-typography($style: "content-meter-cta"); + display: none; + @media (max-width: $content-meter-mobile-breakpoint) { + text-align: left; + } + &--site-name { + font-style: italic; + } + } + &__body { + display: none; + #{ $self }__login-form { + // stylelint-disable-next-line + .form-group label { + display: none; + } + @media (max-width: $content-meter-mobile-breakpoint) { + width: 100%; + } + // stylelint-disable-next-line + .btn { + @media (max-width: $content-meter-mobile-breakpoint) { + width: 100%; + } + } + } + } + } + position: fixed; + bottom: 0; + // footer zindex is set to 1500 ;) + z-index: 1501; + width: 100%; + padding: map-get($spacers, 3); + color: $white; + text-align: center; + background: $black; + } + &__toggler { + background: initial; + border: none; + &:focus { + outline: none; + + } + .marko-web-icon svg { + fill: $white; + } + @media (max-width: $content-meter-mobile-breakpoint) { + display: flex; + width: 100%; + } + span:not(.marko-web-icon) { + @media (max-width: $content-meter-mobile-breakpoint) { + flex-grow: 2; + text-align: left; + } + font-family: $skin-font-family-secondary; + font-size: 18px; + font-weight: $font-weight-bold; + line-height: 38px; + color: $white; + text-transform: none; + letter-spacing: .3px; + } + } + + &__login-form { + max-width: 700px; + p { + font-family: $skin-font-family-secondary; + font-weight: $font-weight-medium; + } + form { + @media (min-width: $content-meter-mobile-breakpoint) { + display: flex; + .form-group { + margin-right: 1rem; + margin-bottom: 0; + } + } + } + } + + &--open { + ~ .site-footer { + margin-bottom: 296px; + @media (min-width: $content-meter-mobile-breakpoint) { + margin-bottom: 166px; + } + } + #{ $self } { + &__bar { + padding-bottom: map-get($spacers, 4); + } + &__toggler { + // stylelint-disable-next-line + span { + @include skin-typography($style: "content-meter-header"); + margin-bottom: map-get($spacers, block); + } + } + &__call-to-action { + display: block; + } + &__body { + display: flex; + min-height: 108px; + @media (min-width: $content-meter-mobile-breakpoint) { + justify-content: center; + min-height: 48px; + } + } + } + } +} diff --git a/packages/global/scss/core.scss b/packages/global/scss/core.scss index b5ed8bb0..c3909fd4 100644 --- a/packages/global/scss/core.scss +++ b/packages/global/scss/core.scss @@ -91,7 +91,9 @@ @import "@parameter1/base-cms-marko-web-theme-monorail/scss/components/content-page"; @import "@parameter1/base-cms-marko-web-theme-monorail/scss/components/embedded-media"; /*! critical:end */ +/*! critical:start|content */ @import "@parameter1/base-cms-marko-web-theme-monorail/scss/components/identity-x"; +/*! critical:end */ /*! critical:start */ @import "@parameter1/base-cms-marko-web-theme-monorail/scss/components/lazyload"; /*! critical:end */ @@ -293,6 +295,7 @@ /*! critical:start|end */ /*! critical:start|website-section.podcast */ /*! critical:start|content */ +@import "./components/content-meter"; @import "./components/podcasts-page"; /*! critical:end */ /*! critical:start|content */ From 1e87a1c886d93d245b508cf769afeebacd14908b Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:27:15 -0500 Subject: [PATCH 06/30] Add global content meter config --- packages/global/config/content-meter.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 packages/global/config/content-meter.js diff --git a/packages/global/config/content-meter.js b/packages/global/config/content-meter.js new file mode 100644 index 00000000..c46c9b5d --- /dev/null +++ b/packages/global/config/content-meter.js @@ -0,0 +1,21 @@ +module.exports = { + enable: process.env.ENABLE_CONTENT_METER === 'true', + viewLimit: Number(process.env.CONTENT_METER_VIEW_LIMIT) || 1, + excludeLabels: [ + 'Sponsored', + ], + // excludeContentTypes: [ + // 'company', + // 'contact', + // ], + // excludePrimarySectionIds: [ + // 75347, + // ], + // excludePrimarySectionAlias: [ + // 'home', + // ], + // 30 days to milliseconds + timeframe: 30 * 24 * 60 * 60 * 1000, + displayOverlay: true, + promoCode: 'registration_meter', +}; From 6c207dad04873ed58b697b8ada8239a8fe229d65 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:27:44 -0500 Subject: [PATCH 07/30] Add contnet meter helpers --- .../global/utils/content-meter-helpers.js | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 packages/global/utils/content-meter-helpers.js diff --git a/packages/global/utils/content-meter-helpers.js b/packages/global/utils/content-meter-helpers.js new file mode 100644 index 00000000..d1f150a7 --- /dev/null +++ b/packages/global/utils/content-meter-helpers.js @@ -0,0 +1,42 @@ +const { get } = require('@parameter1/base-cms-object-path'); + +const cmShowOverlay = (contentMeterState) => { + if (!contentMeterState) return false; + if (!contentMeterState.displayOverlay) return false; + if (!contentMeterState.isLoggedIn && !contentMeterState.displayGate) return false; + if (contentMeterState.isLoggedIn) return false; + return true; +}; + +const cmRestrictContentByReg = (contentMeterState, content) => { + if (!contentMeterState) return false; + + // If content is gated by reg return true all the time + const contentReg = get(content, 'userRegistration.isCurrentlyRequired'); + if (contentReg === true) return true; + + const { isLoggedIn, requiresUserInput } = contentMeterState; + const displayOverlay = cmShowOverlay(contentMeterState); + // if the overlay is displayed require reg + if (displayOverlay) return true; + // if the user is logged in but doesnt have the required fields display gate + if (isLoggedIn && requiresUserInput) return true; + + return false; +}; + +const cmTruncateBody = (contentMeterState) => { + if (!contentMeterState) return false; + + const { isLoggedIn, requiresUserInput } = contentMeterState; + const displayOverlay = cmShowOverlay(contentMeterState); + if (!displayOverlay) return false; + if (isLoggedIn && !requiresUserInput) return false; + return true; +}; + +module.exports = { + cmShowOverlay, + cmRestrictContentByReg, + cmTruncateBody, +}; From a530f84d13213fb3e263210cc583dc62062011e8 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:32:57 -0500 Subject: [PATCH 08/30] Update routes and templates with new content meter - Update DE routing to content meter & newsletter middelwares - Add content meter to document - DE site level content meter config --- packages/global/components/document.marko | 9 + .../components/layouts/content/default.marko | 158 ++++++++++-------- packages/global/start-server.js | 4 - .../config/content-meter.js | 6 + sites/diverseeducation.com/config/site.js | 2 + .../server/routes/awards.js | 15 +- .../server/routes/awards/emerging-scholars.js | 5 +- .../server/routes/awards/graduate-scholars.js | 5 +- .../server/routes/awards/top-women.js | 5 +- .../server/routes/content.js | 55 ++++-- .../server/routes/diverse-poll.js | 4 +- .../server/routes/home.js | 3 +- .../server/routes/subscribe.js | 4 +- .../server/routes/website-section.js | 15 +- 14 files changed, 177 insertions(+), 113 deletions(-) create mode 100644 sites/diverseeducation.com/config/content-meter.js diff --git a/packages/global/components/document.marko b/packages/global/components/document.marko index 9c58fb4b..3b96016c 100644 --- a/packages/global/components/document.marko +++ b/packages/global/components/document.marko @@ -6,6 +6,7 @@ $ const { req, nativeX, GAM, + contentMeterState, } = out.global; $ const omedaConfig = site.get('omeda'); @@ -80,6 +81,14 @@ $ const omedaConfig = site.get('omeda'); + + + <${input.aboveContainer} /> diff --git a/packages/global/components/layouts/content/default.marko b/packages/global/components/layouts/content/default.marko index cbc48586..e97a1a23 100644 --- a/packages/global/components/layouts/content/default.marko +++ b/packages/global/components/layouts/content/default.marko @@ -2,8 +2,10 @@ import { get, getAsArray } from "@parameter1/base-cms-object-path"; import defaultValue from "@parameter1/base-cms-marko-core/utils/default-value"; import getContentPreview from "@parameter1/base-cms-marko-web-theme-monorail/utils/get-content-preview"; +import { cmShowOverlay, cmRestrictContentByReg, cmTruncateBody } from "../../../utils/content-meter-helpers"; -$ const { site } = out.global; +$ const { site, contentMeterState } = out.global; +$ const showOverlay = cmShowOverlay(contentMeterState); $ const { id, type, primarySection, pageNode, showReadNextBlock, showBottomAdBlock, showTopStoryBlock, ...rest } = input; $ const sections = getAsArray(input, "sections"); $ const belowContentSections = getAsArray(input, "belowContentSections"); @@ -13,7 +15,7 @@ $ const displayPublishedDate = ["company", "contact", "whitepaper"].includes(typ $ const displayReadNext = showReadNextBlock && ["article"].includes(type); $ const displaySocialShare = ["contact"].includes(type) ? false : true; $ const displayComments = ["contact"].includes(type) ? false : true; -$ const displayNewsletterSignup = ["contact"].includes(type) ? false : true; +$ const displayNewsletterSignup = ["contact"].includes(type) || showOverlay ? false : true; $ const shouldInjectAds = ["article", "video", "news", "podcast"].includes(type); $ const excludeFromSidebarsLabel = ["Scholar Profile"]; $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id); @@ -112,16 +114,39 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id); - $ const requiresRegistration = get(content, "userRegistration.isCurrentlyRequired"); + $ const contentRequiresRegistration = get(content, "userRegistration.isCurrentlyRequired"); + $ const requiresRegistration = contentRequiresRegistration || cmRestrictContentByReg(contentMeterState, content); $ const accessLevels = getAsArray(content, "userRegistration.accessLevels"); - + $ const lazyloadFirstImage = displayPrimaryImage && content.primaryImage; + $ const bodyModifiers = isOnTheMoveSection ? ['on-the-move'] : [] + + $ const body = showOverlay ? getContentPreview({ body: content.body, selector: "p:lt(7)" }) : getContentPreview({ body: content.body, selector: "p:nth-of-type(1)" }); + + +
+ + + + + $ const body = getContentPreview({ body: content.body, selector: "p:nth-of-type(1)" }); - +
- + + - $ const bodyId = `content-body-${content.id}`; - $ const transcriptId = `content-transcript-${content.id}`; - - $ const profiles = getAsArray(content, 'profiles'); - - - $!{profile.body} - - - - $ const bodyModifiers = isOnTheMoveSection ? ['on-the-move'] : [] - - - - - - - -
@@ -174,7 +176,6 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id); content={ body: content.transcript } aliases=aliases block-name=blockName - selector=transcriptId preventHTMLInjection=!shouldInjectAds />
@@ -189,51 +190,66 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id); /> - $ const sidebars = getAsArray(content, "sidebars").filter((sidebar) => !excludeFromSidebarsLabel.includes(sidebar.label)).map((sidebar) => sidebar.body); + $ const profiles = getAsArray(content, 'profiles'); + + + $!{profile.body} + + + + + + + + + + $ const sidebars = getAsArray(content, "sidebars").map((sidebar) => sidebar.body); -
- - - - <@wufoo user-name=site.get("wufoo.userName") /> - <@link class="btn btn-primary" /> - - + + + <@wufoo user-name=site.get("wufoo.userName") /> + <@link class="btn btn-primary" /> + + - -
- $ const isUpcoming = content.startDate > Date.now(); - -
- - + + + + + + + - - - + + + - + + + + + + + - - - + + + + +
diff --git a/packages/global/start-server.js b/packages/global/start-server.js index 64f78f2c..394b9b7e 100644 --- a/packages/global/start-server.js +++ b/packages/global/start-server.js @@ -10,7 +10,6 @@ const components = require('./components'); const fragments = require('./fragments'); const sharedRoutes = require('./routes'); const paginated = require('./middleware/paginated'); -const newsletterState = require('./middleware/newsletter-state'); const redirectHandler = require('./redirect-handler'); const oembedHandler = require('./oembed-handler'); const idxRouteTemplates = require('./templates/user'); @@ -46,9 +45,6 @@ module.exports = (options = {}) => { // Use paginated middleware app.use(htmlSitemapPagination()); - // Use newsletterState middleware - app.use(newsletterState()); - // Use Omeda middleware const omedaIdentityXConfig = getAsObject(options, 'siteConfig.omedaIdentityX'); set(app.locals, 'omedaConfig', getAsObject(options, 'siteConfig.omeda')); diff --git a/sites/diverseeducation.com/config/content-meter.js b/sites/diverseeducation.com/config/content-meter.js new file mode 100644 index 00000000..813c657c --- /dev/null +++ b/sites/diverseeducation.com/config/content-meter.js @@ -0,0 +1,6 @@ +const defaultConfig = require('@cox-matthews-associates/package-global/config/content-meter'); + +module.exports = { + ...defaultConfig, + enable: process.env.ENABLE_CONTENT_METER === 'true', +}; diff --git a/sites/diverseeducation.com/config/site.js b/sites/diverseeducation.com/config/site.js index e4371ff8..8d595502 100644 --- a/sites/diverseeducation.com/config/site.js +++ b/sites/diverseeducation.com/config/site.js @@ -9,9 +9,11 @@ const magazine = require('./magazine'); const newsletter = require('./newsletter'); const search = require('./search'); const contactUs = require('./contact-us'); +const contentMeter = require('./content-meter'); module.exports = { leaders, + contentMeter, navigation, nativeX, omeda, diff --git a/sites/diverseeducation.com/server/routes/awards.js b/sites/diverseeducation.com/server/routes/awards.js index 0f213706..1f2087d1 100644 --- a/sites/diverseeducation.com/server/routes/awards.js +++ b/sites/diverseeducation.com/server/routes/awards.js @@ -1,5 +1,6 @@ const { asyncRoute } = require('@parameter1/base-cms-utils'); const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const awardRedirects = require('./awards/redirects'); const emergingScholars = require('./awards/emerging-scholars'); @@ -13,7 +14,7 @@ const mppwccYearly = require('../templates/static-pages/mppwcc-yearly'); module.exports = (app) => { awardRedirects(app); - app.get('/:alias(awards-honors/diverse-champions)', withWebsiteSection({ + app.get('/:alias(awards-honors/diverse-champions)', newsletterState(), withWebsiteSection({ template: champions, queryFragment, })); @@ -27,32 +28,32 @@ module.exports = (app) => { // Top Women topWomen(app); - app.get('/:alias(awards-honors/mppwsa)', asyncRoute(async (req, res) => { + app.get('/:alias(awards-honors/mppwsa)', newsletterState(), asyncRoute(async (req, res) => { const { alias } = req.params; return res.marko(mppwsaYearly, { alias }); })); - app.get('/:alias(awards-honors/mppwsa/\\d{4})', asyncRoute(async (req, res) => { + app.get('/:alias(awards-honors/mppwsa/\\d{4})', newsletterState(), asyncRoute(async (req, res) => { const { alias } = req.params; return res.marko(mppwsaYearly, { alias }); })); - app.get('/:alias(awards-honors/arthur-ashe/\\d{4})', withWebsiteSection({ + app.get('/:alias(awards-honors/arthur-ashe/\\d{4})', newsletterState(), withWebsiteSection({ template: arthurAshe, queryFragment, })); - app.get('/:alias(awards-honors/arthur-ashe)', withWebsiteSection({ + app.get('/:alias(awards-honors/arthur-ashe)', newsletterState(), withWebsiteSection({ template: arthurAshe, queryFragment, })); - app.get('/:alias(awards-honors/mppwcc)', asyncRoute(async (req, res) => { + app.get('/:alias(awards-honors/mppwcc)', newsletterState(), asyncRoute(async (req, res) => { const { alias } = req.params; return res.marko(mppwccYearly, { alias }); })); - app.get('/:alias(awards-honors/mppwcc/\\d{4})', asyncRoute(async (req, res) => { + app.get('/:alias(awards-honors/mppwcc/\\d{4})', newsletterState(), asyncRoute(async (req, res) => { const { alias } = req.params; return res.marko(mppwccYearly, { alias }); })); diff --git a/sites/diverseeducation.com/server/routes/awards/emerging-scholars.js b/sites/diverseeducation.com/server/routes/awards/emerging-scholars.js index 3a938156..3a33adee 100644 --- a/sites/diverseeducation.com/server/routes/awards/emerging-scholars.js +++ b/sites/diverseeducation.com/server/routes/awards/emerging-scholars.js @@ -1,15 +1,16 @@ +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); const { asyncRoute, cleanPath } = require('@parameter1/base-cms-utils'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const emergingScholars = require('../../templates/website-section/awards-honors/emerging-scholars'); module.exports = (app) => { - app.get('/:alias(awards-honors/emerging-scholars)', asyncRoute(async (req, res) => { + app.get('/:alias(awards-honors/emerging-scholars)', newsletterState(), asyncRoute(async (req, res) => { const { alias } = req.params; res.redirect(301, `/${cleanPath(alias)}/2023`); })); - app.get('/:alias(awards-honors/emerging-scholars/\\d{4})', withWebsiteSection({ + app.get('/:alias(awards-honors/emerging-scholars/\\d{4})', newsletterState(), withWebsiteSection({ template: emergingScholars, queryFragment, })); diff --git a/sites/diverseeducation.com/server/routes/awards/graduate-scholars.js b/sites/diverseeducation.com/server/routes/awards/graduate-scholars.js index 64fae5d0..456a7bab 100644 --- a/sites/diverseeducation.com/server/routes/awards/graduate-scholars.js +++ b/sites/diverseeducation.com/server/routes/awards/graduate-scholars.js @@ -1,15 +1,16 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const { asyncRoute, cleanPath } = require('@parameter1/base-cms-utils'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const graduateScholars = require('../../templates/website-section/awards-honors/graduate-scholars'); module.exports = (app) => { - app.get('/:alias(awards-honors/graduate-scholars)', asyncRoute(async (req, res) => { + app.get('/:alias(awards-honors/graduate-scholars)', newsletterState(), asyncRoute(async (req, res) => { const { alias } = req.params; res.redirect(301, `/${cleanPath(alias)}/2022`); })); - app.get('/:alias(awards-honors/graduate-scholars/\\d{4})', withWebsiteSection({ + app.get('/:alias(awards-honors/graduate-scholars/\\d{4})', newsletterState(), withWebsiteSection({ template: graduateScholars, queryFragment, })); diff --git a/sites/diverseeducation.com/server/routes/awards/top-women.js b/sites/diverseeducation.com/server/routes/awards/top-women.js index ba694a58..f3c6fafe 100644 --- a/sites/diverseeducation.com/server/routes/awards/top-women.js +++ b/sites/diverseeducation.com/server/routes/awards/top-women.js @@ -1,15 +1,16 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const { asyncRoute, cleanPath } = require('@parameter1/base-cms-utils'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const topWomen = require('../../templates/website-section/awards-honors/top-women'); module.exports = (app) => { - app.get('/:alias(awards-honors/top-women)', asyncRoute(async (req, res) => { + app.get('/:alias(awards-honors/top-women)', newsletterState(), asyncRoute(async (req, res) => { const { alias } = req.params; res.redirect(301, `/${cleanPath(alias)}/2023`); })); - app.get('/:alias(awards-honors/top-women/\\d{4})', withWebsiteSection({ + app.get('/:alias(awards-honors/top-women/\\d{4})', newsletterState(), withWebsiteSection({ template: topWomen, queryFragment, })); diff --git a/sites/diverseeducation.com/server/routes/content.js b/sites/diverseeducation.com/server/routes/content.js index 0e843dee..76001863 100644 --- a/sites/diverseeducation.com/server/routes/content.js +++ b/sites/diverseeducation.com/server/routes/content.js @@ -1,4 +1,6 @@ const withContent = require('@cox-matthews-associates/package-global/middleware/with-content'); +const contentMeter = require('@cox-matthews-associates/package-global/middleware/content-meter'); +const { newsletterState, formatContentResponse } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@cox-matthews-associates/package-global/graphql/fragments/content-page'); const contact = require('@cox-matthews-associates/package-global/templates/content/contact'); const company = require('@cox-matthews-associates/package-global/templates/content/company'); @@ -6,29 +8,52 @@ const product = require('@cox-matthews-associates/package-global/templates/conte const whitepaper = require('@cox-matthews-associates/package-global/templates/content/whitepaper'); const content = require('../templates/content'); -module.exports = (app) => { - app.get('/*?contact/:id(\\d{8})*', withContent({ +const routesList = [ + { // contact + regex: '/*?contact/:id(\\d{8})*', template: contact, queryFragment, - })); - - app.get('/*?company/:id(\\d{8})*', withContent({ + }, + { // company + regex: '/*?company/:id(\\d{8})*', template: company, queryFragment, - })); - - app.get('/*?product/:id(\\d{8})*', withContent({ + }, + { // product + regex: '/*?product/:id(\\d{8})*', template: product, queryFragment, - })); - - app.get('/*?whitepaper/:id(\\d{8})*', withContent({ + }, + { // whitepaper + regex: '/*?whitepaper/:id(\\d{8})*', template: whitepaper, queryFragment, - })); - - app.get('/*?:id(\\d{8})*', withContent({ + }, + { // default + regex: '/*?/:id(\\d{8})/*|/:id(\\d{8})(/|$)*', template: content, queryFragment, - })); + withContentMeter: true, + }, +]; + +module.exports = (app) => { + const { site } = app.locals; + const contentMeterEnable = site.get('contentMeter.enable'); + // determin to use newsletterstate or contentMeter middleware + routesList.forEach((route) => { + if (route.withContentMeter && contentMeterEnable) { + app.get(route.regex, newsletterState({ setCookie: false }), contentMeter(), withContent({ + template: route.template, + queryFragment: route.queryFragment, + formatResponse: formatContentResponse, + })); + } else { + app.get(route.regex, newsletterState({ setCookie: false }), withContent({ + template: route.template, + queryFragment: route.queryFragment, + formatResponse: formatContentResponse, + })); + } + }); }; diff --git a/sites/diverseeducation.com/server/routes/diverse-poll.js b/sites/diverseeducation.com/server/routes/diverse-poll.js index 9ba11c85..813c0cfb 100644 --- a/sites/diverseeducation.com/server/routes/diverse-poll.js +++ b/sites/diverseeducation.com/server/routes/diverse-poll.js @@ -1,7 +1,9 @@ +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); + const diversePoll = require('../templates/static-pages/diverse-poll'); module.exports = (app) => { - app.get('/diverse-poll', (req, res) => { + app.get('/diverse-poll', newsletterState(), (req, res) => { res.marko(diversePoll); }); }; diff --git a/sites/diverseeducation.com/server/routes/home.js b/sites/diverseeducation.com/server/routes/home.js index b8d255fa..a3c3ed96 100644 --- a/sites/diverseeducation.com/server/routes/home.js +++ b/sites/diverseeducation.com/server/routes/home.js @@ -1,9 +1,10 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const home = require('../templates/index'); module.exports = (app) => { - app.get('/', withWebsiteSection({ + app.get('/', newsletterState(), withWebsiteSection({ aliasResolver: () => 'home', template: home, queryFragment, diff --git a/sites/diverseeducation.com/server/routes/subscribe.js b/sites/diverseeducation.com/server/routes/subscribe.js index 3a2e6c1b..4be139ed 100644 --- a/sites/diverseeducation.com/server/routes/subscribe.js +++ b/sites/diverseeducation.com/server/routes/subscribe.js @@ -1,7 +1,9 @@ +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); + const subscribe = require('../templates/subscribe'); module.exports = (app) => { - app.get('/subscribe', (_, res) => { + app.get('/subscribe', newsletterState(), (_, res) => { res.marko(subscribe); }); }; diff --git a/sites/diverseeducation.com/server/routes/website-section.js b/sites/diverseeducation.com/server/routes/website-section.js index 1e7237bd..16c9fb5b 100644 --- a/sites/diverseeducation.com/server/routes/website-section.js +++ b/sites/diverseeducation.com/server/routes/website-section.js @@ -1,4 +1,5 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const queryFragmentWithLogo = require('@cox-matthews-associates/package-global/graphql/fragments/website-section-with-logo-page'); const cards = require('../templates/website-section/cards'); @@ -10,31 +11,31 @@ const jhf = require('../templates/website-section/john-hope-franklin'); const onTheMove = require('../templates/website-section/on-the-move'); module.exports = (app) => { - app.get('/:alias(opinion)', withWebsiteSection({ + app.get('/:alias(opinion)', newsletterState(), withWebsiteSection({ template: cards, queryFragment, })); - app.get('/:alias(podcasts)', withWebsiteSection({ + app.get('/:alias(podcasts)', newsletterState(), withWebsiteSection({ template: podcasts, queryFragment: queryFragmentWithLogo, })); - app.get('/:alias(products)', withWebsiteSection({ + app.get('/:alias(products)', newsletterState(), withWebsiteSection({ template: products, queryFragment, })); - app.get('/:alias(webinars|events/diverse-talk-live)', withWebsiteSection({ + app.get('/:alias(webinars|events/diverse-talk-live)', newsletterState(), withWebsiteSection({ template: webinars, queryFragment, })); - app.get('/:alias(awards-honors/dr-john-hope-franklin)', withWebsiteSection({ + app.get('/:alias(awards-honors/dr-john-hope-franklin)', newsletterState(), withWebsiteSection({ template: jhf, queryFragment, })); - app.get('/:alias(on-the-move)', withWebsiteSection({ + app.get('/:alias(on-the-move)', newsletterState(), withWebsiteSection({ template: onTheMove, queryFragment, })); - app.get('/:alias([a-z0-9-/]+)', withWebsiteSection({ + app.get('/:alias([a-z0-9-/]+)', newsletterState(), withWebsiteSection({ template: section, queryFragment, })); From 3aa40393c9b59f4b0b260e2bcc05646f60382651 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:41:38 -0500 Subject: [PATCH 09/30] Add contentMeter config & routing update to remaining sites --- sites/ccnewsnow.com/config/content-meter.js | 6 ++ sites/ccnewsnow.com/config/site.js | 2 + sites/ccnewsnow.com/server/routes/content.js | 55 ++++++++++++++----- sites/ccnewsnow.com/server/routes/home.js | 3 +- .../server/routes/website-section.js | 7 ++- .../config/content-meter.js | 6 ++ sites/diversemilitary.net/config/site.js | 2 + .../server/routes/content.js | 55 ++++++++++++++----- .../diversemilitary.net/server/routes/home.js | 3 +- .../server/routes/website-section.js | 7 ++- sites/divhealth.net/config/content-meter.js | 6 ++ sites/divhealth.net/config/site.js | 2 + sites/divhealth.net/server/routes/content.js | 55 ++++++++++++++----- sites/divhealth.net/server/routes/home.js | 3 +- .../server/routes/website-section.js | 7 ++- 15 files changed, 162 insertions(+), 57 deletions(-) create mode 100644 sites/ccnewsnow.com/config/content-meter.js create mode 100644 sites/diversemilitary.net/config/content-meter.js create mode 100644 sites/divhealth.net/config/content-meter.js diff --git a/sites/ccnewsnow.com/config/content-meter.js b/sites/ccnewsnow.com/config/content-meter.js new file mode 100644 index 00000000..813c657c --- /dev/null +++ b/sites/ccnewsnow.com/config/content-meter.js @@ -0,0 +1,6 @@ +const defaultConfig = require('@cox-matthews-associates/package-global/config/content-meter'); + +module.exports = { + ...defaultConfig, + enable: process.env.ENABLE_CONTENT_METER === 'true', +}; diff --git a/sites/ccnewsnow.com/config/site.js b/sites/ccnewsnow.com/config/site.js index f26f5d22..8a8df4b4 100644 --- a/sites/ccnewsnow.com/config/site.js +++ b/sites/ccnewsnow.com/config/site.js @@ -5,10 +5,12 @@ const omeda = require('./omeda'); const identityX = require('./identity-x'); const omedaIdentityX = require('./omeda-identity-x'); const newsletter = require('./newsletter'); +const contentMeter = require('./content-meter'); const search = require('./search'); module.exports = { navigation, + contentMeter, nativeX, omeda, identityX, diff --git a/sites/ccnewsnow.com/server/routes/content.js b/sites/ccnewsnow.com/server/routes/content.js index 0e843dee..76001863 100644 --- a/sites/ccnewsnow.com/server/routes/content.js +++ b/sites/ccnewsnow.com/server/routes/content.js @@ -1,4 +1,6 @@ const withContent = require('@cox-matthews-associates/package-global/middleware/with-content'); +const contentMeter = require('@cox-matthews-associates/package-global/middleware/content-meter'); +const { newsletterState, formatContentResponse } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@cox-matthews-associates/package-global/graphql/fragments/content-page'); const contact = require('@cox-matthews-associates/package-global/templates/content/contact'); const company = require('@cox-matthews-associates/package-global/templates/content/company'); @@ -6,29 +8,52 @@ const product = require('@cox-matthews-associates/package-global/templates/conte const whitepaper = require('@cox-matthews-associates/package-global/templates/content/whitepaper'); const content = require('../templates/content'); -module.exports = (app) => { - app.get('/*?contact/:id(\\d{8})*', withContent({ +const routesList = [ + { // contact + regex: '/*?contact/:id(\\d{8})*', template: contact, queryFragment, - })); - - app.get('/*?company/:id(\\d{8})*', withContent({ + }, + { // company + regex: '/*?company/:id(\\d{8})*', template: company, queryFragment, - })); - - app.get('/*?product/:id(\\d{8})*', withContent({ + }, + { // product + regex: '/*?product/:id(\\d{8})*', template: product, queryFragment, - })); - - app.get('/*?whitepaper/:id(\\d{8})*', withContent({ + }, + { // whitepaper + regex: '/*?whitepaper/:id(\\d{8})*', template: whitepaper, queryFragment, - })); - - app.get('/*?:id(\\d{8})*', withContent({ + }, + { // default + regex: '/*?/:id(\\d{8})/*|/:id(\\d{8})(/|$)*', template: content, queryFragment, - })); + withContentMeter: true, + }, +]; + +module.exports = (app) => { + const { site } = app.locals; + const contentMeterEnable = site.get('contentMeter.enable'); + // determin to use newsletterstate or contentMeter middleware + routesList.forEach((route) => { + if (route.withContentMeter && contentMeterEnable) { + app.get(route.regex, newsletterState({ setCookie: false }), contentMeter(), withContent({ + template: route.template, + queryFragment: route.queryFragment, + formatResponse: formatContentResponse, + })); + } else { + app.get(route.regex, newsletterState({ setCookie: false }), withContent({ + template: route.template, + queryFragment: route.queryFragment, + formatResponse: formatContentResponse, + })); + } + }); }; diff --git a/sites/ccnewsnow.com/server/routes/home.js b/sites/ccnewsnow.com/server/routes/home.js index b8d255fa..a3c3ed96 100644 --- a/sites/ccnewsnow.com/server/routes/home.js +++ b/sites/ccnewsnow.com/server/routes/home.js @@ -1,9 +1,10 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const home = require('../templates/index'); module.exports = (app) => { - app.get('/', withWebsiteSection({ + app.get('/', newsletterState(), withWebsiteSection({ aliasResolver: () => 'home', template: home, queryFragment, diff --git a/sites/ccnewsnow.com/server/routes/website-section.js b/sites/ccnewsnow.com/server/routes/website-section.js index e4c0733a..32c1a2bb 100644 --- a/sites/ccnewsnow.com/server/routes/website-section.js +++ b/sites/ccnewsnow.com/server/routes/website-section.js @@ -1,19 +1,20 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const cards = require('../templates/website-section/cards'); const products = require('../templates/website-section/products'); const section = require('../templates/website-section'); module.exports = (app) => { - app.get('/:alias(opinion)', withWebsiteSection({ + app.get('/:alias(opinion)', newsletterState(), withWebsiteSection({ template: cards, queryFragment, })); - app.get('/:alias(products)', withWebsiteSection({ + app.get('/:alias(products)', newsletterState(), withWebsiteSection({ template: products, queryFragment, })); - app.get('/:alias([a-z0-9-/]+)', withWebsiteSection({ + app.get('/:alias([a-z0-9-/]+)', newsletterState(), withWebsiteSection({ template: section, queryFragment, })); diff --git a/sites/diversemilitary.net/config/content-meter.js b/sites/diversemilitary.net/config/content-meter.js new file mode 100644 index 00000000..813c657c --- /dev/null +++ b/sites/diversemilitary.net/config/content-meter.js @@ -0,0 +1,6 @@ +const defaultConfig = require('@cox-matthews-associates/package-global/config/content-meter'); + +module.exports = { + ...defaultConfig, + enable: process.env.ENABLE_CONTENT_METER === 'true', +}; diff --git a/sites/diversemilitary.net/config/site.js b/sites/diversemilitary.net/config/site.js index 071af6a8..66c19f17 100644 --- a/sites/diversemilitary.net/config/site.js +++ b/sites/diversemilitary.net/config/site.js @@ -6,9 +6,11 @@ const identityX = require('./identity-x'); const omedaIdentityX = require('./omeda-identity-x'); const newsletter = require('./newsletter'); const search = require('./search'); +const contentMeter = require('./content-meter'); module.exports = { navigation, + contentMeter, nativeX, omeda, identityX, diff --git a/sites/diversemilitary.net/server/routes/content.js b/sites/diversemilitary.net/server/routes/content.js index 0e843dee..76001863 100644 --- a/sites/diversemilitary.net/server/routes/content.js +++ b/sites/diversemilitary.net/server/routes/content.js @@ -1,4 +1,6 @@ const withContent = require('@cox-matthews-associates/package-global/middleware/with-content'); +const contentMeter = require('@cox-matthews-associates/package-global/middleware/content-meter'); +const { newsletterState, formatContentResponse } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@cox-matthews-associates/package-global/graphql/fragments/content-page'); const contact = require('@cox-matthews-associates/package-global/templates/content/contact'); const company = require('@cox-matthews-associates/package-global/templates/content/company'); @@ -6,29 +8,52 @@ const product = require('@cox-matthews-associates/package-global/templates/conte const whitepaper = require('@cox-matthews-associates/package-global/templates/content/whitepaper'); const content = require('../templates/content'); -module.exports = (app) => { - app.get('/*?contact/:id(\\d{8})*', withContent({ +const routesList = [ + { // contact + regex: '/*?contact/:id(\\d{8})*', template: contact, queryFragment, - })); - - app.get('/*?company/:id(\\d{8})*', withContent({ + }, + { // company + regex: '/*?company/:id(\\d{8})*', template: company, queryFragment, - })); - - app.get('/*?product/:id(\\d{8})*', withContent({ + }, + { // product + regex: '/*?product/:id(\\d{8})*', template: product, queryFragment, - })); - - app.get('/*?whitepaper/:id(\\d{8})*', withContent({ + }, + { // whitepaper + regex: '/*?whitepaper/:id(\\d{8})*', template: whitepaper, queryFragment, - })); - - app.get('/*?:id(\\d{8})*', withContent({ + }, + { // default + regex: '/*?/:id(\\d{8})/*|/:id(\\d{8})(/|$)*', template: content, queryFragment, - })); + withContentMeter: true, + }, +]; + +module.exports = (app) => { + const { site } = app.locals; + const contentMeterEnable = site.get('contentMeter.enable'); + // determin to use newsletterstate or contentMeter middleware + routesList.forEach((route) => { + if (route.withContentMeter && contentMeterEnable) { + app.get(route.regex, newsletterState({ setCookie: false }), contentMeter(), withContent({ + template: route.template, + queryFragment: route.queryFragment, + formatResponse: formatContentResponse, + })); + } else { + app.get(route.regex, newsletterState({ setCookie: false }), withContent({ + template: route.template, + queryFragment: route.queryFragment, + formatResponse: formatContentResponse, + })); + } + }); }; diff --git a/sites/diversemilitary.net/server/routes/home.js b/sites/diversemilitary.net/server/routes/home.js index b8d255fa..a3c3ed96 100644 --- a/sites/diversemilitary.net/server/routes/home.js +++ b/sites/diversemilitary.net/server/routes/home.js @@ -1,9 +1,10 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const home = require('../templates/index'); module.exports = (app) => { - app.get('/', withWebsiteSection({ + app.get('/', newsletterState(), withWebsiteSection({ aliasResolver: () => 'home', template: home, queryFragment, diff --git a/sites/diversemilitary.net/server/routes/website-section.js b/sites/diversemilitary.net/server/routes/website-section.js index e4c0733a..32c1a2bb 100644 --- a/sites/diversemilitary.net/server/routes/website-section.js +++ b/sites/diversemilitary.net/server/routes/website-section.js @@ -1,19 +1,20 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const cards = require('../templates/website-section/cards'); const products = require('../templates/website-section/products'); const section = require('../templates/website-section'); module.exports = (app) => { - app.get('/:alias(opinion)', withWebsiteSection({ + app.get('/:alias(opinion)', newsletterState(), withWebsiteSection({ template: cards, queryFragment, })); - app.get('/:alias(products)', withWebsiteSection({ + app.get('/:alias(products)', newsletterState(), withWebsiteSection({ template: products, queryFragment, })); - app.get('/:alias([a-z0-9-/]+)', withWebsiteSection({ + app.get('/:alias([a-z0-9-/]+)', newsletterState(), withWebsiteSection({ template: section, queryFragment, })); diff --git a/sites/divhealth.net/config/content-meter.js b/sites/divhealth.net/config/content-meter.js new file mode 100644 index 00000000..813c657c --- /dev/null +++ b/sites/divhealth.net/config/content-meter.js @@ -0,0 +1,6 @@ +const defaultConfig = require('@cox-matthews-associates/package-global/config/content-meter'); + +module.exports = { + ...defaultConfig, + enable: process.env.ENABLE_CONTENT_METER === 'true', +}; diff --git a/sites/divhealth.net/config/site.js b/sites/divhealth.net/config/site.js index 2ed35871..ff23bf4f 100644 --- a/sites/divhealth.net/config/site.js +++ b/sites/divhealth.net/config/site.js @@ -5,10 +5,12 @@ const omeda = require('./omeda'); const identityX = require('./identity-x'); const omedaIdentityX = require('./omeda-identity-x'); const newsletter = require('./newsletter'); +const contentMeter = require('./content-meter'); const search = require('./search'); module.exports = { navigation, + contentMeter, nativeX, omeda, identityX, diff --git a/sites/divhealth.net/server/routes/content.js b/sites/divhealth.net/server/routes/content.js index 0e843dee..76001863 100644 --- a/sites/divhealth.net/server/routes/content.js +++ b/sites/divhealth.net/server/routes/content.js @@ -1,4 +1,6 @@ const withContent = require('@cox-matthews-associates/package-global/middleware/with-content'); +const contentMeter = require('@cox-matthews-associates/package-global/middleware/content-meter'); +const { newsletterState, formatContentResponse } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@cox-matthews-associates/package-global/graphql/fragments/content-page'); const contact = require('@cox-matthews-associates/package-global/templates/content/contact'); const company = require('@cox-matthews-associates/package-global/templates/content/company'); @@ -6,29 +8,52 @@ const product = require('@cox-matthews-associates/package-global/templates/conte const whitepaper = require('@cox-matthews-associates/package-global/templates/content/whitepaper'); const content = require('../templates/content'); -module.exports = (app) => { - app.get('/*?contact/:id(\\d{8})*', withContent({ +const routesList = [ + { // contact + regex: '/*?contact/:id(\\d{8})*', template: contact, queryFragment, - })); - - app.get('/*?company/:id(\\d{8})*', withContent({ + }, + { // company + regex: '/*?company/:id(\\d{8})*', template: company, queryFragment, - })); - - app.get('/*?product/:id(\\d{8})*', withContent({ + }, + { // product + regex: '/*?product/:id(\\d{8})*', template: product, queryFragment, - })); - - app.get('/*?whitepaper/:id(\\d{8})*', withContent({ + }, + { // whitepaper + regex: '/*?whitepaper/:id(\\d{8})*', template: whitepaper, queryFragment, - })); - - app.get('/*?:id(\\d{8})*', withContent({ + }, + { // default + regex: '/*?/:id(\\d{8})/*|/:id(\\d{8})(/|$)*', template: content, queryFragment, - })); + withContentMeter: true, + }, +]; + +module.exports = (app) => { + const { site } = app.locals; + const contentMeterEnable = site.get('contentMeter.enable'); + // determin to use newsletterstate or contentMeter middleware + routesList.forEach((route) => { + if (route.withContentMeter && contentMeterEnable) { + app.get(route.regex, newsletterState({ setCookie: false }), contentMeter(), withContent({ + template: route.template, + queryFragment: route.queryFragment, + formatResponse: formatContentResponse, + })); + } else { + app.get(route.regex, newsletterState({ setCookie: false }), withContent({ + template: route.template, + queryFragment: route.queryFragment, + formatResponse: formatContentResponse, + })); + } + }); }; diff --git a/sites/divhealth.net/server/routes/home.js b/sites/divhealth.net/server/routes/home.js index b8d255fa..a3c3ed96 100644 --- a/sites/divhealth.net/server/routes/home.js +++ b/sites/divhealth.net/server/routes/home.js @@ -1,9 +1,10 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const home = require('../templates/index'); module.exports = (app) => { - app.get('/', withWebsiteSection({ + app.get('/', newsletterState(), withWebsiteSection({ aliasResolver: () => 'home', template: home, queryFragment, diff --git a/sites/divhealth.net/server/routes/website-section.js b/sites/divhealth.net/server/routes/website-section.js index e4c0733a..32c1a2bb 100644 --- a/sites/divhealth.net/server/routes/website-section.js +++ b/sites/divhealth.net/server/routes/website-section.js @@ -1,19 +1,20 @@ const { withWebsiteSection } = require('@parameter1/base-cms-marko-web/middleware'); +const { newsletterState } = require('@cox-matthews-associates/package-global/middleware/newsletter-state'); const queryFragment = require('@parameter1/base-cms-marko-web-theme-monorail/graphql/fragments/website-section-page'); const cards = require('../templates/website-section/cards'); const products = require('../templates/website-section/products'); const section = require('../templates/website-section'); module.exports = (app) => { - app.get('/:alias(opinion)', withWebsiteSection({ + app.get('/:alias(opinion)', newsletterState(), withWebsiteSection({ template: cards, queryFragment, })); - app.get('/:alias(products)', withWebsiteSection({ + app.get('/:alias(products)', newsletterState(), withWebsiteSection({ template: products, queryFragment, })); - app.get('/:alias([a-z0-9-/]+)', withWebsiteSection({ + app.get('/:alias([a-z0-9-/]+)', newsletterState(), withWebsiteSection({ template: section, queryFragment, })); From 4d44154fbe1feea87f3684ffe37315d2d15c9708 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:54:12 -0500 Subject: [PATCH 10/30] ensure authors is set --- packages/global/components/layouts/content/default.marko | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/global/components/layouts/content/default.marko b/packages/global/components/layouts/content/default.marko index e97a1a23..4ad2c95d 100644 --- a/packages/global/components/layouts/content/default.marko +++ b/packages/global/components/layouts/content/default.marko @@ -75,7 +75,7 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id);
- <@section|{ aliases, content }|> + <@section|{ aliases, content, authors }|> $ const { primarySection } = content;
From 0228be8c6356b343cef7909c62b920f5816d64cf Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:58:05 -0500 Subject: [PATCH 11/30] remove added authors block and prop --- .../global/components/layouts/content/default.marko | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/global/components/layouts/content/default.marko b/packages/global/components/layouts/content/default.marko index 4ad2c95d..e4eab59f 100644 --- a/packages/global/components/layouts/content/default.marko +++ b/packages/global/components/layouts/content/default.marko @@ -75,7 +75,7 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id);
- <@section|{ aliases, content, authors }|> + <@section|{ aliases, content }|> $ const { primarySection } = content;
@@ -217,14 +217,6 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id); - - - - - - - - Date: Thu, 15 Jun 2023 07:33:06 -0500 Subject: [PATCH 12/30] Add new dynamicTitle for viewLimit === 1 If there is truely one and only one free article it will read `Enjoy this free article.` instead of `This is your last free article.` --- packages/global/components/blocks/content-meter.marko | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/global/components/blocks/content-meter.marko b/packages/global/components/blocks/content-meter.marko index c778b27e..d9c685b1 100644 --- a/packages/global/components/blocks/content-meter.marko +++ b/packages/global/components/blocks/content-meter.marko @@ -19,6 +19,7 @@ $ const setTextVariables = () => { if (views < viewLimit) dynamicTitle = `You have ${viewLimit - views} article views remaining.`; if (viewLimit - views === 1) dynamicTitle = `You have 1 article view remaining.`; if (viewLimit === views && !displayOverlay) dynamicTitle = `This is your last free article.`; + if (viewLimit === 1 && !displayOverlay) 'Enjoy this free article.'; return [ dynamicTitle, From 03b1bab92caa23a2f52c5f7094f350e291e7ce7e Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Thu, 15 Jun 2023 08:19:38 -0500 Subject: [PATCH 13/30] remove refs to old idx setup --- packages/global/routes/identity-x.js | 57 ---------------------------- packages/global/routes/index.js | 4 -- 2 files changed, 61 deletions(-) delete mode 100644 packages/global/routes/identity-x.js diff --git a/packages/global/routes/identity-x.js b/packages/global/routes/identity-x.js deleted file mode 100644 index 8277e47b..00000000 --- a/packages/global/routes/identity-x.js +++ /dev/null @@ -1,57 +0,0 @@ -const gql = require('graphql-tag'); -const IdentityX = require('@parameter1/base-cms-marko-web-identity-x'); -const { getAsObject, get } = require('@parameter1/base-cms-object-path'); -const { asyncRoute } = require('@parameter1/base-cms-utils'); -const rapidIdentify = require('@parameter1/base-cms-marko-web-omeda-identity-x/routes/rapid-identify'); -const omedaConfig = require('../config/omeda'); -const authenticate = require('../templates/user/authenticate'); -const login = require('../templates/user/login'); -const logout = require('../templates/user/logout'); -const register = require('../templates/user/register'); -const profile = require('../templates/user/profile'); - -const countQuery = gql` - query CountComments($identifier: String!) { - commentsForStream(input: { identifier: $identifier }) { - totalCount - } - } -`; - -module.exports = (app) => { - const config = getAsObject(app, 'locals.identityX'); - IdentityX(app, config); - - app.get(config.getEndpointFor('authenticate'), (_, res) => { - res.marko(authenticate); - }); - - app.get(config.getEndpointFor('login'), (_, res) => { - res.marko(login); - }); - - app.get(config.getEndpointFor('logout'), (_, res) => { - res.marko(logout); - }); - - app.get(config.getEndpointFor('register'), (_, res) => { - res.marko(register); - }); - - app.get(config.getEndpointFor('profile'), (_, res) => { - res.marko(profile); - }); - - app.use('/__idx/omeda-rapid-ident', rapidIdentify({ - brandKey: omedaConfig.brandKey, - productId: get(omedaConfig, 'rapidIdentification.productId'), - })); - - app.get('/__idx/comment-count/:identifier', asyncRoute(async (req, res) => { - const { identityX } = req; - const { identifier } = req.params; - const variables = { identifier }; - const { data } = await identityX.client.query({ query: countQuery, variables }); - res.json(data.commentsForStream); - })); -}; diff --git a/packages/global/routes/index.js b/packages/global/routes/index.js index 3c58b0de..781fa8d2 100644 --- a/packages/global/routes/index.js +++ b/packages/global/routes/index.js @@ -4,7 +4,6 @@ const taxonomy = require('@parameter1/base-cms-marko-web-theme-monorail/routes/t const magazine = require('@parameter1/base-cms-marko-web-theme-monorail-magazine/routes'); const dynamicPage = require('./dynamic-page'); const feed = require('./feed'); -// const identityX = require('./identity-x'); const nativeX = require('./native-x'); const printContent = require('./print-content'); const publicFiles = require('./public-files'); @@ -21,9 +20,6 @@ module.exports = (app, siteConfig) => { // magazine magazine(app); - // // IdentityX (user routing and app context) - // identityX(app); - // NativeX (Story rendering) nativeX(app); From 9bfc72c898298f5afe5e42a7df006b14cbaf44d3 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Thu, 15 Jun 2023 08:20:13 -0500 Subject: [PATCH 14/30] Adjust idx config to better reflect current reg --- packages/global/config/identity-x.js | 34 ++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/global/config/identity-x.js b/packages/global/config/identity-x.js index a8333bdc..6248f3e0 100644 --- a/packages/global/config/identity-x.js +++ b/packages/global/config/identity-x.js @@ -1,28 +1,48 @@ const IdentityXConfiguration = require('@parameter1/base-cms-marko-web-identity-x/config'); +const { get } = require('@parameter1/base-cms-object-path'); const newrelic = require('newrelic'); +const { log } = console; + module.exports = ({ appId, - hiddenFields = [], + apiToken = process.env.IDENTITYX_API_TOKEN, + hiddenFields = [ + 'organizationTitle', + 'phoneNumber', + 'street', + 'addressExtra', + 'city', + 'postalCode', + 'regionCode', + 'countryCode', + ], requiredServerFields = [ 'givenName', 'familyName', 'organization', - 'countryCode', ], requiredClientFields = [ - 'regionCode', - 'countryCode', - 'postalCode', + // 'regionCode', + // 'countryCode', + // 'postalCode', ], + requiredCreateFields = [], } = {}) => { const config = new IdentityXConfiguration({ appId, - apiToken: process.env.IDENTITYX_API_TOKEN, + apiToken, hiddenFields, requiredServerFields, requiredClientFields, - onHookError: newrelic.noticeError.bind(newrelic), + requiredCreateFields, + onHookError: (e) => { + if (process.env.NODE_ENV === 'development') { + log('ERROR IN IDENTITY-X HOOK', e); + if (e.networkError) log('Network Error', get(e, 'networkError.result.errors.0')); + } + newrelic.noticeError(e); + }, }); return config; }; From 9ba9ed1b55482c3f144eab6fa9a42b8351e85105 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Thu, 15 Jun 2023 10:31:42 -0500 Subject: [PATCH 15/30] Add !showOverlay check to ads calls Only fire ads when the overlay is not displayed. --- .../components/layouts/content/default.marko | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/packages/global/components/layouts/content/default.marko b/packages/global/components/layouts/content/default.marko index e4eab59f..094cb606 100644 --- a/packages/global/components/layouts/content/default.marko +++ b/packages/global/components/layouts/content/default.marko @@ -27,12 +27,14 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id); ...rest > <@section|{ aliases }| modifiers=["first-sm"]> - + + + <@section|{ blockName, content, aliases }| modifiers=["content-header"]> @@ -248,12 +250,14 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id); <@section|{ aliases }|> - + + + @@ -274,13 +278,14 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id); /> - <@section|{ aliases }|> - + + + From b6ca8fc2b15d31eb6623e0cdc8fcd66af0f54269 Mon Sep 17 00:00:00 2001 From: Brandon Krigbaum Date: Fri, 16 Jun 2023 12:03:02 -0500 Subject: [PATCH 16/30] Add theme default dependency --- packages/global/package.json | 1 + yarn.lock | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/packages/global/package.json b/packages/global/package.json index c9a93848..5f2b42a6 100644 --- a/packages/global/package.json +++ b/packages/global/package.json @@ -32,6 +32,7 @@ "@parameter1/base-cms-marko-web-p1-events": "^4.20.1", "@parameter1/base-cms-marko-web-search": "^4.18.3", "@parameter1/base-cms-marko-web-social-sharing": "^4.11.1", + "@parameter1/base-cms-marko-web-theme-default": "^4.16.2", "@parameter1/base-cms-marko-web-theme-monorail": "^4.23.1", "@parameter1/base-cms-marko-web-theme-monorail-magazine": "^4.17.1", "@parameter1/base-cms-object-path": "^4.5.12", diff --git a/yarn.lock b/yarn.lock index 5431f096..2fdb69e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1231,6 +1231,18 @@ dependencies: "@parameter1/base-cms-utils" "^4.5.12" +"@parameter1/base-cms-marko-web-theme-default@^4.16.2": + version "4.16.2" + resolved "https://registry.yarnpkg.com/@parameter1/base-cms-marko-web-theme-default/-/base-cms-marko-web-theme-default-4.16.2.tgz#64eed0097a2cd3ef4b948563beebce828639e84a" + integrity sha512-NcjoVUECIlKukzzqFZxHEIeJX8MpGCMkorudb/rzAv/4lpb/TsQOqtgGTlimK2Uo0Re6lAcy32qUDYInrA3H1A== + dependencies: + "@parameter1/base-cms-marko-web-icons" "^4.16.2" + "@parameter1/base-cms-object-path" "^4.5.12" + "@parameter1/base-cms-utils" "^4.5.12" + bootstrap "^4.6.2" + graphql "^14.7.0" + graphql-tag "^2.12.6" + "@parameter1/base-cms-marko-web-theme-monorail-magazine@^4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@parameter1/base-cms-marko-web-theme-monorail-magazine/-/base-cms-marko-web-theme-monorail-magazine-4.17.1.tgz#2ccda378157d6f8d8e2199f5726524d808c5cc87" From 99fbafd61da8c9f65e1f300faa30a07a4857ca47 Mon Sep 17 00:00:00 2001 From: Brandon Krigbaum Date: Fri, 16 Jun 2023 12:03:15 -0500 Subject: [PATCH 17/30] Add user nav items --- packages/global/components/document.marko | 9 ++--- .../global/components/site-header-2.marko | 6 ++++ packages/global/config/user.js | 36 +++++++++++++++++++ .../config/content-meter.js | 2 +- .../diverseeducation.com/config/navigation.js | 3 ++ 5 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 packages/global/config/user.js diff --git a/packages/global/components/document.marko b/packages/global/components/document.marko index 3b96016c..99d7218b 100644 --- a/packages/global/components/document.marko +++ b/packages/global/components/document.marko @@ -74,12 +74,9 @@ $ const omedaConfig = site.get('omeda'); <@above-container> - - - - - - + + +
+
+
- <@section|{ aliases, content }|> + <@section|{ aliases, content, authors }|> $ const { primarySection } = content;
From fd815cfe16a41ac82f71b4b5fe2b0eed358e838b Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Wed, 14 Jun 2023 14:58:05 -0500 Subject: [PATCH 24/30] remove added authors block and prop --- packages/global/components/layouts/content/default.marko | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/global/components/layouts/content/default.marko b/packages/global/components/layouts/content/default.marko index 3b908208..094cb606 100644 --- a/packages/global/components/layouts/content/default.marko +++ b/packages/global/components/layouts/content/default.marko @@ -77,7 +77,7 @@ $ const isOnTheMoveSection = new Set([83113]).has(primarySection.id);
- <@section|{ aliases, content, authors }|> + <@section|{ aliases, content }|> $ const { primarySection } = content;
From 9b1592eede60dd13fdbe892951ab2e94d742d129 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Mon, 17 Jul 2023 12:55:13 -0500 Subject: [PATCH 25/30] update yarn lock and remove default theme --- yarn.lock | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index bcc7bbed..e558712a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1231,18 +1231,6 @@ dependencies: "@parameter1/base-cms-utils" "^4.5.12" -"@parameter1/base-cms-marko-web-theme-default@^4.16.2": - version "4.16.2" - resolved "https://registry.yarnpkg.com/@parameter1/base-cms-marko-web-theme-default/-/base-cms-marko-web-theme-default-4.16.2.tgz#64eed0097a2cd3ef4b948563beebce828639e84a" - integrity sha512-NcjoVUECIlKukzzqFZxHEIeJX8MpGCMkorudb/rzAv/4lpb/TsQOqtgGTlimK2Uo0Re6lAcy32qUDYInrA3H1A== - dependencies: - "@parameter1/base-cms-marko-web-icons" "^4.16.2" - "@parameter1/base-cms-object-path" "^4.5.12" - "@parameter1/base-cms-utils" "^4.5.12" - bootstrap "^4.6.2" - graphql "^14.7.0" - graphql-tag "^2.12.6" - "@parameter1/base-cms-marko-web-theme-monorail-magazine@^4.17.1": version "4.17.1" resolved "https://registry.yarnpkg.com/@parameter1/base-cms-marko-web-theme-monorail-magazine/-/base-cms-marko-web-theme-monorail-magazine-4.17.1.tgz#2ccda378157d6f8d8e2199f5726524d808c5cc87" From 40faf3a9a0e9f10ed58481ceb1d7ae0f755871d0 Mon Sep 17 00:00:00 2001 From: Brian Miller Date: Mon, 17 Jul 2023 13:01:19 -0500 Subject: [PATCH 26/30] remove default theme included --- packages/global/components/site-header-2.marko | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/global/components/site-header-2.marko b/packages/global/components/site-header-2.marko index ffbed06e..b303b467 100644 --- a/packages/global/components/site-header-2.marko +++ b/packages/global/components/site-header-2.marko @@ -64,12 +64,6 @@ $ const headerColClass = promos ? `col-lg-${4 - promos.slice(1).length}` : "col-
-