From c27b14432f028b975c8f741c7698b9abd339ef29 Mon Sep 17 00:00:00 2001 From: pogadev Date: Mon, 14 Nov 2022 22:20:12 +0200 Subject: [PATCH 1/5] a possible final solution of the project plus room for improvements --- .gitignore | 3 +- src/index.html | 56 +++++++++++++++-------- src/script.js | 79 ++++++++++++++++++++++++++------ src/style.css | 120 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 224 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index b512c09..34977ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -node_modules \ No newline at end of file +node_modules +.idea \ No newline at end of file diff --git a/src/index.html b/src/index.html index b6f9767..935a5b8 100644 --- a/src/index.html +++ b/src/index.html @@ -1,21 +1,39 @@ - + - - - - - JSHeroes Bootcamp - - - -
-

Welcome to the JSHeroes Bootcamp!

-
-
- -
- - + + + + + JSHeroes Bootcamp + + + + +
+

Welcome to the JSHeroes Bootcamp!

+
+
+
+ + +
+
+
+ +

loading...

+ +
+ \ No newline at end of file diff --git a/src/script.js b/src/script.js index 956632b..ff9eabb 100644 --- a/src/script.js +++ b/src/script.js @@ -1,23 +1,74 @@ -// TODO: Add some sample repositories as a static array +const repoCardTemplate = document.querySelector("[data-repo-template]"); +const repoCardContainer = document.querySelector("[data-repo-cards-container]"); +const searchInput = document.querySelector("[data-search]"); +const loadingText = document.querySelector("[data-loading]") +const searchButton = document.getElementById('search-repos-btn') -function createRepositoryCard() { - // Implement string template HTML builder for repo card + +// form submission +searchButton.addEventListener("click", async (event) => { + event.preventDefault() + const searchValue = searchInput.value; + + if (!searchValue) { + alert("Please type something") + return; + } + + clearRepos() + await fetchRepos(searchValue) + +}); + +// fetch initial repos when clearing the input +searchInput.addEventListener('input', async (event) => { + const searchValue = event.target.value; + + if (!searchValue) { + clearRepos() + await fetchRepos() + } +}) + +function clearRepos() { + loadingText.classList.remove('hide') + repoCardContainer.textContent = null; } -function renderRepositories() { - // Implement DOM manipulation function to add list items in the repo list +function hideLoadingMessage() { + loadingText.classList.add('hide'); } -// Comment this out when you start working on the search functionality -renderRepositories(); +function renderRepositories(repository) { + // get the content inside the template / card + const card = repoCardTemplate.content.cloneNode(true).children[0]; -function handleSearch() { - // Implement form submit event handler + const header = card.querySelector('[data-header]'); + const description = card.querySelector('[data-description]'); + const stars = card.querySelector('[data-stars]'); + const forks = card.querySelector('[data-forks]'); + + header.textContent = repository.full_name; + description.textContent = repository.description; + stars.textContent = `Stars: ${repository.stargazers_count}`; + forks.textContent = `Forks: ${repository.forks}`; + + repoCardContainer.append(card) } -async function fetchRepositories() { - // Pass parameter to the search endpoint - return fetch("https://api.github.com/legacy/repos/search/") - .then((res) => res.json()) - .then((res) => res.repositories); +function fetchRepos(searchParam = '') { + const API_URL = `https://api.github.com/search/repositories${searchParam ? '?q=' + searchParam : '?q=stars:>10000'}`; + + return fetch(API_URL) + .then((response) => response.json()) + .then(data => { + hideLoadingMessage(); + + data.items.map((repo) => { + return renderRepositories(repo) + }) + }) } + +fetchRepos(); + diff --git a/src/style.css b/src/style.css index 3039c87..b970f67 100644 --- a/src/style.css +++ b/src/style.css @@ -1,6 +1,18 @@ +:root { + --color-background: #fff; + --color-border: #bbb; + --color-text: #333; + --color-accent: #28a745; + --color-accent-hover: #22863a; + + --drop-shadow: 0 2px 8px 1px rgba(18, 18, 18, 0.3); + --animation-fade: all 0.1s ease-out; +} + body { margin: 0; font-family: system-ui, sans-serif; + color: var(--color-text); } ul { @@ -8,3 +20,111 @@ ul { margin: 0; padding: 0; } + +h1 { + margin: 0; + font-size: 1.67rem; +} + +header { + padding: 0 1rem; + height: 4rem; + display: flex; + align-items: center; + background: var(--color-text); + color: var(--color-background); +} + +.search-wrapper { + margin-top: 20px; + padding: 2rem 1rem; +} + +main { + padding: 2rem 1rem; +} + +/* Search form component styles */ + +.search-form { + display: flex; + margin-bottom: 2rem; +} + +.input { + border-radius: 8px 0 0 8px; + border: 2px solid var(--color-border); + border-right: 0; + font-size: 1.2rem; + padding: 1rem 2rem; + flex: 1 1 auto; + transition: var(--animation-fade); + min-width: 8rem; +} + +.input:focus { + border-radius: 0; + outline: none; + border-color: var(--color-accent); +} + +.button { + border: 0; + font-size: 1.2rem; + appearance: none; + background: var(--color-accent); + color: var(--color-background); + padding: 1rem 2rem; + border-radius: 0 8px 8px 0; + height: 4rem; + transition: var(--animation-fade); +} + +.button:hover { + background: var(--color-accent-hover); + border-radius: 0; +} + +/* Repo card component styles */ + +.repo-card { + display: block; + border: 1px solid var(--color-border); + transition: var(--animation-fade); + padding: 1rem 1.5rem; + margin-bottom: 1rem; + border-radius: 8px; +} + +.repo-card:hover { + box-shadow: var(--drop-shadow); + border-left: 4px solid var(--color-accent); + padding-left: 1rem; +} + +.title { + font-weight: 700; + font-size: 1.2rem; +} + +.description { + max-height: 4.5rem; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.hide { + display: none; +} + +.show { + display: block +} + +.footer { + display: flex; + align-items: center; + gap: 20px; +} \ No newline at end of file From 0ec7f7926ff4edac25e6fdf9eadf81a0df62e054 Mon Sep 17 00:00:00 2001 From: Anda Lucia Pop Date: Wed, 16 Nov 2022 22:04:46 +0200 Subject: [PATCH 2/5] chore: add extra css --- src/index.html | 40 +++++++----- src/script.js | 11 ++-- src/style.css | 161 +++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 162 insertions(+), 50 deletions(-) diff --git a/src/index.html b/src/index.html index 935a5b8..7f5f007 100644 --- a/src/index.html +++ b/src/index.html @@ -11,29 +11,41 @@
-

Welcome to the JSHeroes Bootcamp!

+
+

Welcome to the JSHeroes Bootcamp!

+
-
-
- - -
-
-
- -

loading...

-
    +
    +
    +
    + + +
    +
    +
    +

    Repositories

    + + +
      -
    +
    \ No newline at end of file diff --git a/src/script.js b/src/script.js index ff9eabb..d6c102c 100644 --- a/src/script.js +++ b/src/script.js @@ -31,13 +31,14 @@ searchInput.addEventListener('input', async (event) => { }) function clearRepos() { - loadingText.classList.remove('hide') + // loadingText.classList.remove('hide') repoCardContainer.textContent = null; } -function hideLoadingMessage() { - loadingText.classList.add('hide'); -} +// we can commented these out, if we use :empty +// function hideLoadingMessage() { +// loadingText.classList.add('hide'); +// } function renderRepositories(repository) { // get the content inside the template / card @@ -62,7 +63,7 @@ function fetchRepos(searchParam = '') { return fetch(API_URL) .then((response) => response.json()) .then(data => { - hideLoadingMessage(); + // hideLoadingMessage(); data.items.map((repo) => { return renderRepositories(repo) diff --git a/src/style.css b/src/style.css index b970f67..26526ea 100644 --- a/src/style.css +++ b/src/style.css @@ -1,3 +1,76 @@ +/* Reset https://www.joshwcomeau.com/css/custom-css-reset/ */ + +/* + 1. Use a more-intuitive box-sizing model. +*/ +*, +*::before, +*::after { + box-sizing: border-box; +} +/* + 2. Remove default margin +*/ +* { + margin: 0; +} +/* + 3. Allow percentage-based heights in the application +*/ +html, +body { + height: 100%; +} +/* + Typographic tweaks! + 4. Add accessible line-height + 5. Improve text rendering +*/ +body { + line-height: 1.5; + -webkit-font-smoothing: antialiased; +} +/* + 6. Improve media defaults +*/ +img, +picture, +video, +canvas, +svg { + display: block; + max-width: 100%; +} +/* + 7. Remove built-in form typography styles +*/ +input, +button, +textarea, +select { + font: inherit; +} +/* + 8. Avoid text overflows +*/ +p, +h1, +h2, +h3, +h4, +h5, +h6 { + overflow-wrap: break-word; +} +/* + 9. Create a root stacking context - optional + this example is useful for a React app that would render in a div with id root +*/ +#root { + isolation: isolate; +} + +/* color variables */ :root { --color-background: #fff; --color-border: #bbb; @@ -10,50 +83,35 @@ } body { - margin: 0; font-family: system-ui, sans-serif; color: var(--color-text); } -ul { - list-style: none; - margin: 0; - padding: 0; -} - h1 { - margin: 0; font-size: 1.67rem; } header { - padding: 0 1rem; - height: 4rem; - display: flex; - align-items: center; background: var(--color-text); color: var(--color-background); } -.search-wrapper { - margin-top: 20px; - padding: 2rem 1rem; -} - -main { - padding: 2rem 1rem; +.content-wrapper { + max-width: 75rem; + margin-inline: auto; + padding: 3rem 2rem; } /* Search form component styles */ .search-form { display: flex; - margin-bottom: 2rem; + margin-bottom: 3rem; } .input { border-radius: 8px 0 0 8px; - border: 2px solid var(--color-border); + border: 1px solid var(--color-border); border-right: 0; font-size: 1.2rem; padding: 1rem 2rem; @@ -86,45 +144,86 @@ main { } /* Repo card component styles */ +.repo-cards { + padding: 0; + display: grid; + gap: 1rem; + grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); +} + +.repo-cards:empty::before { + display: block; + content: "Loading..."; + width: 100%; + text-align: center; +} .repo-card { display: block; border: 1px solid var(--color-border); transition: var(--animation-fade); padding: 1rem 1.5rem; - margin-bottom: 1rem; border-radius: 8px; } .repo-card:hover { box-shadow: var(--drop-shadow); - border-left: 4px solid var(--color-accent); - padding-left: 1rem; + /* + border-left: 4px solid var(--color-accent); + padding-left: 1rem; + */ + /* maintain size of content/ move without text reflow */ + background: linear-gradient( + 90deg, + var(--color-accent) 0, + var(--color-accent) 4px, + transparent 5px + ); + transform: scale(1.025); } .title { + display: block; font-weight: 700; font-size: 1.2rem; + margin-bottom: 0.5rem; } .description { - max-height: 4.5rem; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } +.footer { + display: flex; + align-items: center; + gap: 1rem; + margin-top: 0.5rem; +} + +/* utility classes */ + +/* i would prefix them with u- + we would heve to do that in the js */ .hide { display: none; } .show { - display: block + display: block; } -.footer { - display: flex; - align-items: center; - gap: 20px; -} \ No newline at end of file +.u-screen-reader-text { + border: 0; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute !important; + width: 1px; + word-wrap: normal !important; +} From d9f9e2749401e986af3ef8c0dd34fef784f3b513 Mon Sep 17 00:00:00 2001 From: Anda Lucia Pop Date: Thu, 17 Nov 2022 13:12:51 +0200 Subject: [PATCH 3/5] chore: add bear, change colors - format html --- src/assets/js-heroes-bear.png | Bin 0 -> 36089 bytes src/index.html | 101 +++++++++++++++++----------------- src/style.css | 27 +++++++-- 3 files changed, 75 insertions(+), 53 deletions(-) create mode 100644 src/assets/js-heroes-bear.png diff --git a/src/assets/js-heroes-bear.png b/src/assets/js-heroes-bear.png new file mode 100644 index 0000000000000000000000000000000000000000..0a21525b4af8a52b81bb2516320d1e4d82dfaae4 GIT binary patch literal 36089 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

    v3i=W0$oViL?-d&Ce-0wPj*+9XOByPYP8zjf0 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�S(tq<%o${Iy0;zWx&R(83-0w5p0^RTTUkg0S zJg00Nn?BMDI2AXFsh|qPb8`GFn>}V93J&itPbDw_pod8|ST_GfPjqLrBs%D*1!?|< zVfod1K+QswI<6=CKZBT(oT@~bRG=*=GTfAP4KJPi=k3-DoPqVhZ?OJ-Mr)BZ4f8E{ z>B$OR_apH%SN$%P(`oQy;f4RU^CeJl9MK6pRim^sK6~Oq^t6g=`=R11oJdbn7d|<@ zF{vEjS-j9o&~b_oH~E0^5)VPTm~6Zk%TUsyZD?-noF$7S_XM=U<`-C6(|7*hf{a$+Pu*HuTC*qAIu^oYPV{}P!*c{Rg z)m$Wv{Ac;4O4Gg$=cu5q=j+fK7p7Ksb!8LGn0hJ;>KL=bWY{X{B_^W^9%q)%5KR0lw~ z{pXUWR*zz``x`hknYN3sm96{LLDV*FzF~%tD;$lVLH_22=C$U0-y?<8WX2lvo3oDz z(9Lq~Q6Qk1%O1&@&kVt)gD>lidZpC!*-In>F9yU%Ti++5x723%IO!Q^k6#z^f*2i1 z`esL(O4;Rp2qVX`?I?T%@r=8N{y?USnR>w(0b49EE0uF(ZqGhLHNopNq}cL5%)^*S z3NjFvbi@oEu%e^j7IxPASnNuu4WyvW?s2^8X7};SW1$a<2o~M6+Z_v~VNENq@$h85p;F;yqHTDr}#1NmnWq`dQC zCf$;SmEisr-I!`NaCo1`wy*mL+Dzf%{yAqshAQf*R0cgD#m29%;9Y*Am zY5Hc6OldMfI5sHWN&=g7uQJ?85uX4I8%_b_5Y{h5684BB~o&J|sm^uA@wa{e-OQ=VnRZNw%9iH#?#mRMd3h_3&Sn_(nn|Hb1rT`=78syvJ~G*0~HZ z5OhPBRn$<9+@TSsA^tnsYVWAG6wUi}5Gn(??A8(`CAk55M?u}-vig%p{;T6IDeak& zYni7L{l(PFQq`9CZ@s&FwSd1A&WlHk13N!?#-9iRSfO98N(|TDSl0JM`xybRVnXW^ z+CkLQNM`>%&L!g-7kod{hY$Ar9IlO@BpAL8BnziwJlxw*+zZEA@A!bFpFK^#O;!HH&?C@PQ8MF9(R^ZQR4U0Wj3fBFEOyTZlpK3+>+q@5V|Oq(X59 zlg?>|pqosdq_YUi`Wo)4f^Nny^`*I(9WDG!%)EhBH`VV}q&{&W>%727aB%s~N7ogF zk(#iPX;7SfO22RZsVp<0ObZQb{5r?xzkED0$zc!hK&Zm^@2p{&bIto&ww!ROQ;n?k zIn_pg^)ho@{$z!xY~gG>v&Dm6zVlmznIDt3oq!uQGuO2FSADd@LV&KEURQsb#)X1y zr4o@#&7_z4y=*mdMxR`r&t6u3l-=6m6b2k{yVfJqoJ|DQiRCt-vVhjnNtRU6%#8iKS7rvJFwX(-yOfJvyNMk8zdb|^E;?q zqtXk$Rwou_V~&Tda`*@;=Q~CEWgm?S$J^C%%ohBApImsGSuAgQhc$6pdB1%u+fSIH z!I(q<`+Gt*Y_t}2%}Ez}Y?&{|%|`{S!+U}|bEc_58BilipOwr_gAmRWyZ-HcaXCX$lRy?j!St3{?L{w5n1j)<&3o^+)ahBjjOS#} z)4o-aTD|aj(zvv4amowGX^~qg#Fjs^S7Bzr7F-qfv-Z5#q!9adGpW zzbIwnC5D�V*Rv(qY4or~=4p;H<#*Sv1#O!h_n#woQyKF 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 literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html index 7f5f007..3799f59 100644 --- a/src/index.html +++ b/src/index.html @@ -1,51 +1,54 @@ - + - - - - - JSHeroes Bootcamp - - - - -

    -
    -

    Welcome to the JSHeroes Bootcamp!

    -
    -
    -
    -
    -
    - - -
    -
    -
    -

    Repositories

    - - -
      - -
      -
      - - \ No newline at end of file + +
        + + + + + diff --git a/src/style.css b/src/style.css index 26526ea..2ac0f9e 100644 --- a/src/style.css +++ b/src/style.css @@ -72,11 +72,12 @@ h6 { /* color variables */ :root { + --color-primary: #0b1b44; --color-background: #fff; --color-border: #bbb; - --color-text: #333; - --color-accent: #28a745; - --color-accent-hover: #22863a; + --color-text: #202022; + --color-accent: #0098ff; + --color-accent-hover: #0b1b44; --drop-shadow: 0 2px 8px 1px rgba(18, 18, 18, 0.3); --animation-fade: all 0.1s ease-out; @@ -92,14 +93,32 @@ h1 { } header { - background: var(--color-text); + background: var(--color-primary); color: var(--color-background); + position: relative; } .content-wrapper { max-width: 75rem; margin-inline: auto; padding: 3rem 2rem; + position: relative; + z-index: 1; +} + +.bear { + position: absolute; + top: 0; + left: 0; + height: 100%; +} + +@media (max-width: 1400px) { + .bear { + left: auto; + right: 0; + transform: scaleX(-1); + } } /* Search form component styles */ From ac5037c5d020093adf6c9d815e49f3fbee89ca5f Mon Sep 17 00:00:00 2001 From: Anda Lucia Pop Date: Thu, 17 Nov 2022 13:19:47 +0200 Subject: [PATCH 4/5] chore: remove stacking context from reset --- src/style.css | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/style.css b/src/style.css index 2ac0f9e..fe38e98 100644 --- a/src/style.css +++ b/src/style.css @@ -62,13 +62,6 @@ h5, h6 { overflow-wrap: break-word; } -/* - 9. Create a root stacking context - optional - this example is useful for a React app that would render in a div with id root -*/ -#root { - isolation: isolate; -} /* color variables */ :root { From 91cdcc552e640ed264b3082a413ab70f8f5ebc5b Mon Sep 17 00:00:00 2001 From: Alex Moldovan Date: Thu, 17 Nov 2022 20:55:54 +0000 Subject: [PATCH 5/5] custom font for heading and titles --- src/index.html | 6 ++++++ src/style.css | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index 3799f59..548ce7f 100644 --- a/src/index.html +++ b/src/index.html @@ -8,6 +8,12 @@ /> JSHeroes Bootcamp + + + diff --git a/src/style.css b/src/style.css index fe38e98..405f3f4 100644 --- a/src/style.css +++ b/src/style.css @@ -72,17 +72,21 @@ h6 { --color-accent: #0098ff; --color-accent-hover: #0b1b44; + --font-family-base: system-ui, sans-serif; + --font-family-display: "Ubuntu", sans-serif; + --drop-shadow: 0 2px 8px 1px rgba(18, 18, 18, 0.3); --animation-fade: all 0.1s ease-out; } body { - font-family: system-ui, sans-serif; + font-family: var(--font-family-base); color: var(--color-text); } h1 { font-size: 1.67rem; + font-family: var(--font-family-display); } header { @@ -141,6 +145,7 @@ header { .button { border: 0; font-size: 1.2rem; + font-family: var(--font-family-display); appearance: none; background: var(--color-accent); color: var(--color-background); @@ -196,6 +201,7 @@ header { .title { display: block; + font-family: var(--font-family-display); font-weight: 700; font-size: 1.2rem; margin-bottom: 0.5rem;