From a581e2d333125436d851b540421206b3c0af36c3 Mon Sep 17 00:00:00 2001 From: nandap4790 Date: Mon, 15 Mar 2021 17:39:30 +0530 Subject: [PATCH] Header new (#44) * empty * fix(toggle for enabling GA GTM) (#605) * fix(toggle for enabling GA GTM) * fix(remove ga and gtm id from publisher yml file) * remove code related to login and its dependencies * chore(deps-dev): Bump eslint-plugin-jest from 23.20.0 to 24.1.3 Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 23.20.0 to 24.1.3. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/master/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v23.20.0...v24.1.3) Signed-off-by: dependabot-preview[bot] * Bump postcss from 8.2.1 to 8.2.6 Bumps [postcss](https://github.com/postcss/postcss) from 8.2.1 to 8.2.6. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.2.1...8.2.6) Signed-off-by: dependabot-preview[bot] * Bump eslint from 6.8.0 to 7.19.0 Bumps [eslint](https://github.com/eslint/eslint) from 6.8.0 to 7.19.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v6.8.0...v7.19.0) Signed-off-by: dependabot-preview[bot] * Bump formiojs from 4.12.3 to 4.12.7 Bumps [formiojs](https://github.com/formio/formio.js) from 4.12.3 to 4.12.7. - [Release notes](https://github.com/formio/formio.js/releases) - [Changelog](https://github.com/formio/formio.js/blob/v4.12.7/Changelog.md) - [Commits](https://github.com/formio/formio.js/compare/v4.12.3...v4.12.7) Signed-off-by: dependabot-preview[bot] * [Security] Bump ini from 1.3.5 to 1.3.8 Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8. **This update includes security fixes.** - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8) Signed-off-by: dependabot-preview[bot] * chore(deps-dev): Bump stylelint from 13.3.3 to 13.9.0 Bumps [stylelint](https://github.com/stylelint/stylelint) from 13.3.3 to 13.9.0. - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/13.3.3...13.9.0) Signed-off-by: dependabot-preview[bot] * chore(deps): Bump superagent from 3.8.3 to 6.1.0 Bumps [superagent](https://github.com/visionmedia/superagent) from 3.8.3 to 6.1.0. - [Release notes](https://github.com/visionmedia/superagent/releases) - [Changelog](https://github.com/visionmedia/superagent/blob/master/HISTORY.md) - [Commits](https://github.com/visionmedia/superagent/compare/v3.8.3...v6.1.0) Signed-off-by: dependabot-preview[bot] * chore(deps): [Security] Bump node-notifier from 8.0.0 to 8.0.1 Bumps [node-notifier](https://github.com/mikaelbr/node-notifier) from 8.0.0 to 8.0.1. **This update includes a security fix.** - [Release notes](https://github.com/mikaelbr/node-notifier/releases) - [Changelog](https://github.com/mikaelbr/node-notifier/blob/v8.0.1/CHANGELOG.md) - [Commits](https://github.com/mikaelbr/node-notifier/compare/v8.0.0...v8.0.1) Signed-off-by: dependabot-preview[bot] * chore(deps-dev): Bump prettier from 1.19.1 to 2.2.1 Bumps [prettier](https://github.com/prettier/prettier) from 1.19.1 to 2.2.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/master/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/1.19.1...2.2.1) Signed-off-by: dependabot-preview[bot] * chore(deps-dev): Bump eslint-plugin-react from 7.21.5 to 7.22.0 Bumps [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) from 7.21.5 to 7.22.0. - [Release notes](https://github.com/yannickcr/eslint-plugin-react/releases) - [Changelog](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/yannickcr/eslint-plugin-react/compare/v7.21.5...v7.22.0) Signed-off-by: dependabot-preview[bot] * chore(deps-dev): Bump webpack-dev-server from 3.11.0 to 3.11.2 Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 3.11.0 to 3.11.2. - [Release notes](https://github.com/webpack/webpack-dev-server/releases) - [Changelog](https://github.com/webpack/webpack-dev-server/blob/v3.11.2/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.11.0...v3.11.2) Signed-off-by: dependabot-preview[bot] * chore(deps-dev): Bump stylelint from 13.9.0 to 13.10.0 Bumps [stylelint](https://github.com/stylelint/stylelint) from 13.9.0 to 13.10.0. - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/13.9.0...13.10.0) Signed-off-by: dependabot-preview[bot] * chore(deps-dev): Bump mocha from 8.2.1 to 8.3.0 Bumps [mocha](https://github.com/mochajs/mocha) from 8.2.1 to 8.3.0. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v8.2.1...v8.3.0) Signed-off-by: dependabot-preview[bot] * Feat: update malibu to accept timezone * allow-empty * enables video and newsarticle schema * Revert "chore(deps-dev): Bump stylelint from 13.9.0 to 13.10.0" This reverts commit 0f88d3600c042c11ce29deb4d912c3e946a7777a. * Revert stylelint * upgrade package * upgrade package * Fix prettier issues * Temp fix: remove backend dependency * Update node framework to 4.8.4 and remove onesignal dependency * feat(new header) * fix(top-header) * chore(deps): Bump lodash from 4.17.20 to 4.17.21 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.20 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21) Signed-off-by: dependabot-preview[bot] * fix(removed unwanted file) * fix(perf - loadable server side rendering) * fix(partial hydration for navbar toggle) * Revert "fix(partial hydration for navbar toggle)" This reverts commit a597138fb36ca620a96e0666c9381ae5f8de57d9. * fix(partial hydration) * fix(sticky header) * fix(remove unwanted code) * fix(lint issue) * fix(pr changes) * fix(header) : sticky header using position:sticky * fix(update package) * fix(PR changes) * fix(PR changes) * fix(PR changes) * fix(PR changes) * fix(PR changes) * fix(fix lint issue) * fix(devbox changes) * fix(new logo) * fix(extract critical css for navbar and topbar) * fix: add image specifics to reduce cls * fix: preload fonts * check font preload * remove stuff * Remove superagent * remove gumlet.js dev dep * fix(devbox changes) * Revert "remove gumlet.js dev dep" This reverts commit 068430c77da1ac282fec85545983e9c19a25717b. * get initial height brk news * add min height from app scss * add default height for mobile * dummy commit * fix(perf) * fix(lint) * fix(header) : refactor * fix(wip header) * fix(lint) * fix(update framework) * fix(update package-lock file) * fix(integrate user) * fix(lint issue) * fix(UI changes) * fix(wip) * fix(onesignal serviceworker) * fix(PR changes) * fix(PR changes) * fix(wip) * fix(wip) * fix(wip) * fix: update build config and node build package * fix: Update quintype build file to support loadable * empty * fix(loadable-component): update build package * fix(loadable-component): loadable component test * fix(test) : update test for critical css * fix(package) : update package * fix(update package) * fix(new logo) * fix(wip) * fix(lint) * fix(update package) Co-authored-by: Athira MR <37729206+Athira001@users.noreply.github.com> Co-authored-by: Harshith Raj Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> Co-authored-by: Shraddha Kesari Co-authored-by: Athira MR Co-authored-by: phaneendra <58028287+cricket-lover@users.noreply.github.com> --- .gitignore | 1 + app/assets/images/malibu-logo.jpg | Bin 0 -> 56195 bytes app/assets/images/user-icon.svg | 6 + app/assets/images/user.svg | 22 + app/assets/stylesheets/app.scss | 139 +- app/assets/stylesheets/base/colors.scss | 11 +- app/assets/stylesheets/base/normalize.scss | 343 + app/assets/stylesheets/base/typography.scss | 54 + app/assets/stylesheets/base/z-index.scss | 8 +- app/assets/stylesheets/modal.scss | 4 +- app/client/app.js | 4 +- app/client/render.js | 6 +- .../atoms/hamburger-menu/hamburger-menu.m.css | 37 + .../components/atoms/hamburger-menu/index.js | 22 + .../components/atoms/icons/arrow-down.svg | 1 + .../components/atoms/icons/google.js | 6 +- .../components/breaking-news-view.js | 2 +- app/isomorphic/components/breaking-news.m.css | 3 +- .../four-col-grid/index.js | 2 +- .../components/header/app-logo/app-logo.m.css | 4 + .../components/header/app-logo/index.js | 36 +- .../header/app-logo/publisher-logo.png | Bin 3515 -> 0 bytes .../components/header/app-logo/styles.m.css | 3 - app/isomorphic/components/header/header.m.css | 11 - .../components/header/helper-components.js | 24 - app/isomorphic/components/header/index.js | 23 +- .../components/header/menu-item/index.js | 37 + .../header/menu-item/menu-item.m.css | 18 + .../nav-bar/__snapshots__/index.test.js.snap | 118 +- .../components/header/nav-bar/index.js | 168 +- .../components/header/nav-bar/navbar.m.css | 126 + .../components/header/nav-bar/styles.m.css | 15 - .../components/header/navbar-search/index.js | 89 +- .../{styles.m.css => navbar-search.m.css} | 11 +- .../components/header/top-bar/index.js | 15 + .../components/header/top-bar/top-bar.m.css | 5 + .../login/AccountModal/account-modal.m.css | 9 +- .../components/login/AccountModal/index.js | 2 +- .../login/{Modal => modal}/index.js | 0 .../login/{Modal => modal}/modal.m.css | 0 .../components/molecules/forms/forms.m.css | 8 +- .../components/pages/author-page/index.js | 4 +- app/isomorphic/components/pages/home.js | 2 +- app/isomorphic/components/pages/not-found.js | 2 +- app/isomorphic/components/pages/search.js | 7 +- app/isomorphic/components/pages/section.js | 2 +- app/isomorphic/components/pages/tag.js | 2 +- app/isomorphic/components/store/actions.js | 2 + app/isomorphic/components/store/reducers.js | 23 +- app/isomorphic/components/story-grid.js | 2 +- .../components/story-templates/blank.js | 2 +- app/server/data-loaders/menu-data.js | 12 +- app/server/handlers/render-layout.js | 33 +- app/server/handlers/render-layout.test.js | 204 + config/publisher.yml | 8 +- package-lock.json | 37405 +--------------- package.json | 12 +- quintype-build.config.js | 14 +- views/pages/layout.ejs | 16 +- 59 files changed, 2690 insertions(+), 36455 deletions(-) create mode 100644 app/assets/images/malibu-logo.jpg create mode 100644 app/assets/images/user-icon.svg create mode 100644 app/assets/images/user.svg create mode 100644 app/assets/stylesheets/base/normalize.scss create mode 100644 app/assets/stylesheets/base/typography.scss create mode 100644 app/isomorphic/components/atoms/hamburger-menu/hamburger-menu.m.css create mode 100644 app/isomorphic/components/atoms/hamburger-menu/index.js create mode 100644 app/isomorphic/components/atoms/icons/arrow-down.svg create mode 100644 app/isomorphic/components/header/app-logo/app-logo.m.css delete mode 100644 app/isomorphic/components/header/app-logo/publisher-logo.png delete mode 100644 app/isomorphic/components/header/app-logo/styles.m.css delete mode 100644 app/isomorphic/components/header/header.m.css delete mode 100644 app/isomorphic/components/header/helper-components.js create mode 100644 app/isomorphic/components/header/menu-item/index.js create mode 100644 app/isomorphic/components/header/menu-item/menu-item.m.css create mode 100644 app/isomorphic/components/header/nav-bar/navbar.m.css delete mode 100644 app/isomorphic/components/header/nav-bar/styles.m.css rename app/isomorphic/components/header/navbar-search/{styles.m.css => navbar-search.m.css} (89%) create mode 100644 app/isomorphic/components/header/top-bar/index.js create mode 100644 app/isomorphic/components/header/top-bar/top-bar.m.css rename app/isomorphic/components/login/{Modal => modal}/index.js (100%) rename app/isomorphic/components/login/{Modal => modal}/modal.m.css (100%) create mode 100644 app/server/handlers/render-layout.test.js diff --git a/.gitignore b/.gitignore index b841e9a96..4e3544788 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,4 @@ typings/ /asset-manifest.json .DS_Store +stats.json diff --git a/app/assets/images/malibu-logo.jpg b/app/assets/images/malibu-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11248c214198f4cc717e4716b9726814eeb231a6 GIT binary patch literal 56195 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/user-icon.svg b/app/assets/images/user-icon.svg new file mode 100644 index 000000000..1feb2b311 --- /dev/null +++ b/app/assets/images/user-icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/assets/images/user.svg b/app/assets/images/user.svg new file mode 100644 index 000000000..1d6f3a0e2 --- /dev/null +++ b/app/assets/images/user.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/assets/stylesheets/app.scss b/app/assets/stylesheets/app.scss index 6e6112838..c8b8a22bf 100644 --- a/app/assets/stylesheets/app.scss +++ b/app/assets/stylesheets/app.scss @@ -4,6 +4,12 @@ @import "./base/z-index.scss"; @import "./base/colors.scss"; +@import "./base/normalize.scss"; +@import "./base/typography.scss"; + +:root { + --container-width: 1280px; +} *, *::after, @@ -19,6 +25,7 @@ html { body { margin: 0; + background-color: var(--white); } img { @@ -30,49 +37,6 @@ a { font-weight: normal; } -/* Menu */ -#main-navigation { - position: fixed; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 10; - transform: translateY(-100%); - background-color: black; - transition: all 0.5s; -} - -#main-navigation ul { - list-style: none; - padding: 0; - max-width: 400px; - margin: 0 auto; - text-align: center; -} - -#main-navigation li { - padding: 10px 0; - color: white; -} - -#main-navigation li a { - color: white; - font-size: 32px; - text-transform: uppercase; - font-family: var(--title-font); - text-decoration: none; - transition: all 0.5s; -} - -#main-navigation li a:hover { - border-bottom: 1px solid white; -} - -#main-navigation:target { - transform: translateY(0); -} - #breaking-news-container { min-height: 71px; @@ -82,79 +46,11 @@ a { } .container { - max-width: 1000px; + max-width: var(--container-width); margin: 0 auto; padding: 0 16px; } -h1 { - font-family: var(--title-font); - font-size: 30px; - font-weight: 800; - margin: 10px 0; - text-align: center; - text-transform: uppercase; -} - -h1 span { - font-family: var(--content-font); - font-size: 24px; - font-style: italic; - font-weight: 400; - margin: 0 5px; - text-transform: none; -} - -.toggle { - display: block; - width: 28px; - height: 30px; - margin: 30px auto 10px; -} - -.toggle span::after, -.toggle span::before { - content: ""; - position: absolute; - left: 0; - top: -9px; -} - -.toggle span::after { - top: 9px; -} - -.toggle span { - position: relative; - display: block; -} - -.toggle span, -.toggle span::after, -.toggle span::before { - width: 100%; - height: 5px; - background-color: black; - transition: all 0.3s; - backface-visibility: hidden; - border-radius: 2px; -} - -/* on activation */ -.toggle.on span { - background-color: transparent; -} - -.toggle.on span::before { - background-color: white; - transform: rotate(45deg) translate(5px, 5px); -} - -.toggle.on span::after { - background-color: white; - transform: rotate(-45deg) translate(7px, -8px); -} - .app-loading { width: 100%; height: 300px; @@ -184,7 +80,7 @@ h1 span { } } -.story-grid-item h2 { +.story-grid-item h3 { font-size: 16px; text-align: center; height: 100px; @@ -261,3 +157,20 @@ h1 span { } } } + +.topbar-wrapper { + display: flex; + justify-content: space-between; + align-items: center; +} + +.sticky-header { + position: sticky; + top: 0; + z-index: 1; +} + +.logo-wrapper { + line-height: 0; + padding: 16px 0; +} diff --git a/app/assets/stylesheets/base/colors.scss b/app/assets/stylesheets/base/colors.scss index 0e0f776a1..7cc03479b 100644 --- a/app/assets/stylesheets/base/colors.scss +++ b/app/assets/stylesheets/base/colors.scss @@ -1,6 +1,15 @@ :root { --white: #ffffff; - --rgbBlack: 0, 0, 0; + --rgb-black: 0, 0, 0; + --brand-primary: #2cc7a4; + --brand-primary-dark: #108167; + --brand-secondary: #1e1e1e; + --grey-light: #e8e8e8; + --grey-dark: #9c9c9c; + + --meta-color: var(--brand-primary); + --title-color: var(--brand-secondary); + --border-color: var(--grey-light); --malibu-gray9: #9c9c9c; --torch-red: #ff0033; --lime-green: #4bb543; diff --git a/app/assets/stylesheets/base/normalize.scss b/app/assets/stylesheets/base/normalize.scss new file mode 100644 index 000000000..59db9346d --- /dev/null +++ b/app/assets/stylesheets/base/normalize.scss @@ -0,0 +1,343 @@ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/app/assets/stylesheets/base/typography.scss b/app/assets/stylesheets/base/typography.scss new file mode 100644 index 000000000..3e8414ce1 --- /dev/null +++ b/app/assets/stylesheets/base/typography.scss @@ -0,0 +1,54 @@ +:root { + --base-smallest: 1.2rem; + --base-smaller: 1.4rem; + --base-regular: 1.3rem; + --base-small: 1.5rem; + --base: 1.6rem; + --base-medium: 1.8rem; + --base-large: 2rem; + --base-larger: 2.4rem; + --medium: 2.6rem; + --large: 3.2rem; + --jumbo: 5.4rem; + + --regular: 400; + --semi-bold: 600; + --bold: 700; +} + +a { + text-decoration: none; + color: inherit; +} + +html { + font-size: 62.5%; +} + +body { + font-family: var(--content-font); + font-weight: var(--regular); + font-size: var(--base); + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -moz-font-feature-settings: "liga" on; +} +h1, +h2, +h3, +h4, +h5, +h6, +p, +ul, +ol { + margin: 0; + padding: 0; + font-family: var(--content-font); +} + +p, +li { + font-size: var(--base); +} diff --git a/app/assets/stylesheets/base/z-index.scss b/app/assets/stylesheets/base/z-index.scss index 412433a78..9ec4e2b1f 100644 --- a/app/assets/stylesheets/base/z-index.scss +++ b/app/assets/stylesheets/base/z-index.scss @@ -1,4 +1,8 @@ :root { - --z-level-1: 100; - --modal: var(--z-level-1); + --zlevel-1: -1; + --zlevel0: 1; + --zlevel1: 2; + --zlevel2: 3; + --zlevel3: 4; + --zlevel100: 100; } diff --git a/app/assets/stylesheets/modal.scss b/app/assets/stylesheets/modal.scss index 46bdf35b3..da392fd7e 100644 --- a/app/assets/stylesheets/modal.scss +++ b/app/assets/stylesheets/modal.scss @@ -12,8 +12,8 @@ left: 0; right: 0; bottom: 0; - z-index: var(--modal); - background: rgba(var(--rgbBlack), 0.5); + background: rgba(var(--rgb-black), 0.5); + z-index: var( --zlevel3); } .modal-content { diff --git a/app/client/app.js b/app/client/app.js index e3056f988..f8af58baa 100644 --- a/app/client/app.js +++ b/app/client/app.js @@ -1,9 +1,9 @@ /* eslint-disable global-require */ -import wretch from "wretch"; import { startApp } from "@quintype/framework/client/start"; +import wretch from "wretch"; + import { renderApplication, preRenderApplication } from "./render"; import { REDUCERS } from "../isomorphic/components/store/reducers"; - import "../../app/assets/stylesheets/app.scss"; const opts = { diff --git a/app/client/render.js b/app/client/render.js index 762435d39..a77de85e8 100644 --- a/app/client/render.js +++ b/app/client/render.js @@ -3,8 +3,9 @@ import get from "lodash/get"; import { pickComponent } from "../isomorphic/pick-component"; import { BreakingNewsView } from "../isomorphic/components/breaking-news-view"; -import { Header } from "../isomorphic/components/header"; import { Footer } from "../isomorphic/components/layouts/footer"; +import { NavbarSearch } from "../isomorphic/components/header/navbar-search"; +import { NavBar } from "../isomorphic/components/header/nav-bar"; export function preRenderApplication(store) { const hydrate = { hydrate: !global.qtLoadedFromShell }; @@ -16,7 +17,8 @@ export function preRenderApplication(store) { updateInterval: breakingNewsInterval * 1000 }; - renderComponent(Header, "header", store, hydrate); + renderComponent(NavbarSearch, "search-bar", store, hydrate); + renderComponent(NavBar, "nav-bar", store, hydrate); breakingNewsConfig.is_enable && renderBreakingNews("breaking-news-container", store, BreakingNewsView, breakingNewsbaseProps); renderComponent(Footer, "footer", store, hydrate); diff --git a/app/isomorphic/components/atoms/hamburger-menu/hamburger-menu.m.css b/app/isomorphic/components/atoms/hamburger-menu/hamburger-menu.m.css new file mode 100644 index 000000000..9553ca087 --- /dev/null +++ b/app/isomorphic/components/atoms/hamburger-menu/hamburger-menu.m.css @@ -0,0 +1,37 @@ +.hamburger { + background-color: transparent; + border: 0; + box-shadow: none; + cursor: pointer; + padding: 0; + margin: 12px 0; +} + +.hamburger:focus { + outline: none; +} + +.line { + background-color: var(--brand-secondary); + display: block; + height: 3px; + width: 22px; + transition: all 0.1s ease-in; + border-radius: 2px; +} + +.line:nth-child(2) { + margin: 4px 0; +} + +.hamburger.is-open span:nth-child(1) { + transform: translateY(4px) rotate(45deg); +} + +.hamburger.is-open span:nth-child(2) { + opacity: 0; +} + +.hamburger.is-open span:nth-child(3) { + transform: translateY(-10px) rotate(-45deg); +} diff --git a/app/isomorphic/components/atoms/hamburger-menu/index.js b/app/isomorphic/components/atoms/hamburger-menu/index.js new file mode 100644 index 000000000..f2c1b5c49 --- /dev/null +++ b/app/isomorphic/components/atoms/hamburger-menu/index.js @@ -0,0 +1,22 @@ +import React from "react"; +import PT from "prop-types"; + +import "./hamburger-menu.m.css"; + +export const HamburgerMenu = ({ onMenuToggle, isMegaMenuOpen }) => ( + +); + +HamburgerMenu.propTypes = { + onMenuToggle: PT.func, + isMegaMenuOpen: PT.bool +}; + +export default HamburgerMenu; diff --git a/app/isomorphic/components/atoms/icons/arrow-down.svg b/app/isomorphic/components/atoms/icons/arrow-down.svg new file mode 100644 index 000000000..f0dc531a8 --- /dev/null +++ b/app/isomorphic/components/atoms/icons/arrow-down.svg @@ -0,0 +1 @@ + diff --git a/app/isomorphic/components/atoms/icons/google.js b/app/isomorphic/components/atoms/icons/google.js index ea5d4f0b5..d0f9ae638 100644 --- a/app/isomorphic/components/atoms/icons/google.js +++ b/app/isomorphic/components/atoms/icons/google.js @@ -1,5 +1,5 @@ import React from "react"; -import { number } from "prop-types"; +import PT from "prop-types"; export const Google = ({ width = 13, height = 13 }) => { return ( @@ -25,6 +25,6 @@ export const Google = ({ width = 13, height = 13 }) => { }; Google.propTypes = { - width: number, - height: number + width: PT.number, + height: PT.number }; diff --git a/app/isomorphic/components/breaking-news-view.js b/app/isomorphic/components/breaking-news-view.js index d53a62305..ce8a6e56a 100644 --- a/app/isomorphic/components/breaking-news-view.js +++ b/app/isomorphic/components/breaking-news-view.js @@ -49,7 +49,7 @@ export const BreakingNewsViewBase = ({ breakingNews = [], breakingNewsConfig = { } return ( -
+
BREAKING NEWS
{renderBreakingNewsMarquee(breakingNewsItem, breakingNewsConfig)} diff --git a/app/isomorphic/components/breaking-news.m.css b/app/isomorphic/components/breaking-news.m.css index ea2e8d433..4464065b9 100644 --- a/app/isomorphic/components/breaking-news.m.css +++ b/app/isomorphic/components/breaking-news.m.css @@ -20,14 +20,13 @@ background-color: white; display: inline-flex; justify-content: center; - padding: 4px; align-items: center; margin-right: 14px; font-weight: bold; flex-shrink: 0; @media screen and (min-width: 768px) { font-size: 16px; - padding: 4px 16px; + padding: 4px 0; } } diff --git a/app/isomorphic/components/collection-templates/four-col-grid/index.js b/app/isomorphic/components/collection-templates/four-col-grid/index.js index f8cefd39e..d917beed2 100644 --- a/app/isomorphic/components/collection-templates/four-col-grid/index.js +++ b/app/isomorphic/components/collection-templates/four-col-grid/index.js @@ -8,7 +8,7 @@ import "./four-col-grid.m.css"; export function FourColGrid({ collection, stories }) { return (
-

{collection.name}

+

{collection.name}

); diff --git a/app/isomorphic/components/header/app-logo/app-logo.m.css b/app/isomorphic/components/header/app-logo/app-logo.m.css new file mode 100644 index 000000000..61c2b626d --- /dev/null +++ b/app/isomorphic/components/header/app-logo/app-logo.m.css @@ -0,0 +1,4 @@ +.publisher-logo { + height: 66px; + max-width: 100%; +} diff --git a/app/isomorphic/components/header/app-logo/index.js b/app/isomorphic/components/header/app-logo/index.js index ac959855b..25541e429 100644 --- a/app/isomorphic/components/header/app-logo/index.js +++ b/app/isomorphic/components/header/app-logo/index.js @@ -1,26 +1,22 @@ import React from "react"; import { Link } from "@quintype/components"; -import assetify from "@quintype/framework/assetify"; -import "./styles.m.css"; +import "./app-logo.m.css"; -import logo from "./publisher-logo.png"; - -function AppLogo() { - return ( -
- - Logo - -
- ); -} +const AppLogo = () => ( +

+ + Logo + +

+); export { AppLogo }; diff --git a/app/isomorphic/components/header/app-logo/publisher-logo.png b/app/isomorphic/components/header/app-logo/publisher-logo.png deleted file mode 100644 index 60e957fc2e5fb08439a562388f08dde26377d6c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3515 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 diff --git a/app/isomorphic/components/header/app-logo/styles.m.css b/app/isomorphic/components/header/app-logo/styles.m.css deleted file mode 100644 index 927adeb25..000000000 --- a/app/isomorphic/components/header/app-logo/styles.m.css +++ /dev/null @@ -1,3 +0,0 @@ -.publisher-logo { - height: 60px; -} diff --git a/app/isomorphic/components/header/header.m.css b/app/isomorphic/components/header/header.m.css deleted file mode 100644 index 7fbf62808..000000000 --- a/app/isomorphic/components/header/header.m.css +++ /dev/null @@ -1,11 +0,0 @@ -.container { - display: flex; - justify-content: space-between; - padding: 10px 0; - background-color: #fff; - margin-bottom: 10px; -} - -.blue { - background: blue; -} diff --git a/app/isomorphic/components/header/helper-components.js b/app/isomorphic/components/header/helper-components.js deleted file mode 100644 index 5563c4671..000000000 --- a/app/isomorphic/components/header/helper-components.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from "react"; -import PT from "prop-types"; -import { Link } from "@quintype/components"; - -function MenuItem(props) { - // TODO: Add submenu support - return props.item.isExternalLink ? ( - - {props.item.title} - - ) : ( - {props.item.title} - ); -} - -MenuItem.propTypes = { - item: PT.shape({ - isExternalLink: PT.bool, - completeUrl: PT.string, - title: PT.string - }) -}; - -export { MenuItem }; diff --git a/app/isomorphic/components/header/index.js b/app/isomorphic/components/header/index.js index 9b4e62271..f0fa7a420 100644 --- a/app/isomorphic/components/header/index.js +++ b/app/isomorphic/components/header/index.js @@ -1,26 +1,9 @@ import React from "react"; -import get from "lodash/get"; -import { connect } from "react-redux"; -import { NavBar } from "./nav-bar"; - -import "./header.m.css"; +import { TopBar } from "./top-bar"; // Common wrapper for navigation. We could add OffcanvasMenu, Navbar etc components here. -class HeaderBase extends React.Component { - render() { - return ( -
- -
- ); - } -} -const mapStateToProps = state => ({ - menu: get(state, ["qt", "data", "navigationMenu"], []), - enableLogin: get(state, ["qt", "config", "publisher-attributes", "enableLogin"], false), - isLoginOpen: get(state, ["isLoginOpen"], false) -}); +const Header = () => ; -export const Header = connect(mapStateToProps, () => ({}))(HeaderBase); +export { Header }; diff --git a/app/isomorphic/components/header/menu-item/index.js b/app/isomorphic/components/header/menu-item/index.js new file mode 100644 index 000000000..8d3cf58d1 --- /dev/null +++ b/app/isomorphic/components/header/menu-item/index.js @@ -0,0 +1,37 @@ +import React from "react"; +import PT from "prop-types"; +import { Link } from "@quintype/components"; + +import "./menu-item.m.css"; + +const MenuItem = ({ item, toggleHandler }) => { + if (item["item-type"] === "placeholder") { + return {item.title}; + } else if (item["item-type"] === "link") { + return ( + + {item.title} + + ); + } else { + return ( + + {item.title} + + ); + } +}; + +MenuItem.propTypes = { + item: PT.object, + showIcon: PT.bool +}; + +export { MenuItem }; diff --git a/app/isomorphic/components/header/menu-item/menu-item.m.css b/app/isomorphic/components/header/menu-item/menu-item.m.css new file mode 100644 index 000000000..fd6f499a0 --- /dev/null +++ b/app/isomorphic/components/header/menu-item/menu-item.m.css @@ -0,0 +1,18 @@ +.menu-link { + padding: 14px 6px 14px 6px; + display: flex; + align-items: center; + color: var(--brand-secondary); +} + +.menu-link:hover { + color: var(--rgb-black); +} + +.arrow-down { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 8px solid var(--brand-secondary); + margin: 4px 4px 0; + cursor: pointer; +} diff --git a/app/isomorphic/components/header/nav-bar/__snapshots__/index.test.js.snap b/app/isomorphic/components/header/nav-bar/__snapshots__/index.test.js.snap index 67df6111d..1996c6b70 100644 --- a/app/isomorphic/components/header/nav-bar/__snapshots__/index.test.js.snap +++ b/app/isomorphic/components/header/nav-bar/__snapshots__/index.test.js.snap @@ -1,119 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Navbar renders the navbar when menu.default is a valid array 1`] = ` - - -
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
- -
-`; +exports[`Navbar renders the navbar when menu.default is a valid array 1`] = `undefined`; -exports[`Navbar renders the navbar when menu.default is empty array 1`] = ` - - -
    -
  • - -
  • -
- -
-`; - -exports[`Navbar renders the navbar with default vaules 1`] = ` - - -
    -
  • - -
  • -
- -
-`; +exports[`Navbar renders the navbar when menu.default is empty array 1`] = `undefined`; diff --git a/app/isomorphic/components/header/nav-bar/index.js b/app/isomorphic/components/header/nav-bar/index.js index d75bd6403..d2d64b166 100644 --- a/app/isomorphic/components/header/nav-bar/index.js +++ b/app/isomorphic/components/header/nav-bar/index.js @@ -1,23 +1,50 @@ -import React, { useState, useEffect, Suspense } from "react"; +import React, { Fragment, useEffect, useState, Suspense, lazy } from "react"; import { useDispatch, useSelector } from "react-redux"; import get from "lodash/get"; -import { object, bool } from "prop-types"; +import assetify from "@quintype/framework/assetify"; -import { MEMBER_UPDATED } from "../../store/actions"; -import { NavbarSearch } from "../navbar-search"; -import { MenuItem } from "../helper-components"; -import { AppLogo } from "../app-logo"; +import { OPEN_HAMBURGER_MENU, OPEN_SEARCHBAR, MEMBER_UPDATED } from "../../store/actions"; +import { MenuItem } from "../menu-item"; +import HamburgerMenu from "../../atoms/hamburger-menu"; import MessageWrapper from "../../molecules/forms/message-wrapper"; -import { Modal } from "../../login/Modal"; +import { Modal } from "../../login/modal"; +import UserIcon from "../../../../assets/images/user-icon.svg"; +import User from "../../../../assets/images/user.svg"; -import "./styles.m.css"; +import "./navbar.m.css"; -const NavBar = ({ menu, enableLogin }) => { +const NavBar = () => { // Import account modal dynamically - const AccountModal = React.lazy(() => import("../../login/AccountModal")); + const AccountModal = lazy(() => import("../../login/AccountModal")); const [showAccountModal, setShowAccountModal] = useState(false); const [message, setMessage] = useState(null); const dispatch = useDispatch(); + const [showUserHandler, setUserHandler] = useState(false); + const enableLogin = useSelector(state => get(state, ["qt", "config", "publisher-attributes", "enableLogin"], true)); + const isHamburgerMenuOpen = useSelector(state => get(state, ["isHamburgerMenuOpen"], false)); + const menu = useSelector(state => get(state, ["qt", "data", "navigationMenu", "homeMenu"], [])); + const hamburgerMenu = useSelector(state => get(state, ["qt", "data", "navigationMenu", "hamburgerMenu"], [])); + + const displayStyle = isHamburgerMenuOpen ? "flex" : "none"; + + const toggleHandler = () => { + dispatch({ + type: OPEN_HAMBURGER_MENU, + isHamburgerMenuOpen: !isHamburgerMenuOpen + }); + dispatch({ + type: OPEN_SEARCHBAR, + isSearchBarOpen: false + }); + }; + + const userAccountHandler = () => { + setUserHandler(!showUserHandler); + dispatch({ + type: OPEN_SEARCHBAR, + isSearchBarOpen: false + }); + }; const getCurrentUser = async () => { // Import current user function only when this function is called @@ -42,10 +69,65 @@ const NavBar = ({ menu, enableLogin }) => { }) .finally(() => { setShowAccountModal(false); + setUserHandler(false); }); }; + const userBtnClick = () => { + setShowAccountModal(true); + dispatch({ + type: OPEN_SEARCHBAR, + isSearchBarOpen: false + }); + }; + + const getNavbarMenu = menu => { + return ( +
    + {menu.length > 0 && + menu.map(item => { + return ( +
  • + + dispatch({ + type: OPEN_SEARCHBAR, + isSearchBarOpen: false + }) + } + /> +
  • + ); + })} +
+ ); + }; + + const getDropdownList = () => { + if (!isHamburgerMenuOpen) { + return null; + } + return ( + +
toggleHandler()}>
+
    + toggleHandler()} isMegaMenuOpen={isHamburgerMenuOpen} /> + {hamburgerMenu.length > 0 && + hamburgerMenu.map(item => { + return ( +
  • + toggleHandler()} /> +
  • + ); + })} +
+
+ ); + }; + const member = useSelector(state => get(state, ["member"], null)); + const imageUrl = member && member["avatar-url"] ? member["avatar-url"] : assetify(User); useEffect(() => { getCurrentUser(); @@ -65,26 +147,47 @@ const NavBar = ({ menu, enableLogin }) => { }, []); return ( - - -
    - {get(menu, ["default"], []).map((item, index) => { - return ( -
  • - -
  • - ); - })} - {enableLogin && ( -
  • +
  • +
+ ) : ( + )} {message && ( setMessage(null)}> )} - - - + +
); }; -NavBar.propTypes = { - menu: object, - enableLogin: bool, - isLoginOpen: bool -}; - export { NavBar }; diff --git a/app/isomorphic/components/header/nav-bar/navbar.m.css b/app/isomorphic/components/header/nav-bar/navbar.m.css new file mode 100644 index 000000000..111e3668d --- /dev/null +++ b/app/isomorphic/components/header/nav-bar/navbar.m.css @@ -0,0 +1,126 @@ +.navbar { + list-style-type: none; + margin: 0 12px; + display: flex; + overflow: auto; + font-family: var(--title-font); +} + +.main-wrapper { + background-color: var(--brand-primary); + position: relative; + box-shadow: -1px 12px 13px -11px rgba(var(--rgb-black), 0.42); + margin-bottom: 16px; +} + +.wrapper { + display: flex; + justify-content: space-between; + align-items: center; + height: 42px; + position: relative; +} + +.toggle-btn { + position: relative; +} + +.dropdown { + display: flex; + line-height: 0; + flex-shrink: 0; + align-items: center; + margin-right: 8px; +} + +.dropdown-content { + position: absolute; + background-color: var(--white); + min-width: 220px; + box-shadow: 0px 8px 16px 0px rgba(var(--rgb-black), 0.2); + padding: 12px 16px; + z-index: var( --zlevel2); + top: 0; + display: flex; + flex-direction: column; + max-height: 100vh; + overflow: scroll; + + :global .hamburger-menu { + align-self: flex-end; + } + + :global .menu-link { + padding: 16px 0; + margin-bottom: 12px; + width: 100%; + } + + :global .menu-link:last-child { + margin-bottom: 0px; + } + + :global .menu-link:hover { + color: var(--brand-primary-dark); + } +} + +.dropdown-menu { + padding: 12px; +} + +.navbar::-webkit-scrollbar { + width: 0px; + height: 0px; + z-index: var(--zlevel3); +} + +.navbar::-webkit-scrollbar-thumb { + background: var(--brand-primary); + border-radius: 0px; +} + +.overlay { + left: 0; + right: 0; + background-color: var(--brand-secondary); + width: 100vw; + height: 100vh; + top: 0; + position: fixed; + z-index: var(--zlevel1); + opacity: 0.4; +} + +.user-profile { + flex-shrink: 0; +} + +.user-btn { + background-color: transparent; + border: none; + padding: 0; +} + +.member-img { + height: 24px; + width: 24px; + border-radius: 50%; + cursor: pointer; + object-fit: cover; +} + +.user-account { + right: 0; + top: 42px; + margin-right: 16px; +} + +.user-account-item { + cursor: pointer; + padding: 8px 0; +} + +.user-account-item:hover { + color: var(--brand-primary-dark); +} diff --git a/app/isomorphic/components/header/nav-bar/styles.m.css b/app/isomorphic/components/header/nav-bar/styles.m.css deleted file mode 100644 index 645f6c613..000000000 --- a/app/isomorphic/components/header/nav-bar/styles.m.css +++ /dev/null @@ -1,15 +0,0 @@ -.navbar { - list-style-type: none; - margin: 0; - padding: 0 30px; - display: flex; -} -.menu-item { - cursor: pointer; - padding: 12px; -} -@media only screen and (max-width: 768px) { - .desktop-view { - display: none; - } -} diff --git a/app/isomorphic/components/header/navbar-search/index.js b/app/isomorphic/components/header/navbar-search/index.js index 545661a7d..3d1ca9ad4 100644 --- a/app/isomorphic/components/header/navbar-search/index.js +++ b/app/isomorphic/components/header/navbar-search/index.js @@ -1,11 +1,14 @@ import React from "react"; import { SearchBox } from "@quintype/components"; +import { useDispatch, useSelector } from "react-redux"; +import get from "lodash/get"; -import "./styles.m.css"; - +import { OPEN_SEARCHBAR } from "../../store/actions"; import { Search } from "../../atoms/icons/search"; import { CloseIcon } from "../../atoms/icons/close-icon"; +import "./navbar-search.m.css"; + function DrawForm({ children }) { return [