Skip to content

Commit

Permalink
Revamp styles
Browse files Browse the repository at this point in the history
Signed-off-by: John Gomersall <[email protected]>
  • Loading branch information
john-gom committed Aug 16, 2024
1 parent e56f50d commit c5fc449
Show file tree
Hide file tree
Showing 7 changed files with 212 additions and 154 deletions.
27 changes: 27 additions & 0 deletions tests/account.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// @ts-check
import { test, expect, Locator } from "@playwright/test";
import { gotoHome, matchStyles } from "./test-helper";
import { SECONDARY_BUTTON, SECONDARY_BUTTON_HOVER } from "./expected-styles";

test("account personal info", async ({ page }) => {
await gotoHome(page);

const link = page.getByRole("link", { name: "Create an Open Food Facts account" });
await link.click();

const randomUser = 'test-' + crypto.getRandomValues(new BigUint64Array(1))[0].toString(36);
const randomPassword = crypto.getRandomValues(new BigUint64Array(1))[0].toString(36);
await page.getByLabel('Username').fill(randomUser);
await page.getByRole('textbox', {name:'Password', exact: true}).fill(randomPassword);
await page.getByLabel('Confirm password').fill(randomPassword);
await page.getByLabel('Email').fill(`${randomUser}@openfoodfacts.org`);

await page.getByRole("button", { name: "Create an Open Food Facts account" }).click();

// Account page will now load
const cancelButton = page.getByRole("button", { name: "Cancel" });
expect(await matchStyles(cancelButton, SECONDARY_BUTTON)).toBeNull();
await cancelButton.hover();
expect(await matchStyles(cancelButton, SECONDARY_BUTTON_HOVER)).toBeNull();

});
18 changes: 17 additions & 1 deletion tests/expected-styles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,21 @@ export const PRIMARY_BUTTON_HOVER = {
export const INPUT_FIELD = {
backgroundColor: 'var(--off-input-background)',
borderRadius: 'var(--off-input-radius)',
color: 'var(--off-primary-text)',
color: 'var(--off-text)',
};

export const LINK = {
color: 'var(--off-primary-action)',
};

export const SECONDARY_BUTTON = {
backgroundColor: 'var(--off-secondary-action)',
color: 'var(--off-secondary-button-text)',
borderRadius: 'var(--off-button-radius)',
};

export const SECONDARY_BUTTON_HOVER = {
backgroundColor: 'var(--off-secondary-action-hover)',
color: 'var(--off-secondary-button-text)',
borderRadius: 'var(--off-button-radius)',
};
17 changes: 9 additions & 8 deletions tests/login.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// @ts-check
import { test, expect, Locator } from "@playwright/test";
import { INPUT_FIELD, PRIMARY_BUTTON, PRIMARY_BUTTON_HOVER } from "./expected-styles";
import { matchStyles } from "./test-helper";
import { INPUT_FIELD, LINK, PRIMARY_BUTTON, PRIMARY_BUTTON_HOVER } from "./expected-styles";
import { gotoHome, matchStyles } from "./test-helper";

test("login page", async ({ page }) => {
await page.goto("/realms/open-products-facts/account/#/");
await gotoHome(page);

await expect(page).toHaveTitle("Sign in to Open Products Facts");

Expand All @@ -17,7 +17,7 @@ test("login page", async ({ page }) => {
});

test("locale selector supports incremental search", async ({ page }) => {
await page.goto("/realms/open-products-facts/account/#/");
await gotoHome(page);

const localeSelector = page.getByLabel("languages");
await localeSelector.click();
Expand All @@ -28,12 +28,13 @@ test("locale selector supports incremental search", async ({ page }) => {
});

test("create account link", async ({ page }) => {
await page.goto("/realms/open-products-facts/account/#/");
await gotoHome(page);

const link = page.getByRole("link", { name: "Create an Open Food Facts account" });
expect(await matchStyles(link, LINK)).toBeNull();

// Click the get started link.
await page
.getByRole("link", { name: "Create an Open Food Facts account" })
.click();
await link.click();

// Expects page to have a heading with the name of Installation.
await expect(page.getByRole("heading", { name: "Register" })).toBeVisible();
Expand Down
4 changes: 3 additions & 1 deletion tests/test-helper.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { expect, Locator } from "@playwright/test";
import { Locator, Page } from "@playwright/test";

export const gotoHome = async (page: Page) => await page.goto("/realms/open-products-facts/account/#/");

export const matchStyles = async (
locator: Locator,
Expand Down
99 changes: 26 additions & 73 deletions theme/off/account/resources/css/styles.css
Original file line number Diff line number Diff line change
@@ -1,90 +1,43 @@
@import url('common.css');

:root {
/* Header background */
--pf-global--BackgroundColor--dark-100: var(--off-secondary-background);
/* Main background */
--pf-global--BackgroundColor--light-100: var(--off-primary-background);
--pf-global--Color--light-200: var(--off-primary-action);
--pf-global--primary-color--dark-100: var(--off-secondary-background);
--pf-global--primary-color--100: var(--off-primary-action);
--pf-global--primary-color--200: var(--off-primary-action-hover);
--pf-global--link--Color: var(--off-primary-action);
--pf-global--link--Color--hover: var(--off-primary-action-hover);

/* Sidebar background */
--pf-global--BackgroundColor--dark-300: var(--off-notification-background);
/* Sidebar active item background */
--pf-global--BackgroundColor--dark-400: var(--off-primary-action);
/* Sidebar active item hover */
--pf-global--BackgroundColor--dark-200: var(--off-primary-action-hover);

/* Sidebar active left border */
--pf-global--active-color--400: var(--off-primary-action);

--pf-global--BorderRadius--sm: var(--off-button-radius);
--pf-global--BorderWidth--sm: var(--off-input-border-width);
}

.pf-c-button {
/* Cancel button background (hard-coded transparent) */
--pf-c-button--m-link--BackgroundColor: var(--off-secondary-action);
--pf-c-button--m-link--hover--BackgroundColor: var(--off-secondary-action-hover);

/* Cancel button text */
--pf-global--link--Color: var(--off-secondary-button-text);
--pf-global--link--Color--hover: var(--off-secondary-button-text);
.pf-v5-c-page__header {
background-color: var(--off-other-background);
}

.pf-c-form-control, .pf-c-select {
/* Input background */
--pf-global--BackgroundColor--light-100: var(--off-input-background);

/* Disabled Input background */
--pf-global--disabled-color--300: var(--off-secondary-background);

--pf-c-form-control--BorderRadius: var(--off-input-radius);
--pf-c-select__toggle--before--BorderWidth: 0;
.pf-v5-c-button.pf-m-plain,
.pf-v5-c-menu-toggle.pf-m-plain:not(.pf-m-text) {
color: var(--off-primary-action);
}

.pf-m-typeahead, .pf-c-select .pf-c-select__toggle {
border-radius: var(--off-input-radius);
/* Hide multiple sections for now */
section h1 {
display: none;
}

.pf-m-expanded .pf-m-typeahead:before, .pf-m-expanded .pf-c-select__toggle:before {
inset: 0;
position: absolute;
content: "";
border: solid 2px #202020;
border-radius: var(--off-input-radius);
.pf-v5-l-grid {
display: block;
}

header {
--pf-global--Color--light-100: var(--off-primary-action-hover);
--pf-global--BackgroundColor--light-300: var(--off-primary-action-hover);
.pf-v5-l-grid__item.pf-m-12-col-on-sm.pf-m-4-col-on-md {
display: none;
}

.pf-c-dropdown {
--pf-c-dropdown__menu-item--hover--BackgroundColor: var(--off-secondary-action-hover);
.pf-v5-c-expandable-section__toggle-text {
color: var(--off-primary-action);
}

/* Hide "Jump to section" */
.pf-l-grid>.pf-m-8-col-on-md {
--pf-l-grid__item--GridColumnEnd: span 12;
.pf-v5-c-page__sidebar-body {
background-color: var(--off-secondary-action);
}
.pf-l-grid>.pf-m-4-col-on-md {
display: none;
.pf-v5-c-nav__link:focus,
.pf-v5-c-nav__link:hover {
background-color: var(--off-secondary-action-hover);
}

/* Header logo */
#brandLink {
width: 280px;
height: 48px;
background-image: url('https://static.openfoodfacts.org/images/logos/off-logo-horizontal-light.svg');
background-size: auto 48px;
background-repeat: no-repeat;
.pf-v5-c-nav__link:focus,
.pf-v5-c-nav__link:hover,
.pf-v5-c-nav__link {
color: var(--off-secondary-button-text);
}

#brandLink img {
display: none;
.pf-v5-c-nav__link:before,
.pf-v5-c-nav__item.pf-m-expandable:before {
border-color: var(--off-secondary-action-hover);
}
116 changes: 94 additions & 22 deletions theme/off/common/resources/css/common.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
/* Design guidelines here: https://www.figma.com/design/nFMjewFAOa8c4ahtob7CAB/Mobile-App-Design-(Quentin)?node-id=4200-14304 */
/*
Design guidelines here: https://www.figma.com/design/nFMjewFAOa8c4ahtob7CAB/Mobile-App-Design-(Quentin)?node-id=4200-14304
Try to override all standard patternfly components here. Only use specific CSS for page layout
*/

:root {
--black: #000000;
Expand All @@ -23,50 +26,119 @@

/* Light mode */
:root {
--off-primary-background: var(--white);
--off-primary-text: var(--black);
--off-secondary-background: var(--latte);
--off-background: var(--white);
--off-text: var(--black);
--off-other-background: var(--latte);

--off-primary-action: var(--chocolate);
--off-primary-action-hover: #622000; /* TBA */
--off-primary-button-text: var(--white);

--off-secondary-action: var(--cappuccino);
--off-secondary-action-hover :#cfac9e; /* TBA */
--off-secondary-button-text: var(--black);

--off-input-background: var(--cappuccino);

--off-notification-background: var(--mocha);
}

/* Dark mode */
:root .dark {
--off-primary-background: var(--black);
--off-primary-text: var(--white);
--off-secondary-background: var(--cortado);
--off-background: var(--black);
--off-text: var(--white);
--off-other-background: var(--cortado);

--off-primary-action: var(--white);
/* --off-primary-action-hover: #622000; /* TBA */
--off-primary-button-text: var(--black);

--off-secondary-action: var(--macchiato);
/* --off-secondary-action-hover :#cfac9e; /* TBA */
--off-secondary-button-text: var(--white);

--off-input-background: var(--macchiato);

--off-notification-background: var(--cappuccino);
}

:root {
--pf-v5-global--link--Color: var(--off-primary-action);
--pf-v5-global--primary-color--100: var(--off-primary-action);
--pf-v5-global--BorderRadius--sm: var(--off-button-radius);
--pf-v5-global--BorderWidth--sm: var(--off-input-border-width);
--pf-v5-global--spacer--2xl: 2rem;

--pf-v5-global--primary-color--200: var(--off-primary-action-hover);
--pf-v5-global--Color--dark-100: var(--off-primary-text);
/*
--pf-global--BackgroundColor--light-100: var(--off-input-background);
/* Tried overriding the Patternfly variables but it gets too confusing */

--pf-global--BorderWidth--sm: var(--off-input-border-width);
*/
/***********/
/* Buttons */
/***********/
.pf-v5-c-button {
border-radius: var(--off-button-radius);
}

/* Set height except for password visibility toggle buttons */
.pf-v5-c-button:not(.pf-m-control) {
line-height: 2em;
}
}

/* Primary buttons */
.pf-v5-c-button.pf-m-primary {
background-color: var(--off-primary-action);
color: var(--off-primary-button-text);
}
.pf-v5-c-button.pf-m-primary:hover {
background-color: var(--off-primary-action-hover);
}

/* Secondary / link buttons */
.pf-v5-c-button.pf-m-link {
background-color: var(--off-secondary-action);
color: var(--off-secondary-button-text);
}
.pf-v5-c-button.pf-m-link:hover {
background-color: var(--off-secondary-action-hover);
}

/*********/
/* Links */
/*********/
a {
color: var(--off-primary-action);
}
a:hover {
color: var(--off-primary-action-hover);
}

/**********/
/* Inputs */
/**********/
.pf-v5-c-input-group,
.pf-v5-c-form-control,
.pf-v5-c-button.pf-m-control,
.pf-v5-c-menu-toggle,
.pf-v5-c-form-control>:is(input,select,textarea),
.pf-v5-c-form-control>select {
color: var(--off-text);
background-color: var(--off-input-background);
border-radius: var(--off-input-radius);
}
/* Actual inputs are transparent where they have containing spans */
.pf-v5-c-form-control>:is(input,select,textarea),
.pf-v5-c-form-control>select {
background-color: transparent;
}


/* Remove input underlines */
.pf-v5-c-form-control:before,
.pf-v5-c-form-control:after,
.pf-v5-c-menu-toggle:after,
.pf-v5-c-button:after {
border: none;
}

/* Error borders */
.pf-v5-c-input-group:has(input[aria-invalid=true]),
.pf-v5-c-form-control>:is(input,select,textarea)[aria-invalid=true]
{
border-bottom: var(--off-input-error-border-width) solid var(--off-error-color);
}

/* Ensure red border covers whole of password fields */
.pf-v5-c-input-group input[aria-invalid=true] {
border-bottom-width: 0;
}
Loading

0 comments on commit c5fc449

Please sign in to comment.