From f03cdde5a3fe6635781216ed97efcca85070e4a0 Mon Sep 17 00:00:00 2001 From: Bryan Stopp Date: Wed, 17 Jan 2024 09:39:58 -0600 Subject: [PATCH] Refactor Hero slightly. (#75) * Push all hero markup generation logic into the hero block. * lint. * Bad merge. --- cigaradvisor/blocks/authorcard/authorcard.js | 3 +- cigaradvisor/blocks/footer/footer.js | 4 +- cigaradvisor/blocks/hero/hero.css | 163 ++++++++----------- cigaradvisor/blocks/hero/hero.js | 30 ++++ cigaradvisor/scripts/scripts.js | 48 ++---- cigaradvisor/styles/styles.css | 132 +++++++-------- 6 files changed, 173 insertions(+), 207 deletions(-) diff --git a/cigaradvisor/blocks/authorcard/authorcard.js b/cigaradvisor/blocks/authorcard/authorcard.js index 8483f265..c098a3b9 100644 --- a/cigaradvisor/blocks/authorcard/authorcard.js +++ b/cigaradvisor/blocks/authorcard/authorcard.js @@ -53,7 +53,8 @@ export default async function decorate(block) { authorWrapperSection.innerHTML += authorContents.join(''); }) .catch((error) => { - console.error('Error fetching author info:', error); + // eslint-disable-next-line no-console + console.log('Error fetching author info:', error); }); rightDiv.replaceChildren(authorWrapperSection); block.append(rightDiv); diff --git a/cigaradvisor/blocks/footer/footer.js b/cigaradvisor/blocks/footer/footer.js index 2ccefb90..41600ed3 100644 --- a/cigaradvisor/blocks/footer/footer.js +++ b/cigaradvisor/blocks/footer/footer.js @@ -25,7 +25,7 @@ export default async function decorate(block) { // create section const section = document.createElement('div'); section.classList.add('nav-section'); - if (currentElement.tagName === 'H1') { + if (currentElement.tagName === 'h4') { section.classList.add('with-heading'); } @@ -34,7 +34,7 @@ export default async function decorate(block) { nextElement = currentElement.nextSibling; section.appendChild(currentElement); currentElement = nextElement; - } while (nextElement && nextElement.tagName !== 'H1'); + } while (nextElement && nextElement.tagName !== 'h4'); // add section to container footerContainer.insertBefore(section, currentElement); diff --git a/cigaradvisor/blocks/hero/hero.css b/cigaradvisor/blocks/hero/hero.css index be5c6044..9f61b37b 100644 --- a/cigaradvisor/blocks/hero/hero.css +++ b/cigaradvisor/blocks/hero/hero.css @@ -1,133 +1,110 @@ -/* block specific CSS goes here */ - -main .hero-container>div { - max-width: unset; -} +/** Override global settings **/ main .hero-container { padding: 0; margin-bottom: 10%; } -main .hero.block { - position: relative; - padding: 32px; - min-height: 300px; - text-align: center; - line-height: 1; - letter-spacing: 3px; - color: var(--off-white); - text-shadow: 3px 3px var(--clr-black); - text-wrap: nowrap; +main .hero-container > div { + max-width: unset; } -main .hero.block>div>div { - display: flex; - justify-content: center; - align-items: center; - height: 100%; +/** Hero Stuff **/ +main .hero.block { + position: relative; } -main .hero.block h1 { - max-width: 1200px; - margin-left: auto; - margin-right: auto; - color: white; +main .hero.block.under-nav { + margin-top: -43px; } -main .hero.block picture { +main .hero.block .hero-image { + z-index: -9999; + display: block; position: absolute; - z-index: -1; top: 0; left: 0; - bottom: 0; - right: 0; - object-fit: cover; - box-sizing: border-box; + height: 100%; + width: 100%; + overflow: clip; } -main .hero.block img { +main .hero.block .hero-image picture { + display: block; + height: 100%; + width: 100%; + position: relative; +} + +main .hero.block .hero-image img { + object-position: center center; object-fit: cover; - margin-top: 1%; - height: 85%; + height: 100%; + width: 100%; } main .hero.block .hero-content { - position: absolute; - top: 25%; - left: 0; - right: 0; - bottom: 0; - display: flex; - flex-flow: column; - justify-content: center; - align-items: center; - padding: 0 1rem; + padding-top: 80px; +} + +main .hero.block h1 { color: var(--clr-white); - text-shadow: 0 0 1rem var(--clr-black); + text-align: center; + line-height: 1; + letter-spacing: 3px; + text-shadow: 3px 3px var(--clr-black); } /* hero search */ -main .hero.block .hero-search .search-box{ +main .hero.block .hero-search { display: flex; justify-content: center; + margin: 30px auto 0; } -main .hero.block .hero-search{ - margin: 20px auto; - width: 100%; -} - -main .hero.block .search{ +main .hero.block .hero-search form { + display: flex; width: 70%; -} - -main .hero.block .search form { border-bottom: 4px solid var(--clr-dark-gray); padding-bottom: 10px; } -main .hero.block .search form .focused{ - transition: 1s; - background-color: var(--light-grey); +/* set form input placeholder text color color: var(--clr-dark-gray); */ +main .hero.block .hero-search form input { + flex: 1; + padding-left: 18px; + height: 45px; + width: 100%; + border: none; + font-weight: var(--font-weight-bold); + font-size: var(--body-font-size-l); + line-height: 27px; + transition: background-color 1s; + background-color: transparent; } -main .hero.block .search form button { - position: relative; - top: 0; - right: 0; - background: 0 0; +main .hero.block .hero-search form input::placeholder { color: var(--clr-dark-gray); - width: 2.85rem; - padding: 0; - line-height: 2.85rem; - margin: 0; - border: none; - border-radius: 0; } -/* set form input placeholder text color color: var(--clr-dark-gray); */ -main .hero.block .search form input { - color: var(--clr-dark-gray); +main .hero.block .hero-search form input:focus { border: none; - font-weight: 700; - font-size: 18px; - text-transform: capitalize; - width: 100%; - background: 0 0; - position: relative; - left: 0; - max-width: 100%; - z-index: 1; + transition: background-color 1s; + background-color: var(--light-grey); } -main .hero.block .search form input::placeholder { - color: var(--clr-dark-gray); +main .hero.block .hero-search form button { + flex: 0 1; + height: 100%; + width: 100%; + background: transparent; + border: none; } -main .hero.block .search form button::before { +main .hero.block .hero-search form button::before { position: relative; - width: 2em; + height: 100%; + width: 100%; font-size: 30px; content: "\f002"; text-align: center; @@ -136,18 +113,16 @@ main .hero.block .search form button::before { } @media screen and (min-width: 900px) { - main .hero.block img { - width: 100%; - height: 185%; - max-width: none; - margin-top: -65px; + main .hero.block.under-nav { + margin-top: -70px; } - main .hero.block .search{ - width: 30%; + main .hero.block .hero-content { + padding-top: 200px; + padding-bottom: 100px; } - main .hero.block .hero-content { - top: 100%; + main .hero.block .hero-search form { + width: 30%; } } diff --git a/cigaradvisor/blocks/hero/hero.js b/cigaradvisor/blocks/hero/hero.js index e69de29b..814a9294 100644 --- a/cigaradvisor/blocks/hero/hero.js +++ b/cigaradvisor/blocks/hero/hero.js @@ -0,0 +1,30 @@ +import { getMetadata } from '../../scripts/aem.js'; + +function buildSearch() { + const search = document.createElement('div'); + search.classList.add('hero-search'); + search.innerHTML = ` +
+ + + +
+ `; + return search; +} + +export default async function decorate(block) { + const style = getMetadata('hero-style'); + if (style) { + block.classList.add(style.toLowerCase()); + } + + const header = block.querySelector('h1'); + const image = document.createElement('div'); + image.classList.add('hero-image'); + image.replaceChildren(block.querySelector('picture')); + const content = document.createElement('div'); + content.classList.add('hero-content'); + content.append(header, buildSearch()); + block.replaceChildren(image, content); +} diff --git a/cigaradvisor/scripts/scripts.js b/cigaradvisor/scripts/scripts.js index 005722b8..7ebcf2d7 100644 --- a/cigaradvisor/scripts/scripts.js +++ b/cigaradvisor/scripts/scripts.js @@ -24,33 +24,16 @@ function buildHeroBlock(main) { const h1 = main.querySelector('h1'); const picture = main.querySelector('picture'); // eslint-disable-next-line no-bitwise - if (h1 && picture && (h1.compareDocumentPosition(picture) & Node.DOCUMENT_POSITION_PRECEDING)) { - const section = document.createElement('div'); - section.classList.add('section--hero'); - const heroContent = document.createElement('div'); - heroContent.classList.add('hero-content'); - const search = document.createElement('div'); - search.classList.add('search'); - search.innerHTML = ``; - heroContent.append(h1); - heroContent.append(search); - section.append(buildBlock('hero', { elems: [picture, heroContent] })); + if (h1 && picture && (h1.compareDocumentPosition(picture) & Node.DOCUMENT_POSITION_PRECEDING) + && h1.parentElement === picture.closest('div')) { + let section = document.createElement('div'); + if (h1.parentElement.childElementCount === 2) { + section = h1.parentElement; + } + const p = picture.parentElement; + section.replaceChildren(buildBlock('hero', { elems: [h1, picture] })); main.prepend(section); - // on-focus of input, add class to form - const searchInput = main.querySelector('.hero-search input'); - searchInput.addEventListener('focus', () => { - searchInput.parentNode.classList.add('focused'); - }); - // on-blur of input, remove class from form - searchInput.addEventListener('blur', () => { - searchInput.parentNode.classList.remove('focused'); - }); + p.remove(); } } @@ -59,6 +42,9 @@ function buildHeroBlock(main) { * @param {HTMLElement} mainEl - The main element to build the article header for. */ function buildArticleHeader(mainEl) { + if (!document.querySelector('body.blog-post-template')) { + return; + } // eslint-disable-next-line no-use-before-define decorateExternalLink(mainEl); const paragraphs = mainEl.querySelectorAll('p'); @@ -150,14 +136,8 @@ async function loadFonts() { */ function buildAutoBlocks(main) { try { - const isHome = document.querySelector('body.homepage'); - const isBlogPost = document.querySelector('body.blog-post-template'); - if (isHome) { - buildHeroBlock(main); - } - if (isBlogPost) { - buildArticleHeader(main); - } + buildHeroBlock(main); + buildArticleHeader(main); } catch (error) { // eslint-disable-next-line no-console console.error('Auto Blocking failed', error); diff --git a/cigaradvisor/styles/styles.css b/cigaradvisor/styles/styles.css index d5184f67..4a3f45bf 100644 --- a/cigaradvisor/styles/styles.css +++ b/cigaradvisor/styles/styles.css @@ -183,17 +183,17 @@ --font-weight-light: 300; --font-weight-thin: 100; - /* Body */ - --body-font-size-xxs: 10px; - --body-font-size-xs: 12px; - --body-font-size-s: 14px; - --body-font-size-m: 16px; - --body-font-size-l: 18px; - --body-font-size-xl: 20px; - --body-font-size-xxl: 24px; + /* Body */ + --body-font-size-xxs: 10px; + --body-font-size-xs: 12px; + --body-font-size-s: 14px; + --body-font-size-m: 16px; + --body-font-size-l: 18px; + --body-font-size-xl: 20px; + --body-font-size-xxl: 24px; /* misc */ - --nav-height: 60px; + --nav-height: 100px; --icon-size: var(--text-size-xl); } @@ -210,6 +210,9 @@ body.appear { header { height: var(--nav-height); + position: relative; + background-color: var(--clr-white); + z-index: 1000; } html { @@ -249,7 +252,7 @@ h2 { font-size: 12px; } -b,strong{ +b, strong { font-weight: bolder; } @@ -293,36 +296,8 @@ li { cursor: default; } -input { - font-size: 1em; - font-family: var(--ff-arial); - height: 2.85rem; - padding: 0 .5em; - padding-right: 0.5em; - padding-left: 0.5em; - outline: none; - border: 1px solid; - width: 100%; - max-width: 100%; - vertical-align: middle; - background-color: var(--clr-white); - border-color: var(--very-light-grey); - margin: 0; -} - -button { - font-family: montserrat, sans-serif; - font-weight: 700; - color: var(--clr-white); - text-transform: uppercase; - background-color: var(--tan); - border-color: var(--tan); - display: inline-block; - line-height: 26px; - height: 50px; - width: 250px; - max-height: 50px; - max-width: 250px; +.sr-only { + display: none; } @@ -330,7 +305,7 @@ button { color: var(--clr-text); } -main .default-content-wrapper{ +main .default-content-wrapper { width: 100%; margin-left: auto; margin-right: auto; @@ -349,17 +324,17 @@ main .section[data-layout="50/50"] { display: flex; } -main .section[data-layout="50/50"]>div { +main .section[data-layout="50/50"] > div { display: flex; flex-basis: 100%; flex-direction: column; } -main .section[data-layout="50/50"] .left-grid>div { +main .section[data-layout="50/50"] .left-grid > div { padding: 10px; } -main .section[data-layout="50/50"] .right-grid>div { +main .section[data-layout="50/50"] .right-grid > div { padding: 10px; } @@ -380,7 +355,7 @@ main .section[data-layout="50/50"] .right-grid>div { /* Blog post template starts */ -.blog-post-template .author-container>.default-content-wrapper { +.blog-post-template .author-container > .default-content-wrapper { padding: 0 15px; width: 100%; margin-left: auto; @@ -389,7 +364,7 @@ main .section[data-layout="50/50"] .right-grid>div { text-align: justify; } -.blog-post-template .author-container>.default-content-wrapper p { +.blog-post-template .author-container > .default-content-wrapper p { font-size: 18px; line-height: 30px; font-family: var(--ff-opensans); @@ -398,25 +373,25 @@ main .section[data-layout="50/50"] .right-grid>div { cursor: default; } -.blog-post-template .author-container>.default-content-wrapper a{ +.blog-post-template .author-container > .default-content-wrapper a { font-size: 18px; line-height: 30px; text-decoration: underline; -color: var(--subdued-gold); + color: var(--subdued-gold); } -.blog-post-template .author-container>.default-content-wrapper .article-image-wrapper { +.blog-post-template .author-container > .default-content-wrapper .article-image-wrapper { width: 1000px; padding: 20px; max-width: 100%; clear: both; } -.blog-post-template .author-container>.default-content-wrapper picture img { +.blog-post-template .author-container > .default-content-wrapper picture img { padding: 20px 20px 20px 0; } -.blog-post-template .author-container>.default-content-wrapper .article-image-caption { +.blog-post-template .author-container > .default-content-wrapper .article-image-caption { font-family: var(--ff-opensans); font-size: 16px; text-align: center; @@ -426,7 +401,7 @@ color: var(--subdued-gold); margin: 0; } -.blog-post-template .author-container>.default-content-wrapper blockquote { +.blog-post-template .author-container > .default-content-wrapper blockquote { border-color: var(--vv-light-grey); border-width: 1px 0; border-style: solid; @@ -435,18 +410,18 @@ color: var(--subdued-gold); background: transparent url('/cigaradvisor/images/blog-post/blockquote.png') no-repeat 0 20px; } -.blog-post-template .author-container>.default-content-wrapper blockquote p{ +.blog-post-template .author-container > .default-content-wrapper blockquote p { padding: 10px; margin: 0; color: var(--charcoal); background: transparent url('/cigaradvisor/images/blog-post/pattern-1.png') repeat; } -.blog-post-template .author-container>.default-content-wrapper blockquote p strong{ +.blog-post-template .author-container > .default-content-wrapper blockquote p strong { font-weight: 700; } -main .section>.default-content-wrapper>h2{ +main .section > .default-content-wrapper > h2 { text-align: center; text-transform: uppercase; font-family: var(--ff-montserrat); @@ -456,31 +431,29 @@ main .section>.default-content-wrapper>h2{ font-size: 45px; } -main .section>.default-content-wrapper>h2 ::before{ +main .section > .default-content-wrapper > h2 ::before { content: 'decor'; - color: transparent; - background: url('../icons/decorleft.png') center no-repeat; - background-size: auto; - background-size: contain; - margin-right: 15px; + color: transparent; + background: url('../icons/decorleft.png') center no-repeat; + background-size: contain; + margin-right: 15px; } -main .section>.default-content-wrapper>h2 ::after{ +main .section > .default-content-wrapper > h2 ::after { content: 'decor'; - color: transparent; - background: url('../icons/decorright.png') center no-repeat; - background-size: auto; - background-size: contain; - margin-left: 15px; + color: transparent; + background: url('../icons/decorright.png') center no-repeat; + background-size: contain; + margin-left: 15px; } -main .button-container{ - padding : 10px 10px 40px; +main .button-container { + padding: 10px 10px 40px; text-align: center; text-transform: uppercase; } -main .button-container .button{ +main .button-container .button { font-style: normal; font-family: var(--ff-montserrat); font-weight: 700; @@ -505,7 +478,7 @@ main .button-container .button{ margin: 2px 0; } -main .button-container .button:hover{ +main .button-container .button:hover { transition: .5s; background-color: var(--subdued-gold); border-color: var(--subdued-gold); @@ -513,7 +486,6 @@ main .button-container .button:hover{ } - @media screen and (max-width: 600px) { main .section[data-layout="50/50"] { width: 100%; @@ -528,6 +500,14 @@ main .button-container .button:hover{ } @media screen and (min-width: 900px) { + :root { + --nav-height: 130px; + } + + header { + background-color: transparent; + } + h1 { font-size: 45px; } @@ -535,7 +515,7 @@ main .button-container .button:hover{ main .section { margin-bottom: 40px; } - + main .section.background-grey { background-color: var(--grey-background); } @@ -546,12 +526,12 @@ main .button-container .button:hover{ h2 { font-size: 16px; } - - a,p { + + a, p { font-size: 14px; } - .blog-post-template .author-container>.default-content-wrapper { + .blog-post-template .author-container > .default-content-wrapper { padding: 0; } }