common/app/conf/switches/FeatureSwitches.scala (548 lines of code) (raw):
package conf.switches
import conf.switches.Expiry.never
import java.time.LocalDate
import conf.switches.Owner.group
import conf.switches.SwitchGroup.{Commercial, Feature}
trait FeatureSwitches {
val ShareCounts = Switch(
SwitchGroup.Feature,
"server-share-counts",
"If this switch is on, share counts are fetched from the Facebook Graph API on the server",
owners = Seq(Owner.withGithub("jfsoul")),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val FixturesAndResultsContainerSwitch = Switch(
SwitchGroup.Feature,
"fixtures-and-results-container",
"Fixtures and results container on football tag pages",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val FacebookShareImageLogoOverlay = Switch(
SwitchGroup.Feature,
"facebook-share-image-logo-overlay",
"If this switch is turned on, we will overlay the guardian logo along the bottom of images shared on facebook",
owners = Seq(Owner.withGithub("dominickendrick")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val TwitterShareImageLogoOverlay = Switch(
SwitchGroup.Feature,
"twitter-share-image-logo-overlay",
"If this switch is turned on, we will overlay the guardian logo along the bottom of images shared on twitter",
owners = Seq(Owner.withName("unknown")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val GeoMostPopular = Switch(
SwitchGroup.Feature,
"geo-most-popular",
"If this is switched on users then 'most popular' will be upgraded to geo targeted",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val ExtendedMostPopular = Switch(
SwitchGroup.Feature,
"extended-most-popular",
"Extended 'Most Popular' component with space for DPMUs",
owners = group(Commercial),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val ExtendedMostPopularFronts = Switch(
SwitchGroup.Feature,
"extended-most-popular-fronts",
"Extended 'If switched on shows 'Most Popular' component with space for DPMUs on fronts",
owners = group(Commercial),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val MostViewedFronts = Switch(
SwitchGroup.Feature,
"most-viewed-fronts",
"If this is switched off, most viewed will not show on fronts",
owners = Seq(Owner.withName("unknown")),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val FontSwitch = Switch(
SwitchGroup.Feature,
"web-fonts",
"If this is switched on then the custom Guardian web font will load.",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val FontKerningSwitch = Switch(
SwitchGroup.Feature,
"font-kerning",
"If this is switched on then fonts will be kerned/optimised for legibility.",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val SearchSwitch = Switch(
SwitchGroup.Feature,
"google-search",
"If this switch is turned on then Google search is added to the sections nav.",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val IdentityProfileNavigationSwitch = Switch(
SwitchGroup.Feature,
"id-profile-navigation",
"If this switch is on you will see the link in the topbar taking you through to the users profile or sign in..",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val FacebookShareUseTrailPicFirstSwitch = Switch(
SwitchGroup.Feature,
"facebook-shareimage",
"Facebook shares try to use article trail picture image first when switched ON, or largest available " +
"image when switched OFF.",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val IdentityAvatarUploadSwitch = Switch(
SwitchGroup.Feature,
"id-avatar-upload",
"If this switch is on, users can upload avatars on their profile page",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val EnhanceTweetsSwitch = Switch(
SwitchGroup.Feature,
"enhance-tweets",
"If this switch is turned on then embedded tweets will be enhanced using Twitter's widgets.",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val HistoryTags = Switch(
SwitchGroup.Feature,
"history-tags",
"If this is switched on then personalised history tags are shown in the meganav",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val IdentityBlockSpamEmails = Switch(
SwitchGroup.Feature,
"id-block-spam-emails",
"If switched on, any new registrations with emails from ae blacklisted domin will be blocked",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val IdentityLogRegistrationsFromTor = Switch(
SwitchGroup.Feature,
"id-log-tor-registrations",
"If switched on, any user registrations from a known tor exit node will be logged",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val CrosswordSvgThumbnailsSwitch = Switch(
SwitchGroup.Feature,
"crossword-svg-thumbnails",
"If switched on, crossword thumbnails will be accurate SVGs",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val SudokuSwitch = Switch(
SwitchGroup.Feature,
"sudoku",
"If switched on, sudokus will be available",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val CricketScoresSwitch = Switch(
SwitchGroup.Feature,
"cricket-scores",
"If switched on, cricket score and scorecard link will be displayed",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val RugbyScoresSwitch = Switch(
SwitchGroup.Feature,
"rugby-world-cup",
"If this switch is on rugby world cup scores will be loaded in to rugby match reports and liveblogs",
owners = Seq(Owner.withName("health team")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
// Decommissioned, see marker: 7dde429f00b1
val StocksWidgetSwitch = Switch(
SwitchGroup.Feature,
"stocks-widget",
"If switched on, a stocks widget will be displayed on the business front (note: code is currently decommissioned, so switch has no effect)",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val MissingVideoEndcodingsJobSwitch = Switch(
SwitchGroup.Feature,
"check-for-missing-video-encodings",
"If this switch is switched on then the job will run which will check all video content for missing encodings",
owners = Seq(Owner.withGithub("johnduffell")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val EmailInlineInFooterSwitch = Switch(
SwitchGroup.Feature,
"email-inline-in-footer",
"show the email sign-up in the footer",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val UseAtomsSwitch = Switch(
SwitchGroup.Feature,
"use-atoms",
"use atoms from content api to enhance content",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val AmpArticleSwitch = Switch(
SwitchGroup.Feature,
"amp-article-switch",
"If this switch is on, link to amp pages will be in the metadata for articles",
owners = Seq(Owner.withName("unknown")),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val AmpLiveBlogSwitch = Switch(
SwitchGroup.Feature,
"amp-liveblog-switch",
"If this switch is on, link to amp pages will be in the metadata for liveblogs",
owners = Seq(Owner.withName("unknown")),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val R2PagePressServiceSwitch = Switch(
SwitchGroup.Feature,
"r2-page-press-service",
"When ON, the R2 page press service will monitor the queue and press pages to S3",
owners = Seq(Owner.withGithub("JustinPinner")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
// Owner: Maria Livia Chiorean
val SmartAppBanner = Switch(
SwitchGroup.Feature,
"smart-app-banner",
"When ON, show the Apple smart app banner by adding a meta tag",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
// Owner: Sam Cutler / Editorial Tools
val Targeting = Switch(
SwitchGroup.Feature,
"targeting",
"When ON will the targeting system will poll for updates and merge targeted campaigns into content",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val InlineEmailStyles = Switch(
SwitchGroup.Feature,
"inline-email-styles",
"When ON, email styles will be stripped from the <head> and inlined into HTML style attributes",
owners = Seq(Owner.withName("unknown")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val WeAreHiring = Switch(
SwitchGroup.Feature,
"we-are-hiring",
"When ON, hiring messages will appear in browser console and HTML source",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val Acast = Switch(
SwitchGroup.Feature,
"acast",
"When ON, requests to audio files will be routed to Acast if advertising is enabled",
owners = Seq(Owner.withName("journalism team")),
safeState = On,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
// Simple & Coherent
val ScAdFreeBanner = Switch(
SwitchGroup.Feature,
"sc-ad-free-banner",
"If switched on, ad free users will be told they have ad free.",
owners = Seq(Owner.withName("simple.and.coherent")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
// Election interactive header switch
val InteractiveHeaderSwitch = Switch(
SwitchGroup.Feature,
"interactive-full-header-switch",
"If switched on, the header on all interactives will display in full.",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val slotBodyEnd = Switch(
SwitchGroup.Feature,
"slot-body-end",
"If on, will populate body end slot from Slot Machine (note, only relevant to DCR for now)",
owners = Seq(Owner.withEmail("slot.machine.dev@guardian.co.uk")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val remoteBanner = Switch(
SwitchGroup.Feature,
"remote-banner",
"Enables the banner fetched from support-dotcom-components",
owners = Seq(Owner.withGithub("tomrf1")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val remoteHeader = Switch(
SwitchGroup.Feature,
"remote-header",
"Enables the header fetched from support-dotcom-components",
owners = Seq(Owner.withGithub("tomrf1")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val InteractivePickerFeature = Switch(
SwitchGroup.Feature,
"interactive-picker",
"Activate the Interactive Picker (routing interactives between frontend and DCR)",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val StickyVideos = Switch(
SwitchGroup.Feature,
"sticky-videos",
"When ON, videos in liveblogs will 'stick' on the screen as the reader scrolls up and down the blog",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val NewsletterOnwards = Switch(
SwitchGroup.Feature,
"newsletter-onwards",
"When ON, we replace the standard related stories onwards container with a dedicated one for Newsletters",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val KeyEventsCarousel = Switch(
SwitchGroup.Feature,
"key-events-carousel",
"When ON, shows the new key events timeline carousel and hides the old key events timeline",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val AusRegionSelector = Switch(
SwitchGroup.Feature,
"aus-region-selector",
"When ON, facia containers with targeted territories in Australia will include a 'region switcher' for users to change their region",
owners = Seq(Owner.withName("unknown")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val Callout = Switch(
SwitchGroup.Feature,
"callouts",
"When ON, shows the new callout block component",
owners = Seq(Owner.withGithub("@guardian/editorial-experience")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val PersonaliseSignInGateAfterCheckout = Switch(
SwitchGroup.Feature,
"personalise-sign-in-gate-after-checkout",
"When ON, the sign in gate shows a personalised message to subscribers and supporters",
owners = Seq(Owner.withEmail("personalisation@guardian.co.uk")),
safeState = Off,
sellByDate = never,
exposeClientSide = true,
highImpact = false,
)
val DCRAudioPages = Switch(
SwitchGroup.Feature,
"dcr-audio-pages",
"If this switch is on, we will render audio pages with DCR",
owners = Seq(Owner.withEmail("dotcom.platform@theguardian.com"), Owner.withEmail("devx.e2e@theguardian.com")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val DCRVideoPages = Switch(
SwitchGroup.Feature,
"dcr-video-pages",
"If this switch is on, we will render video pages with DCR",
owners = Seq(Owner.withEmail("dotcom.platform@theguardian.com"), Owner.withEmail("commercial.dev@theguardian.com")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val DCRTagPages = Switch(
group = SwitchGroup.Feature,
name = "dcr-tag-pages",
description = "Render tag pages with DCR",
owners = Seq(Owner.withGithub("dotcom.platform@theguardian.com")),
safeState = On,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val DCRCrosswords = Switch(
SwitchGroup.Feature,
"dcr-crosswords",
"If this switch is on, crosswords will be rendered with DCR",
owners = Seq(Owner.withGithub("dotcom.platform@theguardian.com"), Owner.withEmail("devx.e2e@theguardian.com")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val DCRFootballPages = Switch(
SwitchGroup.Feature,
"dcr-football-pages",
"If this switch is on, live, fixtures and results football pages will be rendered with DCR",
owners = Seq(Owner.withGithub("dotcom.platform@theguardian.com")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val DCRFootballMatchSummary = Switch(
SwitchGroup.Feature,
"dcr-football-match-summary",
"If this switch is on, football match summary pages will be rendered with DCR",
owners = Seq(Owner.withGithub("dotcom.platform@theguardian.com")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val DCRCricketPages = Switch(
SwitchGroup.Feature,
"dcr-cricket-pages",
"If this switch is on, cricket scorecard pages will be rendered with DCR",
owners = Seq(Owner.withGithub("dotcom.platform@theguardian.com")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
val DCRFootballTablesPages = Switch(
SwitchGroup.Feature,
"dcr-football-table-pages",
"If this switch is on, football table pages will be rendered with DCR",
owners = Seq(Owner.withGithub("dotcom.platform@theguardian.com")),
safeState = Off,
sellByDate = never,
exposeClientSide = false,
highImpact = false,
)
}