From 3c8a3790efa1f52a59783b9e0180f233c69eef2b Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Mon, 21 Feb 2022 18:29:32 +0100 Subject: [PATCH 01/24] Display profile data --- .gitignore | 1 + .vscode/settings.json | 3 --- code/index.html | 21 --------------------- code/style.css | 3 --- images/location.png | Bin 0 -> 360 bytes index.html | 32 ++++++++++++++++++++++++++++++++ {code => src}/chart.js | 0 src/script.js | 30 ++++++++++++++++++++++++++++++ code/script.js => src/style.css | 0 9 files changed, 63 insertions(+), 27 deletions(-) create mode 100644 .gitignore delete mode 100644 .vscode/settings.json delete mode 100644 code/index.html delete mode 100644 code/style.css create mode 100644 images/location.png create mode 100644 index.html rename {code => src}/chart.js (100%) create mode 100644 src/script.js rename code/script.js => src/style.css (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e43b0f98 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index e8783bfe..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "liveServer.settings.port": 5505 -} \ No newline at end of file diff --git a/code/index.html b/code/index.html deleted file mode 100644 index 2fb5e0ae..00000000 --- a/code/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - Project GitHub Tracker - - - -

GitHub Tracker

-

Projects:

-
- - - - - - - - \ No newline at end of file diff --git a/code/style.css b/code/style.css deleted file mode 100644 index 7c8ad447..00000000 --- a/code/style.css +++ /dev/null @@ -1,3 +0,0 @@ -body { - background: #FFECE9; -} \ No newline at end of file diff --git a/images/location.png b/images/location.png new file mode 100644 index 0000000000000000000000000000000000000000..021bb5d869a173cf54c05f5867b5786325cc7be4 GIT binary patch literal 360 zcmV-u0hj)XP)4oJTwk22!B9>zBCX@Sb@7=o+iC=PxnRDj*n>mvi{)1{b#2wzEXyPEsRnj)v_|Awn zwyMB8Iq+U|1~IAi*?Bx(Fr5Y(%`n)mC%DBtCW72J-f>m*1oyEWK4CV<*CWHQ zrdbpYud&5PDK*EE7oN~ahQU{Xy7*jtO|EVvTT~D7bCNB(P6Lf)7+hc}7*FZ;_$(Ul zU@~P*VJ#~52Ewn2|s&>N*Di0000 + + + + + + + GitHub Tracker + + + + +
+
+ + +
+

Repositories

+
+
+ + +
+ +
+
+ + + + + + \ No newline at end of file diff --git a/code/chart.js b/src/chart.js similarity index 100% rename from code/chart.js rename to src/chart.js diff --git a/src/script.js b/src/script.js new file mode 100644 index 00000000..fc414054 --- /dev/null +++ b/src/script.js @@ -0,0 +1,30 @@ +const profileDetails = document.getElementById("aside"); +const projects = document.getElementById("projects"); + +const username = "savannah-hayes" +const USER_URL = `https://api.github.com/users/${username}` + +const displayProfileData = (data) => { + console.log(data) + const image = data.avatar_url; + const name = data.name; + const username = data.login; + const bio = data.bio; + const followers = data.followers; + const following = data.following; + const location = data.location; + + profileDetails.innerHTML = ` + image of ${name} +

${name}

+

${username}

+

${bio}

+

馃懃 ${followers} followers 路 ${following} following

+

${location}

+ `; +} + + +fetch(USER_URL) + .then(res => res.json()) + .then(displayProfileData) diff --git a/code/script.js b/src/style.css similarity index 100% rename from code/script.js rename to src/style.css From bb8facabc9fbd3032053c26d63fef5e484d763aa Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Mon, 21 Feb 2022 20:01:21 +0100 Subject: [PATCH 02/24] Display repository data --- src/script.js | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/script.js b/src/script.js index fc414054..9d0a9496 100644 --- a/src/script.js +++ b/src/script.js @@ -1,11 +1,11 @@ const profileDetails = document.getElementById("aside"); const projects = document.getElementById("projects"); -const username = "savannah-hayes" -const USER_URL = `https://api.github.com/users/${username}` +const username = "savannah-hayes"; +const USER_URL = `https://api.github.com/users/${username}`; +const REPOS_URL = `https://api.github.com/users/${username}/repos`; const displayProfileData = (data) => { - console.log(data) const image = data.avatar_url; const name = data.name; const username = data.login; @@ -24,7 +24,32 @@ const displayProfileData = (data) => { `; } +const displayRepositories = (repositories) => { + console.log(repositories); + repositories.filter(repo => { + let language = repo.language; + const visibility = repo.visibility; + const oneDay = 24 * 60 * 60 * 1000; + const currentDate = new Date(); + const projectDate = new Date(repo.pushed_at); + let numberOfDays = Math.round(Math.abs((currentDate - projectDate) / oneDay)); + + language === "HTML" ? language = `馃敶 ${language}` : language = `馃煛 ${language}`; + + if (repo.fork === true && repo.name !== "unit-tests") { + projects.innerHTML += ` +

${repo.name} ${visibility}

+

Forked from Technigo/project-${repo.name}

+

${language} Updated ${numberOfDays} days ago

+ `; + } + }) +} fetch(USER_URL) .then(res => res.json()) .then(displayProfileData) + +fetch(REPOS_URL) + .then(res => res.json()) + .then(displayRepositories) From da026abdc2af1cc843b7f22deb8e598de2936198 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Tue, 22 Feb 2022 10:29:18 +0100 Subject: [PATCH 03/24] Integrate chart.js and display doughnut chart --- .gitignore | 1 + index.html | 12 +++++++----- src/chart.js | 32 +++++++++++++++++++++++++++++--- src/script.js | 12 ++++++++++-- 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index e43b0f98..34615b71 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +config.js \ No newline at end of file diff --git a/index.html b/index.html index 237f36cd..7d91e356 100644 --- a/index.html +++ b/index.html @@ -10,8 +10,7 @@ -
-
+
@@ -19,14 +18,17 @@

Repositories

-
- + +

Your browser does not support the canvas element.

+
- + + + \ No newline at end of file diff --git a/src/chart.js b/src/chart.js index 92e85a30..75de525b 100644 --- a/src/chart.js +++ b/src/chart.js @@ -1,4 +1,30 @@ -//DOM-selector for the canvas 馃憞 -const ctx = document.getElementById('chart').getContext('2d') +const ctx = document.getElementById('chart') -//"Draw" the chart here 馃憞 +const labels = [ + 'Projects completed', + 'Projects left', +]; + +const data = { + labels: labels, + datasets: [{ + label: 'My First Dataset', + data: [7, 19], + backgroundColor: [ + 'rgb(142, 85, 255)', + 'rgb(142, 85, 255, 0.3)', + ], + hoverOffset: 4 + }] +}; + +const configuration = { + type: 'doughnut', + data: data, + options: {} +}; + +const myChart = new Chart( + ctx, + configuration +); \ No newline at end of file diff --git a/src/script.js b/src/script.js index 9d0a9496..93ba7471 100644 --- a/src/script.js +++ b/src/script.js @@ -5,6 +5,14 @@ const username = "savannah-hayes"; const USER_URL = `https://api.github.com/users/${username}`; const REPOS_URL = `https://api.github.com/users/${username}/repos`; +const options = { + method: 'GET', + headers: { + Authorization: config.GITHUB_TOKEN + } +} + + const displayProfileData = (data) => { const image = data.avatar_url; const name = data.name; @@ -46,10 +54,10 @@ const displayRepositories = (repositories) => { }) } -fetch(USER_URL) +fetch(USER_URL, options) .then(res => res.json()) .then(displayProfileData) -fetch(REPOS_URL) +fetch(REPOS_URL, options) .then(res => res.json()) .then(displayRepositories) From bb34d13785049a1127ffc0b46c5bcc2ed02a1986 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Wed, 23 Feb 2022 15:55:48 +0100 Subject: [PATCH 04/24] Add styling --- .gitignore | 2 +- images/group.png | Bin 0 -> 1169 bytes index.html | 70 ++++++++++++++++++++++----- src/script.js | 31 +++++++----- src/style.css | 122 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 202 insertions(+), 23 deletions(-) create mode 100644 images/group.png diff --git a/.gitignore b/.gitignore index 34615b71..f86af0ef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .DS_Store -config.js \ No newline at end of file +src/config.js \ No newline at end of file diff --git a/images/group.png b/images/group.png new file mode 100644 index 0000000000000000000000000000000000000000..379991b50de1471b1e57d75168cb8e59ff6660ad GIT binary patch literal 1169 zcmV;C1aA9@P)4X+e{iGiL4+Z zP;v^rqLc)selQ~XQjjt;da)c52&GVd=!+VeFt9joJO8t`tfp*(#Gp^Y@?|e)d+t6s zWj;QeX_8;OKHk@T-`DlOdG6=`Ja7xQaFd~=U_(Pgwx*_L4bUWM!pwSrJ>L8C08LFz zcTG-Ct_1D}kkntPRKD)(>-!VHIadp`Nh+9GM$*xViHR@!`}@zuwSsscm&>`DnwkMK zdloomX2Za0;3GiJxi=>#Cx4UFD5+mkznL|s)9K%xbDIH~*~h@@>DpsJTUAxnKt7)j z=bS)eW8>{pQ&YbJTfO(&0gIV?SJE@7RO;#O?(P#aIp^GB;9KAu@BQ0x9p~HzU{fZO zX($$prxPbIH8r)~%(}eyAH>BAg~Ef9)&tAq;sDfTR{+PrNxm6h&)+o!?%>Zy8Fc=SpVVF0w7lF?%>l-)eoZAaL0c?q)=(|)ZHDzXhOIm7XuY2$FK$N7s zV#SKo@bIuVvvx^ENp(>a1wjxjH?z&a0q^~)ne~?pgkgARDwW!2X7y(FsicR1X28sB zXI)+0_OoZt7NaOSQZAP_65A3ktlEcWwq((wMN5W;hBioAH?46L_z`$j(wS5$wX&(nI!&bd2)Zb=8s><#aIC4RbwhK6i)b#=R>b!PTM5CmICM@NhG_4OJbA8(#M;UmB< zV3YTLB;Lb0S0!nynLQN*!P1_dp1%Z;&*u*UCrhQ$x}?$Oa=B(n`+z<(dtXuxcp127 zI^_hgD~h6SNt-3*%&e_kE+0wi=bYOCEcD(lR~UxNf*{zP$z<*>7K@|t3^jmkifqMEDnH&C4HaJLqQOHE~))m#Q~;kwgVlrq#QD{r2#N6 zilS3-);aemuppbwZo5|Tix?Rh*#ayG!*E%glXMc89{@EI6BAEr*^ z0PqVi&pFo)%-oh5xNsM20xlb~nPq`9No#qnn0~39neI6gW5CA5qC%mt&^dQHk-QE# z=S~+2g@sAnT+hJ&f}3t2ofNE8Dp4wx%I0#pLpMk#Td7nMukghG0zkQ3?nz0v-3WCv j8!ea1`?>N8zXkpQIeg2ueXYmB00000NkvXXu0mjf0P`oM literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 7d91e356..5838e5ff 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,5 @@ + @@ -6,29 +7,76 @@ GitHub Tracker + + +
- + + +
+ +
-
-

Repositories

-
- +
+

Repositories

+
+
+
+ +
+ +
+
+
-
- +
+

Your browser does not support the canvas element.

-
-
+
+
+
- - + \ No newline at end of file diff --git a/src/script.js b/src/script.js index 93ba7471..6e9bb8c7 100644 --- a/src/script.js +++ b/src/script.js @@ -4,15 +4,15 @@ const projects = document.getElementById("projects"); const username = "savannah-hayes"; const USER_URL = `https://api.github.com/users/${username}`; const REPOS_URL = `https://api.github.com/users/${username}/repos`; +const TOKEN = config.GITHUB_TOKEN || "Token" const options = { method: 'GET', headers: { - Authorization: config.GITHUB_TOKEN + Authorization: `token ${TOKEN}` } } - const displayProfileData = (data) => { const image = data.avatar_url; const name = data.name; @@ -23,12 +23,18 @@ const displayProfileData = (data) => { const location = data.location; profileDetails.innerHTML = ` - image of ${name} -

${name}

-

${username}

-

${bio}

-

馃懃 ${followers} followers 路 ${following} following

-

${location}

+
+ image of ${name} +
+

${name}

+

${username}

+
+
+
+

${bio}

+

${followers} followers 路 ${following} following

+

${location}

+
`; } @@ -36,6 +42,7 @@ const displayRepositories = (repositories) => { console.log(repositories); repositories.filter(repo => { let language = repo.language; + const projectUrl = repo.html_url; const visibility = repo.visibility; const oneDay = 24 * 60 * 60 * 1000; const currentDate = new Date(); @@ -46,9 +53,10 @@ const displayRepositories = (repositories) => { if (repo.fork === true && repo.name !== "unit-tests") { projects.innerHTML += ` -

${repo.name} ${visibility}

-

Forked from Technigo/project-${repo.name}

-

${language} Updated ${numberOfDays} days ago

+ ${repo.name}${visibility} +

Forked from Technigo/project-${repo.name}

+

${language} Updated ${numberOfDays} days ago

+
`; } }) @@ -61,3 +69,4 @@ fetch(USER_URL, options) fetch(REPOS_URL, options) .then(res => res.json()) .then(displayRepositories) + diff --git a/src/style.css b/src/style.css index e69de29b..dfeab32d 100644 --- a/src/style.css +++ b/src/style.css @@ -0,0 +1,122 @@ +:root { + --fw-bold: 600; + --clr-light: rgb(87, 87, 87);; + --clr-dark: #000; +} + +.body-wrapper { + display: flex; + flex-direction: column; + padding: 20px; +} + +.header { + display: flex; +} + +.header__text { + display: flex; + flex-direction: column; + justify-content: center; + margin-left: 15px; +} + +.header__title { + margin-bottom: 0; +} + +.header__sub-title { + margin-top: 0; + color: rgb(87, 87, 87); +} + +.header__image { + border: 1px solid var(--clr-dark); + border-radius: 50%; + width: 150px; +} + +.header-content__paragraph { + margin: 0; +} + +.header-content__paragraph--top { + margin: 30px 0 15px 0; +} + +.header-content__paragraph--grey { + color: var(--clr-light); +} + +.header-content__paragraph--bold { + color: var(--clr-dark); + font-weight: var(--fw-bold); +} + +.dropdown { + margin: 15px 0 20px 0; +} + +.btn-secondary { + background-color: #f4f4f4; + color: var(--clr-dark); +} + +.icons { + float: left; + width: 16px; + margin: 3px 8px 0 0; + position: relative; +} + +.projects__header { + margin-top: 40px; + font-size: 14px; + text-align: center; +} + +.projects__links { + text-decoration: none; + font-weight: var(--fw-bold); + font-size: 20px; +} + +.projects__links:hover { + text-decoration: underline; +} + +.projects__paragraphs { + font-size: 12px; +} + +.projects__links--right { + font-size: 14px; + border-radius: 50px; + border: 1px solid grey; + padding: 1px 5px; + margin-left: 10px; + text-transform: capitalize; +} + +.projects__paragraphs--right { + margin-left: 15px; +} + +.chart { + margin-top: 20px; +} + +hr { + margin: 8px 0 22px 0; +} + +@media (min-width: 1024px) { + .body-wrapper { + display: flex; + flex-direction: row; + } + + form { + display: flex; + } +} From 6b905ede49b535f5f750679e55e09f2449c781e8 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Thu, 24 Feb 2022 21:01:57 +0100 Subject: [PATCH 05/24] Display commits data --- .gitignore | 3 ++- index.html | 14 ++++++++------ package-lock.json | 27 +++++++++++++++++++++++++++ package.json | 5 +++++ src/{ => javascript}/chart.js | 2 +- src/{ => javascript}/script.js | 29 +++++++++++++++++++++++------ src/style.css | 1 - 7 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 package-lock.json create mode 100644 package.json rename src/{ => javascript}/chart.js (99%) rename src/{ => javascript}/script.js (71%) diff --git a/.gitignore b/.gitignore index f86af0ef..cdeebf5e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +node_modules .DS_Store -src/config.js \ No newline at end of file +/src/javascript/config.js \ No newline at end of file diff --git a/index.html b/index.html index 5838e5ff..792230a3 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,4 @@ - @@ -18,8 +17,6 @@
- -
@@ -72,11 +69,16 @@

Repositories

+
+
+

Contribution activity

+
+
- - - + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..9c4efc2e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,27 @@ +{ + "name": "github-tracker", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "dotenv": "^16.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..48e3cde3 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "dotenv": "^16.0.0" + } +} diff --git a/src/chart.js b/src/javascript/chart.js similarity index 99% rename from src/chart.js rename to src/javascript/chart.js index 75de525b..e4865204 100644 --- a/src/chart.js +++ b/src/javascript/chart.js @@ -27,4 +27,4 @@ const configuration = { const myChart = new Chart( ctx, configuration -); \ No newline at end of file +); diff --git a/src/script.js b/src/javascript/script.js similarity index 71% rename from src/script.js rename to src/javascript/script.js index 6e9bb8c7..fb2a2cfc 100644 --- a/src/script.js +++ b/src/javascript/script.js @@ -1,13 +1,15 @@ const profileDetails = document.getElementById("aside"); -const projects = document.getElementById("projects"); +const projectsSection = document.getElementById("projects"); +const commitsSection = document.getElementById("commits"); const username = "savannah-hayes"; const USER_URL = `https://api.github.com/users/${username}`; const REPOS_URL = `https://api.github.com/users/${username}/repos`; -const TOKEN = config.GITHUB_TOKEN || "Token" +const COMMITS_URL = `https://api.github.com/repos/${username}/` +const TOKEN = config.GITHUB_TOKEN || process.env.API_TOKEN const options = { - method: 'GET', + method: "GET", headers: { Authorization: `token ${TOKEN}` } @@ -32,14 +34,16 @@ const displayProfileData = (data) => {

${bio}

-

${followers} followers 路 ${following} following

+

+ + ${followers} followers 路 + ${following} following

${location}

`; } const displayRepositories = (repositories) => { - console.log(repositories); repositories.filter(repo => { let language = repo.language; const projectUrl = repo.html_url; @@ -52,12 +56,14 @@ const displayRepositories = (repositories) => { language === "HTML" ? language = `馃敶 ${language}` : language = `馃煛 ${language}`; if (repo.fork === true && repo.name !== "unit-tests") { - projects.innerHTML += ` + projectsSection.innerHTML += ` ${repo.name}${visibility}

Forked from Technigo/project-${repo.name}

${language} Updated ${numberOfDays} days ago


`; + + fetchCommits(repo) } }) } @@ -65,8 +71,19 @@ const displayRepositories = (repositories) => { fetch(USER_URL, options) .then(res => res.json()) .then(displayProfileData) + .catch(error => console.log(error)) fetch(REPOS_URL, options) .then(res => res.json()) .then(displayRepositories) + .catch(error => console.log(error)) +const fetchCommits = (repo) => { + fetch(`${COMMITS_URL}${repo.name}/commits`, options) + .then(res => res.json()) + .then(commits => { + commitsSection.innerHTML += ` +

${username}/${repo.name} ${commits.length} commits

+ ` + }) +} \ No newline at end of file diff --git a/src/style.css b/src/style.css index dfeab32d..a7b10535 100644 --- a/src/style.css +++ b/src/style.css @@ -72,7 +72,6 @@ .projects__header { margin-top: 40px; font-size: 14px; - text-align: center; } .projects__links { From 98685a972cca002dae3ade16bfa57f4a4e6b075b Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Thu, 24 Feb 2022 23:12:26 +0100 Subject: [PATCH 06/24] Add commits and repos js files --- commits.html | 42 ++++++++++++++++++ index.html | 21 +++------ src/javascript/commits.js | 29 +++++++++++++ src/javascript/index.js | 45 ++++++++++++++++++++ src/javascript/repos.js | 31 ++++++++++++++ src/javascript/script.js | 89 --------------------------------------- 6 files changed, 152 insertions(+), 105 deletions(-) create mode 100644 commits.html create mode 100644 src/javascript/commits.js create mode 100644 src/javascript/index.js create mode 100644 src/javascript/repos.js delete mode 100644 src/javascript/script.js diff --git a/commits.html b/commits.html new file mode 100644 index 00000000..9765791c --- /dev/null +++ b/commits.html @@ -0,0 +1,42 @@ + + + + + + + + GitHub Tracker + + + + + +
+
+ +
+ +
+ Repositories + Contributions +
+
+ +
+ +

Your browser does not support the canvas element.

+
+
+ +
+
+

Contribution activity

+
+ + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html index 792230a3..b73f30b3 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,6 @@ GitHub Tracker - @@ -15,14 +14,15 @@ - +
-

Repositories

+ Repositories + Contributions
@@ -63,22 +63,11 @@

Repositories


-
- -

Your browser does not support the canvas element.

-
-
- -
-
-

Contribution activity

-
-
- - + + \ No newline at end of file diff --git a/src/javascript/commits.js b/src/javascript/commits.js new file mode 100644 index 00000000..d93b1fa3 --- /dev/null +++ b/src/javascript/commits.js @@ -0,0 +1,29 @@ +const commitsSection = document.getElementById("commits"); + +const REPOS_URL = `https://api.github.com/users/${username}/repos`; +const COMMITS_URL = `https://api.github.com/repos/${username}/` + +const fetchRepo = (repositories) => { + repositories.filter(repo => { + if (repo.fork === true && repo.name !== "unit-tests") { + fetchCommits(repo) + } + }) +} + +fetch(REPOS_URL, options) + .then(res => res.json()) + .then(fetchRepo) + .catch(error => console.log(error)) + +const fetchCommits = (repo) => { + fetch(`${COMMITS_URL}${repo.name}/commits`, options) + .then(res => res.json()) + .then(commits => { + commitsSection.innerHTML += ` +

${username}/${repo.name} ${commits.length} commits

+ ` + }) + .catch(error => console.log(error)) +} + diff --git a/src/javascript/index.js b/src/javascript/index.js new file mode 100644 index 00000000..d75a26c0 --- /dev/null +++ b/src/javascript/index.js @@ -0,0 +1,45 @@ +const profileDetails = document.getElementById("aside"); + +const username = "savannah-hayes" +const USER_URL = `https://api.github.com/users/${username}`; +const TOKEN = config.GITHUB_TOKEN || process.env.API_TOKEN + +const options = { + method: "GET", + headers: { + Authorization: `token ${TOKEN}` + } +} + +const displayProfileData = (data) => { + const image = data.avatar_url; + const name = data.name; + const username = data.login; + const bio = data.bio; + const followers = data.followers; + const following = data.following; + const location = data.location; + + profileDetails.innerHTML = ` +
+ image of ${name} +
+

${name}

+

${username}

+
+
+
+

${bio}

+

+ + ${followers} followers 路 + ${following} following

+

${location}

+
+ `; +} + +fetch(USER_URL, options) + .then(res => res.json()) + .then(displayProfileData) + .catch(error => console.log(error)) \ No newline at end of file diff --git a/src/javascript/repos.js b/src/javascript/repos.js new file mode 100644 index 00000000..c1f21570 --- /dev/null +++ b/src/javascript/repos.js @@ -0,0 +1,31 @@ +const projectsSection = document.getElementById("projects"); + +const REPOS_URL = `https://api.github.com/users/${username}/repos`; + +const displayRepositories = (repositories) => { + repositories.filter(repo => { + let language = repo.language; + const projectUrl = repo.html_url; + const visibility = repo.visibility; + const oneDay = 24 * 60 * 60 * 1000; + const currentDate = new Date(); + const projectDate = new Date(repo.pushed_at); + let numberOfDays = Math.round(Math.abs((currentDate - projectDate) / oneDay)); + + language === "HTML" ? language = `馃敶 ${language}` : language = `馃煛 ${language}`; + + if (repo.fork === true && repo.name !== "unit-tests") { + projectsSection.innerHTML += ` + ${repo.name}${visibility} +

Forked from Technigo/project-${repo.name}

+

${language} Updated ${numberOfDays} days ago

+
+ `; + } + }) +} + +fetch(REPOS_URL, options) + .then(res => res.json()) + .then(displayRepositories) + .catch(error => console.log(error)) diff --git a/src/javascript/script.js b/src/javascript/script.js deleted file mode 100644 index fb2a2cfc..00000000 --- a/src/javascript/script.js +++ /dev/null @@ -1,89 +0,0 @@ -const profileDetails = document.getElementById("aside"); -const projectsSection = document.getElementById("projects"); -const commitsSection = document.getElementById("commits"); - -const username = "savannah-hayes"; -const USER_URL = `https://api.github.com/users/${username}`; -const REPOS_URL = `https://api.github.com/users/${username}/repos`; -const COMMITS_URL = `https://api.github.com/repos/${username}/` -const TOKEN = config.GITHUB_TOKEN || process.env.API_TOKEN - -const options = { - method: "GET", - headers: { - Authorization: `token ${TOKEN}` - } -} - -const displayProfileData = (data) => { - const image = data.avatar_url; - const name = data.name; - const username = data.login; - const bio = data.bio; - const followers = data.followers; - const following = data.following; - const location = data.location; - - profileDetails.innerHTML = ` -
- image of ${name} -
-

${name}

-

${username}

-
-
-
-

${bio}

-

- - ${followers} followers 路 - ${following} following

-

${location}

-
- `; -} - -const displayRepositories = (repositories) => { - repositories.filter(repo => { - let language = repo.language; - const projectUrl = repo.html_url; - const visibility = repo.visibility; - const oneDay = 24 * 60 * 60 * 1000; - const currentDate = new Date(); - const projectDate = new Date(repo.pushed_at); - let numberOfDays = Math.round(Math.abs((currentDate - projectDate) / oneDay)); - - language === "HTML" ? language = `馃敶 ${language}` : language = `馃煛 ${language}`; - - if (repo.fork === true && repo.name !== "unit-tests") { - projectsSection.innerHTML += ` - ${repo.name}${visibility} -

Forked from Technigo/project-${repo.name}

-

${language} Updated ${numberOfDays} days ago

-
- `; - - fetchCommits(repo) - } - }) -} - -fetch(USER_URL, options) - .then(res => res.json()) - .then(displayProfileData) - .catch(error => console.log(error)) - -fetch(REPOS_URL, options) - .then(res => res.json()) - .then(displayRepositories) - .catch(error => console.log(error)) - -const fetchCommits = (repo) => { - fetch(`${COMMITS_URL}${repo.name}/commits`, options) - .then(res => res.json()) - .then(commits => { - commitsSection.innerHTML += ` -

${username}/${repo.name} ${commits.length} commits

- ` - }) -} \ No newline at end of file From 2a9e66b3cba9e53ff751be185cbadf194f740ca4 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Fri, 25 Feb 2022 22:43:54 +0100 Subject: [PATCH 07/24] Display commit messages --- commits.html | 66 +++++++++---- images/book.png | Bin 0 -> 868 bytes images/box.png | Bin 0 -> 331 bytes images/github.png | Bin 0 -> 2006 bytes images/me.png | Bin 0 -> 163532 bytes images/pr.png | Bin 0 -> 562 bytes index.html | 38 ++++++-- src/javascript/chart.js | 2 +- src/javascript/commits.js | 66 ++++++++++++- src/javascript/index.js | 24 ++--- src/javascript/repos.js | 2 +- src/style.css | 121 ------------------------ src/stylesheets/commits.css | 66 +++++++++++++ src/stylesheets/repos.css | 69 ++++++++++++++ src/stylesheets/style.css | 183 ++++++++++++++++++++++++++++++++++++ 15 files changed, 469 insertions(+), 168 deletions(-) create mode 100644 images/book.png create mode 100644 images/box.png create mode 100644 images/github.png create mode 100644 images/me.png create mode 100644 images/pr.png delete mode 100644 src/style.css create mode 100644 src/stylesheets/commits.css create mode 100644 src/stylesheets/repos.css create mode 100644 src/stylesheets/style.css diff --git a/commits.html b/commits.html index 9765791c..8cfb0edb 100644 --- a/commits.html +++ b/commits.html @@ -7,36 +7,62 @@ GitHub Tracker - + + + - + +
+
+ + + +
+

GitHub Tracker

+ image of savannah hayes +
-
+
-
- -
- Repositories - Contributions
-
- -
- -

Your browser does not support the canvas element.

-
+
+ +

Your browser does not support the canvas element.

+
+
-
+
+
-

Contribution activity

+
+
+ +
+
+ + +
- - - - + + + + \ No newline at end of file diff --git a/images/book.png b/images/book.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ba3c7d1c7457ddadbfc6b438875c68586252d7 GIT binary patch literal 868 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lNlJ8B|Tjn zLn`LHz3saq%vI+2$9}26sU&OksaSfb@bJj ziwOT%ob!AU+nzbo`MK`=7QQxpa`3F!ANzccPf&@Nvi;Mih?X03d6Id>rt=CMZV-!B zK9;vpwtW@LjL69o_AND3*xGQ#gl&n~gjvTLt}q2%mY5LbkR`<&#O>jGX6u1h9UG&0 z!a*93S6a#`ehabDx^39Tn0!M-@mP+zHu_~G)Q_ACNxJ{vo2ospu`tnA(<|b{p%+uoHzL3xdF)|jphnp zOm{HFC#Z@&DV2Y8-pVyp<%K`5>4Pmr_Ntse0_c=N4d+7-UV3a!6bo!?*Ki2p7{e(uZfRr@e(YZV)@c$G3P)w)xplx`;BJaP#GHYWmnh4Kg_A>mC z-B@Ro;PU-uKxdu7gV3Abep%E_mhJD}dhu59mZAf1w|y#ezw7X%;pe8uyH=;D2l>A^ sdo<#0&m*;MrJ1*-)2eAX9Ma|{L9?d(IE)*da$eCH{pP?>x0l?Az;tCI^E{_Xrb5qLkXyNVLpeSgja;VMa#srwd?5pH@9`4@jXe26_bB7^r Xb48*b!zOoN=rDM?`njxgN@xNAuqKAf literal 0 HcmV?d00001 diff --git a/images/github.png b/images/github.png new file mode 100644 index 0000000000000000000000000000000000000000..b5cc0070e631e36a04b957a7d967d4381c458eb8 GIT binary patch literal 2006 zcmV;{2Pyc8P)bxiXE4iI8N61+$eEzS0YpSCGTNrREw z2&tt@7HP9mrF7MY0?`Vsw3WK$r4PJBAc`m@B1i~Ak@#5zDr~gLCeSG0ilmSzib4|; zAlQNY%J$4XeSlbwJu@CV;Vs{bXU@6z-0z!v&%Jl<7+A(KmSF^1%3xJhRW3zQe#XpO zh{(gtE@pNBfDmGuh{lBw1I+9vqPF(-_VJ}^d(lF?UT^kx1loX8t_@rw&;oA@RSH0FKMD{MSqcSu&|q zU0r=ZRn@Bis)@*!NsI*80Q^K%)lZ6wipEAqM<1mdAgvzp`FzfBIQ%yNzs=yOoAxnt zi`{N-XlrYmUUDJ3cI_&ZW%+Anu2>4PCVV}TB<=3(?0jj4pJb+x&*v+YW%*kG6=upW z5k3?`v~SzC&1I%=N+CX<&l!zIZvybd+vA_!dxS?-)vqfnD|1p6OesWBloJ4clwd<~ zaWS&8vY;pmgb*1sWo9Uf0=wOgb?eqaRn^2IAI{CqolX_UFh^=?Y7P)lbNtg6LLfIc z7Z)yE008v%_TtKwD`;zL0};i_#3gQw@Vq}hR&{kX_U_$_^73-1s*0+rD$LEzX-xoi z-QC^i(-z|Odh?k12>@53kjlzR9654iLHWVKK^!}F3_=KO+_(`NHf%snP7a(-Czu)2 z)6H zwq?tfTrHnoveyAvq2(YVjEsz=P0%cchlh>a-HCH07+D3#Ee&6pW`_Uw6YA^@PMs0g*SwMJ_b5m9BLQEO=ZP%nb2s;H@{ z$&jLX_uB-)aMFtaDo_Rfy{{CuP7ami3xT8i9U&B+M>AcXiJ(WccSy5nZ$ z%9WWhOA|zd)vH(Q_6iXtt#4XFbT?>ryFGJuX(B~iNlSy45Jj){%*;#%lrqEA)Rd7s ziKCVf-II+_D3k%E%n%BNVw+42ByrRd@=C)7BErPP1jfe37D3M(0)YS~CMJxEB)v6i z&04zq4@r{H)zy_5yEM?z(P7jZAfiB`ElG$ZN#E%OkR%DMt*x(`l$0PpKYvjohK7c4^ypDszI+*yWPFT3L|+C1f&Z8iQdU;> zUrCaF$IK39hRfx`*|TTicDpe(HHGKTpTlak;@PujxO(*}{C+=XW@ccw+u?LNQ<70t z6;Gc&#hp8MaPs6yG&MCL5D28K2jG>%;rMiTcsOb38@;ptg_*wqfM_&|ty{O^;K73! z85zOFix<(=)wSTTK?ng=RpD~EaPHhW-IX~KiJ-2o4x^)^Afg3BQ}6ID?)t0l?(Q$O z;_42@O`A5|W9E+lEV1`(M#7e0Ic{{2sk;-&no zuwuoE8xDtK8-Nlb!sO&6g25nm?%au-oE(&tlz@m(QBeVh!vTlGVM@sL>(>zs2F(nu zZ-c?$Z$hC^(h+1lQce>+Jv~t&#IKq8F#uStR@}UK6Ne8U#>0mX5e|n@US1AnPBs6h z4I=83W%*ZwgM;CeWz7byuCC4}qE=@9Ie=JRFf*)HE27aTJRXnfRlmNz9s>gdMnmg6 zS(a{J|$g&LJZBH#B{ysG|wKJWMrD?T(>C&YL zfcmPcs(%7#0}*Z9qUj!q$L-sf3C#U}tA%j}YQd zvMhhv-roMNv9YmerhJz44+FtqaD@<}(q^;$RFb4(i^WnPNm4!l2q8kMss@D+Bauj? ooru0EC@7d*%J!GBjAiKK|G5(A?c4VrUjP6A07*qoM6N<$f~sfDTmS$7 literal 0 HcmV?d00001 diff --git a/images/me.png b/images/me.png new file mode 100644 index 0000000000000000000000000000000000000000..defd00c1056a94a35825b175f272f5d4eaad51fe GIT binary patch literal 163532 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

!~0Y~ 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

W+1mQb9~_$; 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 - + + - -

-
- + +
+
+ + +
- +

GitHub Tracker

+ image of savannah hayes +
+
+
- Repositories - Contributions +
@@ -47,7 +57,6 @@
  • All
  • JavaScript
  • HTML
  • -
  • CSS
  • +
    +
    + + +
    + diff --git a/src/javascript/chart.js b/src/javascript/chart.js index e4865204..644fe660 100644 --- a/src/javascript/chart.js +++ b/src/javascript/chart.js @@ -9,7 +9,7 @@ const data = { labels: labels, datasets: [{ label: 'My First Dataset', - data: [7, 19], + data: [6, 13], backgroundColor: [ 'rgb(142, 85, 255)', 'rgb(142, 85, 255, 0.3)', diff --git a/src/javascript/commits.js b/src/javascript/commits.js index d93b1fa3..67f54fe0 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -1,7 +1,7 @@ const commitsSection = document.getElementById("commits"); const REPOS_URL = `https://api.github.com/users/${username}/repos`; -const COMMITS_URL = `https://api.github.com/repos/${username}/` +const COMMITS_URL = `https://api.github.com/repos/${username}/`; const fetchRepo = (repositories) => { repositories.filter(repo => { @@ -21,9 +21,67 @@ const fetchCommits = (repo) => { .then(res => res.json()) .then(commits => { commitsSection.innerHTML += ` -

    ${username}/${repo.name} ${commits.length} commits

    +

    ${username}/${repo.name} + +

    + ` + + for (let i = 0; i < commits.length; i++) { + const commitMessages = commits[i].commit.message; + commitsSection.innerHTML += ` +

    - ${commitMessages}

    ` + } + + const chatbot = document.getElementById("chatbot"); + const weatherApp = document.getElementById("weather-app"); + const newsSite = document.getElementById("news-site"); + const guessWho = document.getElementById("guess-who"); + const businessSite = document.getElementById("business-site"); + const githubTracker = document.getElementById("github-tracker"); + + const chatbotItems = document.querySelectorAll(".chatbot"); + const weatherItems = document.querySelectorAll(".weather-app"); + const newsSiteItems = document.querySelectorAll(".news-site"); + const guessWhoItems = document.querySelectorAll(".guess-who"); + const businessItems = document.querySelectorAll(".business-site"); + const githubTrackerItems = document.querySelectorAll(".github-tracker"); + + chatbot.addEventListener("click", () => { + chatbotItems.forEach(item => { + item.classList.toggle("active"); + }) + }) + + weatherApp.addEventListener("click", () => { + weatherItems.forEach(item => { + item.classList.toggle("active"); + }) + }) + + newsSite.addEventListener("click", () => { + newsSiteItems.forEach(item => { + item.classList.toggle("active"); + }) + }) + + guessWho.addEventListener("click", () => { + guessWhoItems.forEach(item => { + item.classList.toggle("active"); + }) + }) + + businessSite.addEventListener("click", () => { + businessItems.forEach(item => { + item.classList.toggle("active"); + }) + }) + + githubTracker.addEventListener("click", () => { + githubTrackerItems.forEach(item => { + item.classList.toggle("active"); + }) + }) }) .catch(error => console.log(error)) -} - +} \ No newline at end of file diff --git a/src/javascript/index.js b/src/javascript/index.js index d75a26c0..4721700f 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -21,20 +21,20 @@ const displayProfileData = (data) => { const location = data.location; profileDetails.innerHTML = ` -
    - image of ${name} -
    -

    ${name}

    -

    ${username}

    +
    + image of ${name} +
    +

    ${name}

    +

    ${username}

    -
    -

    ${bio}

    -

    - - ${followers} followers 路 - ${following} following

    -

    ${location}

    +
    +

    ${bio}

    +

    + + ${followers} followers 路 + ${following} following

    +

    ${location}

    `; } diff --git a/src/javascript/repos.js b/src/javascript/repos.js index c1f21570..0971f28c 100644 --- a/src/javascript/repos.js +++ b/src/javascript/repos.js @@ -10,7 +10,7 @@ const displayRepositories = (repositories) => { const oneDay = 24 * 60 * 60 * 1000; const currentDate = new Date(); const projectDate = new Date(repo.pushed_at); - let numberOfDays = Math.round(Math.abs((currentDate - projectDate) / oneDay)); + const numberOfDays = Math.round(Math.abs((currentDate - projectDate) / oneDay)); language === "HTML" ? language = `馃敶 ${language}` : language = `馃煛 ${language}`; diff --git a/src/style.css b/src/style.css deleted file mode 100644 index a7b10535..00000000 --- a/src/style.css +++ /dev/null @@ -1,121 +0,0 @@ -:root { - --fw-bold: 600; - --clr-light: rgb(87, 87, 87);; - --clr-dark: #000; -} - -.body-wrapper { - display: flex; - flex-direction: column; - padding: 20px; -} - -.header { - display: flex; -} - -.header__text { - display: flex; - flex-direction: column; - justify-content: center; - margin-left: 15px; -} - -.header__title { - margin-bottom: 0; -} - -.header__sub-title { - margin-top: 0; - color: rgb(87, 87, 87); -} - -.header__image { - border: 1px solid var(--clr-dark); - border-radius: 50%; - width: 150px; -} - -.header-content__paragraph { - margin: 0; -} - -.header-content__paragraph--top { - margin: 30px 0 15px 0; -} - -.header-content__paragraph--grey { - color: var(--clr-light); -} - -.header-content__paragraph--bold { - color: var(--clr-dark); - font-weight: var(--fw-bold); -} - -.dropdown { - margin: 15px 0 20px 0; -} - -.btn-secondary { - background-color: #f4f4f4; - color: var(--clr-dark); -} - -.icons { - float: left; - width: 16px; - margin: 3px 8px 0 0; - position: relative; -} - -.projects__header { - margin-top: 40px; - font-size: 14px; -} - -.projects__links { - text-decoration: none; - font-weight: var(--fw-bold); - font-size: 20px; -} - -.projects__links:hover { - text-decoration: underline; -} - -.projects__paragraphs { - font-size: 12px; -} - -.projects__links--right { - font-size: 14px; - border-radius: 50px; - border: 1px solid grey; - padding: 1px 5px; - margin-left: 10px; - text-transform: capitalize; -} - -.projects__paragraphs--right { - margin-left: 15px; -} - -.chart { - margin-top: 20px; -} - -hr { - margin: 8px 0 22px 0; -} - -@media (min-width: 1024px) { - .body-wrapper { - display: flex; - flex-direction: row; - } - - form { - display: flex; - } -} diff --git a/src/stylesheets/commits.css b/src/stylesheets/commits.css new file mode 100644 index 00000000..2abcefa2 --- /dev/null +++ b/src/stylesheets/commits.css @@ -0,0 +1,66 @@ +.chart-wrapper { + width: 300px; + margin: 0 auto; +} + +.commits__text { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.chatbot, +.weather-app, +.business-site, +.github-tracker, +.news-site, +.guess-who { + display: none; +} + +.active + .chatbot, +.active + .weather-app, +.active + .business-site, +.active + .github-tracker, +.active + .news-site, +.active + .guess-who { + display: block; + line-height: 20px; +} + +.btn { + border: 1px solid black; + border-radius: 50px; + font-size: 10px; +} + +@media (min-width: 768px) { + .body-wrapper { + display: flex; + } + + .commits { + width: 100%; + margin-left: 20px; + } + + .commits__text { + display: flex; + justify-content: space-between; + } + + .aside-chart { + width: 60%; + border-right: 1px solid var(--clr-light); + } + + .aside { + padding: 30px; + } +} + +@media (min-width: 1024px) { + .commits { + margin-left: 50px; + } +} \ No newline at end of file diff --git a/src/stylesheets/repos.css b/src/stylesheets/repos.css new file mode 100644 index 00000000..5ef1cb5c --- /dev/null +++ b/src/stylesheets/repos.css @@ -0,0 +1,69 @@ +.body-wrapper { + display: flex; + flex-direction: column; +} + +.dropdown { + margin: 15px 0 20px 0; +} + +.btn-secondary { + background-color: #f4f4f4; + color: var(--clr-dark); +} + +.projects { + width: 100%; +} + +.projects__links { + font-weight: var(--fw-bold); + font-size: 20px; +} + +.projects__links:hover { + text-decoration: underline; +} + +.projects__paragraphs { + font-size: 12px; +} + +.projects__links--right { + font-size: 14px; + border-radius: 50px; + border: 1px solid grey; + padding: 1px 5px; + margin-left: 10px; + text-transform: capitalize; +} + +.projects__paragraphs--right { + margin-left: 15px; +} + +@media (min-width: 1024px) { + .body-wrapper { + display: flex; + flex-direction: row; + padding: 50px; + } + + .dropdown { + margin: 5px 0 20px 25px; + width: 450px; + } + + .btn { + margin-right: 5px; + } + + form { + display: flex; + } + + .aside { + width: 60%; + padding: 30px; + } +} \ No newline at end of file diff --git a/src/stylesheets/style.css b/src/stylesheets/style.css new file mode 100644 index 00000000..aa46ffc0 --- /dev/null +++ b/src/stylesheets/style.css @@ -0,0 +1,183 @@ +:root { + --fw-bold: 600; + --clr-light: rgb(87, 87, 87);; + --clr-dark: #000; +} + +h1 { + font-size: 20px; +} + +.body-wrapper { + padding: 20px; +} + +.header { + background-color: #24292E; + color: white; + display: flex; + height: 60px; + justify-content: space-between; + align-items: center; +} + +.header__image { + background-color: white; + width: 32px; + height: 30px; + border-radius: 50%; + margin-right: 30px; +} + +.hamburger-wrapper { + margin-left: 30px; +} + +.hamburger { + background-color: white; + display: block; + border-radius: 10px; + margin: 5px; + width: 30px; + height: 3px; +} + +.aside__header { + display: flex; +} + +.aside__text { + display: flex; + flex-direction: column; + justify-content: center; + margin-left: 15px; +} + +.aside__title { + margin-bottom: 0; +} + +.aside__sub-title { + margin-top: 0; + color: rgb(87, 87, 87); +} + +.aside__image { + border: 1px solid var(--clr-dark); + border-radius: 50%; + width: 150px; +} + +.aside-content__paragraph { + margin: 0; +} + +.aside-content__paragraph--top { + margin: 30px 0 15px 0; +} + +.aside-content__paragraph--grey { + color: var(--clr-light); +} + +.aside-content__paragraph--bold { + color: var(--clr-dark); + font-weight: var(--fw-bold); +} + +.icons { + width: 16px; +} + +.icons-left { + float: left; + position: relative; + margin: 3px 8px 0 0; +} + +.links { + color: var(--clr-dark); + margin-left: 15px; +} + +.links--hide { + display: none; +} + +.bold-link { + font-weight: 600; + border-bottom: 3px solid orange; + padding: 9px; +} + +.html-links { + text-align: center; + margin-top: 40px; + font-size: 14px; +} + +hr { + margin: 8px 0 22px 0; +} + +a { + text-decoration: none; +} + +.footer { + margin: 30px 0; +} + +.footer-flex { + display: flex; + font-size: 10px; + align-items: center; + list-style: none; +} + +.footer__link { + margin-right: 10px; + color: #0E58CA; +} + +.footer__link--hide { + display: none; +} + +.footer__icon { + margin: 0 5px 0 10px; + width: 20px; +} + +@media (min-width: 560px) { + .links { + font-size: 15px; + } + + .footer__text { + margin-right: 30px; + } + + .footer-flex { + font-size: 14px; + } + + .footer__link { + margin-right: 50px; + } + + .footer__link--hide { + display: block; + } + + .footer__icon { + margin: 0 10px 0 20px; + } + +} + +@media (min-width: 1024px) { + .links--hide { + display: inline-block; + } +} From 0e6d6f04a2ce4dfa2d9e89b690c0d8e564bc8091 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sat, 26 Feb 2022 11:07:46 +0100 Subject: [PATCH 08/24] Add progress bar and style commit messages --- src/javascript/commits.js | 97 ++++++++++++++++++++++++++++++++++--- src/javascript/index.js | 4 +- src/stylesheets/commits.css | 48 ++++++++++++++++-- src/stylesheets/style.css | 2 +- 4 files changed, 137 insertions(+), 14 deletions(-) diff --git a/src/javascript/commits.js b/src/javascript/commits.js index 67f54fe0..064e9677 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -21,16 +21,25 @@ const fetchCommits = (repo) => { .then(res => res.json()) .then(commits => { commitsSection.innerHTML += ` -

    ${username}/${repo.name} - -

    - ` +
    + +
    +
    +
    + ` for (let i = 0; i < commits.length; i++) { const commitMessages = commits[i].commit.message; + const author = commits[i].commit.author.name; + const authorPicture = commits[i].author.avatar_url; + const date = new Date(commits[i].commit.committer.date); + const formattedDate = date.toDateString().split(' ').slice(1).join(' '); commitsSection.innerHTML += ` -

    - ${commitMessages}

    - ` +
    +

    ${commitMessages}

    +

    ${author} ${author} committed on ${formattedDate}

    +
    + ` } const chatbot = document.getElementById("chatbot"); @@ -84,4 +93,78 @@ const fetchCommits = (repo) => { }) }) .catch(error => console.log(error)) -} \ No newline at end of file +} + + + // .then(commits => { + // commitsSection.innerHTML += ` + //
    + // + //
    + //
    + //
    + //
    + // + //
    + //
    + // ` + + // for (let i = 0; i < commits.length; i++) { + // const commitMessages = commits[i].commit.message; + // commitsSection.innerHTML += ` + //

    - ${commitMessages}

    + // ` + // } + + // const chatbot = document.getElementById("chatbot"); + // const weatherApp = document.getElementById("weather-app"); + // const newsSite = document.getElementById("news-site"); + // const guessWho = document.getElementById("guess-who"); + // const businessSite = document.getElementById("business-site"); + // const githubTracker = document.getElementById("github-tracker"); + + // const chatbotItems = document.querySelectorAll(".chatbot"); + // const weatherItems = document.querySelectorAll(".weather-app"); + // const newsSiteItems = document.querySelectorAll(".news-site"); + // const guessWhoItems = document.querySelectorAll(".guess-who"); + // const businessItems = document.querySelectorAll(".business-site"); + // const githubTrackerItems = document.querySelectorAll(".github-tracker"); + + // chatbot.addEventListener("click", () => { + // chatbotItems.forEach(item => { + // item.classList.toggle("active"); + // }) + // }) + + // weatherApp.addEventListener("click", () => { + // weatherItems.forEach(item => { + // item.classList.toggle("active"); + // }) + // }) + + // newsSite.addEventListener("click", () => { + // newsSiteItems.forEach(item => { + // item.classList.toggle("active"); + // }) + // }) + + // guessWho.addEventListener("click", () => { + // guessWhoItems.forEach(item => { + // item.classList.toggle("active"); + // }) + // }) + + // businessSite.addEventListener("click", () => { + // businessItems.forEach(item => { + // item.classList.toggle("active"); + // }) + // }) + + // githubTracker.addEventListener("click", () => { + // githubTrackerItems.forEach(item => { + // item.classList.toggle("active"); + // }) + // }) + // }) \ No newline at end of file diff --git a/src/javascript/index.js b/src/javascript/index.js index 4721700f..9b89eae7 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -2,12 +2,12 @@ const profileDetails = document.getElementById("aside"); const username = "savannah-hayes" const USER_URL = `https://api.github.com/users/${username}`; -const TOKEN = config.GITHUB_TOKEN || process.env.API_TOKEN +const API_TOKEN = TOKEN || process.env.API_KEY const options = { method: "GET", headers: { - Authorization: `token ${TOKEN}` + Authorization: `token ${API_TOKEN}` } } diff --git a/src/stylesheets/commits.css b/src/stylesheets/commits.css index 2abcefa2..32776dd0 100644 --- a/src/stylesheets/commits.css +++ b/src/stylesheets/commits.css @@ -7,6 +7,29 @@ display: flex; justify-content: space-between; flex-wrap: wrap; + margin-top: 20px; +} + +.btn { + border: 1px solid black; + border-radius: 50px; + font-size: 10px; +} + +.progress { + width: 150px; + display: none; +} + +#messageWrapper { + border: 1px solid var(--clr-light); + border-radius: 5px; + margin: 10px 0; + padding: 5px; +} + +#messageWrapper:hover { + background-color: rgb(223, 223, 223); } .chatbot, @@ -28,10 +51,24 @@ line-height: 20px; } -.btn { - border: 1px solid black; - border-radius: 50px; - font-size: 10px; +.text { + margin-bottom: 0; + font-size: 17px; + font-weight: var(--fw-bold); +} + +.subtext { + margin-bottom: 5px; + color: var(--clr-light); +} + +.circle { + border-radius: 50%; +} + +.bold-text { + color: black; + font-weight: var(--fw-bold); } @media (min-width: 768px) { @@ -63,4 +100,7 @@ .commits { margin-left: 50px; } + .progress { + display: flex; + } } \ No newline at end of file diff --git a/src/stylesheets/style.css b/src/stylesheets/style.css index aa46ffc0..f4c0b680 100644 --- a/src/stylesheets/style.css +++ b/src/stylesheets/style.css @@ -105,7 +105,7 @@ h1 { } .bold-link { - font-weight: 600; + font-weight: var(--fw-bold); border-bottom: 3px solid orange; padding: 9px; } From cd8a1632a65f5a1f0c42918470fee976537930bd Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sat, 26 Feb 2022 13:45:13 +0100 Subject: [PATCH 09/24] Update commit styling --- src/stylesheets/commits.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stylesheets/commits.css b/src/stylesheets/commits.css index 32776dd0..7f507fd9 100644 --- a/src/stylesheets/commits.css +++ b/src/stylesheets/commits.css @@ -22,14 +22,14 @@ } #messageWrapper { - border: 1px solid var(--clr-light); + border: 1px solid rgb(223, 223, 223); border-radius: 5px; margin: 10px 0; padding: 5px; } #messageWrapper:hover { - background-color: rgb(223, 223, 223); + background-color: rgb(233, 233, 233); } .chatbot, From 5392b156813e05f27a9b46c7add96dba49ad41f6 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sat, 26 Feb 2022 16:57:20 +0100 Subject: [PATCH 10/24] Update README.md --- README.md | 19 +++++++--- src/javascript/commits.js | 78 ++------------------------------------- 2 files changed, 16 insertions(+), 81 deletions(-) diff --git a/README.md b/README.md index 1613a3b0..900e0229 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,20 @@ # GitHub Tracker -Replace this readme with your own information about your project. - -Start by briefly describing the assignment in a sentence or two. Keep it short and to the point. +This project was built to track all of the repositories that I have created duringmy time at Technigo. The main +purpose of this project is to display information about the projects that I have built. ## The problem -Describe how you approached to problem, and what tools and techniques you used to solve it. How did you plan? What technologies did you use? If you had more time, what would be next? +I started off this project by fetching all of my repositories and data from the GitHub API. Once I had all the data +I needed I dispayed it on the page. Then I styled the page similar to the GitHub page layout, with the mind set of +mobile first. + +If I had more time I would add a page for my pull requests and add funtionalities to the buttons on the page to be +able to sort my repositories based off of language, type, and so on... Lastly, I would want to add JavaScript to +the input field so a user can search for a specific repository. + +## Demo + +https://gallant-ardinghelli-8ae929.netlify.app/ -## View it live -Every project should be deployed somewhere. Be sure to include the link to the deployed project so that the viewer can click around and see what it's all about. diff --git a/src/javascript/commits.js b/src/javascript/commits.js index 064e9677..e0629f3e 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -42,6 +42,8 @@ const fetchCommits = (repo) => { ` } + + const chatbot = document.getElementById("chatbot"); const weatherApp = document.getElementById("weather-app"); const newsSite = document.getElementById("news-site"); @@ -93,78 +95,4 @@ const fetchCommits = (repo) => { }) }) .catch(error => console.log(error)) -} - - - // .then(commits => { - // commitsSection.innerHTML += ` - //
    - // - //
    - //
    - //
    - //
    - // - //
    - //
    - // ` - - // for (let i = 0; i < commits.length; i++) { - // const commitMessages = commits[i].commit.message; - // commitsSection.innerHTML += ` - //

    - ${commitMessages}

    - // ` - // } - - // const chatbot = document.getElementById("chatbot"); - // const weatherApp = document.getElementById("weather-app"); - // const newsSite = document.getElementById("news-site"); - // const guessWho = document.getElementById("guess-who"); - // const businessSite = document.getElementById("business-site"); - // const githubTracker = document.getElementById("github-tracker"); - - // const chatbotItems = document.querySelectorAll(".chatbot"); - // const weatherItems = document.querySelectorAll(".weather-app"); - // const newsSiteItems = document.querySelectorAll(".news-site"); - // const guessWhoItems = document.querySelectorAll(".guess-who"); - // const businessItems = document.querySelectorAll(".business-site"); - // const githubTrackerItems = document.querySelectorAll(".github-tracker"); - - // chatbot.addEventListener("click", () => { - // chatbotItems.forEach(item => { - // item.classList.toggle("active"); - // }) - // }) - - // weatherApp.addEventListener("click", () => { - // weatherItems.forEach(item => { - // item.classList.toggle("active"); - // }) - // }) - - // newsSite.addEventListener("click", () => { - // newsSiteItems.forEach(item => { - // item.classList.toggle("active"); - // }) - // }) - - // guessWho.addEventListener("click", () => { - // guessWhoItems.forEach(item => { - // item.classList.toggle("active"); - // }) - // }) - - // businessSite.addEventListener("click", () => { - // businessItems.forEach(item => { - // item.classList.toggle("active"); - // }) - // }) - - // githubTracker.addEventListener("click", () => { - // githubTrackerItems.forEach(item => { - // item.classList.toggle("active"); - // }) - // }) - // }) \ No newline at end of file +} \ No newline at end of file From f42ab4cc1081d58408fd1c19e728643f0b42050b Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sat, 26 Feb 2022 19:32:39 +0100 Subject: [PATCH 11/24] Add branch location --- README.md | 4 +- images/fork.png | Bin 0 -> 343 bytes index.html | 1 - src/javascript/commits.js | 87 +++++++++++++++--------------------- src/javascript/repos.js | 4 +- src/stylesheets/commits.css | 11 +++++ src/stylesheets/repos.css | 4 ++ 7 files changed, 55 insertions(+), 56 deletions(-) create mode 100644 images/fork.png diff --git a/README.md b/README.md index 900e0229..fb05edf5 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # GitHub Tracker -This project was built to track all of the repositories that I have created duringmy time at Technigo. The main +This project was built to track all of the repositories that I have created during my time at Technigo. The main purpose of this project is to display information about the projects that I have built. -## The problem +## The project I started off this project by fetching all of my repositories and data from the GitHub API. Once I had all the data I needed I dispayed it on the page. Then I styled the page similar to the GitHub page layout, with the mind set of diff --git a/images/fork.png b/images/fork.png new file mode 100644 index 0000000000000000000000000000000000000000..22379f993a493070cd5de551d4ba6429b354ba68 GIT binary patch literal 343 zcmV-d0jU0oP)s)MhgBA5?x z6uyhLzCmQ-D71T#zPj>=FZ*HPUyA+uG~&BX^fiXW p3tbhLeFE|TDew}KcY3jZTc3F^VdW-MvDW|q002ovPDHLkV1jj&mDKGitHub Tracker
    diff --git a/src/javascript/commits.js b/src/javascript/commits.js index e0629f3e..0d77a400 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -37,62 +37,45 @@ const fetchCommits = (repo) => { commitsSection.innerHTML += `

    ${commitMessages}

    -

    ${author} ${author} committed on ${formattedDate}

    +

    ${author} + ${author} committed on ${formattedDate}

    ` } - - - const chatbot = document.getElementById("chatbot"); - const weatherApp = document.getElementById("weather-app"); - const newsSite = document.getElementById("news-site"); - const guessWho = document.getElementById("guess-who"); - const businessSite = document.getElementById("business-site"); - const githubTracker = document.getElementById("github-tracker"); - - const chatbotItems = document.querySelectorAll(".chatbot"); - const weatherItems = document.querySelectorAll(".weather-app"); - const newsSiteItems = document.querySelectorAll(".news-site"); - const guessWhoItems = document.querySelectorAll(".guess-who"); - const businessItems = document.querySelectorAll(".business-site"); - const githubTrackerItems = document.querySelectorAll(".github-tracker"); - - chatbot.addEventListener("click", () => { - chatbotItems.forEach(item => { - item.classList.toggle("active"); - }) - }) - - weatherApp.addEventListener("click", () => { - weatherItems.forEach(item => { - item.classList.toggle("active"); - }) - }) - - newsSite.addEventListener("click", () => { - newsSiteItems.forEach(item => { - item.classList.toggle("active"); - }) - }) - - guessWho.addEventListener("click", () => { - guessWhoItems.forEach(item => { - item.classList.toggle("active"); - }) - }) - - businessSite.addEventListener("click", () => { - businessItems.forEach(item => { - item.classList.toggle("active"); - }) - }) - - githubTracker.addEventListener("click", () => { - githubTrackerItems.forEach(item => { - item.classList.toggle("active"); - }) - }) + document.addEventListener("click", function (e) { + if (e.target && e.target.id == "chatbot") { + const chatbotItems = document.querySelectorAll(`.chatbot`); + chatbotItems.forEach(item => { + item.classList.toggle("active"); + }) + } else if (e.target && e.target.id == "weather-app") { + const weatherItems = document.querySelectorAll(`.weather-app`); + weatherItems.forEach(item => { + item.classList.toggle("active"); + }) + } else if (e.target && e.target.id == "news-site") { + const newsSiteItems = document.querySelectorAll(`.news-site`); + newsSiteItems.forEach(item => { + item.classList.toggle("active"); + }) + } else if (e.target && e.target.id == "guess-who") { + const guessWhoItems = document.querySelectorAll(`.guess-who`); + guessWhoItems.forEach(item => { + item.classList.toggle("active"); + }) + } else if (e.target && e.target.id == "business-site") { + const businessItems = document.querySelectorAll(`.business-site`); + businessItems.forEach(item => { + item.classList.toggle("active"); + }) + } else if (e.target && e.target.id == "github-tracker") { + const githubTrackerItems = document.querySelectorAll(`.github-tracker`); + githubTrackerItems.forEach(item => { + item.classList.toggle("active"); + }) + } + }); }) .catch(error => console.log(error)) } \ No newline at end of file diff --git a/src/javascript/repos.js b/src/javascript/repos.js index 0971f28c..8d4c102b 100644 --- a/src/javascript/repos.js +++ b/src/javascript/repos.js @@ -18,7 +18,9 @@ const displayRepositories = (repositories) => { projectsSection.innerHTML += ` ${repo.name}${visibility}

    Forked from Technigo/project-${repo.name}

    -

    ${language} Updated ${numberOfDays} days ago

    +

    ${language} + Branch ${repo.default_branch} + Updated ${numberOfDays} days ago


    `; } diff --git a/src/stylesheets/commits.css b/src/stylesheets/commits.css index 7f507fd9..8090588a 100644 --- a/src/stylesheets/commits.css +++ b/src/stylesheets/commits.css @@ -71,6 +71,17 @@ font-weight: var(--fw-bold); } +.hide-text { + display: none; +} + +@media (min-width: 560px) { + .hide-text { + margin-left: 5px; + display: inline; + } +} + @media (min-width: 768px) { .body-wrapper { display: flex; diff --git a/src/stylesheets/repos.css b/src/stylesheets/repos.css index 5ef1cb5c..b843e945 100644 --- a/src/stylesheets/repos.css +++ b/src/stylesheets/repos.css @@ -42,6 +42,10 @@ margin-left: 15px; } +.small-icon { + width: 13px; +} + @media (min-width: 1024px) { .body-wrapper { display: flex; From 3ad94e55b593fe76793a686d98f38ea7b20abe68 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sun, 27 Feb 2022 10:09:06 +0100 Subject: [PATCH 12/24] Refactor commits file --- src/javascript/commits.js | 99 +++++++++++++++---------------------- src/javascript/index.js | 16 +++--- src/stylesheets/commits.css | 4 +- src/stylesheets/style.css | 11 +++-- 4 files changed, 55 insertions(+), 75 deletions(-) diff --git a/src/javascript/commits.js b/src/javascript/commits.js index 0d77a400..2a0acc46 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -3,7 +3,7 @@ const commitsSection = document.getElementById("commits"); const REPOS_URL = `https://api.github.com/users/${username}/repos`; const COMMITS_URL = `https://api.github.com/repos/${username}/`; -const fetchRepo = (repositories) => { +const fetchRepositories = (repositories) => { repositories.filter(repo => { if (repo.fork === true && repo.name !== "unit-tests") { fetchCommits(repo) @@ -11,71 +11,50 @@ const fetchRepo = (repositories) => { }) } +const fetchCommitMessages = (commits, repository) => { + const repositoryName = repository.name; + document.addEventListener("click", function (e) { + if (e.target && e.target.id == repositoryName) { + const repoClassname = `.${repository.name}` + document.querySelectorAll(repoClassname).forEach(name => { + name.classList.toggle("active"); + }) + } + }); + + commitsSection.innerHTML += ` +
    + +
    +
    +
    + ` + + for (let i = 0; i < commits.length; i++) { + const commitMessages = commits[i].commit.message; + const author = commits[i].commit.author.name; + const authorPicture = commits[i].author.avatar_url; + const date = new Date(commits[i].commit.committer.date); + const formattedDate = date.toDateString().split(' ').slice(1).join(' '); + + commitsSection.innerHTML += ` +
    +

    ${commitMessages}

    +

    ${author} + ${author} committed on ${formattedDate}

    +
    + ` + } +} + fetch(REPOS_URL, options) .then(res => res.json()) - .then(fetchRepo) + .then(fetchRepositories) .catch(error => console.log(error)) const fetchCommits = (repo) => { fetch(`${COMMITS_URL}${repo.name}/commits`, options) .then(res => res.json()) - .then(commits => { - commitsSection.innerHTML += ` -
    - -
    -
    -
    - ` - - for (let i = 0; i < commits.length; i++) { - const commitMessages = commits[i].commit.message; - const author = commits[i].commit.author.name; - const authorPicture = commits[i].author.avatar_url; - const date = new Date(commits[i].commit.committer.date); - const formattedDate = date.toDateString().split(' ').slice(1).join(' '); - commitsSection.innerHTML += ` -
    -

    ${commitMessages}

    -

    ${author} - ${author} committed on ${formattedDate}

    -
    - ` - } - - document.addEventListener("click", function (e) { - if (e.target && e.target.id == "chatbot") { - const chatbotItems = document.querySelectorAll(`.chatbot`); - chatbotItems.forEach(item => { - item.classList.toggle("active"); - }) - } else if (e.target && e.target.id == "weather-app") { - const weatherItems = document.querySelectorAll(`.weather-app`); - weatherItems.forEach(item => { - item.classList.toggle("active"); - }) - } else if (e.target && e.target.id == "news-site") { - const newsSiteItems = document.querySelectorAll(`.news-site`); - newsSiteItems.forEach(item => { - item.classList.toggle("active"); - }) - } else if (e.target && e.target.id == "guess-who") { - const guessWhoItems = document.querySelectorAll(`.guess-who`); - guessWhoItems.forEach(item => { - item.classList.toggle("active"); - }) - } else if (e.target && e.target.id == "business-site") { - const businessItems = document.querySelectorAll(`.business-site`); - businessItems.forEach(item => { - item.classList.toggle("active"); - }) - } else if (e.target && e.target.id == "github-tracker") { - const githubTrackerItems = document.querySelectorAll(`.github-tracker`); - githubTrackerItems.forEach(item => { - item.classList.toggle("active"); - }) - } - }); - }) + .then(commits => fetchCommitMessages(commits, repo)) .catch(error => console.log(error)) } \ No newline at end of file diff --git a/src/javascript/index.js b/src/javascript/index.js index 9b89eae7..e2e5c1ee 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -11,14 +11,14 @@ const options = { } } -const displayProfileData = (data) => { - const image = data.avatar_url; - const name = data.name; - const username = data.login; - const bio = data.bio; - const followers = data.followers; - const following = data.following; - const location = data.location; +const displayProfileData = (profileData) => { + const image = profileData.avatar_url; + const name = profileData.name; + const username = profileData.login; + const bio = profileData.bio; + const followers = profileData.followers; + const following = profileData.following; + const location = profileData.location; profileDetails.innerHTML = `
    diff --git a/src/stylesheets/commits.css b/src/stylesheets/commits.css index 8090588a..22adb891 100644 --- a/src/stylesheets/commits.css +++ b/src/stylesheets/commits.css @@ -59,7 +59,7 @@ .subtext { margin-bottom: 5px; - color: var(--clr-light); + color: var(--clr-accent); } .circle { @@ -99,7 +99,7 @@ .aside-chart { width: 60%; - border-right: 1px solid var(--clr-light); + border-right: 1px solid var(--clr-accent); } .aside { diff --git a/src/stylesheets/style.css b/src/stylesheets/style.css index f4c0b680..b5cbc5f6 100644 --- a/src/stylesheets/style.css +++ b/src/stylesheets/style.css @@ -1,7 +1,8 @@ :root { --fw-bold: 600; - --clr-light: rgb(87, 87, 87);; --clr-dark: #000; + --clr-light: #fff; + --clr-accent: rgb(87, 87, 87);; } h1 { @@ -14,7 +15,7 @@ h1 { .header { background-color: #24292E; - color: white; + color: var(--clr-light); display: flex; height: 60px; justify-content: space-between; @@ -22,7 +23,7 @@ h1 { } .header__image { - background-color: white; + background-color: var(--clr-light); width: 32px; height: 30px; border-radius: 50%; @@ -34,7 +35,7 @@ h1 { } .hamburger { - background-color: white; + background-color: var(--clr-light); display: block; border-radius: 10px; margin: 5px; @@ -77,7 +78,7 @@ h1 { } .aside-content__paragraph--grey { - color: var(--clr-light); + color: var(--clr-accent); } .aside-content__paragraph--bold { From 071a16d7e02f5160f910136679ea9f1ec4f2c4ce Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sun, 27 Feb 2022 10:44:04 +0100 Subject: [PATCH 13/24] Refactor html files --- commits.html | 29 ++----------------- index.html | 61 +++------------------------------------ src/javascript/commits.js | 2 +- src/javascript/index.js | 33 +++++++++++++++++++++ src/javascript/repos.js | 34 +++++++++++++++++++++- 5 files changed, 74 insertions(+), 85 deletions(-) diff --git a/commits.html b/commits.html index 8cfb0edb..567da064 100644 --- a/commits.html +++ b/commits.html @@ -14,15 +14,7 @@ -
    -
    - - - -
    -

    GitHub Tracker

    - image of savannah hayes -
    +
    @@ -35,29 +27,14 @@

    GitHub Tracker

    - +

    -
    - - -
    +
    diff --git a/index.html b/index.html index c4a3bef9..c5bcc8fc 100644 --- a/index.html +++ b/index.html @@ -16,73 +16,20 @@ -
    -
    - - - -
    -

    GitHub Tracker

    - image of savannah hayes -
    +
    - +
    -
    -
    - -
    - -
    +


    -
    - - -
    +
    diff --git a/src/javascript/commits.js b/src/javascript/commits.js index 2a0acc46..d9976233 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -24,7 +24,7 @@ const fetchCommitMessages = (commits, repository) => { commitsSection.innerHTML += ` diff --git a/src/javascript/index.js b/src/javascript/index.js index e2e5c1ee..d6775df0 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -1,4 +1,7 @@ const profileDetails = document.getElementById("aside"); +const header = document.getElementById("header"); +const htmlLinks = document.getElementById("htmlLinks"); +const footer = document.getElementById("footer"); const username = "savannah-hayes" const USER_URL = `https://api.github.com/users/${username}`; @@ -11,6 +14,36 @@ const options = { } } +const displayHtml = () => { + header.innerHTML = ` +
    + + + +
    +

    GitHub Tracker

    + image of savannah hayes + ` + + htmlLinks.innerHTML = ` + book icon Repositories + box icon Contributions + pull request icon Pull Requests + ` + + footer.innerHTML = ` + + + ` +} + +displayHtml() + const displayProfileData = (profileData) => { const image = profileData.avatar_url; const name = profileData.name; diff --git a/src/javascript/repos.js b/src/javascript/repos.js index 8d4c102b..c54d98fb 100644 --- a/src/javascript/repos.js +++ b/src/javascript/repos.js @@ -1,7 +1,39 @@ const projectsSection = document.getElementById("projects"); +const searchForm = document.getElementById("searchForm") const REPOS_URL = `https://api.github.com/users/${username}/repos`; +searchForm.innerHTML = ` +
    + +
    + +` + const displayRepositories = (repositories) => { repositories.filter(repo => { let language = repo.language; @@ -16,7 +48,7 @@ const displayRepositories = (repositories) => { if (repo.fork === true && repo.name !== "unit-tests") { projectsSection.innerHTML += ` - ${repo.name}${visibility} + ${repo.name}${visibility}

    Forked from Technigo/project-${repo.name}

    ${language} Branch ${repo.default_branch} From 737219898bfd9ae202c9f6c97fb8d72200819642 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sun, 27 Feb 2022 21:44:45 +0100 Subject: [PATCH 14/24] Fix repositories and contributions links --- commits.html | 7 +++-- index.html | 8 +++-- src/javascript/commits.js | 3 +- src/javascript/index.js | 7 ----- src/javascript/repos.js | 66 +++++++++++++++++++++------------------ 5 files changed, 47 insertions(+), 44 deletions(-) diff --git a/commits.html b/commits.html index 567da064..19cb7313 100644 --- a/commits.html +++ b/commits.html @@ -27,9 +27,12 @@

    - +
    -
    diff --git a/index.html b/index.html index c5bcc8fc..bc6dfdfa 100644 --- a/index.html +++ b/index.html @@ -20,14 +20,16 @@
    - +

    -
    -
    diff --git a/src/javascript/commits.js b/src/javascript/commits.js index d9976233..af537033 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -13,6 +13,7 @@ const fetchRepositories = (repositories) => { const fetchCommitMessages = (commits, repository) => { const repositoryName = repository.name; + document.addEventListener("click", function (e) { if (e.target && e.target.id == repositoryName) { const repoClassname = `.${repository.name}` @@ -36,7 +37,7 @@ const fetchCommitMessages = (commits, repository) => { const authorPicture = commits[i].author.avatar_url; const date = new Date(commits[i].commit.committer.date); const formattedDate = date.toDateString().split(' ').slice(1).join(' '); - + commitsSection.innerHTML += `

    ${commitMessages}

    diff --git a/src/javascript/index.js b/src/javascript/index.js index d6775df0..ddf57329 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -1,6 +1,5 @@ const profileDetails = document.getElementById("aside"); const header = document.getElementById("header"); -const htmlLinks = document.getElementById("htmlLinks"); const footer = document.getElementById("footer"); const username = "savannah-hayes" @@ -24,12 +23,6 @@ const displayHtml = () => {

    GitHub Tracker

    image of savannah hayes ` - - htmlLinks.innerHTML = ` - book icon Repositories - box icon Contributions - pull request icon Pull Requests - ` footer.innerHTML = ` diff --git a/src/javascript/repos.js b/src/javascript/repos.js index c54d98fb..d64dac73 100644 --- a/src/javascript/repos.js +++ b/src/javascript/repos.js @@ -3,36 +3,40 @@ const searchForm = document.getElementById("searchForm") const REPOS_URL = `https://api.github.com/users/${username}/repos`; -searchForm.innerHTML = ` -
    - -
    - -` +const displaySearchForm = () => { + searchForm.innerHTML = ` +
    + +
    + + ` +} + +displaySearchForm() const displayRepositories = (repositories) => { repositories.filter(repo => { @@ -43,7 +47,7 @@ const displayRepositories = (repositories) => { const currentDate = new Date(); const projectDate = new Date(repo.pushed_at); const numberOfDays = Math.round(Math.abs((currentDate - projectDate) / oneDay)); - + language === "HTML" ? language = `馃敶 ${language}` : language = `馃煛 ${language}`; if (repo.fork === true && repo.name !== "unit-tests") { From bec0e0fe9057b423cd243f0ad9f767384dfe3931 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Mon, 28 Feb 2022 10:11:44 +0100 Subject: [PATCH 15/24] Destructure data and fix 0 days ago timestamp --- commits.html | 4 ++-- src/javascript/commits.js | 13 ++++++------- src/javascript/index.js | 14 ++++---------- src/javascript/repos.js | 35 +++++++++++++++++++++++++---------- 4 files changed, 37 insertions(+), 29 deletions(-) diff --git a/commits.html b/commits.html index 19cb7313..8012fff3 100644 --- a/commits.html +++ b/commits.html @@ -28,8 +28,8 @@

    diff --git a/src/javascript/commits.js b/src/javascript/commits.js index af537033..aadc10c8 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -32,17 +32,16 @@ const fetchCommitMessages = (commits, repository) => { ` for (let i = 0; i < commits.length; i++) { - const commitMessages = commits[i].commit.message; - const author = commits[i].commit.author.name; - const authorPicture = commits[i].author.avatar_url; - const date = new Date(commits[i].commit.committer.date); + const { message, committer, author } = commits[i].commit; + const { avatar_url } = commits[i].author; + const date = new Date(committer.date); const formattedDate = date.toDateString().split(' ').slice(1).join(' '); commitsSection.innerHTML += `
    -

    ${commitMessages}

    -

    ${author} - ${author} committed on ${formattedDate}

    +

    ${message}

    +

    ${author.name} + ${author.name} committed on ${formattedDate}

    ` } diff --git a/src/javascript/index.js b/src/javascript/index.js index ddf57329..81eb484e 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -2,7 +2,7 @@ const profileDetails = document.getElementById("aside"); const header = document.getElementById("header"); const footer = document.getElementById("footer"); -const username = "savannah-hayes" +const username = "savannah-hayes"; const USER_URL = `https://api.github.com/users/${username}`; const API_TOKEN = TOKEN || process.env.API_KEY @@ -38,20 +38,14 @@ const displayHtml = () => { displayHtml() const displayProfileData = (profileData) => { - const image = profileData.avatar_url; - const name = profileData.name; - const username = profileData.login; - const bio = profileData.bio; - const followers = profileData.followers; - const following = profileData.following; - const location = profileData.location; + const { avatar_url, name, login, bio, followers, following, location } = profileData; profileDetails.innerHTML = `
    - image of ${name} + image of ${name}

    ${name}

    -

    ${username}

    +

    ${login}

    diff --git a/src/javascript/repos.js b/src/javascript/repos.js index d64dac73..16147431 100644 --- a/src/javascript/repos.js +++ b/src/javascript/repos.js @@ -40,23 +40,38 @@ displaySearchForm() const displayRepositories = (repositories) => { repositories.filter(repo => { + const { fork, name, html_url, visibility, default_branch, pushed_at } = repo; let language = repo.language; - const projectUrl = repo.html_url; - const visibility = repo.visibility; - const oneDay = 24 * 60 * 60 * 1000; + let updatedTime; + const DAY_IN_MS = 24 * 60 * 60 * 1000; const currentDate = new Date(); - const projectDate = new Date(repo.pushed_at); - const numberOfDays = Math.round(Math.abs((currentDate - projectDate) / oneDay)); + const projectDate = new Date(pushed_at); + const seconds = Math.round((currentDate - projectDate) / 1000); + const minutes = Math.round(seconds / 60); + const hours = Math.round(minutes / 60) + const numberOfDays = Math.round(Math.abs((currentDate - projectDate) / DAY_IN_MS)); + + if (seconds < 5) { + updatedTime = 'now'; + } else if (seconds < 60) { + updatedTime = `${seconds} seconds ago`; + } else if (minutes < 60) { + updatedTime = `${minutes} minutes ago`; + } else if (hours < 60) { + updatedTime = `${hours} hours ago`; + } else { + updatedTime = `${numberOfDays} days ago`; + } language === "HTML" ? language = `馃敶 ${language}` : language = `馃煛 ${language}`; - if (repo.fork === true && repo.name !== "unit-tests") { + if (fork === true && name !== "unit-tests") { projectsSection.innerHTML += ` - ${repo.name}${visibility} -

    Forked from Technigo/project-${repo.name}

    + ${name}${visibility} +

    Forked from Technigo/project-${name}

    ${language} - Branch ${repo.default_branch} - Updated ${numberOfDays} days ago

    + Branch ${default_branch} + Updated ${updatedTime}


    `; } From c28423941e7d574eab106d9f71963c28c418508a Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Tue, 1 Mar 2022 21:35:09 +0100 Subject: [PATCH 16/24] Hide and show commit messages with javascript --- commits.html | 4 ++-- index.html | 4 ++-- src/javascript/commits.js | 14 +++++++++----- src/javascript/repos.js | 4 +++- src/stylesheets/commits.css | 19 ------------------- 5 files changed, 16 insertions(+), 29 deletions(-) diff --git a/commits.html b/commits.html index 8012fff3..19cb7313 100644 --- a/commits.html +++ b/commits.html @@ -28,8 +28,8 @@

    diff --git a/index.html b/index.html index bc6dfdfa..c521a7dc 100644 --- a/index.html +++ b/index.html @@ -21,8 +21,8 @@

    diff --git a/src/javascript/commits.js b/src/javascript/commits.js index aadc10c8..2c64681c 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -5,20 +5,24 @@ const COMMITS_URL = `https://api.github.com/repos/${username}/`; const fetchRepositories = (repositories) => { repositories.filter(repo => { - if (repo.fork === true && repo.name !== "unit-tests") { + if (repo.fork && repo.name !== "unit-tests") { fetchCommits(repo) } }) } const fetchCommitMessages = (commits, repository) => { - const repositoryName = repository.name; + const repositoryName = repository.name; document.addEventListener("click", function (e) { if (e.target && e.target.id == repositoryName) { - const repoClassname = `.${repository.name}` + const repoClassname = `.${repository.name}`; document.querySelectorAll(repoClassname).forEach(name => { - name.classList.toggle("active"); + if (name.style.display === "none") { + name.style.display = "block"; + } else { + name.style.display = "none"; + } }) } }); @@ -38,7 +42,7 @@ const fetchCommitMessages = (commits, repository) => { const formattedDate = date.toDateString().split(' ').slice(1).join(' '); commitsSection.innerHTML += ` -
    + ` } @@ -39,6 +25,7 @@ const displaySearchForm = () => { displaySearchForm() const displayRepositories = (repositories) => { + repositories.filter(repo => { const { fork, name, html_url, visibility, default_branch, pushed_at } = repo; let language = repo.language; diff --git a/src/stylesheets/repos.css b/src/stylesheets/repos.css index b843e945..7f0a6cad 100644 --- a/src/stylesheets/repos.css +++ b/src/stylesheets/repos.css @@ -55,7 +55,6 @@ .dropdown { margin: 5px 0 20px 25px; - width: 450px; } .btn { diff --git a/src/stylesheets/style.css b/src/stylesheets/style.css index b5cbc5f6..32954921 100644 --- a/src/stylesheets/style.css +++ b/src/stylesheets/style.css @@ -101,10 +101,6 @@ h1 { margin-left: 15px; } -.links--hide { - display: none; -} - .bold-link { font-weight: var(--fw-bold); border-bottom: 3px solid orange; From 59ea9141bd40432278297a4ad6523de83ab7eea8 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sat, 12 Mar 2022 08:53:33 +0100 Subject: [PATCH 18/24] Fix hard coded chart data --- src/javascript/chart.js | 65 ++++++++++++++++++++------------------- src/javascript/commits.js | 11 ++++--- 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/javascript/chart.js b/src/javascript/chart.js index f607cccd..16e2272b 100644 --- a/src/javascript/chart.js +++ b/src/javascript/chart.js @@ -1,33 +1,36 @@ -const ctx = document.getElementById('chart') - -const labels = [ - 'Projects completed', - 'Projects left', -]; - -const data = { - labels: labels, - datasets: [{ - label: 'My First Dataset', - data: [8, 11], - backgroundColor: [ - 'rgb(142, 85, 255)', - 'rgb(142, 85, 255, 0.3)', - ], - hoverOffset: 4 - }] -}; - -const configuration = { - type: 'doughnut', - data: data, - options: {} -}; - - -const myChart = new Chart( - ctx, - configuration -); +const displayChart = (projects) => { + const ctx = document.getElementById('chart'); + + const labels = [ + 'Projects completed', + 'Projects left', + ]; + + const data = { + labels: labels, + datasets: [{ + label: 'My First Dataset', + data: [projects, 19 - projects], + backgroundColor: [ + 'rgb(142, 85, 255)', + 'rgb(142, 85, 255, 0.3)', + ], + hoverOffset: 4 + }] + }; + + const configuration = { + type: 'doughnut', + data: data, + options: {} + }; + + const myChart = new Chart( + ctx, + configuration + ); +} + + diff --git a/src/javascript/commits.js b/src/javascript/commits.js index 2f9ff0ae..91426da1 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -4,13 +4,14 @@ const REPOS_URL = `https://api.github.com/users/${username}/repos`; const COMMITS_URL = `https://api.github.com/repos/${username}/`; const fetchRepositories = (repositories) => { - repositories.filter(repo => { + const myRepos = repositories.filter((repo) => repo.fork && repo.name !== "unit-tests").length; + repositories.filter(repo => { if (repo.fork && repo.name !== "unit-tests") { fetchCommits(repo) } }) - -} + displayChart(myRepos) +}; const fetchCommitMessages = (commits, repository) => { const repositoryName = repository.name; @@ -52,7 +53,7 @@ const fetchCommitMessages = (commits, repository) => {
    ` } -} +}; fetch(REPOS_URL, options) .then(res => res.json()) @@ -64,4 +65,4 @@ const fetchCommits = (repo) => { .then(res => res.json()) .then(commits => fetchCommitMessages(commits, repo)) .catch(error => console.log(error)) -} \ No newline at end of file +}; \ No newline at end of file From 6fcefbe5b337731f34916150a48b052d14392d26 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Thu, 31 Mar 2022 12:13:00 +0200 Subject: [PATCH 19/24] Add new API token --- src/javascript/chart.js | 2 +- src/javascript/index.js | 11 +++++++---- src/javascript/repos.js | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/javascript/chart.js b/src/javascript/chart.js index 16e2272b..76e03b78 100644 --- a/src/javascript/chart.js +++ b/src/javascript/chart.js @@ -9,7 +9,7 @@ const displayChart = (projects) => { const data = { labels: labels, datasets: [{ - label: 'My First Dataset', + label: 'My Projects at Technigo', data: [projects, 19 - projects], backgroundColor: [ 'rgb(142, 85, 255)', diff --git a/src/javascript/index.js b/src/javascript/index.js index 81eb484e..8b9a7279 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -4,7 +4,7 @@ const footer = document.getElementById("footer"); const username = "savannah-hayes"; const USER_URL = `https://api.github.com/users/${username}`; -const API_TOKEN = TOKEN || process.env.API_KEY +const API_TOKEN = TOKEN || process.env.API_KEY; const options = { method: "GET", @@ -21,7 +21,7 @@ const displayHtml = () => {

    GitHub Tracker

    - image of savannah hayes + small image of savannah hayes ` footer.innerHTML = ` @@ -51,10 +51,13 @@ const displayProfileData = (profileData) => {

    ${bio}

    - + three people icon ${followers} followers 路 ${following} following

    -

    ${location}

    +

    + location pin icon + ${location} +

    `; } diff --git a/src/javascript/repos.js b/src/javascript/repos.js index 7e4c79dc..bb0586b3 100644 --- a/src/javascript/repos.js +++ b/src/javascript/repos.js @@ -1,5 +1,5 @@ const projectsSection = document.getElementById("projects"); -const searchForm = document.getElementById("searchForm") +const searchForm = document.getElementById("searchForm"); const REPOS_URL = `https://api.github.com/users/${username}/repos`; From b6a048c925a30a0fc914d42044d1d3257dbaa48f Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sun, 10 Apr 2022 21:16:05 +0200 Subject: [PATCH 20/24] Remove search form --- .gitignore | 9 +++++++-- README.md | 10 +++++----- index.html | 15 ++++----------- src/javascript/commits.js | 18 +++++++++--------- src/javascript/index.js | 12 ++++++------ src/javascript/repos.js | 32 +++++--------------------------- 6 files changed, 36 insertions(+), 60 deletions(-) diff --git a/.gitignore b/.gitignore index cdeebf5e..afc2e4d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +# dependencies node_modules -.DS_Store -/src/javascript/config.js \ No newline at end of file + +# api keys +/src/javascript/config.js + +# misc +.DS_Store \ No newline at end of file diff --git a/README.md b/README.md index fb05edf5..6fb9e022 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,16 @@ purpose of this project is to display information about the projects that I have ## The project -I started off this project by fetching all of my repositories and data from the GitHub API. Once I had all the data +I started off this project by fetching all of my repositories and data from the GitHubs API. Once I had all the data I needed I dispayed it on the page. Then I styled the page similar to the GitHub page layout, with the mind set of mobile first. -If I had more time I would add a page for my pull requests and add funtionalities to the buttons on the page to be -able to sort my repositories based off of language, type, and so on... Lastly, I would want to add JavaScript to -the input field so a user can search for a specific repository. +If I had more time I would add a page for my pull requests and I would like to add a search input so that users can +search for a specific repositiory. Also to have a dropdown button that allows users to filter through repos based off +of the language they are mostly written in. ## Demo -https://gallant-ardinghelli-8ae929.netlify.app/ +https://savannah-github-tracker.netlify.app/ diff --git a/index.html b/index.html index 97392e9c..0e11d44e 100644 --- a/index.html +++ b/index.html @@ -6,14 +6,9 @@ GitHub Tracker - - @@ -27,15 +22,13 @@

    -
    -

    diff --git a/src/javascript/commits.js b/src/javascript/commits.js index 91426da1..0d39b9b2 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -18,8 +18,8 @@ const fetchCommitMessages = (commits, repository) => { const allCommits = commits.map(commit => commit); const newCommits = allCommits.filter(commits => commits.commit.author.date.includes("2022")); - document.addEventListener("click", function (e) { - if (e.target && e.target.id == repositoryName) { + document.addEventListener("click", function (event) { + if (event.target.id === repositoryName) { const repoClassname = `.${repository.name}`; document.querySelectorAll(repoClassname).forEach(name => { if (name.style.display === "none") { @@ -33,7 +33,7 @@ const fetchCommitMessages = (commits, repository) => { commitsSection.innerHTML += ` @@ -46,12 +46,12 @@ const fetchCommitMessages = (commits, repository) => { const formattedDate = date.toDateString().split(' ').slice(1).join(' '); commitsSection.innerHTML += ` - - ` + + ` } }; diff --git a/src/javascript/index.js b/src/javascript/index.js index 8b9a7279..be173cc0 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -11,9 +11,9 @@ const options = { headers: { Authorization: `token ${API_TOKEN}` } -} +}; -const displayHtml = () => { +const displayHeaderAndFooter = () => { header.innerHTML = `
    @@ -33,9 +33,7 @@ const displayHtml = () => { ` -} - -displayHtml() +}; const displayProfileData = (profileData) => { const { avatar_url, name, login, bio, followers, following, location } = profileData; @@ -60,7 +58,9 @@ const displayProfileData = (profileData) => {

    `; -} +}; + +displayHeaderAndFooter(); fetch(USER_URL, options) .then(res => res.json()) diff --git a/src/javascript/repos.js b/src/javascript/repos.js index bb0586b3..722de361 100644 --- a/src/javascript/repos.js +++ b/src/javascript/repos.js @@ -1,34 +1,12 @@ const projectsSection = document.getElementById("projects"); -const searchForm = document.getElementById("searchForm"); const REPOS_URL = `https://api.github.com/users/${username}/repos`; -const displaySearchForm = () => { - searchForm.innerHTML = ` -
    - -
    - - ` -} - -displaySearchForm() - const displayRepositories = (repositories) => { repositories.filter(repo => { const { fork, name, html_url, visibility, default_branch, pushed_at } = repo; - let language = repo.language; + let projectLanguage = repo.language; let updatedTime; const DAY_IN_MS = 24 * 60 * 60 * 1000; const currentDate = new Date(); @@ -52,20 +30,20 @@ const displayRepositories = (repositories) => { updatedTime = `${numberOfDays} days ago`; } - language === "HTML" ? language = `馃敶 ${language}` : language = `馃煛 ${language}`; + projectLanguage === "HTML" ? projectLanguage = `馃敶 ${projectLanguage}` : projectLanguage = `馃煛 ${projectLanguage}`; - if (fork === true && name !== "unit-tests") { + if (fork && name !== "unit-tests") { projectsSection.innerHTML += ` ${name}${visibility}

    Forked from Technigo/project-${name}

    -

    ${language} +

    ${projectLanguage} Branch ${default_branch} Updated ${updatedTime}


    `; } }) -} +}; fetch(REPOS_URL, options) .then(res => res.json()) From fe62225ed74e699ae373874885affcb4a8d6a614 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Mon, 11 Apr 2022 16:32:01 +0200 Subject: [PATCH 21/24] Update README.md --- README.md | 16 +++++++++------- src/javascript/commits.js | 8 ++++---- src/javascript/index.js | 2 +- src/javascript/repos.js | 2 +- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 6fb9e022..79f565ff 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,19 @@ # GitHub Tracker This project was built to track all of the repositories that I have created during my time at Technigo. The main -purpose of this project is to display information about the projects that I have built. +purpose of this project is to display information about the projects that I have built using Githubs API. ## The project -I started off this project by fetching all of my repositories and data from the GitHubs API. Once I had all the data -I needed I dispayed it on the page. Then I styled the page similar to the GitHub page layout, with the mind set of -mobile first. +I started off this project by fetching all of my repositories and data from GitHubs API. Once I had all the data +that I needed I dispayed it on multiple pages. One page focusing on displaying the repository data and the other to +display the commits data. This project also include a visualization of how many projects I have done so far, compared +to how many I will in total using Chart.js. Lastly, I styled the pages similar to the GitHubs page layout, with the +mind set of mobile first. -If I had more time I would add a page for my pull requests and I would like to add a search input so that users can -search for a specific repositiory. Also to have a dropdown button that allows users to filter through repos based off -of the language they are mostly written in. +If I had more time I would add a page for my pull requests data and I would like to add a search input so that users +can search for a specific repositiory. Also to include a dropdown button that allows users to filter through repos +based off of the language they are written in. ## Demo diff --git a/src/javascript/commits.js b/src/javascript/commits.js index 0d39b9b2..1d53160a 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -18,7 +18,7 @@ const fetchCommitMessages = (commits, repository) => { const allCommits = commits.map(commit => commit); const newCommits = allCommits.filter(commits => commits.commit.author.date.includes("2022")); - document.addEventListener("click", function (event) { + document.addEventListener("click", (event) => { if (event.target.id === repositoryName) { const repoClassname = `.${repository.name}`; document.querySelectorAll(repoClassname).forEach(name => { @@ -28,7 +28,7 @@ const fetchCommitMessages = (commits, repository) => { name.style.display = "none"; } }) - } + }; }); commitsSection.innerHTML += ` @@ -57,12 +57,12 @@ const fetchCommitMessages = (commits, repository) => { fetch(REPOS_URL, options) .then(res => res.json()) - .then(fetchRepositories) + .then(data => fetchRepositories(data)) .catch(error => console.log(error)) const fetchCommits = (repo) => { fetch(`${COMMITS_URL}${repo.name}/commits`, options) .then(res => res.json()) - .then(commits => fetchCommitMessages(commits, repo)) + .then(data => fetchCommitMessages(data, repo)) .catch(error => console.log(error)) }; \ No newline at end of file diff --git a/src/javascript/index.js b/src/javascript/index.js index be173cc0..16763bd3 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -64,5 +64,5 @@ displayHeaderAndFooter(); fetch(USER_URL, options) .then(res => res.json()) - .then(displayProfileData) + .then(data => displayProfileData(data)) .catch(error => console.log(error)) \ No newline at end of file diff --git a/src/javascript/repos.js b/src/javascript/repos.js index 722de361..66fdf6d4 100644 --- a/src/javascript/repos.js +++ b/src/javascript/repos.js @@ -47,5 +47,5 @@ const displayRepositories = (repositories) => { fetch(REPOS_URL, options) .then(res => res.json()) - .then(displayRepositories) + .then(data => displayRepositories(data)) .catch(error => console.log(error)) From e03f0993262f5abd7c49b045c4f71ceef2631970 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sun, 17 Apr 2022 09:46:33 +0200 Subject: [PATCH 22/24] Remove dotenv package --- .gitignore | 3 --- package-lock.json | 27 --------------------------- package.json | 5 ----- src/javascript/index.js | 1 - 4 files changed, 36 deletions(-) delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/.gitignore b/.gitignore index afc2e4d5..0bccdf1d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -# dependencies -node_modules - # api keys /src/javascript/config.js diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 9c4efc2e..00000000 --- a/package-lock.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "github-tracker", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "dependencies": { - "dotenv": "^16.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", - "engines": { - "node": ">=12" - } - } - }, - "dependencies": { - "dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 48e3cde3..00000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "dotenv": "^16.0.0" - } -} diff --git a/src/javascript/index.js b/src/javascript/index.js index 16763bd3..5a940f13 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -4,7 +4,6 @@ const footer = document.getElementById("footer"); const username = "savannah-hayes"; const USER_URL = `https://api.github.com/users/${username}`; -const API_TOKEN = TOKEN || process.env.API_KEY; const options = { method: "GET", From d05b2527ede105e23724fb38130461f9f48bf938 Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Sun, 17 Apr 2022 09:58:37 +0200 Subject: [PATCH 23/24] Move urls to index.js --- src/javascript/commits.js | 3 --- src/javascript/index.js | 2 ++ src/javascript/repos.js | 2 -- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/javascript/commits.js b/src/javascript/commits.js index 1d53160a..41aef53a 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -1,8 +1,5 @@ const commitsSection = document.getElementById("commits"); -const REPOS_URL = `https://api.github.com/users/${username}/repos`; -const COMMITS_URL = `https://api.github.com/repos/${username}/`; - const fetchRepositories = (repositories) => { const myRepos = repositories.filter((repo) => repo.fork && repo.name !== "unit-tests").length; repositories.filter(repo => { diff --git a/src/javascript/index.js b/src/javascript/index.js index 5a940f13..34abd374 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -4,6 +4,8 @@ const footer = document.getElementById("footer"); const username = "savannah-hayes"; const USER_URL = `https://api.github.com/users/${username}`; +const REPOS_URL = `https://api.github.com/users/${username}/repos`; +const COMMITS_URL = `https://api.github.com/repos/${username}/`; const options = { method: "GET", diff --git a/src/javascript/repos.js b/src/javascript/repos.js index 66fdf6d4..756972c2 100644 --- a/src/javascript/repos.js +++ b/src/javascript/repos.js @@ -1,7 +1,5 @@ const projectsSection = document.getElementById("projects"); -const REPOS_URL = `https://api.github.com/users/${username}/repos`; - const displayRepositories = (repositories) => { repositories.filter(repo => { From 586112f959d5e657c63ff446188cdf01a483788e Mon Sep 17 00:00:00 2001 From: savannah-hayes <79738821+savannah-hayes@users.noreply.github.com> Date: Mon, 18 Apr 2022 23:20:57 +0200 Subject: [PATCH 24/24] Format js files --- src/javascript/commits.js | 23 +++++++++++++++-------- src/javascript/index.js | 4 +++- src/javascript/repos.js | 17 ++++++++++++----- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/javascript/commits.js b/src/javascript/commits.js index 41aef53a..581bb199 100644 --- a/src/javascript/commits.js +++ b/src/javascript/commits.js @@ -6,18 +6,17 @@ const fetchRepositories = (repositories) => { if (repo.fork && repo.name !== "unit-tests") { fetchCommits(repo) } - }) - displayChart(myRepos) + }); + displayChart(myRepos); }; const fetchCommitMessages = (commits, repository) => { const repositoryName = repository.name; - const allCommits = commits.map(commit => commit); - const newCommits = allCommits.filter(commits => commits.commit.author.date.includes("2022")); + const newCommits = commits.filter(commits => commits.commit.author.date.includes("2022")); document.addEventListener("click", (event) => { if (event.target.id === repositoryName) { - const repoClassname = `.${repository.name}`; + const repoClassname = `.${repositoryName}`; document.querySelectorAll(repoClassname).forEach(name => { if (name.style.display === "none") { name.style.display = "block"; @@ -31,10 +30,18 @@ const fetchCommitMessages = (commits, repository) => { commitsSection.innerHTML += `
    -
    -
    +
    +
    +
    - ` +
    + +
    +
    + ` for (let i = 0; i < newCommits.length; i++) { const { message, committer, author } = newCommits[i].commit; diff --git a/src/javascript/index.js b/src/javascript/index.js index 34abd374..c320b0ac 100644 --- a/src/javascript/index.js +++ b/src/javascript/index.js @@ -26,7 +26,9 @@ const displayHeaderAndFooter = () => { ` footer.innerHTML = ` - +