From 98a5294ed6524391b9094e3e77d28ca16b982108 Mon Sep 17 00:00:00 2001 From: Sunjay Armstead <65554107+sarmstead@users.noreply.github.com> Date: Wed, 18 Jun 2025 07:09:48 -0400 Subject: [PATCH 1/5] refactor(navigation.css): remove old footer styles --- src/css/layout/navigation.css | 39 +++-------------------------------- 1 file changed, 3 insertions(+), 36 deletions(-) diff --git a/src/css/layout/navigation.css b/src/css/layout/navigation.css index 89c1314..f125b90 100644 --- a/src/css/layout/navigation.css +++ b/src/css/layout/navigation.css @@ -1,11 +1,9 @@ -nav, -footer { +nav { position: relative; padding: 1rem 1.5rem; } -nav ul, -footer ul { +nav ul { display: flex; gap: 2rem; list-style-type: none; @@ -40,16 +38,6 @@ nav .logo-circle { transform: scale(1.05); } -footer { - padding: 130px 0; - text-align: center; -} -footer ul.nav { - justify-content: center; - margin: 0; - padding: 0; -} -footer ul.nav a, nav > ul > li:last-child > a { background: linear-gradient(to top, #df3434 0%, #fb5e55 100%); box-shadow: 0 15px 28px rgba(129, 0, 0, 0.2), 0 2px 5px rgba(137, 0, 0, 0.2); @@ -63,20 +51,6 @@ nav li.subitem { text-align: center; } -footer ul.nav a { - padding: 15px 20px; -} -footer .nav .nav-contact-us > a > span { - background-attachment: local; - background-image: url('/assets/images/contact-icon.svg'); - background-clip: padding-box; - background-origin: padding-box; - background-repeat: no-repeat; - background-position: top 2px left; - background-size: 20px; - padding-left: 25px; -} - nav .menu-icon { display: none; width: 30px; @@ -166,13 +140,6 @@ nav .menu-icon.close { @media screen and (max-width: 600px) and (orientation: portrait), (max-width: 548px) and (orientation: landscape) { - footer ul { - flex-direction: column; - } - footer ul li { - margin: 1rem auto; - } - nav ul { width: 50%; } @@ -193,4 +160,4 @@ nav .menu-icon.close { clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; -} \ No newline at end of file +} From 4ac0979b13f8a2d9827ccd9de003828395dffb4c Mon Sep 17 00:00:00 2001 From: Sunjay Armstead <65554107+sarmstead@users.noreply.github.com> Date: Wed, 18 Jun 2025 09:36:30 -0400 Subject: [PATCH 2/5] feat(footer): add new footer markup and logo --- assets/images/full-logo.png | Bin 0 -> 45135 bytes default.hbs | 37 ++++++++++++++--------------- partials/footer.hbs | 45 +++++++++++++++++++++++++++++++++--- 3 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 assets/images/full-logo.png diff --git a/assets/images/full-logo.png b/assets/images/full-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5a3d98fc3ef09df49b29856c4cbfc9c9b01fd8 GIT binary patch literal 45135 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%0AD_{AN2FoWOVl4X6*f!n(M+ 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 &9u0 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 } z{*!WTe6RzVKnQ|d2v4(pmdNb z)oYzplEKn`M8+-Cvz1W~;n(p?TZ95BPlZaYO#?I`s8G6P%YSOTZY4C2lj$Y(t6~%; zQYK|wvQ&&n2jDwtO-EC0&8#!%IZ_57(5IG@>0*qk$A3c2I-&XW2py%&hw1ZtKKu>L zvd$T8Pt~U>=8j#rAdARvuh{z9LF``hY3pbMr+#y~k4w$+Dec3t%EFZxxgIidxDL*} zoqw1fEpu=KHca^>Ek-g|tv!Z8)FvM9QJ#9xaBl7)s7^c(1TA=4iAwe|I-~V4sYjwm zZw}{JpPwNjFI`L`e{EZfSrs_wvwKy!lYfL^MK3zuS$#f1?CVjO{|1dwicS1Xy{}OX zD7Sq|$x-t^7z>PA<9$gPd7l#zm0ALDj)y))X5R08#o4#O7$w*XhG99cqIa`4&a?i* zs-jAQF!7j4DC@_c4a$kmzkb0WDkE*Alxu4M$~_$(%6exboso%A@=THk6Yx>t5cdD< z(6m_0CDsLsNDm-ad6b@IFI!&iH>f4f135Qyq3^`4i~YHAHDYC%M#mfFmm@Q>N{UDAz z^<0&dU~X`BnRB*Dbx5(t9LISJkkhN}-n%1|)DwvmP-)%^7#e%jc@3lUwaIvmi<1Cb zA+i2g52iSUs%abJsKC7$+52)=9=dB*>lc|LU5V-mkd)v5Kc0{YgSz3Mxb5;kQo2@A zAx8g@=5(nJ%~K@^raH~?i-i2GZf8QXzfGC~dUViE&|^5%OB0(DW}WWbVfKbN}- zJ=P`CM-Xw(dlh3PBSN%sG)Kxz2xzcx5tmUSMLndOm{VMxY6wpL)UcT#p2-(2*G#V$ zGUN;H^_T6ED+94xsraSI890u7Zqt~5P4zDU7fqnxuNmzJiGU;(&w0*Cn=04^# zpd3CdAP4!ce+%&hX9rUf8c`m6Mm!ji8m-L2<$|amXvy=sO1=jtZOoUn z5kz0N?E&H)cOZ#=zNJRnVE$20mU`6zN*PMc2-x2xqKVLx#Q^}vejB0Jc7cDMtpPy( zF*-DFjzmu83=!orS&vtlGXZrv6;k-xN(Ugg5KnsaB(J?puSU*5f|&B8 zDhOI6JR&GS1OpYzlKfkME)J+*RSBP6rd4-7n;2mzx%+{fbMxtkRwY54PqKoj?4?4n z*C9M5thyF0AAGF7+OrLL>nGujpIFiaRvGDWcL%A|pFvVhqS60x!2|9@?5qiTuL9;} ziV+5>6Uon+=OmE=VHCl_m5Wk7KrQCq7JN-OO58qvZF^&n+}{J)@6ZY(?HQl3D*T<9 zGi9LMAo81vmxCWE6VC9_Chd{$%rzBVjT_YP5IW`(Sj%tK6}`k|2|L6ENhMF;^&x5*uiS(%wY7!#aAo?YkTu9ARer{*P<<~x94@4 zn|7~KE1VZyGG{NzbOK5=`ANt<`XUBM`B-7(Kf7lpnnI7-X*p~PM^eCvbdF=jZyQhU zLW(){sNSf1!_WJ3N|t=QiiVli691Q|r> zS-Za&sq_?p-c$fRiSs;;3E7xUe2Np_#xzCFeF3{~b@ZRso<%Yy9mwI}@)(nlvd)D_ zWDNNR=2DZG4@$yQSi98ClRwJp@&jYybFlaE{)Zmfc|a>*PDc-0a{*CG)A({1r=I=g zCgrrhmFIQMlnu7bPUaCcpWVp$|6}41JG6q(Nftm$k}X^6$RA5kELGk|OOz-(D>p)= z%#!?1qkrfQw1U>@2qc;h=;I5yZYC)jVtPWr_!y#^3pf4ORy!=K0CVugBEjhEkg|(e zk_r(he_7PzG>gf9?VIHeCI+L7pJXr~E<(HgkgR0D@$?7*5{kd+QjHR8%@U^fhbKhc zm|}QH5>#Zl;Tq#f{l9-77^YzEfl)di6`6FBzRv2tGuhhpwQ&COPu99oG8qRHJI#{I zg^ta%t>Gt%{Cpqz;LYFlydERePI+-+|0zqV4M$Q;zI<%GbKP5^e~STQXr?fx^bc|c xr^z>o$wzYP_1f%l|2)^9!l3_u)Z9{>|GpWL{2owJ@)>~rQ<6u?Rmqx!{67cDgpdFL literal 0 HcmV?d00001 diff --git a/default.hbs b/default.hbs index 3a9741b..b1f0fd1 100644 --- a/default.hbs +++ b/default.hbs @@ -28,26 +28,23 @@ {{{body}}} -
- {{!-- Navbar partial --}} - {{> "footer"}} -
+ {{> "footer"}} - - {{!-- Outputs important scripts - should always be included before closing body tag --}} - {{ghost_foot}} - + } + sections.forEach(function(section) { + section.addEventListener("click", handleClick); + }); + + {{!-- Outputs important scripts - should always be included before closing body tag --}} + {{ghost_foot}} + diff --git a/partials/footer.hbs b/partials/footer.hbs index ba79a51..41e75ad 100644 --- a/partials/footer.hbs +++ b/partials/footer.hbs @@ -1,3 +1,42 @@ -
- {{navigation type="secondary"}} -
\ No newline at end of file +
+ +
From 2941642bb4b4a62850e0b43ba245982ac473d812 Mon Sep 17 00:00:00 2001 From: Sunjay Armstead <65554107+sarmstead@users.noreply.github.com> Date: Wed, 18 Jun 2025 09:38:26 -0400 Subject: [PATCH 3/5] feat(footer): add responsive footer styles --- src/css/app.css | 2 +- src/css/layout/footer.css | 210 +++++++++++++++++++++++++++++++++++++- 2 files changed, 210 insertions(+), 2 deletions(-) diff --git a/src/css/app.css b/src/css/app.css index 56fab55..4684b3b 100644 --- a/src/css/app.css +++ b/src/css/app.css @@ -17,7 +17,7 @@ @import './layout/dropdown.css'; @import './layout/container.css'; /* @import './layout/header.css'; */ -/* @import './layout/footer.css'; */ +@import './layout/footer.css'; /* Pages */ @import './pages/post.css'; diff --git a/src/css/layout/footer.css b/src/css/layout/footer.css index 3f5e256..97952d5 100644 --- a/src/css/layout/footer.css +++ b/src/css/layout/footer.css @@ -1 +1,209 @@ -/* Add footer styles here */ +.footer { + background-color: var(--color-lightblue); + width: 100%; + + .footer__inner { + display: flex; + flex-direction: column; + margin: auto; + max-width: var(--layout-inner-max-width); + padding: 40px; + } + + .footer__top { + border-bottom: 2px solid #dce9fa; + display: grid; + grid-template-columns: 1fr; + margin-bottom: 25px; + padding-bottom: 36px; + } + + .footer__logo { + justify-self: center; + max-width: 245px; + width: 100%; + } + + .footer__links { + font-family: 'Rubik', sans-serif; + font-size: 1rem; + line-height: 1.125rem; + margin-bottom: 36px; + + ul { + align-items: center; + display: flex; + flex-direction: column; + list-style: none; + margin: 0; + padding: 0; + } + + li { + align-items: center; + display: flex; + min-height: 44px; + } + + a { + box-shadow: none; + } + + a:hover { + box-shadow: inset 0 -2px 0 var(--color-red); + } + } + + .footer__bottom { + display: grid; + gap: 48px; + grid-template-columns: 1fr; + } + + .footer__form { + align-items: center; + display: flex; + flex-direction: column; + + span[data-members-error], + span[data-members-success] { + display: none; + font-size: 0.875rem; + font-weight: 700; + line-height: 1rem; + padding: 16px 0; + } + } + + .error span[data-members-error] { + color: var(--color-darkred); + display: block; + } + + .success span[data-members-success] { + color: green; + display: block; + } + + .footer__form__row { + display: grid; + gap: 12px; + grid-template-columns: 1fr; + justify-content: center; + width: 100%; + + input { + border: 1px solid #dce9fa; + border-radius: 8px; + color: var(--color-navy); + min-height: 50px; + font-size: 1rem; + padding: 12px 20px; + width: 100%; + } + + input::placeholder { + color: rgba(160, 168, 184, 1); + } + + .kg-button-card { + width: 100%; + } + } + + .footer__bottom__socials { + align-items: center; + display: flex; + flex-direction: column; + gap: 16px; + } + + .footer__bottom__socials__links { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 14px; + justify-content: center; + + figcaption { + display: none; + } + + a { + box-shadow: none; + } + + figure.kg-image-card { + margin: 0; + + a { + align-items: center; + display: flex; + height: 24px; + width: 24px; + } + } + } + + @media (min-width: 834px) { + .footer__top { + align-items: center; + grid-template-columns: repeat(2, 1fr); + padding-bottom: 36px; + + .kg-button-card { + justify-self: end; + } + } + + .footer__logo { + justify-self: start; + margin: 0 0 -14px -10px; + } + + .footer__bottom { + gap: 36px; + grid-template-columns: 1fr max-content; + } + + .footer__form { + align-items: flex-start; + } + + .footer__form__row { + grid-template-columns: 1fr max-content; + } + + .footer__links { + ul { + column-gap: 24px; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + row-gap: 8px; + } + } + } + + @media (min-width: 1440px) { + .footer__bottom { + gap: 0; + grid-template-columns: repeat(2, 1fr); + } + + .footer__bottom__socials { + justify-self: end; + } + + .footer__form__row { + grid-template-columns: 280px max-content; + justify-content: start; + } + + .footer__links { + ul { + justify-content: end; + } + } + } +} From 2def9b7abfb9230052d92cfd3d29d298653e600f Mon Sep 17 00:00:00 2001 From: Sunjay Armstead <65554107+sarmstead@users.noreply.github.com> Date: Fri, 20 Jun 2025 15:48:31 -0400 Subject: [PATCH 4/5] fix(footer): reduce horizontal padding on desktop --- src/css/layout/footer.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/css/layout/footer.css b/src/css/layout/footer.css index 97952d5..10b8f0e 100644 --- a/src/css/layout/footer.css +++ b/src/css/layout/footer.css @@ -186,6 +186,10 @@ } @media (min-width: 1440px) { + .footer__inner { + padding: 40px 0; + } + .footer__bottom { gap: 0; grid-template-columns: repeat(2, 1fr); From 1a3775301f52005f3d9094297b97bcfd13af8696 Mon Sep 17 00:00:00 2001 From: Sunjay Armstead <65554107+sarmstead@users.noreply.github.com> Date: Tue, 24 Jun 2025 08:10:34 -0400 Subject: [PATCH 5/5] 2025 Refresh - Top Navigation (#30) --- assets/images/gem-logo--badge.svg | 54 +++++ assets/images/icon__burger.svg | 13 ++ assets/images/icon__close.svg | 12 ++ default.hbs | 5 +- partials/navbar.hbs | 5 - partials/navigation-top.hbs | 20 ++ partials/navigation.hbs | 15 +- src/css/app.css | 3 +- src/css/components/button.css | 1 - src/css/components/static-content.css | 6 + src/css/layout/header.css | 3 - src/css/layout/navigation-top.css | 148 +++++++++++++ src/css/layout/navigation.css | 163 --------------- src/js/app/dropdown.js | 289 -------------------------- src/js/app/index.js | 3 +- src/js/app/navigation-top.js | 19 ++ src/js/app/responsive-nav.js | 27 --- 17 files changed, 282 insertions(+), 504 deletions(-) create mode 100644 assets/images/gem-logo--badge.svg create mode 100644 assets/images/icon__burger.svg create mode 100644 assets/images/icon__close.svg delete mode 100644 partials/navbar.hbs create mode 100644 partials/navigation-top.hbs delete mode 100644 src/css/layout/header.css create mode 100644 src/css/layout/navigation-top.css delete mode 100644 src/css/layout/navigation.css delete mode 100644 src/js/app/dropdown.js create mode 100644 src/js/app/navigation-top.js delete mode 100644 src/js/app/responsive-nav.js diff --git a/assets/images/gem-logo--badge.svg b/assets/images/gem-logo--badge.svg new file mode 100644 index 0000000..4cb2179 --- /dev/null +++ b/assets/images/gem-logo--badge.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/icon__burger.svg b/assets/images/icon__burger.svg new file mode 100644 index 0000000..04f8674 --- /dev/null +++ b/assets/images/icon__burger.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/images/icon__close.svg b/assets/images/icon__close.svg new file mode 100644 index 0000000..5ead02e --- /dev/null +++ b/assets/images/icon__close.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/default.hbs b/default.hbs index b1f0fd1..ce4a0c5 100644 --- a/default.hbs +++ b/default.hbs @@ -18,10 +18,7 @@ - -
- {{> "navbar" }} -
+ {{> "navigation-top" }}
{{!-- All content gets inserted here, index.hbs, post.hbs, etc --}} diff --git a/partials/navbar.hbs b/partials/navbar.hbs deleted file mode 100644 index f955737..0000000 --- a/partials/navbar.hbs +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file diff --git a/partials/navigation-top.hbs b/partials/navigation-top.hbs new file mode 100644 index 0000000..a169522 --- /dev/null +++ b/partials/navigation-top.hbs @@ -0,0 +1,20 @@ + diff --git a/partials/navigation.hbs b/partials/navigation.hbs index f6b8792..82e0ae1 100644 --- a/partials/navigation.hbs +++ b/partials/navigation.hbs @@ -1,8 +1,7 @@ -{{#if isSecondary}}{{else}}Home{{/if}} - \ No newline at end of file + diff --git a/src/css/app.css b/src/css/app.css index 4684b3b..2ed7771 100644 --- a/src/css/app.css +++ b/src/css/app.css @@ -13,10 +13,9 @@ /* Layout */ @import './layout/reset.css'; -@import './layout/navigation.css'; @import './layout/dropdown.css'; @import './layout/container.css'; -/* @import './layout/header.css'; */ +@import './layout/navigation-top.css'; @import './layout/footer.css'; /* Pages */ diff --git a/src/css/components/button.css b/src/css/components/button.css index b5d8eb2..3a72194 100644 --- a/src/css/components/button.css +++ b/src/css/components/button.css @@ -52,7 +52,6 @@ .kg-button-card .kg-btn, .kg-button-card .kg-btn-accent { font-size: 1rem; - padding: 20px; width: fit-content; } diff --git a/src/css/components/static-content.css b/src/css/components/static-content.css index 340e5b3..37bd1d8 100644 --- a/src/css/components/static-content.css +++ b/src/css/components/static-content.css @@ -1,6 +1,7 @@ .static-content { width: 50%; margin: 0 auto; + max-width: var(--layout-inner-max-width); } .static-content.upcoming-conference-container { @@ -24,6 +25,11 @@ list-style-type: none; } +.pagination { + display: flex; + justify-content: space-between; +} + @media screen and (max-width: 900px) and (orientation: portrait), (max-width: 823px) and (orientation: landscape) { .static-content { diff --git a/src/css/layout/header.css b/src/css/layout/header.css deleted file mode 100644 index 15b6da6..0000000 --- a/src/css/layout/header.css +++ /dev/null @@ -1,3 +0,0 @@ -header { - margin-bottom: 3rem; -} diff --git a/src/css/layout/navigation-top.css b/src/css/layout/navigation-top.css new file mode 100644 index 0000000..eb9afc2 --- /dev/null +++ b/src/css/layout/navigation-top.css @@ -0,0 +1,148 @@ +.navigation--top { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + + .navigation__inner { + align-items: center; + display: grid; + grid-template-areas: 'logo trigger membership'; + grid-template-columns: 1fr repeat(2, max-content); + margin: auto; + max-width: var(--layout-inner-max-width); + padding: 8px 20px 8px 10px; + } + + .navigation__logo { + box-shadow: none; + display: flex; + grid-area: logo; + max-width: fit-content; + + img { + height: 75px; + width: 75px; + } + } + + .navigation__mobile-menu-trigger { + background-color: white; + background-repeat: no-repeat; + background-size: contain; + border: none; + cursor: pointer; + height: 24px; + margin-right: 20px; + width: 24px; + } + + .navigation__mobile-menu-trigger.closed { + background-image: url('/assets/images/icon__burger.svg'); + } + + .navigation__mobile-menu-trigger.opened { + background-image: url('/assets/images/icon__close.svg'); + } + + .navigation__list__wrapper { + grid-area: trigger; + position: relative; + } + + .navigation__list { + background-color: white; + border-color: rgba(0, 0, 0, 0.1); + border-radius: 0 0 8px 8px; + border-style: solid; + border-width: 0 1px 1px 1px; + box-shadow: 0px 10px 30px 0 rgba(0, 0, 0, 0.04); + display: none; + flex-direction: column; + gap: 20px; + left: 25%; + list-style: none; + margin: 0; + min-width: 275px; + padding: 16px 30px; + position: absolute; + top: 61.5px; + transform: translateX(-50%); + z-index: 1; + } + + .navigation__list--mobile-closed { + display: none; + } + + .navigation__list--mobile-opened { + display: flex; + } + + .navigation__list--mobile-opened::before { + border-top: 4px solid var(--color-yellow); + content: ''; + display: block; + position: absolute; + right: calc(50% - 37.5px); + top: -3px; + width: 75px; + } + + .navigation__item { + a { + align-items: center; + box-shadow: none; + color: var(--color-navy); + display: flex; + font-family: 'Rubik', sans-serif; + font-size: 1rem; + line-height: 1.125rem; + min-height: 30px; + padding: 12px; + } + + a:hover { + background-color: var(--color-lightblue); + } + } + + .navigation__membership { + grid-area: membership; + } + + @media (min-width: 1440px) { + .navigation__mobile-menu-trigger { + display: none; + } + + .navigation__inner { + grid-template-columns: max-content 1fr max-content; + padding: 0; + } + + .navigation__logo { + margin-left: -8px; + } + + .navigation__mobile-menu-trigger { + display: none; + } + + .navigation__list { + border: none; + box-shadow: none; + display: flex; + flex-direction: row; + gap: 0; + justify-self: center; + left: auto; + min-width: unset; + padding: 0; + position: relative; + top: auto; + transform: unset; + } + + .navigation__list::before { + display: none; + } + } +} diff --git a/src/css/layout/navigation.css b/src/css/layout/navigation.css deleted file mode 100644 index f125b90..0000000 --- a/src/css/layout/navigation.css +++ /dev/null @@ -1,163 +0,0 @@ -nav { - position: relative; - padding: 1rem 1.5rem; -} - -nav ul { - display: flex; - gap: 2rem; - list-style-type: none; - font-size: var(--small); -} - -nav, -nav ul { - display: flex; - width: 100%; - align-items: center; - max-width: 1024px; - justify-content: space-between; - margin: 0 auto; -} - -nav .logo-circle { - transition: transform 0.25s ease-in-out; - flex-shrink: 0; - width: 30px; - height: 30px; - left: 20px; - top: 20px; - margin: 10px 0 0 0; - border-radius: 30px; - box-shadow: 0 9px 18px rgba(129, 0, 0, 0.3), 0 2px 5px rgba(137, 0, 0, 0.2); - background: no-repeat center 6px / 80% url(/assets/images/gem-logo.svg), - linear-gradient(to top, #df3434 0%, #fb5e55 100%); -} - -nav .logo-circle { - transform: scale(1.05); -} - -nav > ul > li:last-child > a { - background: linear-gradient(to top, #df3434 0%, #fb5e55 100%); - box-shadow: 0 15px 28px rgba(129, 0, 0, 0.2), 0 2px 5px rgba(137, 0, 0, 0.2); - padding: 10px 20px; - border-radius: 10px; - color: #fff; - font-weight: bold; -} - -nav li.subitem { - text-align: center; -} - -nav .menu-icon { - display: none; - width: 30px; - height: 20px; - margin: auto 0; - box-shadow: none; -} - -nav .menu-icon.open { - background: url(/assets/images/open-menu.svg) center no-repeat; -} - -nav .menu-icon.close { - background: url(/assets/images/close-menu.svg) center no-repeat; -} - -@media screen and (max-width: 1100px) and (orientation: portrait), -(max-width: 1005px) and (orientation: landscape) { - nav { - overflow-x: hidden; - } - - nav.closed .menu-icon.close, - nav.open .menu-icon.open { - display: none; - } - - nav.open .menu-icon.close, - nav.closed .menu-icon.open { - display: inline-block; - } - - nav.open { - overflow: visible; - } - - nav.open ul { - right: 0; - } - nav.closed ul { - right: -100%; - } - - nav ul { - position: absolute; - display: flex; - flex-direction: column; - align-items: flex-end; - justify-content: flex-start; - top: 0; - right: 0; - width: 33%; - padding: 1rem 2rem 8rem 1.5rem; - margin: 4.5rem 0px; - z-index: 2; - background: #fff; - border: 2px solid #f4eee6; - border-top: none; - border-radius: 0 0 0 20px; - transition: right 0.4s ease-in-out; - box-shadow: -4px 4px 5px rgba(253, 204, 204, 0.3); - } - - nav ul:before { - content: ''; - position: absolute; - left: -203%; - top: 0; - border: 2px solid #f4eee6; - border-left: none; - border-bottom: none; - border-radius: 0 20px 0 0; - box-shadow: 5px 0px #fff, inset -1px 1px 3px rgba(253, 204, 204, 0.3); - height: 15px; - width: 202.5%; - } - - nav.closed ul:before { - content: none; - } - - nav > ul > li:last-child { - margin-right: 0px; - padding-right: 0px; - } -} - -@media screen and (max-width: 600px) and (orientation: portrait), -(max-width: 548px) and (orientation: landscape) { - nav ul { - width: 50%; - } - - nav ul::before { - left: -102%; - width: 101.5%; - } -} - -.visually-hidden { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; -} diff --git a/src/js/app/dropdown.js b/src/js/app/dropdown.js deleted file mode 100644 index f2e6fbd..0000000 --- a/src/js/app/dropdown.js +++ /dev/null @@ -1,289 +0,0 @@ -/** - * ghost-dynamic-dropdown 1.1.0 (https://github.com/themeix/ghost-dynamic-dropdown) - * A simple script for dynamic dorpdown & mega menu for Ghost Blogging Platform. - * Copyright 2022 Themeix (https://themeix.com) - * Released under MIT License - * Released on: Jul 25, 2021 - */ - -(function ($) { - "use strict"; - - function multiLevel(targetElement = "ul li", mLhasSubmenu = "mL-has-submenu", mLsubmenu = "mL-submenu") { - let mLparentDetecttext = "[-]"; - let mLchildDetectText = "[--]"; - let mLdomArrayElement = []; - let mLparentIndex = []; - let mLparentLen = 0; - - // Find Dropdown parent element - $(`${targetElement} li`).each(function (index, element) { - if ($(this).text().includes(mLparentDetecttext)) { - mLparentIndex.push(index); // Make dropdown parent array index - mLparentLen++; - - $(this).push(element); - if (!$(this).hasClass('menu-item-has-children')) { - $(this).addClass(mLhasSubmenu); // Add claas in dropdown element - } - $(this).append(`
    `); // Append submenu element - } - }); - - - - let elIndex; - // Code last multilevel - let lastMlElementText = $(`.${mLhasSubmenu}`).last().text(); - // console.log(lastMlElement); - - // Using loop to reach dropdown parent element - for (let i = 0; i < mLparentLen; i++) { - - elIndex = 0 // Initial elemet value - - // Find subitem element - $(`${targetElement} li`).each(function (index, element) { - let mLsubitem = $(this).text().includes(mLchildDetectText); // Find subitem element - - - if (mLsubitem) { - - if (elIndex + 1 >= mLparentIndex[i + 1] + 1) { // Each loop will be break - return false; //Stoped each loop - } - - if (elIndex <= mLparentIndex[i + 1] || elIndex >= mLparentIndex[mLparentIndex.length - 1]) { - - if (!mLparentIndex.includes(index)) { //Check if not index already insert - mLdomArrayElement.push(element); // Incert subitem element in dom array - mLparentIndex.push(index); // incert subitem index in indexPush array - } - } - - } - elIndex++; // increase element index value - }); - - - $(`.${mLhasSubmenu} ul.${mLsubmenu}:eq(${i})`).append(mLdomArrayElement); // Append related subitem dom element into submenu - - mLdomArrayElement = []; // Make dom array element empty. - } - - let lastMlElementIndex = 0; // Find subitem element - let lastChildIndex = 0, lastChildElementText; - - - $(`${targetElement} li`).each(function (index, element) { - let lastMlElement = $(this).text().includes(lastMlElementText); // Find subitem element - - if (lastMlElement) { - if (!$(this).hasClass('mLlastPrentElement')) { - $(this).addClass('mLlastPrentElement'); - lastChildElementText = $(this).parent().children('li').last().text(); - lastMlElementIndex = index; - } - - } - - if ($(this).text().includes(lastChildElementText)) { - lastChildIndex = index; - } - - if (lastMlElementIndex < index && lastMlElementIndex > 0) { - $(this).addClass('mLlastChildElements'); - $(".mLlastPrentElement ul").append($(`.mLlastChildElements`)); - if (lastChildIndex == index) { - return false; - } - } - }); - - remove_text(mLhasSubmenu, mLparentDetecttext); - remove_text('subitem', mLchildDetectText); - - } - - function remove_text(textClass, replacedText) { - - const mLhasSubmenuEL = $(`.${textClass}`); - mLhasSubmenuEL.each(function () { - if ($(this).find("> a:first").text().includes(replacedText)) { - let textFull = $(this).find("> a:first").text(); // Find has child inner text - $(this).find("> a:first").text(textFull.replaceAll(replacedText, "")); - } - }); - } - - - function megamenu(hasMegaMenuClasses = "menu-item-has-megamenu", col = 3, item_slice = 4, hasMegaMenuDetectText = "[has_megamenu]", submenuUlClasses = "ghost-submenu") { - let megaMenuEl = $(`.${hasMegaMenuClasses} li`); - $(`.${hasMegaMenuClasses} .${submenuUlClasses}`).addClass('row'); - let titleText = []; - let titleIndex = 0; - megaMenuEl.each(function (index, element) { - if ($(this).text().includes("[title]")) { - titleIndex++; - $(this).addClass("megamenu-title"); - titleText.push($(this).text()) - $(".megamenu-title").empty(); - } - }); - - for (let i = 0; i < megaMenuEl.length; i += item_slice) { - megaMenuEl.slice(i, i + item_slice).wrapAll(`
    `); - // console.log(titleText[i]); - // console.log(titleText); - } - - for (let i = 0; i < titleText.length; i++) { - $(`.${submenuUlClasses} > div:eq(${i})`).prepend(`
    ${titleText[i]}
    `); - $(".megamenu-title-text").text(titleText[i].replaceAll("[title]", "")); - } - remove_text(hasMegaMenuClasses, hasMegaMenuDetectText); - } - - function ghost_dropdown(options) { - - // Default options - let defultOptions = { - targetElement: "nav.ul li", - hasChildrenClasses: "menu-item-has-children", - hasChildDetectText: "[has_child]", - hasChildrenIcon: "", - hasMegaMenuDetectText: "[has_megamenu]", - hasMegaMenuClasses: "menu-item-has-megamenu", - submenuUlClasses: "ghost-submenu", - subitemDetectText: "[subitem]", - subitemLiClasses: "subitem" - } - - //Marge defaultOptions - options = { - ...defultOptions, - ...options - } - - - // Target Element - let targetElement = options.targetElement; - - //Default value - let hasChildrenClasses = options.hasChildrenClasses; - let hasChildDetectText = options.hasChildDetectText; - let hasMegaMenuClasses = options.hasMegaMenuClasses; - let hasMegaMenuDetectText = options.hasMegaMenuDetectText; - let hasChildrenIcon = options.hasChildrenIcon; - let submenuUlClasses = options.submenuUlClasses; - let subitemDetectText = options.subitemDetectText; - let subitemLiClasses = options.subitemLiClasses; - - - // Declare neccesary variable - let parentEl = $(targetElement); - let childEL = $(targetElement); - let parentLen = 0; - let domArrayElement = []; - let indexPush = []; - let elIndex = 0; - let parentIndex = []; - - $(`${targetElement}`).parent().addClass('ghost-dropdown-menu'); - - let that; - // Find Dropdown parent element - parentEl.each(function (index, element) { - if ($(this).text().indexOf(hasChildDetectText) >= 0) { - parentIndex.push(index); // Make dropdown parent array index - parentLen++; - - $(this).push(element); - $(this).addClass(hasChildrenClasses); // Add claas in dropdown element - - $(this).append(`
      `); // Append submenu element - - $(targetElement).css("opacity", "1"); - } - - if ($(this).text().includes(hasMegaMenuDetectText)) { - $(this).addClass(hasMegaMenuClasses); - that = $(this); - } - }); - - $(targetElement).css("opacity", "1"); - - $(`.${hasChildrenClasses}`).append(hasChildrenIcon); - - if(!$(hasChildrenClasses).length){ - $(targetElement).css("opacity", "1"); - } - - // Using loop to reach dropdown parent element - for (let i = 0; i < parentLen; i++) { - - elIndex = 0 // Initial elemet value - - // Find subitem element - childEL.each(function (index, element) { - let subitem = $(this).text().includes(subitemDetectText); // Find subitem element - - if (subitem) { - - if (elIndex >= parentIndex[i + 1]) { // Each loop will be break - return false; //Stoped each loop - } - - if (elIndex <= parentIndex[i + 1] || elIndex >= parentIndex[parentIndex.length - 1]) { - - if (!indexPush.includes(index)) { //Check if not index already insert - $(this).addClass(subitemLiClasses); // Add class in subitem element - let st = $(this).children().text(); // Find subitem inner text - $(this).children().text(st.replaceAll(subitemDetectText, "")); // Replace subitem inner text - - domArrayElement.push(element); // Incert subitem element in dom array - indexPush.push(index); // incert subitem index in indexPush array - - } - } - - } - elIndex++; // increase element index value - }); - - - $(`.${hasChildrenClasses} ul.${submenuUlClasses}:eq(${i})`).append(domArrayElement); // Append related subitem dom element into submenu - - domArrayElement = []; // Make dom array element empty. - - } - remove_text(hasChildrenClasses, hasChildDetectText); - - - if (options.multi_level) { - multiLevel(); - } - if (options.mega_menu) { - megamenu(hasMegaMenuClasses, 3, 4, hasMegaMenuDetectText, submenuUlClasses); - } - - - } - - $(document).ready(function () { - ghost_dropdown({ - targetElement: "ul.nav li", - hasChildrenClasses: "menu-item-has-children", - hasChildrenIcon: null, - hasChildDetectText: "[has_child]", - submenuUlClasses: "ghost-submenu", - subitemDetectText: "[subitem]", - subitemLiClasses: "subitem", - multi_level: true, - mega_menu: true - }); - }); - - -}(jQuery)); diff --git a/src/js/app/index.js b/src/js/app/index.js index 893ce9e..f3cec64 100644 --- a/src/js/app/index.js +++ b/src/js/app/index.js @@ -1,6 +1,5 @@ import "../../css/app.css" -import './dropdown.js' -import './responsive-nav.js' +import './navigation-top'; // LiveReload server if (ENV === 'development') { diff --git a/src/js/app/navigation-top.js b/src/js/app/navigation-top.js new file mode 100644 index 0000000..1ef2b16 --- /dev/null +++ b/src/js/app/navigation-top.js @@ -0,0 +1,19 @@ +const mobileTrigger = document.getElementById( + 'navigation__mobile-menu-trigger', +); +const list = document.querySelector('.navigation--top .navigation__list'); + +function toggleMobileMenu() { + this.classList.toggle('closed'); + this.classList.toggle('opened'); + + if (this.classList.contains('closed')) { + list.classList.add('navigation__list--mobile-closed'); + list.classList.remove('navigation__list--mobile-opened'); + } else { + list.classList.remove('navigation__list--mobile-closed'); + list.classList.add('navigation__list--mobile-opened'); + } +} + +mobileTrigger.addEventListener('click', toggleMobileMenu); diff --git a/src/js/app/responsive-nav.js b/src/js/app/responsive-nav.js deleted file mode 100644 index d3579e6..0000000 --- a/src/js/app/responsive-nav.js +++ /dev/null @@ -1,27 +0,0 @@ -(function () { - "use strict"; - - const menuIconOpen = document.getElementById('menu-icon-open'); - const menuIconClose = document.getElementById('menu-icon-close'); - const topNav = document.querySelector('nav'); - - function openNav() { - topNav.classList.add('open'); - topNav.classList.remove('closed') - } - - function closeNav() { - topNav.classList.remove('open'); - topNav.classList.add('closed') - } - - menuIconOpen.addEventListener('click', (e)=> { - e.preventDefault(); - openNav(); - }) - - menuIconClose.addEventListener('click', (e) => { - e.preventDefault(); - closeNav(); - }) -}());