From 26d3192642817e51e316b7e26d20ca81a66991c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Sun, 26 Sep 2021 23:20:51 +0200 Subject: [PATCH 01/17] initial commit with step 1 --- code/index.html | 34 +++++++++++++++++----------------- code/script.js | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 17 deletions(-) diff --git a/code/index.html b/code/index.html index 2fb5e0ae..2b2874ba 100644 --- a/code/index.html +++ b/code/index.html @@ -1,21 +1,21 @@ - - - - - Project GitHub Tracker - - - -

GitHub Tracker

-

Projects:

-
+ + + + + Project GitHub Tracker + + + +

GitHub Tracker

+

Projects:

+
- - + + - - - - \ No newline at end of file + + + + diff --git a/code/script.js b/code/script.js index e69de29b..0d1b8cc1 100644 --- a/code/script.js +++ b/code/script.js @@ -0,0 +1,41 @@ +const projects = document.getElementById('projects') + +fetch('https://api.github.com/users/jakobxlindstrom/repos') + .then((res) => res.json()) + .then((repos) => { + console.log(repos) + repos.forEach((repos) => { + projects.innerHTML += `

my Repo ${repos.name}

` + }) + }) + +const filter = (fork) => { + if (fork === true) { + projects.innerHTML = `These are my FORKED repos${repos.fork}` + } else { + console.log(`not there yet`) + } +} +filter() + +// fetch('https://api.github.com/repos/technigo/jakobxlindstrom/pulls') +// .then((res) => res.json()) +// .then((pulls) => { +// console.log(pulls) +// }) + +// ### What to include + +// - A list of all repos that are forked ones from Technigo +// - Your username and profile picture +// - Most recent update (push) for each repo +// - Name of your default branch for each repo +// - URL to the actual GitHub repo +// - Number of commit messages for each repo +// - All pull requests +// - A chart of how many projects you've done so far, +// compared to how many you will do using +// [Chart.js](https://www.chartjs.org/). +// [Here](https://www.chartjs.org/docs/latest/getting-started/)'s +// documentation on how to get started, and in the left menu you can also find +// [example usage](https://www.chartjs.org/docs/latest/getting-started/usage.html). From 95efe3d9282a9b508e3792e1ef912565673283c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Tue, 28 Sep 2021 00:05:45 +0200 Subject: [PATCH 02/17] progression --- code/chart.js | 17 +++++++++++ code/index.html | 1 + code/script.js | 78 ++++++++++++++++++++++++++++--------------------- code/style.css | 4 +-- 4 files changed, 64 insertions(+), 36 deletions(-) diff --git a/code/chart.js b/code/chart.js index 92e85a30..a352fe4f 100644 --- a/code/chart.js +++ b/code/chart.js @@ -2,3 +2,20 @@ const ctx = document.getElementById('chart').getContext('2d') //"Draw" the chart here 👇 + +const config = { + type: 'doughnut', + data: { + labels: ['finished', 'not finished'], + datasets: [ + { + label: 'My technigo projects', + data: [5, 20 - 5], + backgroundColor: ['rgb(255, 99, 132)', '#e6e6e6'], + hoverOffset: 4, + }, + ], + }, +} + +const myProjects = new Chart(ctx, config) diff --git a/code/index.html b/code/index.html index 2b2874ba..2abe238b 100644 --- a/code/index.html +++ b/code/index.html @@ -6,6 +6,7 @@ Project GitHub Tracker +

GitHub Tracker

diff --git a/code/script.js b/code/script.js index 0d1b8cc1..be5c8e3d 100644 --- a/code/script.js +++ b/code/script.js @@ -1,41 +1,51 @@ const projects = document.getElementById('projects') +const USER = 'jakobxlindstrom' +const USER_URL = `https://api.github.com/users/${USER}` -fetch('https://api.github.com/users/jakobxlindstrom/repos') - .then((res) => res.json()) - .then((repos) => { - console.log(repos) - repos.forEach((repos) => { - projects.innerHTML += `

my Repo ${repos.name}

` +const getUserData = () => { + fetch(USER_URL) + .then((res) => res.json()) + .then((data) => { + projects.innerHTML = ` +

Username: ${data.login}

+

Full name: ${data.name}

+

Location : ${data.location}

+ + ` }) - }) - -const filter = (fork) => { - if (fork === true) { - projects.innerHTML = `These are my FORKED repos${repos.fork}` - } else { - console.log(`not there yet`) - } } -filter() -// fetch('https://api.github.com/repos/technigo/jakobxlindstrom/pulls') -// .then((res) => res.json()) -// .then((pulls) => { -// console.log(pulls) -// }) +const getRepos = () => { + fetch(`https://api.github.com/users/${USER}/repos`) + .then((res) => res.json()) + .then((data) => { + console.log(data) + const filtered = data.filter( + (repo) => repo.fork && repo.name.startsWith('project-') + ) + filtered + .forEach((repo) => { + projects.innerHTML += `

my Repo ${repo.name}

+

Branch ${repo.default_branch}` + getPR(filtered) + }) + .catch(error) + projects.innerHTML += `

This is a error message beacuse there is an error.

` + }) +} +const getPR = (repos) => { + repos.forEach((repo) => { + fetch(`https://api.github.com/repos/technigo/${repo.name}/pulls`) + .then((res) => res.json()) + .then((data) => { + const myPR = data.filter((pull) => pull.user.login === repo.owner.login) + const myCommits = myPR.commits_url + }) + }) +} -// ### What to include +getUserData() +getRepos() +getPR() -// - A list of all repos that are forked ones from Technigo -// - Your username and profile picture -// - Most recent update (push) for each repo -// - Name of your default branch for each repo -// - URL to the actual GitHub repo -// - Number of commit messages for each repo -// - All pull requests -// - A chart of how many projects you've done so far, -// compared to how many you will do using -// [Chart.js](https://www.chartjs.org/). -// [Here](https://www.chartjs.org/docs/latest/getting-started/)'s -// documentation on how to get started, and in the left menu you can also find -// [example usage](https://www.chartjs.org/docs/latest/getting-started/usage.html). +// add eventlistener here diff --git a/code/style.css b/code/style.css index 7c8ad447..4eb23011 100644 --- a/code/style.css +++ b/code/style.css @@ -1,3 +1,3 @@ body { - background: #FFECE9; -} \ No newline at end of file + background: #ffece9; +} From 9dd9004d870430b9a847a77413e09f71b9bf4657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Tue, 28 Sep 2021 23:41:49 +0200 Subject: [PATCH 03/17] added dates and button --- code/chart.js | 49 ++++++++++++++++++++++++++++++++++-------------- code/index.html | 1 + code/script.js | 50 ++++++++++++++++++++++++++++++++++++++----------- code/style.css | 11 +++++++++++ 4 files changed, 86 insertions(+), 25 deletions(-) diff --git a/code/chart.js b/code/chart.js index a352fe4f..b3336cc7 100644 --- a/code/chart.js +++ b/code/chart.js @@ -1,21 +1,42 @@ //DOM-selector for the canvas 👇 const ctx = document.getElementById('chart').getContext('2d') +const ctx2 = document.getElementById('chart2').getContext('2d') //"Draw" the chart here 👇 +const drawChart = (amount) => { + const config = { + type: 'doughnut', + data: { + labels: ['finished', 'not finished'], + datasets: [ + { + label: 'My technigo projects', + data: [amount, 19 - amount], + backgroundColor: ['rgb(255, 99, 132)', '#e6e6e6'], + hoverOffset: 4, + }, + ], + }, + } -const config = { - type: 'doughnut', - data: { - labels: ['finished', 'not finished'], - datasets: [ - { - label: 'My technigo projects', - data: [5, 20 - 5], - backgroundColor: ['rgb(255, 99, 132)', '#e6e6e6'], - hoverOffset: 4, - }, - ], - }, + const myProjects = new Chart(ctx, config) } -const myProjects = new Chart(ctx, config) +const drawTimeLine = (created) => { + const config = { + type: 'pie', + data: { + labels: ['Javascript', 'HTML', 'CSS', 'REACT'], + datasets: [ + { + label: 'Created projects', + data: [created], + backgroundColor: ['#444444', '#e6e6e6'], + hoverOffset: 100, + }, + ], + }, + } + + const line = new Chart(ctx2, config) +} diff --git a/code/index.html b/code/index.html index 2abe238b..ac9d29f1 100644 --- a/code/index.html +++ b/code/index.html @@ -15,6 +15,7 @@

Projects:

+ diff --git a/code/script.js b/code/script.js index be5c8e3d..1a967b98 100644 --- a/code/script.js +++ b/code/script.js @@ -23,29 +23,57 @@ const getRepos = () => { const filtered = data.filter( (repo) => repo.fork && repo.name.startsWith('project-') ) - filtered - .forEach((repo) => { - projects.innerHTML += `

my Repo ${repo.name}

-

Branch ${repo.default_branch}` - getPR(filtered) - }) - .catch(error) - projects.innerHTML += `

This is a error message beacuse there is an error.

` + filtered.forEach((repo) => { + const pushedDate = new Date(repo.pushed_at).toLocaleDateString( + 'en-se', + { + hour: '2-digit', + minute: '2-digit', + weekday: 'short', + year: 'numeric', + month: 'short', + day: 'numeric', + } + ) + + projects.innerHTML += `
+ +

Amount of commits..

My Repo ${repo.name}

+

Branch ${repo.default_branch}

${pushedDate}

+ ` + }) + drawTimeLine(filtered.length) + drawChart(filtered.length) + getPR(filtered) }) } const getPR = (repos) => { repos.forEach((repo) => { - fetch(`https://api.github.com/repos/technigo/${repo.name}/pulls`) + fetch( + `https://api.github.com/repos/technigo/${repo.name}/pulls?per_page=100` + ) .then((res) => res.json()) .then((data) => { - const myPR = data.filter((pull) => pull.user.login === repo.owner.login) + console.log(data.review_comments_url) + const myPR = data.find((pull) => pull.user.login === repo.owner.login) const myCommits = myPR.commits_url + console.log(myCommits) + getCommits(myCommits) }) }) } +const getCommits = (url) => { + fetch(url) + .then((res) => res.json()) + .then((data) => { + const amountOfCommits = data.length + console.log(amountOfCommits) + projects.innerHTML += `

Commits from each pull requests ${data.length}

` + }) +} + getUserData() getRepos() -getPR() // add eventlistener here diff --git a/code/style.css b/code/style.css index 4eb23011..fee34074 100644 --- a/code/style.css +++ b/code/style.css @@ -1,3 +1,14 @@ body { background: #ffece9; } + +.repo-cards { + border-style: solid; + margin: 1em; + padding: 1em; + align-items: center; + justify-content: center; + display: flex; + flex-wrap: nowrap; + flex-direction: column-reverse; +} From 056e7a7ee7b7bb7aef67efffe1a45302da547b05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Wed, 29 Sep 2021 21:39:03 +0200 Subject: [PATCH 04/17] added code for dynamic id --- code/chart.js | 34 +++++++++++++++++----------------- code/index.html | 10 +++++++--- code/script.js | 31 +++++++++++++++++++++---------- code/style.css | 25 +++++++++++++++++++++++-- 4 files changed, 68 insertions(+), 32 deletions(-) diff --git a/code/chart.js b/code/chart.js index b3336cc7..22b102b0 100644 --- a/code/chart.js +++ b/code/chart.js @@ -22,21 +22,21 @@ const drawChart = (amount) => { const myProjects = new Chart(ctx, config) } -const drawTimeLine = (created) => { - const config = { - type: 'pie', - data: { - labels: ['Javascript', 'HTML', 'CSS', 'REACT'], - datasets: [ - { - label: 'Created projects', - data: [created], - backgroundColor: ['#444444', '#e6e6e6'], - hoverOffset: 100, - }, - ], - }, - } +// const drawTimeLine = (created) => { +// const config = { +// type: 'pie', +// data: { +// labels: ['Javascript', 'HTML', 'CSS', 'REACT'], +// datasets: [ +// { +// label: 'Created projects', +// data: [created], +// backgroundColor: ['#444444', '#e6e6e6'], +// hoverOffset: 100, +// }, +// ], +// }, +// } - const line = new Chart(ctx2, config) -} +// const line = new Chart(ctx2, config) +// } diff --git a/code/index.html b/code/index.html index ac9d29f1..78c2ad5c 100644 --- a/code/index.html +++ b/code/index.html @@ -11,10 +11,14 @@

GitHub Tracker

Projects:

-
+
- - +
+ +
diff --git a/code/script.js b/code/script.js index 1a967b98..801f8adb 100644 --- a/code/script.js +++ b/code/script.js @@ -7,10 +7,12 @@ const getUserData = () => { .then((res) => res.json()) .then((data) => { projects.innerHTML = ` +

Username: ${data.login}

Full name: ${data.name}

Location : ${data.location}

- + +
` }) } @@ -36,13 +38,18 @@ const getRepos = () => { } ) - projects.innerHTML += `
+ projects.innerHTML += `
+

-

Amount of commits..

My Repo ${repo.name}

-

Branch ${repo.default_branch}

${pushedDate}

+

My Repo ${repo.name}

+

Branch ${repo.default_branch}

+

Recent push ${pushedDate}

+ +
+ ` }) - drawTimeLine(filtered.length) + // drawTimeLine(filtered.length) drawChart(filtered.length) getPR(filtered) }) @@ -58,18 +65,18 @@ const getPR = (repos) => { const myPR = data.find((pull) => pull.user.login === repo.owner.login) const myCommits = myPR.commits_url console.log(myCommits) - getCommits(myCommits) + getCommits(myCommits, repo.name) }) }) } -const getCommits = (url) => { +const getCommits = (url, myRepoName) => { fetch(url) .then((res) => res.json()) .then((data) => { - const amountOfCommits = data.length - console.log(amountOfCommits) - projects.innerHTML += `

Commits from each pull requests ${data.length}

` + document.getElementById( + `commit-${myRepoName}` + ).innerHTML += `

Commits from each pull requests ${data.length}

` }) } @@ -77,3 +84,7 @@ getUserData() getRepos() // add eventlistener here + +{ + /*

Amount of commits

*/ +} diff --git a/code/style.css b/code/style.css index fee34074..83f463d6 100644 --- a/code/style.css +++ b/code/style.css @@ -1,5 +1,7 @@ body { - background: #ffece9; + width: 1024px; + margin: 0 auto; + background: #b3b3b3; } .repo-cards { @@ -9,6 +11,25 @@ body { align-items: center; justify-content: center; display: flex; - flex-wrap: nowrap; + flex-wrap: wrap; flex-direction: column-reverse; + width: 400px; + border-radius: 2em; + box-shadow: 0.25em 0.25em 0.25em black; + background-color: #e6e6e2; +} + +.projects { + margin: 0 auto; + align-items: center; +} + +.personal-info { + align-items: center; + justify-content: center; + border-style: solid; +} + +.img { + border-radius: 50%; } From b6de4137a9f9bdc5ea955bfcf6a131d298e7e374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Thu, 30 Sep 2021 00:00:41 +0200 Subject: [PATCH 05/17] styling started --- code/chart.js | 20 ------ code/index.html | 21 ++++-- code/script.js | 31 +++++---- code/style.css | 172 +++++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 193 insertions(+), 51 deletions(-) diff --git a/code/chart.js b/code/chart.js index 22b102b0..098db460 100644 --- a/code/chart.js +++ b/code/chart.js @@ -1,6 +1,5 @@ //DOM-selector for the canvas 👇 const ctx = document.getElementById('chart').getContext('2d') -const ctx2 = document.getElementById('chart2').getContext('2d') //"Draw" the chart here 👇 const drawChart = (amount) => { @@ -21,22 +20,3 @@ const drawChart = (amount) => { const myProjects = new Chart(ctx, config) } - -// const drawTimeLine = (created) => { -// const config = { -// type: 'pie', -// data: { -// labels: ['Javascript', 'HTML', 'CSS', 'REACT'], -// datasets: [ -// { -// label: 'Created projects', -// data: [created], -// backgroundColor: ['#444444', '#e6e6e6'], -// hoverOffset: 100, -// }, -// ], -// }, -// } - -// const line = new Chart(ctx2, config) -// } diff --git a/code/index.html b/code/index.html index 78c2ad5c..9440bd27 100644 --- a/code/index.html +++ b/code/index.html @@ -5,21 +5,28 @@ Project GitHub Tracker + + + -

GitHub Tracker

-

Projects:

+
+

GitHub Tracker

+ +
+
-
+
- diff --git a/code/script.js b/code/script.js index 801f8adb..a0ae157d 100644 --- a/code/script.js +++ b/code/script.js @@ -1,17 +1,19 @@ const projects = document.getElementById('projects') +const personData = document.getElementById('personData') const USER = 'jakobxlindstrom' const USER_URL = `https://api.github.com/users/${USER}` +const tracerBtn = document.getElementById('tracerBtn') const getUserData = () => { fetch(USER_URL) .then((res) => res.json()) .then((data) => { - projects.innerHTML = ` -
-

Username: ${data.login}

-

Full name: ${data.name}

-

Location : ${data.location}

- + personData.innerHTML = ` +
+ +

Username: ${data.login}

+

Full name: ${data.name}

+

Location: ${data.location}

` }) @@ -21,7 +23,7 @@ const getRepos = () => { fetch(`https://api.github.com/users/${USER}/repos`) .then((res) => res.json()) .then((data) => { - console.log(data) + // console.log(data) const filtered = data.filter( (repo) => repo.fork && repo.name.startsWith('project-') ) @@ -49,7 +51,6 @@ const getRepos = () => { ` }) - // drawTimeLine(filtered.length) drawChart(filtered.length) getPR(filtered) }) @@ -61,10 +62,10 @@ const getPR = (repos) => { ) .then((res) => res.json()) .then((data) => { - console.log(data.review_comments_url) + // console.log(data.review_comments_url) const myPR = data.find((pull) => pull.user.login === repo.owner.login) const myCommits = myPR.commits_url - console.log(myCommits) + // console.log(myCommits) getCommits(myCommits, repo.name) }) }) @@ -81,10 +82,12 @@ const getCommits = (url, myRepoName) => { } getUserData() -getRepos() - -// add eventlistener here { - /*

Amount of commits

*/ } + +// add eventlistener here +tracerBtn.addEventListener('click', (event) => { + event.preventDefault() + getRepos() +}) diff --git a/code/style.css b/code/style.css index 83f463d6..3978eace 100644 --- a/code/style.css +++ b/code/style.css @@ -1,35 +1,187 @@ body { - width: 1024px; - margin: 0 auto; - background: #b3b3b3; + color: white; + font-family: 'Ubuntu', sans-serif; + background: #0f0c29; /* fallback for old browsers */ + background: -webkit-linear-gradient( + to left, + #24243e, + #302b63, + #0f0c29 + ); /* Chrome 10-25, Safari 5.1-6 */ + background: linear-gradient( + to left, + #24243e, + #302b63, + #0f0c29 + ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ +} + +.hero { + border-bottom: solid; + height: 70%; + padding: 3em; + background: #0f0c29; /* fallback for old browsers */ + background: -webkit-linear-gradient( + to left, + #24243e, + #302b63, + #0f0c29 + ); /* Chrome 10-25, Safari 5.1-6 */ + background: linear-gradient( + to left, + #24243e, + #302b63, + #0f0c29 + ); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ +} + +a.button1 { + display: inline-block; + padding: 0.35em 1.2em; + border: 0.1em solid #ffffff; + margin: 0 0.3em 0.3em 0; + border-radius: 0.12em; + box-sizing: border-box; + text-decoration: none; + font-family: 'Roboto', sans-serif; + font-weight: 300; + font-size: 2em; + color: #ffffff; + text-align: center; + transition: all 0.2s; +} +a.button1:hover { + color: #000000; + background-color: #ffffff; +} +@media all and (max-width: 30em) { +  a.button1 { + display: block; + margin: 0.4em auto; + } } .repo-cards { + color: white; + font-family: 'Bebas Neue', cursive; border-style: solid; margin: 1em; padding: 1em; align-items: center; justify-content: center; display: flex; - flex-wrap: wrap; + flex-wrap: nowrap; flex-direction: column-reverse; - width: 400px; - border-radius: 2em; - box-shadow: 0.25em 0.25em 0.25em black; - background-color: #e6e6e2; + width: 300px; + border-radius: 1em; + box-shadow: 0.25em 0.25em 0.25em grey; + background-color: silver; } .projects { + display: flex; + gap: 2em; + flex-direction: row; + flex-wrap: wrap; margin: 0 auto; align-items: center; } .personal-info { + display: flex; + flex-direction: column; align-items: center; - justify-content: center; - border-style: solid; + position: sticky; } .img { + max-width: 25em; border-radius: 50%; + margin-top: -4em; + align-items: center; + border-color: white; + border-style: double; +} + +.chart-container { + border-style: solid; + padding: 1em; + position: sticky; + height: 10vh; + width: 40vw; +} + +/* ***** CARD ***** + +.flip-card { + background-color: transparent; + perspective: 1000px; +} + +.flip-card-inner { + position: relative; + transition: transform 1.2s; + transform-style: preserve-3d; } + +.flip-card:hover .flip-card-inner { + transform: rotateY(180deg); +} + +.flip-card-front, .flip-card-back { + position: absolute; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} + +.flip-card-back { + transform: rotateY(180deg); +} + +.card { + width: 200px; + height: 250px; + overflow: hidden; + border: 5px solid #C9B446; + border-style: double; + margin: 3px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; +} + +.card p { + text-align: center; + margin-bottom: 0; + font-size: 25px; + font-weight: 400; + color: #fff; + font-family: 'Pirata One'; +} + +.card .guess { + display: none; + flex-direction: column; + align-items: center; + justify-content: center; + color: white; + text-align: center; + height: inherit; +} + +.card:hover { + background-color: var(--secondary); +} + +.card:hover img, +.card:hover p { + display: none; +} + +/* The div with the guess class is only shown on hover */ +/* .card:hover .guess { + display: flex; +} */ From 5189454b35f5bf224888b6dc7b945ebd913ce155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Thu, 30 Sep 2021 01:25:46 +0200 Subject: [PATCH 06/17] almost final --- code/chart.js | 8 ++++---- code/index.html | 17 +++++++++++++---- code/script.js | 16 ++++++++-------- code/style.css | 34 +++++++++++++++++++++++++++------- 4 files changed, 52 insertions(+), 23 deletions(-) diff --git a/code/chart.js b/code/chart.js index 098db460..7dca9c6d 100644 --- a/code/chart.js +++ b/code/chart.js @@ -6,13 +6,13 @@ const drawChart = (amount) => { const config = { type: 'doughnut', data: { - labels: ['finished', 'not finished'], + labels: ['Finished', 'Not finished'], datasets: [ { - label: 'My technigo projects', + label: 'Technigo projects rate ', data: [amount, 19 - amount], - backgroundColor: ['rgb(255, 99, 132)', '#e6e6e6'], - hoverOffset: 4, + backgroundColor: ['#0f0c29', '#e6e6e6'], + hoverOffset: 50, }, ], }, diff --git a/code/index.html b/code/index.html index 9440bd27..9fb664e3 100644 --- a/code/index.html +++ b/code/index.html @@ -17,18 +17,27 @@

GitHub Tracker

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

+

A github tracer made as a weekly project for technigo

diff --git a/code/script.js b/code/script.js index a0ae157d..7c824f27 100644 --- a/code/script.js +++ b/code/script.js @@ -11,9 +11,9 @@ const getUserData = () => { personData.innerHTML = `
-

Username: ${data.login}

-

Full name: ${data.name}

-

Location: ${data.location}

+

Username: ${data.login}

+
${data.name}
+
${data.location}
` }) @@ -41,12 +41,12 @@ const getRepos = () => { ) projects.innerHTML += `
-

+ -

My Repo ${repo.name}

-

Branch ${repo.default_branch}

+

Recent push ${pushedDate}

- +

Branch ${repo.default_branch}

+

Repository ${repo.name}

` @@ -77,7 +77,7 @@ const getCommits = (url, myRepoName) => { .then((data) => { document.getElementById( `commit-${myRepoName}` - ).innerHTML += `

Commits from each pull requests ${data.length}

` + ).innerHTML += `

Amount of commits ${data.length}

` }) } diff --git a/code/style.css b/code/style.css index 3978eace..cf516db8 100644 --- a/code/style.css +++ b/code/style.css @@ -61,26 +61,33 @@ a.button1:hover { } } +.grid { + margin-top: 2em; + display: grid; + grid-template-columns: repeat(2, 1fr); +} + .repo-cards { + height: 300px; color: white; font-family: 'Bebas Neue', cursive; - border-style: solid; margin: 1em; padding: 1em; align-items: center; justify-content: center; display: flex; - flex-wrap: nowrap; + flex-wrap: wrap; flex-direction: column-reverse; - width: 300px; + width: 200px; border-radius: 1em; box-shadow: 0.25em 0.25em 0.25em grey; - background-color: silver; + background-color: rgb(20, 23, 38); } .projects { + width: 100%; display: flex; - gap: 2em; + grid-column: span 1; flex-direction: row; flex-wrap: wrap; margin: 0 auto; @@ -88,6 +95,7 @@ a.button1:hover { } .personal-info { + max-height: 60vh; display: flex; flex-direction: column; align-items: center; @@ -105,10 +113,22 @@ a.button1:hover { .chart-container { border-style: solid; - padding: 1em; + display: grid; + grid-column: span 1; position: sticky; height: 10vh; - width: 40vw; + width: 30vw; + margin: 0 auto; + margin-top: 3em; +} + +.footer { + margin: 1em; + padding-top: 10em; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; } /* ***** CARD ***** From 10c8773672f4fd74923c92606c73051ab129e12e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Thu, 30 Sep 2021 10:55:09 +0200 Subject: [PATCH 07/17] more styling --- code/index.html | 5 +- code/script.js | 16 +++--- code/style.css | 148 +++++++++++++++++++++++++----------------------- 3 files changed, 87 insertions(+), 82 deletions(-) diff --git a/code/index.html b/code/index.html index 9fb664e3..ba403aad 100644 --- a/code/index.html +++ b/code/index.html @@ -30,14 +30,11 @@

GitHub Tracker

- +
-
-

-

A github tracer made as a weekly project for technigo

diff --git a/code/script.js b/code/script.js index 7c824f27..aa88ef95 100644 --- a/code/script.js +++ b/code/script.js @@ -11,9 +11,9 @@ const getUserData = () => { personData.innerHTML = `
-

Username: ${data.login}

-
${data.name}
-
${data.location}
+

Full name: ${data.name}

+

Located in ${data.location}, Sweden

+

Github account: ${data.login}

` }) @@ -43,10 +43,10 @@ const getRepos = () => { projects.innerHTML += `
-

-

Recent push ${pushedDate}

-

Branch ${repo.default_branch}

-

Repository ${repo.name}

+

+

Recent push ${pushedDate}

+

Branch ${repo.default_branch}

+

Repository ${repo.name}

` @@ -77,7 +77,7 @@ const getCommits = (url, myRepoName) => { .then((data) => { document.getElementById( `commit-${myRepoName}` - ).innerHTML += `

Amount of commits ${data.length}

` + ).innerHTML += `

Amount of commits ${data.length}

` }) } diff --git a/code/style.css b/code/style.css index cf516db8..4736a724 100644 --- a/code/style.css +++ b/code/style.css @@ -19,7 +19,7 @@ body { .hero { border-bottom: solid; height: 70%; - padding: 3em; + padding: 2em; background: #0f0c29; /* fallback for old browsers */ background: -webkit-linear-gradient( to left, @@ -64,11 +64,12 @@ a.button1:hover { .grid { margin-top: 2em; display: grid; - grid-template-columns: repeat(2, 1fr); + grid-template-columns: repeat(3, 1fr); } .repo-cards { height: 300px; + width: 180px; color: white; font-family: 'Bebas Neue', cursive; margin: 1em; @@ -78,7 +79,6 @@ a.button1:hover { display: flex; flex-wrap: wrap; flex-direction: column-reverse; - width: 200px; border-radius: 1em; box-shadow: 0.25em 0.25em 0.25em grey; background-color: rgb(20, 23, 38); @@ -87,7 +87,7 @@ a.button1:hover { .projects { width: 100%; display: flex; - grid-column: span 1; + grid-column: span 2; flex-direction: row; flex-wrap: wrap; margin: 0 auto; @@ -102,17 +102,21 @@ a.button1:hover { position: sticky; } +.info { + margin: 12px; + letter-spacing: 5px; +} + .img { - max-width: 25em; + max-width: 20em; border-radius: 50%; margin-top: -4em; align-items: center; - border-color: white; + border-color: #cac4ce; border-style: double; } .chart-container { - border-style: solid; display: grid; grid-column: span 1; position: sticky; @@ -124,84 +128,88 @@ a.button1:hover { .footer { margin: 1em; - padding-top: 10em; + padding-top: 2em; display: flex; flex-direction: column; justify-content: center; align-items: center; } -/* ***** CARD ***** +@media screen and (max-width: 780px) { + .hero { + display: flex; + flex-direction: column; + align-items: center; + } -.flip-card { - background-color: transparent; - perspective: 1000px; -} + a.button1 { + font-size: 20px; + } -.flip-card-inner { - position: relative; - transition: transform 1.2s; - transform-style: preserve-3d; -} + .info { + font-size: 25px; + letter-spacing: 0; + } -.flip-card:hover .flip-card-inner { - transform: rotateY(180deg); -} + .img { + margin-top: -2em; + max-width: 40vw; + } -.flip-card-front, .flip-card-back { - position: absolute; - width: 100%; - height: 100%; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; -} + .grid { + display: flex; + flex-direction: column; + } -.flip-card-back { - transform: rotateY(180deg); + .footer { + margin: 0; + padding-top: 0; + } } -.card { - width: 200px; - height: 250px; - overflow: hidden; - border: 5px solid #C9B446; - border-style: double; - margin: 3px; - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-between; -} +@media screen and (max-width: 480px) { + .hero { + display: flex; + flex-direction: column; + align-items: center; + } -.card p { - text-align: center; - margin-bottom: 0; - font-size: 25px; - font-weight: 400; - color: #fff; - font-family: 'Pirata One'; -} + a.button1 { + font-size: 20px; + } -.card .guess { - display: none; - flex-direction: column; - align-items: center; - justify-content: center; - color: white; - text-align: center; - height: inherit; -} + .info { + font-size: 90%; + letter-spacing: 0; + } -.card:hover { - background-color: var(--secondary); -} + .img { + margin-top: -2em; + max-width: 20vw; + } -.card:hover img, -.card:hover p { - display: none; -} + .grid { + display: flex; + flex-direction: cloumn; + } -/* The div with the guess class is only shown on hover */ -/* .card:hover .guess { - display: flex; -} */ + .projects { + align-items: center; + justify-content: center; + display: flex; + flex-direction: row; + } + + .repo-cards { + background-color: #8d86c9; + max-height: 150px; + margin: 10px; + } + + .card-info { + margin: 2px; + } + .chart { + border-style: solid; + } +} From 686c609ec3cf4ee4d0d7a9c8a1c97b6a089afc26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Thu, 30 Sep 2021 13:45:16 +0200 Subject: [PATCH 08/17] styling... --- code/index.html | 7 ++++--- code/script.js | 2 +- code/style.css | 54 ++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/code/index.html b/code/index.html index ba403aad..aa104d41 100644 --- a/code/index.html +++ b/code/index.html @@ -19,7 +19,7 @@

GitHub Tracker

@@ -29,9 +29,10 @@

GitHub Tracker

-
+
+ -
+
diff --git a/code/script.js b/code/script.js index aa88ef95..679d1cf5 100644 --- a/code/script.js +++ b/code/script.js @@ -42,7 +42,7 @@ const getRepos = () => { projects.innerHTML += `
- + Show latest commit message

Recent push ${pushedDate}

Branch ${repo.default_branch}

diff --git a/code/style.css b/code/style.css index 4736a724..070831ef 100644 --- a/code/style.css +++ b/code/style.css @@ -69,8 +69,8 @@ a.button1:hover { .repo-cards { height: 300px; - width: 180px; - color: white; + width: 200px; + color: #0f0c29; font-family: 'Bebas Neue', cursive; margin: 1em; padding: 1em; @@ -81,7 +81,7 @@ a.button1:hover { flex-direction: column-reverse; border-radius: 1em; box-shadow: 0.25em 0.25em 0.25em grey; - background-color: rgb(20, 23, 38); + background-color: #afbfc0; } .projects { @@ -119,11 +119,15 @@ a.button1:hover { .chart-container { display: grid; grid-column: span 1; - position: sticky; height: 10vh; width: 30vw; - margin: 0 auto; - margin-top: 3em; + margin-top: 2em; + margin-bottom: 4em; +} + +#chart.chart { + display: grid; + margin-top: 1em; } .footer { @@ -160,10 +164,36 @@ a.button1:hover { display: flex; flex-direction: column; } + .projects { + align-items: center; + justify-content: center; + display: flex; + flex-direction: row; + } + + .repo-cards { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + background-color: #8d86c9; + max-height: 200px; + min-width: 50%; + margin: 1em; + } - .footer { - margin: 0; - padding-top: 0; + .card-info { + margin: 5px; + } + + .chart-container { + margin-bottom: 2em; + justify-content: center; + align-items: center; + width: 100%; + } + #chart.chart { + padding-bottom: 2em; } } @@ -185,7 +215,7 @@ a.button1:hover { .img { margin-top: -2em; - max-width: 20vw; + max-width: 40vw; } .grid { @@ -209,7 +239,7 @@ a.button1:hover { .card-info { margin: 2px; } - .chart { - border-style: solid; + #chart.chart { + max-width: 100; } } From 308654a333ac6cec4279a305093ce2e0dd2315ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Thu, 30 Sep 2021 23:45:31 +0200 Subject: [PATCH 09/17] added icon and worked on responsiveness --- .DS_Store | Bin 0 -> 6148 bytes code/github_icon.png | Bin 0 -> 89113 bytes code/script.js | 32 ++++++++++++++++++++++---------- code/style.css | 30 +++++++++++++++--------------- 4 files changed, 37 insertions(+), 25 deletions(-) create mode 100644 .DS_Store create mode 100644 code/github_icon.png diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3c779262d5fd0e14beaec2d5e51cf60f68bfa4c5 GIT binary patch literal 6148 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 z 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 D3Rll~ literal 0 HcmV?d00001 diff --git a/code/script.js b/code/script.js index 679d1cf5..fb111063 100644 --- a/code/script.js +++ b/code/script.js @@ -10,7 +10,7 @@ const getUserData = () => { .then((data) => { personData.innerHTML = `

- +

Full name: ${data.name}

Located in ${data.location}, Sweden

Github account: ${data.login}

@@ -40,13 +40,18 @@ const getRepos = () => { } ) - projects.innerHTML += `
+ projects.innerHTML += ` - Show latest commit message -

-

Recent push ${pushedDate}

-

Branch ${repo.default_branch}

-

Repository ${repo.name}

+
+ +

+

Recent push ${pushedDate}

+

Branch ${repo.default_branch}

+

Repository ${repo.name}

+
` @@ -65,8 +70,12 @@ const getPR = (repos) => { // console.log(data.review_comments_url) const myPR = data.find((pull) => pull.user.login === repo.owner.login) const myCommits = myPR.commits_url - // console.log(myCommits) - getCommits(myCommits, repo.name) + if (myPR) { + getCommits(myCommits, repo.name) + } else { + document.getElementById(`commit-${repo.name}`).innerHTML += + 'No pull request yet done :(' + } }) }) } @@ -75,9 +84,12 @@ const getCommits = (url, myRepoName) => { fetch(url) .then((res) => res.json()) .then((data) => { + let commitMessage = data[data.length - 1].commit.message document.getElementById( `commit-${myRepoName}` - ).innerHTML += `

Amount of commits ${data.length}

` + ).innerHTML += `

Amount of commits ${data.length}

+

${commitMessage}

+ ` }) } diff --git a/code/style.css b/code/style.css index 070831ef..ebb61794 100644 --- a/code/style.css +++ b/code/style.css @@ -68,22 +68,32 @@ a.button1:hover { } .repo-cards { - height: 300px; - width: 200px; + height: 350px; + width: 250px; color: #0f0c29; font-family: 'Bebas Neue', cursive; margin: 1em; padding: 1em; align-items: center; - justify-content: center; + justify-content: space-between; display: flex; flex-wrap: wrap; flex-direction: column-reverse; border-radius: 1em; - box-shadow: 0.25em 0.25em 0.25em grey; + box-shadow: rgba(50, 50, 93, 0.25) 0px 30px 60px -12px inset, + rgba(0, 0, 0, 0.3) 0px 18px 36px -18px inset; background-color: #afbfc0; } +.logo { + height: 30px; +} + +.small-logo { + display: flex; + width: 100%; +} + .projects { width: 100%; display: flex; @@ -91,7 +101,6 @@ a.button1:hover { flex-direction: row; flex-wrap: wrap; margin: 0 auto; - align-items: center; } .personal-info { @@ -130,15 +139,6 @@ a.button1:hover { margin-top: 1em; } -.footer { - margin: 1em; - padding-top: 2em; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - @media screen and (max-width: 780px) { .hero { display: flex; @@ -175,7 +175,7 @@ a.button1:hover { display: flex; align-items: center; justify-content: center; - flex-direction: column; + flex-direction: column-reverse; background-color: #8d86c9; max-height: 200px; min-width: 50%; From 4c777855848b6edbd0c6b373550f0b5c9fa3aa6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Thu, 30 Sep 2021 23:49:15 +0200 Subject: [PATCH 10/17] header icon --- code/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/index.html b/code/index.html index aa104d41..0585bec6 100644 --- a/code/index.html +++ b/code/index.html @@ -16,7 +16,7 @@
-

GitHub Tracker

+

GitHub Tracker

Start the Github tracker From 188f0314ac1c593e7e89c8b4ecb49b79daa1324f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Fri, 1 Oct 2021 00:07:22 +0200 Subject: [PATCH 11/17] responsiveness --- code/index.html | 7 +++---- code/style.css | 11 +++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/code/index.html b/code/index.html index 0585bec6..eabdd761 100644 --- a/code/index.html +++ b/code/index.html @@ -18,12 +18,11 @@

GitHub Tracker

-
- +
diff --git a/code/style.css b/code/style.css index ebb61794..cff0478c 100644 --- a/code/style.css +++ b/code/style.css @@ -111,6 +111,12 @@ a.button1:hover { position: sticky; } +.btn-div { + display: flex; + justify-content: center; + align-items: center; +} + .info { margin: 12px; letter-spacing: 5px; @@ -231,9 +237,10 @@ a.button1:hover { } .repo-cards { + justify-content: space-between; background-color: #8d86c9; - max-height: 150px; - margin: 10px; + max-height: 200px; + margin: 15px; } .card-info { From 5071ca058aa1ad6eab3879cc96419656d0687046 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Fri, 1 Oct 2021 00:46:20 +0200 Subject: [PATCH 12/17] header update --- code/index.html | 5 +++++ code/style.css | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/code/index.html b/code/index.html index eabdd761..d10dcf7b 100644 --- a/code/index.html +++ b/code/index.html @@ -17,6 +17,11 @@

GitHub Tracker

+
+
+
+
+
diff --git a/code/style.css b/code/style.css index cff0478c..4c35c5ba 100644 --- a/code/style.css +++ b/code/style.css @@ -17,6 +17,10 @@ body { } .hero { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-end; border-bottom: solid; height: 70%; padding: 2em; @@ -144,6 +148,36 @@ a.button1:hover { display: grid; margin-top: 1em; } +.spinner { + position: static; + border-style: solid; + /* margin: auto; */ + height: 100px; + width: 100px; + border-radius: 50%; + border-bottom: none; + border-left: none; + animation: spin 4.5s infinite linear reverse; +} +.spinner2 { + margin: 25px auto; + height: 50px; + width: px; + animation: spin 2s infinite linear; +} + +.spinner3 { + margin: 25px auto; + height: 20px; + width: 20px; + animation: spin 1s infinite linear reverse; +} + +@keyframes spin { + 100% { + transform: rotate(360deg); + } +} @media screen and (max-width: 780px) { .hero { From 70f23e2a2fe6d82f69529810a5ae1bc762ee6604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Fri, 1 Oct 2021 08:53:15 +0200 Subject: [PATCH 13/17] fixed mobile card width --- code/style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/code/style.css b/code/style.css index 4c35c5ba..c51ee7aa 100644 --- a/code/style.css +++ b/code/style.css @@ -275,6 +275,7 @@ a.button1:hover { background-color: #8d86c9; max-height: 200px; margin: 15px; + width: 90%; } .card-info { From 817fb20ef91de4744cbba0dfc7638079fcea0127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Fri, 1 Oct 2021 09:20:52 +0200 Subject: [PATCH 14/17] fixed if else statement --- code/script.js | 5 ++--- code/style.css | 11 ++++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/code/script.js b/code/script.js index fb111063..e2da585f 100644 --- a/code/script.js +++ b/code/script.js @@ -69,11 +69,10 @@ const getPR = (repos) => { .then((data) => { // console.log(data.review_comments_url) const myPR = data.find((pull) => pull.user.login === repo.owner.login) - const myCommits = myPR.commits_url if (myPR) { - getCommits(myCommits, repo.name) + getCommits(myPR.commits_url, repo.name) } else { - document.getElementById(`commit-${repo.name}`).innerHTML += + document.getElementById(`commit-${repo.name}`).innerHTML = 'No pull request yet done :(' } }) diff --git a/code/style.css b/code/style.css index c51ee7aa..daa01b4f 100644 --- a/code/style.css +++ b/code/style.css @@ -208,22 +208,23 @@ a.button1:hover { align-items: center; justify-content: center; display: flex; - flex-direction: row; + flex-wrap: nowrap; + flex-direction: column; } .repo-cards { display: flex; align-items: center; - justify-content: center; + justify-content: space-evenly; flex-direction: column-reverse; background-color: #8d86c9; - max-height: 200px; - min-width: 50%; + width: 80%; margin: 1em; } .card-info { - margin: 5px; + margin: 10px; + font-size: 1em; } .chart-container { From a2826c176ffc914774c39dd3a3a794c28d8a09ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Fri, 1 Oct 2021 22:22:18 +0200 Subject: [PATCH 15/17] mobile view update --- code/script.js | 2 +- code/style.css | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/script.js b/code/script.js index e2da585f..3878b536 100644 --- a/code/script.js +++ b/code/script.js @@ -87,7 +87,7 @@ const getCommits = (url, myRepoName) => { document.getElementById( `commit-${myRepoName}` ).innerHTML += `

Amount of commits ${data.length}

-

${commitMessage}

+

${commitMessage}

` }) } diff --git a/code/style.css b/code/style.css index daa01b4f..44b5c6cc 100644 --- a/code/style.css +++ b/code/style.css @@ -162,7 +162,7 @@ a.button1:hover { .spinner2 { margin: 25px auto; height: 50px; - width: px; + width: 50px; animation: spin 2s infinite linear; } @@ -268,7 +268,7 @@ a.button1:hover { align-items: center; justify-content: center; display: flex; - flex-direction: row; + flex-direction: column; } .repo-cards { From 5dcb61fe639321a2a17cb24e69fd69922def5095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Sun, 3 Oct 2021 11:44:25 +0200 Subject: [PATCH 16/17] read me updated --- README.md | 15 ++++++++++----- code/index.html | 1 - code/script.js | 10 ++++++++-- code/style.css | 10 +++++----- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 1613a3b0..ac5d574e 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,18 @@ # 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 assignment was structued to create fetch functions to showcase data coming from Githubs API. +Part of the assigment was to design a page that would show fetched data. ## 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? +First of I started by creating all the main functions that I would need to fullfill the blue requirements. +I used HTML, CSS and Javascript languages to write my code in VS code and deployed my site through netlify. + +Secondly I decided on a simple HTML CSS styling that would focus on the fetched data. I made the site responsive through all viewports and added very few animations to make the site look and feel proffesional and to the point. + +If I had more time I would make my site Universal to any github account instead of Personal. ## 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. +Here is a link to my project. +https://githubtrace.netlify.app/ diff --git a/code/index.html b/code/index.html index d10dcf7b..98d8dde9 100644 --- a/code/index.html +++ b/code/index.html @@ -34,7 +34,6 @@

GitHub Tracker

-
diff --git a/code/script.js b/code/script.js index 3878b536..4cc6d34f 100644 --- a/code/script.js +++ b/code/script.js @@ -4,6 +4,7 @@ const USER = 'jakobxlindstrom' const USER_URL = `https://api.github.com/users/${USER}` const tracerBtn = document.getElementById('tracerBtn') +// This function simply fetches and presents my user data through innerhtml. const getUserData = () => { fetch(USER_URL) .then((res) => res.json()) @@ -19,6 +20,8 @@ const getUserData = () => { }) } +// Inside this function I fetch all the repositories connceted to my github account, presents fetched data and also invokes +// the chart and the next function getPR. const getRepos = () => { fetch(`https://api.github.com/users/${USER}/repos`) .then((res) => res.json()) @@ -60,6 +63,8 @@ const getRepos = () => { getPR(filtered) }) } +// The pull reguest function fetches all the pull requests where I have been repository owner on github, +//otherwise a else message will appear tell otherwise. const getPR = (repos) => { repos.forEach((repo) => { fetch( @@ -67,7 +72,6 @@ const getPR = (repos) => { ) .then((res) => res.json()) .then((data) => { - // console.log(data.review_comments_url) const myPR = data.find((pull) => pull.user.login === repo.owner.login) if (myPR) { getCommits(myPR.commits_url, repo.name) @@ -79,6 +83,7 @@ const getPR = (repos) => { }) } +// This function gets the commits of each pull request and presents it together with earlier fetched data in the "repo cards" const getCommits = (url, myRepoName) => { fetch(url) .then((res) => res.json()) @@ -92,12 +97,13 @@ const getCommits = (url, myRepoName) => { }) } +// When launching the site this function is invoked directly, simultaing a "landing" feeling before pushing the tracker button getUserData() { } -// add eventlistener here +// This addEventListener makes it possible to view the fetched data by a button click under the userdata tracerBtn.addEventListener('click', (event) => { event.preventDefault() getRepos() diff --git a/code/style.css b/code/style.css index 44b5c6cc..18445183 100644 --- a/code/style.css +++ b/code/style.css @@ -148,6 +148,7 @@ a.button1:hover { display: grid; margin-top: 1em; } + .spinner { position: static; border-style: solid; @@ -231,7 +232,7 @@ a.button1:hover { margin-bottom: 2em; justify-content: center; align-items: center; - width: 100%; + width: 90%; } #chart.chart { padding-bottom: 2em; @@ -261,7 +262,7 @@ a.button1:hover { .grid { display: flex; - flex-direction: cloumn; + flex-direction: column; } .projects { @@ -274,15 +275,14 @@ a.button1:hover { .repo-cards { justify-content: space-between; background-color: #8d86c9; - max-height: 200px; margin: 15px; - width: 90%; + max-width: 90%; } .card-info { margin: 2px; } #chart.chart { - max-width: 100; + max-width: 90%; } } From c4033b7b30b50c6a5311c5d53f7c148ce8f7a5a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakob=20Lindstr=C3=B6m?= Date: Sat, 9 Oct 2021 11:10:11 +0200 Subject: [PATCH 17/17] changed styling by class from styling by id --- code/style.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/style.css b/code/style.css index 18445183..7dfeb483 100644 --- a/code/style.css +++ b/code/style.css @@ -144,7 +144,7 @@ a.button1:hover { margin-bottom: 4em; } -#chart.chart { +.chart { display: grid; margin-top: 1em; } @@ -152,7 +152,6 @@ a.button1:hover { .spinner { position: static; border-style: solid; - /* margin: auto; */ height: 100px; width: 100px; border-radius: 50%; @@ -234,7 +233,7 @@ a.button1:hover { align-items: center; width: 90%; } - #chart.chart { + .chart { padding-bottom: 2em; } } @@ -282,7 +281,8 @@ a.button1:hover { .card-info { margin: 2px; } - #chart.chart { + .chart { + margin-left: 2em; max-width: 90%; } }