Skip to content

Commit

Permalink
Merge pull request #4921 from alphagov/spike-css-custom-properties-us…
Browse files Browse the repository at this point in the history
…er-preference

[SPIKE] Allow an app to respect system preference, or override them with app preference it would store
  • Loading branch information
romaricpascal committed Apr 9, 2024
2 parents a245437 + e920075 commit ebbfca6
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 40 deletions.
1 change: 1 addition & 0 deletions packages/govuk-frontend-review/src/app.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ export default async () => {
app.set('query parser', 'simple')

// Set up middleware
app.use(middleware.theme)
app.use('/docs', middleware.docs)
app.use(middleware.assets)
app.use(middleware.request)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ export { default as banner } from './banner.mjs'
export { default as docs } from './docs.mjs'
export { default as request } from './request.mjs'
export { default as robots } from './robots.mjs'
export { default as theme } from './theme.mjs'
16 changes: 16 additions & 0 deletions packages/govuk-frontend-review/src/common/middleware/theme.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import express from 'express'

const router = express.Router()

/**
* Configure view with the relevant theme based on query params
*/
router.use((req, res, next) => {
const { query } = req

res.locals.govukFrontendTheme = query.theme

next()
})

export default router
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{% extends "govuk/template.njk" %}

{% set htmlClasses = 'govuk-template--dark' %}
{% set htmlClasses = ('govuk-theme--' + govukFrontendTheme) if govukFrontendTheme %}

{% block head %}
<link rel="stylesheet" href="/stylesheets/app.min.css">
Expand Down
1 change: 1 addition & 0 deletions packages/govuk-frontend/src/govuk/core/_all.scss
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
@import "govuk-frontend-properties";
@import "theme";
@import "links";
@import "lists";
@import "typography";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,4 @@
}

--govuk-font-family: #{$govuk-font-family};
--govuk-brand-colour: #{$govuk-brand-colour};
--govuk-text-colour: #{$govuk-text-colour};
--govuk-canvas-background-colour: #{$govuk-canvas-background-colour};
--govuk-body-background-colour: #{$govuk-body-background-colour};
--govuk-print-text-colour: #{$govuk-print-text-colour};
--govuk-secondary-text-colour: #{$govuk-secondary-text-colour};
--govuk-focus-colour: #{$govuk-focus-colour};
--govuk-focus-text-colour: #{$govuk-focus-text-colour};
--govuk-error-colour: #{$govuk-error-colour};
--govuk-success-colour: #{$govuk-success-colour};
--govuk-border-colour: #{$govuk-border-colour};
--govuk-input-border-colour: #{$govuk-input-border-colour};
--govuk-hover-colour: #{$govuk-hover-colour};
--govuk-link-colour: #{$govuk-link-colour};
--govuk-link-visited-colour: #{$govuk-link-visited-colour};
--govuk-link-hover-colour: #{$govuk-link-hover-colour};
--govuk-link-active-colour: #{$govuk-link-active-colour};

@include govuk-media-query($media-type: print) {
--govuk-text-colour: #{$govuk-print-text-colour};
--govuk-font-family: #{$govuk-font-family-print};
}
}
69 changes: 69 additions & 0 deletions packages/govuk-frontend/src/govuk/core/_theme.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// This would likely go in a proper 'settings' file
// and default to `false`.
$govuk-theme-from-system: true !default;

@mixin _govuk-theme-light() {
color-scheme: light;

--govuk-brand-colour: #{$govuk-brand-colour};
--govuk-text-colour: #{$govuk-text-colour};
--govuk-canvas-background-colour: #{$govuk-canvas-background-colour};
--govuk-body-background-colour: #{$govuk-body-background-colour};
--govuk-print-text-colour: #{$govuk-print-text-colour};
--govuk-secondary-text-colour: #{$govuk-secondary-text-colour};
--govuk-focus-colour: #{$govuk-focus-colour};
--govuk-focus-text-colour: #{$govuk-focus-text-colour};
--govuk-error-colour: #{$govuk-error-colour};
--govuk-success-colour: #{$govuk-success-colour};
--govuk-border-colour: #{$govuk-border-colour};
--govuk-input-border-colour: #{$govuk-input-border-colour};
--govuk-hover-colour: #{$govuk-hover-colour};
--govuk-link-colour: #{$govuk-link-colour};
--govuk-link-visited-colour: #{$govuk-link-visited-colour};
--govuk-link-hover-colour: #{$govuk-link-hover-colour};
--govuk-link-active-colour: #{$govuk-link-active-colour};
}

@mixin _govuk-theme-dark() {
@supports (color-scheme: dark) {
color-scheme: dark;

--govuk-canvas-background-colour: #333333;
--govuk-body-background-colour: #222222;
--govuk-text-colour: #ffffff;
--govuk-secondary-text-colour: #cccccc;
--govuk-link-colour: #add8e6;
--govuk-link-visited-colour: #ffb6c1;
--govuk-link-hover-colour: #00ffff;
--govuk-link-active-colour: #ffffff;
}
}

@include govuk-exports("govuk/core/theme") {
:root {
@include _govuk-theme-light;

@if $govuk-theme-from-system {
@include govuk-media-query($media-type: screen, $and: "(prefers-color-scheme: dark)") {
&:not(.govuk-theme--light) {
@include _govuk-theme-dark;
}
}
}
}

// Prevent dark theme to leak into print if some variables don't get overridden
// reducing the risk of printing big areas of black
@include govuk-media-query($media-type: screen) {
.govuk-theme--dark {
@include _govuk-theme-dark;
}
}

@include govuk-media-query($media-type: print) {
:root {
--govuk-text-colour: #{$govuk-print-text-colour};
--govuk-font-family: #{$govuk-font-family-print};
}
}
}
17 changes: 0 additions & 17 deletions packages/govuk-frontend/src/govuk/objects/_template.scss
Original file line number Diff line number Diff line change
Expand Up @@ -46,21 +46,4 @@
// Set the overall body of the page back to the typical background colour.
background-color: var(--govuk-body-background-colour);
}


@include govuk-media-query($media-type: screen) {
.govuk-template--dark {
color-scheme: dark;

--govuk-canvas-background-colour: #333;
--govuk-hover-colour: #333;
--govuk-body-background-colour: #222;
--govuk-text-colour: #fff;
--govuk-secondary-text-colour: #ccc;
--govuk-link-colour: lightblue;
--govuk-link-visited-colour: lightpink;
--govuk-link-hover-colour: aqua;
--govuk-link-active-colour: #fff;
}
}
}

0 comments on commit ebbfca6

Please sign in to comment.