From 8e23f07af07747eadb884bcd82d61b484cb94058 Mon Sep 17 00:00:00 2001 From: obada othman Date: Sun, 9 Aug 2020 21:39:55 +0200 Subject: [PATCH 01/17] Finished JS Exercises, project still needs some css work --- .DS_Store | Bin 6148 -> 8196 bytes Week1/.DS_Store | Bin 0 -> 6148 bytes Week1/js-exercises/.DS_Store | Bin 0 -> 6148 bytes Week1/js-exercises/.Rhistory | 0 Week1/js-exercises/ex1-bookList.html | 27 ++++++----- Week1/js-exercises/ex1-bookList.js | 55 ++++++++++++++++++---- Week1/js-exercises/ex2-aboutMe.html | 39 +++++++++------- Week1/js-exercises/ex2-aboutMe.js | 19 +++++++- Week1/js-exercises/ex3-hijackLogo.js | 5 +- Week1/js-exercises/ex4-whatsTheTime.html | 13 +++++- Week1/js-exercises/ex4-whatsTheTime.js | 10 +++- Week1/js-exercises/ex5-catWalk.html | 23 ++++----- Week1/js-exercises/ex5-catWalk.js | 40 +++++++++++++++- Week1/project/index.css | 57 +++++++++++++++++++++++ Week1/project/index.html | 21 ++++++++- Week1/project/index.js | 20 +++++++- 16 files changed, 269 insertions(+), 60 deletions(-) create mode 100644 Week1/.DS_Store create mode 100644 Week1/js-exercises/.DS_Store create mode 100644 Week1/js-exercises/.Rhistory diff --git a/.DS_Store b/.DS_Store index 19f35c2d407a08177dbf67c9e46b596ee6108156..d6bd3ccbb0c08515a6706b0b635d3550f1e5dd09 100644 GIT binary patch literal 8196 zcmeHM-EI;=6h70^c0rBQm=y2!#>5LsfR)z7m>`7<5;aDQy-?FG-7TQoUBWIBMGQB- zgZc(OicjE!_yGFNk9Ao}Vxlo^okM26`8nSl=G$d=&q743HgrlvIU+JpIA$-PI>Gon zFLSn}M%IB0e4>cLrWYKvy`Vkktp~IMS^=$qRzNGD6*vtF;GWIRSa9E$v%1y_Xa)XD z1^D&BMB!LfIF%?a9jHVK08C+67~04K1jkfZRXCL>s8~~G4@^;+N->zEW8UQMz^cNj zL`f$m>BLlIrZN;JqJw7&cVbnEy4DJ41?Cmtx%(>F6yoD1@^}7Ix{Y$Cg~!4#o7lS$gxxL&%`+&_B#X8d;Y?jyDXW9mLYmu3IB{)ARcj90CJ?*)E`Q)Xt$37Poe zK3S&nDU+#GDd)}d)~&xNQ+c6G)~rnYjAlmcjQ%CHb^c|t5;EbG(WVtRs|qa3FP`K1 ze`E3c|FgP1{k^pUT7lnCfTilKdJT?0pQ(}@o@<*Z`zYMF-&CTYpc3ggP^9C)<39}1 fHsQ)SRfSWD7=ius7Xg3pG^y|Z;*ja;94PPuWDt2h delta 119 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{Mvv5r;6q~50$j<_j2a6dcl@}LmOjygz$g){c zn458Pn8*jF#q1m$g3LfQKp?;kBwRsyHx_ka5Q4nn zAAmpLQ}_Ztgb#o-4^SSB#HylbZgl6&lXcs84p{Nb~df*3YF zX;(D0Bfk0hP?P>5FAINtFcmu78p}hprSH;#bAn#dPm2( z8Y_j0PE21un0_+THxwqHj{Y4PPRvzkQlo%TU|NA?Rcwg!e`oRif0|@UMggP1f29Dc z^}Jpee@UOMbAL{pwGR9cE=Y5S`H!Q9&ajT3%^mAbwOfM~H=>m4dBF3?}j9iWs!K#{b}7@b~!x^v%p7 zm%CiB5|x>-^EP|?W@aDU?ky2tT9n*#FgZqk6BsYUyge}5k0NHWow} z)1<(DE3g~NK0yAiRxm}*3yf7{=bZw7y^>$b%`XM6t^E+WhuE{msGzU=S4wx-$(k4` zRL}2)2-}+d2oatTql?-nbcNmkegy3**P$xD=2YDJMx;_bBx>fPn3~6^r?1sq!zWnN zA~o}TQ*$1_lv~xzb5V-hpHTp3wpe}5(7h|*3b+Da3dsHtp$WzTGeg}v;PeUrtYKIU zefdBTP82W>m>J>;jExF3Du*iu8y(|Om=_1k42@14E*~5+bGV_fW=H%;rxVA9?p*;_ zU{--;``eK7|Fru4KTGm|u7E4>uN2@~=d#nrlET?qTAZA<5!wx!n9R!zl>!%zW9`UM cyo;uWXOVP(alp(FBQXCEP#N600zaz2C$?^$bpQYW literal 0 HcmV?d00001 diff --git a/Week1/js-exercises/.Rhistory b/Week1/js-exercises/.Rhistory new file mode 100644 index 000000000..e69de29bb diff --git a/Week1/js-exercises/ex1-bookList.html b/Week1/js-exercises/ex1-bookList.html index b3864ac18..22837bd17 100644 --- a/Week1/js-exercises/ex1-bookList.html +++ b/Week1/js-exercises/ex1-bookList.html @@ -1,17 +1,16 @@ + + + + Book List + - - - - Book List - - - -

My Book List

-
- -
- - - \ No newline at end of file + +

My Book List

+
+ +
+ + + diff --git a/Week1/js-exercises/ex1-bookList.js b/Week1/js-exercises/ex1-bookList.js index 2db54ba5e..93dee35ef 100644 --- a/Week1/js-exercises/ex1-bookList.js +++ b/Week1/js-exercises/ex1-bookList.js @@ -18,25 +18,62 @@ function createBookList(books) { // your code goes in here, return the ul element + + const ulElement = document.createElement('ul'); + const bookList = document.getElementById('bookList'); + const header = document.querySelector('h1'); + + bookList.appendChild(ulElement); + + for (let i = 0; i < books.length; i++) { + const book = books[i]; + const bookLi = document.createElement('li'); + const p = document.createElement('p'); + + p.textContent = book.title + ' - ' + book.author; + if (book.alreadyRead === false) { + bookLi.style.backgroundColor = 'red'; + } else { + bookLi.style.backgroundColor = 'green'; + } + const image = document.createElement('img'); + header.style.textAlign = 'center'; + image.setAttribute('src', book.imgURL); + image.setAttribute('width', '150'); + image.setAttribute('height', '200'); + image.style.display = 'block'; + image.style.margin = 'auto'; + bookLi.style.listStyle = 'none'; + bookLi.style.width = '30%'; + bookLi.style.display = 'inline-block'; + bookLi.style.margin = '1em'; + p.style.textAlign = 'center'; + bookLi.appendChild(image); + ulElement.appendChild(bookLi); + bookLi.appendChild(p); + } } -const books = [{ +const books = [ + { title: 'The Design of Everyday Things', author: 'Don Norman', - alreadyRead: false + alreadyRead: false, + imgURL: 'https://miro.medium.com/max/500/1*Qo27inBKBKY4Q4Pgk5KkbQ.png', }, { title: 'The Most Human Human', author: 'Brian Christian', - alreadyRead: true + alreadyRead: true, + imgURL: + 'https://images-na.ssl-images-amazon.com/images/I/41m1rQjm5tL._SX322_BO1,204,203,200_.jpg', }, { title: 'The Pragmatic Programmer', author: 'Andrew Hunt', - alreadyRead: true - } + alreadyRead: true, + imgURL: + 'https://images-na.ssl-images-amazon.com/images/I/418M2053aNL._SX396_BO1,204,203,200_.jpg', + }, ]; - -let ulElement = createBookList(books); - -document.querySelector("#bookList").appendChild(ulElement); \ No newline at end of file +const ulElement = createBookList(books); diff --git a/Week1/js-exercises/ex2-aboutMe.html b/Week1/js-exercises/ex2-aboutMe.html index 5e77f49a6..dd1cf58da 100644 --- a/Week1/js-exercises/ex2-aboutMe.html +++ b/Week1/js-exercises/ex2-aboutMe.html @@ -1,24 +1,27 @@ + + + About Me - - - About Me + + + - + +

About Me

- +
    +
  • Nickname:
  • +
  • Favorite food:
  • +
  • Hometown:
  • +
- -

About Me

- -
    -
  • Nickname:
  • -
  • Favorite food:
  • -
  • Hometown:
  • -
- - - - - \ No newline at end of file + + + + diff --git a/Week1/js-exercises/ex2-aboutMe.js b/Week1/js-exercises/ex2-aboutMe.js index 2244d7d30..2487d186f 100644 --- a/Week1/js-exercises/ex2-aboutMe.js +++ b/Week1/js-exercises/ex2-aboutMe.js @@ -8,4 +8,21 @@ 4. Iterate through each li and change the class to "list-item". 5. See HTML 6. Create a new img element and set its src attribute to a picture of you.Append that element to the page. - */ \ No newline at end of file + */ +document.querySelector('body').style.fontFamily = 'arial, sans-serif'; +document.getElementById('nickname').textContent = 'Obi'; +document.getElementById('fav-food').textContent = 'Mlokhia'; +document.getElementById('hometown').textContent = 'Jableh'; +// const list = document.getElementsByTagName('ul'); +const listItem = document.querySelectorAll('li'); +for (i = 0; i < listItem.length; i++) { + listItem[i].classList.add('list-item'); +} + +const image = document.createElement('img'); +image.setAttribute( + 'src', + 'https://lh3.googleusercontent.com/VS3TUXwHJ76hz7elaV21G2QuRNISmOZsa97OU5uu3jBdktsQ6qrir_oX-VgTQJtidj2dYa3b8QP9dVEWCFzkYZaBTNPKjq2tdmmKU3LN9TkOqZcb5LrBdqWSTUIEz0sMVivfJ-FsV7U=w2400', +); +image.setAttribute('width', '400'); +document.body.appendChild(image); diff --git a/Week1/js-exercises/ex3-hijackLogo.js b/Week1/js-exercises/ex3-hijackLogo.js index 5ca291435..fc4609195 100644 --- a/Week1/js-exercises/ex3-hijackLogo.js +++ b/Week1/js-exercises/ex3-hijackLogo.js @@ -14,6 +14,9 @@ function hijackGoogleLogo() { // your code goes in here + const googleLogo = document.getElementById('hplogo'); + googleLogo.setAttribute('src', 'https://www.hackyourfuture.dk/static/logo-dark.svg'); + googleLogo.setAttribute('srcset', 'https://www.hackyourfuture.dk/static/logo-dark.svg'); } -hijackGoogleLogo(); \ No newline at end of file +hijackGoogleLogo(); diff --git a/Week1/js-exercises/ex4-whatsTheTime.html b/Week1/js-exercises/ex4-whatsTheTime.html index 2c357e7cd..9293254d5 100644 --- a/Week1/js-exercises/ex4-whatsTheTime.html +++ b/Week1/js-exercises/ex4-whatsTheTime.html @@ -1,4 +1,15 @@ \ No newline at end of file +--> + + + + + + What's the time + + + + + diff --git a/Week1/js-exercises/ex4-whatsTheTime.js b/Week1/js-exercises/ex4-whatsTheTime.js index 4024c1016..9e7010ca6 100644 --- a/Week1/js-exercises/ex4-whatsTheTime.js +++ b/Week1/js-exercises/ex4-whatsTheTime.js @@ -10,9 +10,15 @@ 4. Have the function execute when it 's loading in the browser */ - +document.addEventListener('DOMContentLoaded', displayCurrentTime); function displayCurrentTime() { // your code goes in here + const day = new Date(); + + const currentTime = day.toLocaleTimeString(); + + const body = document.querySelector('body'); + body.innerHTML = currentTime; } -setInterval(displayCurrentTime, 1000); \ No newline at end of file +setInterval(displayCurrentTime, 1000); diff --git a/Week1/js-exercises/ex5-catWalk.html b/Week1/js-exercises/ex5-catWalk.html index 0f04792f7..b888aa0d0 100644 --- a/Week1/js-exercises/ex5-catWalk.html +++ b/Week1/js-exercises/ex5-catWalk.html @@ -1,15 +1,16 @@ + + + Cat Walk + - - - Cat Walk - + + - - - - - - - \ No newline at end of file + + + diff --git a/Week1/js-exercises/ex5-catWalk.js b/Week1/js-exercises/ex5-catWalk.js index 309eca0eb..f7a15d7bf 100644 --- a/Week1/js-exercises/ex5-catWalk.js +++ b/Week1/js-exercises/ex5-catWalk.js @@ -10,4 +10,42 @@ 5. When the cat reaches the right - hand of the screen, restart them at the left hand side("0px").So they should keep walking from left to right across the screen, forever and ever. 6. When the cat reaches the middle of the screen, replace the img with an image of a cat dancing(use this URL: https: //tenor.com/StFI.gif), keep it dancing for 5 seconds, and then replace the img with the original image and have it continue the walk. -*/ \ No newline at end of file +*/ +// debugger; +let leftPos = 0, + interval; +const catImg = document.querySelector('img'); +const halfWidth = (window.innerWidth - catImg.width) / 2; +const body = document.querySelector('body'); +const stepLength = 10; + +function catWalk() { + if (leftPos < halfWidth) { + catImg.style.left = leftPos + 'px'; + leftPos += stepLength; + } + + // Couldn't figure out how to make this happen at exactly the middle of the screen ! + if (leftPos == Math.ceil(halfWidth / 10) * 10) { + console.log('middle'); + clearInterval(interval); + + catImg.src = 'https://media1.tenor.com/images/2de63e950fb254920054f9bd081e8157/tenor.gif'; + + setTimeout(() => { + catImg.src = 'http://www.anniemation.com/clip_art/images/cat-walk.gif'; + + interval = setInterval(catWalk, 50); + }, 5000); + } + if (leftPos > halfWidth && leftPos < window.innerWidth) { + catImg.style.left = leftPos + 'px'; + leftPos += stepLength; + } + if (leftPos > window.innerWidth) { + leftPos = 0; + } +} + +interval = setInterval(catWalk, 50); +catWalk(); diff --git a/Week1/project/index.css b/Week1/project/index.css index e69de29bb..2f703f070 100644 --- a/Week1/project/index.css +++ b/Week1/project/index.css @@ -0,0 +1,57 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + /* border: 1px solid red; */ +} +body { + background-color: antiquewhite; +} +.container { + width: 80%; + margin: 15em auto; + display: flex; + flex-wrap: wrap; +} +button { + display: block; + align-self: flex-end; + /* margin-left: 50em; */ + /* margin-top: 9em; */ + background-color: orange; + padding: 1.5em; + border-radius: 5px; + position: absolute; + font-size: 0.9em; + color: white; + border: none; +} + +blockquote { + background: #f9f9f9; + border-left: 10px solid #ccc; + margin: 0 auto; + padding: 0.5em 1em; + quotes: '\201C''\201D''\2018''\2019'; + width: 80%; + display: block; + height: 20em; + margin-top: 2em; + /* position: relative; */ + border-radius: 5px; +} +blockquote:before { + color: black; + content: open-quote; + font-size: 8em; + line-height: 1em; + margin-right: 0.25em; + vertical-align: -0.1em; +} +blockquote p { + display: block; + /* margin-top: -3.5em; */ + width: 60%; + margin: -2em auto; + font-size: 1.3em; +} diff --git a/Week1/project/index.html b/Week1/project/index.html index 87d3c8b86..c18b8ff63 100644 --- a/Week1/project/index.html +++ b/Week1/project/index.html @@ -1 +1,20 @@ - \ No newline at end of file + + + + + + + + Quote generator + + +
+
+

+

+ +
+
+ + + diff --git a/Week1/project/index.js b/Week1/project/index.js index 8427aa356..c8a1fb1d2 100644 --- a/Week1/project/index.js +++ b/Week1/project/index.js @@ -1 +1,19 @@ -// your code goes in here \ No newline at end of file +// your code goes in here +const quotes = [ + { text: 'text1', author: 'name1' }, + { text: 'text2', author: 'name2' }, + { text: 'text3', author: 'name3' }, + { text: 'text4', author: 'name4' }, + { text: 'text5', author: 'name5' }, + { text: 'text6', author: 'name6' }, +]; +const button = document.getElementById('button'); +function showRandomQuote() { + const quoteContainer = document.getElementById('quote'); + const authorContainer = document.getElementById('author'); + const quote = quotes[Math.floor(Math.random() * quotes.length)]; + quoteContainer.innerHTML = quote.text; + authorContainer.innerHTML = quote.author; + // return; +} +button.addEventListener('click', showRandomQuote); From 11ad64c0ca4898e0193d486673b7851cdb7b274a Mon Sep 17 00:00:00 2001 From: obada othman Date: Mon, 10 Aug 2020 04:27:16 +0200 Subject: [PATCH 02/17] Finished project (Quotes Generator) --- Week1/project/index.css | 130 ++++++++++++++++++++++++++------------- Week1/project/index.html | 58 +++++++++++------ Week1/project/index.js | 41 ++++++++---- 3 files changed, 154 insertions(+), 75 deletions(-) diff --git a/Week1/project/index.css b/Week1/project/index.css index 2f703f070..8b86535d8 100644 --- a/Week1/project/index.css +++ b/Week1/project/index.css @@ -1,57 +1,99 @@ +@import url('https://fonts.googleapis.com/css2?family=Lobster+Two:wght@400;700&family=Ubuntu:wght@300;400;500;700&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; - /* border: 1px solid red; */ + font-family: 'Ubuntu', sans-serif; } body { - background-color: antiquewhite; -} -.container { - width: 80%; - margin: 15em auto; + background-color: #22313f; + height: 100vh; display: flex; - flex-wrap: wrap; -} -button { - display: block; - align-self: flex-end; - /* margin-left: 50em; */ - /* margin-top: 9em; */ - background-color: orange; - padding: 1.5em; + justify-content: center; + align-items: center; +} +.quote-wrapper { + width: 450px; + height: 370px; + margin: 0 10px; +} + +.quote-heading { + text-align: center; + margin-bottom: 30px; +} + +.quote-heading h2 { + font-family: 'Lobster Two', cursive; + font-weight: 400; + color: #fff; +} + +.quote-body { + width: 100%; + height: 220px; + padding: 50px 35px; + background-color: #fff; border-radius: 5px; - position: absolute; - font-size: 0.9em; - color: white; - border: none; } -blockquote { - background: #f9f9f9; - border-left: 10px solid #ccc; - margin: 0 auto; - padding: 0.5em 1em; - quotes: '\201C''\201D''\2018''\2019'; - width: 80%; - display: block; - height: 20em; - margin-top: 2em; - /* position: relative; */ +.icon-quote { + text-align: center; + font-size: 18px; + color: #747d8c; + height: 42px; + overflow: auto; +} + +.icon { + margin-right: 10px; +} + +.author { + text-align: right; + margin-top: 15px; +} + +.quote-buttons { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 12px; + border-top: 1px solid #93a0ac; + padding: 7px 0; +} + +.social a { + font-size: 40px; + color: #455261; + transition: 0.3s ease; +} + +.social a:hover { + color: #00acee; +} + +.btn button { + border: none; + outline: none; + padding: 10px 15px; + background-color: #455261; + color: #fff; border-radius: 5px; + font-size: 16px; + cursor: pointer; +} + +.quote-buttons button:hover { + background-color: #eccc68; } -blockquote:before { - color: black; - content: open-quote; - font-size: 8em; - line-height: 1em; - margin-right: 0.25em; - vertical-align: -0.1em; -} -blockquote p { - display: block; - /* margin-top: -3.5em; */ - width: 60%; - margin: -2em auto; - font-size: 1.3em; +::-webkit-scrollbar { + width: 6px; +} +::-webkit-scrollbar-track { + background-color: #ddd; +} +::-webkit-scrollbar-thumb { + background-color: #2f3542; + border-radius: 5px; } diff --git a/Week1/project/index.html b/Week1/project/index.html index c18b8ff63..d702f561c 100644 --- a/Week1/project/index.html +++ b/Week1/project/index.html @@ -1,20 +1,42 @@ - - - - - - - Quote generator - - -
-
-

-

- -
+ + + + Quote Generator + + + + + +
+
+

Quote Generator

- - - + +
+
+ + + + Click the button to be quoted! +
+
― Obi
+ +
+ + +
+ +
+
+
+
+ + diff --git a/Week1/project/index.js b/Week1/project/index.js index c8a1fb1d2..3b3f740c2 100644 --- a/Week1/project/index.js +++ b/Week1/project/index.js @@ -1,19 +1,34 @@ // your code goes in here const quotes = [ - { text: 'text1', author: 'name1' }, - { text: 'text2', author: 'name2' }, - { text: 'text3', author: 'name3' }, - { text: 'text4', author: 'name4' }, - { text: 'text5', author: 'name5' }, - { text: 'text6', author: 'name6' }, + { text: 'Compassion is the chief law of human existence', author: '_Fyodor Dostoyvsky' }, + { + text: + 'What matters in life is not what happens to you but what you remember and how you remember it', + author: '_Gabriel Garcia Marquez', + }, + { text: 'To be free of belief and unbelief is my religion', author: '_Omar Khayyam' }, + { text: 'Why so serious?', author: '_Joker' }, + { + text: + 'Self-love is a good thing but self-awareness is more important. You need to once in a while go ‘Uh, I’m kind of an asshole.', + author: '_Louis C.K.', + }, + { + text: + "My mama always said life was like a box of chocolates. You never know what you're gonna get.", + author: '_Forrest Gump', + }, ]; -const button = document.getElementById('button'); +const colors = ['#F79F1F', '#EE5A24', '#0652DD', '#0c2461', '#0a3d62', '#78e08f']; +const button = document.getElementById('quote-btn'); function showRandomQuote() { - const quoteContainer = document.getElementById('quote'); - const authorContainer = document.getElementById('author'); - const quote = quotes[Math.floor(Math.random() * quotes.length)]; - quoteContainer.innerHTML = quote.text; - authorContainer.innerHTML = quote.author; - // return; + const quoteContainer = document.querySelector('.quote'); + const authorContainer = document.querySelector('.author'); + const body = document.querySelector('body'); + const randomQuote = quotes[Math.floor(Math.random() * quotes.length)]; + const randomColor = colors[Math.floor(Math.random() * colors.length)]; + quoteContainer.innerHTML = randomQuote.text; + authorContainer.innerHTML = randomQuote.author; + body.style.backgroundColor = randomColor; } button.addEventListener('click', showRandomQuote); From 708cc74106033846e9066f3f50dacb67bf1041d0 Mon Sep 17 00:00:00 2001 From: obada othman Date: Tue, 11 Aug 2020 18:59:55 +0200 Subject: [PATCH 03/17] Finished ex1 & ex2 --- Week2/js-exercises/ex1-oddOnesOut.js | 26 ++++++++++++------- .../js-exercises/ex2-whatsYourMondayWorth.js | 20 +++++++++++--- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/Week2/js-exercises/ex1-oddOnesOut.js b/Week2/js-exercises/ex1-oddOnesOut.js index 4f42050ac..03ca79372 100644 --- a/Week2/js-exercises/ex1-oddOnesOut.js +++ b/Week2/js-exercises/ex1-oddOnesOut.js @@ -7,15 +7,23 @@ The function should still behave the same. */ +// function doubleEvenNumbers(numbers) { +// const newNumbers = []; +// for (let i = 0; i < numbers.length; i++) { +// if (numbers[i] % 2 === 0) { +// newNumbers.push(numbers[i] * 2); +// } +// } +// return newNumbers; +// } + +// const myNumbers = [1, 2, 3, 4]; +// console.log(doubleEvenNumbers(myNumbers)); // Logs "[4, 8]" to the console + +const myNumbers = [1, 2, 3, 4]; function doubleEvenNumbers(numbers) { - const newNumbers = []; - for (let i = 0; i < numbers.length; i++) { - if (numbers[i] % 2 === 0) { - newNumbers.push(numbers[i] * 2); - } - } - return newNumbers; + const evenNumbers = numbers.filter((number) => (number % 2 == 0 ? true : false)); + return evenNumbers.map((number) => number * 2); } -const myNumbers = [1, 2, 3, 4]; -console.log(doubleEvenNumbers(myNumbers)); // Logs "[4, 8]" to the console \ No newline at end of file +console.log(doubleEvenNumbers(myNumbers1)); // Logs "[4,8]" diff --git a/Week2/js-exercises/ex2-whatsYourMondayWorth.js b/Week2/js-exercises/ex2-whatsYourMondayWorth.js index 47cea70ba..6f2882603 100644 --- a/Week2/js-exercises/ex2-whatsYourMondayWorth.js +++ b/Week2/js-exercises/ex2-whatsYourMondayWorth.js @@ -11,12 +11,24 @@ */ - function dayWorth(tasks, hourlyRate) { // put your code in here, the function does returns a euro formatted string + // convert minutes spent on each task to hours , and put the values in a new array + let taskDurationHrs = tasks.map((task) => task.duration / 60); + //caculate what each task is worth based on the specified hourly rate and put the values in a new array + let taskWorth = taskDurationHrs.map((taskDurationHrs) => taskDurationHrs * hourlyRate); + //set the format for EUR and the country and language to (Dutch-Netherlands) + let formatter = new Intl.NumberFormat('nl-NL', { + style: 'currency', + currency: 'EUR', + minimumFractionDigits: 2, + }); + //sums up the tasks worth and returns that in a EUR formatted string for any array of objects which has a 'duration' property + return formatter.format(taskWorth.reduce((total, taskPay) => total + taskPay, 0)); } -const mondayTasks = [{ +const mondayTasks = [ + { name: 'Daily standup', duration: 30, // specified in minutes }, @@ -34,5 +46,5 @@ const mondayTasks = [{ }, ]; -console.log(dayWorth(mondayTasks, 25)) -console.log(dayWorth(mondayTasks, 13.37)) \ No newline at end of file +console.log(dayWorth(mondayTasks, 25)); //€187.50 +console.log(dayWorth(mondayTasks, 13.37)); //€100.28 From 51d08b17ea85c0d9225eb5a05717cf3177851d60 Mon Sep 17 00:00:00 2001 From: obada othman Date: Wed, 12 Aug 2020 16:29:48 +0200 Subject: [PATCH 04/17] Finished ex3 to ex5 --- Week2/js-exercises/ex3-lemonAllergy.js | 8 +++--- Week2/js-exercises/ex4-collectiveAge.js | 18 ++++++++----- Week2/js-exercises/ex5-myFavoriteHobbies.html | 17 ++++++++---- Week2/js-exercises/ex5-myFavoriteHobbies.js | 12 ++++++++- Week2/project/index.html | 26 ++++++++----------- Week2/project/index.js | 2 +- 6 files changed, 52 insertions(+), 31 deletions(-) diff --git a/Week2/js-exercises/ex3-lemonAllergy.js b/Week2/js-exercises/ex3-lemonAllergy.js index 54ac8da04..2847916c8 100644 --- a/Week2/js-exercises/ex3-lemonAllergy.js +++ b/Week2/js-exercises/ex3-lemonAllergy.js @@ -11,11 +11,13 @@ */ - function takeOutLemons(basket) { - // your code goes in here. The output is a string + // your code goes in here. The output is a string + // returns an array that doesn't contain 'lemon' or 'Lemon' + const lemonlessBasket = basket.filter((fruit) => fruit != 'Lemon' && fruit != 'lemon'); + return `My mom bought me a fruit basket, containing [${lemonlessBasket}]`; } const fruitBasket = ['Apple', 'Lemon', 'Grapefruit', 'Lemon', 'Banana', 'Watermelon', 'Lemon']; -console.log(takeOutLemons(fruitBasket)); \ No newline at end of file +console.log(takeOutLemons(fruitBasket)); //My mom bought me a fruit basket, containing [Apple,Grapefruit,Banana,Watermelon] diff --git a/Week2/js-exercises/ex4-collectiveAge.js b/Week2/js-exercises/ex4-collectiveAge.js index d17275cdc..3b9b8930e 100644 --- a/Week2/js-exercises/ex4-collectiveAge.js +++ b/Week2/js-exercises/ex4-collectiveAge.js @@ -10,24 +10,30 @@ function collectiveAge(people) { // return the sum of age for all the people + const individualAges = people.map((person) => person.age); + return individualAges.reduce((total, individualAge) => total + individualAge, 0); +} +function collectiveMembers(hackYourFutureMembers) { + return collectiveAge(hackYourFutureMembers); } -const hackYourFutureMembers = [{ +const hackYourFutureMembers = [ + { name: 'Wouter', - age: 33 + age: 33, }, { name: 'Federico', - age: 32 + age: 32, }, { name: 'Noer', - age: 27 + age: 27, }, { name: 'Tjebbe', - age: 22 + age: 22, }, ]; -console.log("The collective age of the HYF team is: " + collectiveMembers(hackYourFutureMembers)); \ No newline at end of file +console.log('The collective age of the HYF team is: ' + collectiveMembers(hackYourFutureMembers)); diff --git a/Week2/js-exercises/ex5-myFavoriteHobbies.html b/Week2/js-exercises/ex5-myFavoriteHobbies.html index 06ab17d45..5363f3106 100644 --- a/Week2/js-exercises/ex5-myFavoriteHobbies.html +++ b/Week2/js-exercises/ex5-myFavoriteHobbies.html @@ -1,5 +1,12 @@ - - - - - \ No newline at end of file + + + + + + + Document + + + + + diff --git a/Week2/js-exercises/ex5-myFavoriteHobbies.js b/Week2/js-exercises/ex5-myFavoriteHobbies.js index 289c68380..49ca56abc 100644 --- a/Week2/js-exercises/ex5-myFavoriteHobbies.js +++ b/Week2/js-exercises/ex5-myFavoriteHobbies.js @@ -10,6 +10,14 @@ function createHTMLList(arr) { // your code goes in here + const body = document.querySelector('body'); + const ul = document.createElement('ul'); + body.appendChild(ul); + arr.map((hobby) => { + const li = document.createElement('li'); + li.innerHTML = hobby; + ul.appendChild(li); + }); } const myHobbies = [ @@ -18,4 +26,6 @@ const myHobbies = [ 'Programming', 'Hanging out with friends', 'Going to the gym', -]; \ No newline at end of file +]; + +createHTMLList(myHobbies); diff --git a/Week2/project/index.html b/Week2/project/index.html index 664b242d3..792e43d05 100644 --- a/Week2/project/index.html +++ b/Week2/project/index.html @@ -1,17 +1,13 @@ - - - - - Pomodoro Clock - - - -
- -
- - - - \ No newline at end of file + + + + Pomodoro Clock + + + +
+ + + diff --git a/Week2/project/index.js b/Week2/project/index.js index 5b306f0f2..e01373a58 100644 --- a/Week2/project/index.js +++ b/Week2/project/index.js @@ -7,4 +7,4 @@ Display minutes and seconds If the timer finishes the timer should be replaced by the message: Time 's up! * - */ \ No newline at end of file + */ From 1a5f493fe1286594bcb37718dc60de7abc95fbd8 Mon Sep 17 00:00:00 2001 From: obada othman Date: Sat, 15 Aug 2020 10:12:45 +0200 Subject: [PATCH 05/17] Finished project's JS --- Week2/project/index.html | 20 ++++++++++- Week2/project/index.js | 77 ++++++++++++++++++++++++++++++++++++++++ Week2/project/style.css | 6 ++++ 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 Week2/project/style.css diff --git a/Week2/project/index.html b/Week2/project/index.html index 792e43d05..3393cad67 100644 --- a/Week2/project/index.html +++ b/Week2/project/index.html @@ -4,10 +4,28 @@ Pomodoro Clock + -
+
+ + + + + + +
+
+

Time's Up!

+

25

+
+
+

0

+
+
+
+
diff --git a/Week2/project/index.js b/Week2/project/index.js index e01373a58..f13598a10 100644 --- a/Week2/project/index.js +++ b/Week2/project/index.js @@ -8,3 +8,80 @@ If the timer finishes the timer should be replaced by the message: Time 's up! * */ +// debugger; +const arrowUp = document.getElementById('up'); +const arrowDown = document.getElementById('down'); +const playBtn = document.getElementById('play'); +const pauseBtn = document.getElementById('pause'); +const stopBtn = document.getElementById('stop'); +const TimeUpMessage = document.getElementById('time-up-message'); + +const minutes = document.getElementById('minutes'); +const seconds = document.getElementById('seconds'); + +let startCountdown; +let pauseCountdown = false; + +playBtn.addEventListener('click', function () { + if (startCountdown === undefined) { + startCountdown = setInterval(play, 100); + } else { + alert('running'); + } +}); +function reset() { + minutes.innerHTML = 25; + seconds.innerHTML = '00'; + stopCountdown(); + if ((TimeUpMessage.className = 'show')) { + TimeUpMessage.classList.replace('show', 'hide'); + minutes.classList.replace('hide', 'show'); + seconds.classList.replace('hide', 'show'); + startCountdown = undefined; + location.reload(); + } +} +stopBtn.addEventListener('click', reset); +pauseBtn.addEventListener('click', function () { + stopCountdown(); + startCountdown = undefined; + pauseCountdown = true; +}); +arrowUp.addEventListener('click', function () { + if (startCountdown === undefined) { + minutes.innerHTML++; + } else { + alert('running'); + } + if (pauseCountdown === true) { + alert('running'); + } +}); +arrowDown.addEventListener('click', function () { + if (startCountdown === undefined) { + minutes.innerHTML--; + } else { + alert('running'); + } + if (pauseCountdown === true) { + alert('running'); + } +}); + +function play() { + if (seconds.innerHTML != 0) { + seconds.innerHTML--; + } else if (seconds.innerHTML == 0 && minutes.innerHTML != 0) { + seconds.innerHTML = 59; + minutes.innerHTML--; + } + if (seconds.innerHTML == 0 && minutes.innerHTML == 0) { + minutes.classList.add('hide'); + seconds.classList.add('hide'); + TimeUpMessage.classList.replace('hide', 'show'); + document.querySelector('body').addEventListener('click', reset); + } +} +function stopCountdown() { + clearInterval(startCountdown); +} diff --git a/Week2/project/style.css b/Week2/project/style.css new file mode 100644 index 000000000..106e777e9 --- /dev/null +++ b/Week2/project/style.css @@ -0,0 +1,6 @@ +.hide { + display: none; +} +.show { + display: block; +} From 5333730fce08a21530c4b7a7b92e3bca837c3ba6 Mon Sep 17 00:00:00 2001 From: obada othman Date: Sat, 15 Aug 2020 20:00:46 +0200 Subject: [PATCH 06/17] Finished project --- .DS_Store | Bin 6148 -> 8196 bytes Week2/.DS_Store | Bin 0 -> 6148 bytes .../project/digital-7-font/Digital7-1e1Z.ttf | Bin 0 -> 34360 bytes .../digital-7-font/Digital7Italic-RBM3.ttf | Bin 0 -> 23344 bytes .../digital-7-font/Digital7Mono-B1g5.ttf | Bin 0 -> 34404 bytes .../Digital7Monoitalic-8xKz.ttf | Bin 0 -> 22984 bytes Week2/project/index.html | 65 +++++++-- Week2/project/index.js | 128 +++++++++++++----- Week2/project/style.css | 83 ++++++++++++ 9 files changed, 227 insertions(+), 49 deletions(-) create mode 100644 Week2/.DS_Store create mode 100644 Week2/project/digital-7-font/Digital7-1e1Z.ttf create mode 100644 Week2/project/digital-7-font/Digital7Italic-RBM3.ttf create mode 100644 Week2/project/digital-7-font/Digital7Mono-B1g5.ttf create mode 100644 Week2/project/digital-7-font/Digital7Monoitalic-8xKz.ttf diff --git a/.DS_Store b/.DS_Store index 19f35c2d407a08177dbf67c9e46b596ee6108156..799c40e19d47b96d7d70d397f7c784a4b89efac2 100644 GIT binary patch literal 8196 zcmeHM-EI;=6h70^c0rBQm=y2!#>5LsfR)z7m>`7<5;aDQy-?FG-7TQoUBWIBMGQB- zgZc(OicjE!_yGFNk9Ao}Vxlo^okM26`8nSl=G$d=&q743HgrlvIU+JpIA$-PI>Gon zFLSn}M%IB0e4>cLrWYKvy`Vkktp~IMS^=$qRzNGD6*vtF;GWIRSa9E$v%1y_Xa)XD z1^D&BMB!LfIF%?a9jHVK08C+67~04K1jkfZRXCL>s8~~G4@^;+N->zEW8UQMz^cNj zL`f$m>BLlIrZN;JqJw7&cVbnEy4DJ41?Cmtx%(>F6yoD1@^}7Ix{Y$Cg~!4#o7lS$gxxL&%`+&_B#X8d;Y?jyDXW9mLYmu3IB{)ARcj90CJ?*)E`Q)Xt$37Poe zK3S&n`Io7@P$p|uCVoaUBX&mrlG-|DGLPW#;MadBLyqV& z9aBm-5dRuJq$7$@4k?xEev0>{#9O8Nv_n3A59tBzqqGIQi6{4FnQX1ZbZ8H;_rTtR zpT+o4Vyw^rBNG^Di1B5m{=fe@I>^(3na9^)5Jzd&XnbQ!%asckS2(Zo>T30c-xs-` zb+b|0?hc>H(tbDV2PXemi1>HD8$5}^{GfJqTO?UGO2VNcN4*ds&!0v~PvmVeN_wg4 z$JY&c^LG4h^8OR11Y_8U zm0dCT3qB)L66Mq%Cb39fqD8VCdIWK|sB@mk>O=TA^&wO!ldrujFUc1_9fzW|#Z$n1 zD*V#o4b6_oDqt1(#|p^(!G%lo3>F&I)`3J_0e}@$D??uXWsn@#pl7hqh!z;rRG_9Z zbH!kqj(XR`c?JuOnoi7IKA3qjGdC2bo{s)q6;904Xj7|zRbW>mLogH5age^r5>_&Bbv literal 0 HcmV?d00001 diff --git a/Week2/project/digital-7-font/Digital7-1e1Z.ttf b/Week2/project/digital-7-font/Digital7-1e1Z.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5dbe6f908239d00a9f88c335df3efb9261ecc3cc GIT binary patch literal 34360 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 G^nU=T+`F^@ literal 0 HcmV?d00001 diff --git a/Week2/project/digital-7-font/Digital7Mono-B1g5.ttf b/Week2/project/digital-7-font/Digital7Mono-B1g5.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a481b97b4f84fd4199360c511517a5cf22d2a664 GIT binary patch literal 34404 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 + Pomodoro Clock + + + -
- - - - - - + +

Pomodoro Clock

+ +
+
-
-

Time's Up!

-

25

+

Session Length

+
+ +

25

+ +
+
+
+
+
+

Session

+
+
+

Time's Up!

+
+
+ 0 +

25

+
+ : +
+ 0 +

0

+
-
-

0

+
+ + +
- -
+
+
+
+
+

Start your session!

+
+
diff --git a/Week2/project/index.js b/Week2/project/index.js index f13598a10..0224615d4 100644 --- a/Week2/project/index.js +++ b/Week2/project/index.js @@ -15,73 +15,131 @@ const playBtn = document.getElementById('play'); const pauseBtn = document.getElementById('pause'); const stopBtn = document.getElementById('stop'); const TimeUpMessage = document.getElementById('time-up-message'); - +const sessionLength = document.getElementById('session-length'); const minutes = document.getElementById('minutes'); const seconds = document.getElementById('seconds'); +const notification = document.getElementById('notification'); -let startCountdown; -let pauseCountdown = false; +const sZero = document.getElementById('s-zero'); +const mZero = document.getElementById('m-zero'); +const colon = document.getElementById('colon'); +let startCountdown; +// let pauseCountdown = false; +let timeUp = false; +pauseBtn.disabled = true; +pauseBtn.style.color = 'grey'; playBtn.addEventListener('click', function () { + arrowUp.disabled = true; + arrowDown.disabled = true; + pauseBtn.disabled = false; + pauseBtn.style.color = 'white'; + + arrowUp.style.color = 'grey'; + arrowDown.style.color = 'grey'; + minutes.style.color = '#2ed573'; + seconds.style.color = '#2ed573'; + colon.style.color = '#2ed573'; + mZero.style.color = '#2ed573'; + sZero.style.color = '#2ed573'; + notification.innerText = 'Counting Down!'; if (startCountdown === undefined) { - startCountdown = setInterval(play, 100); + startCountdown = setInterval(play, 1000); } else { - alert('running'); + notification.innerText = 'Timer is already running!'; + } + if (stopBtn.style.display == 'inline') { + stopBtn.style.display = 'none'; + pauseBtn.style.display = 'inline'; } }); function reset() { - minutes.innerHTML = 25; - seconds.innerHTML = '00'; + minutes.innerText = 25; + seconds.innerText = '00'; stopCountdown(); - if ((TimeUpMessage.className = 'show')) { - TimeUpMessage.classList.replace('show', 'hide'); - minutes.classList.replace('hide', 'show'); - seconds.classList.replace('hide', 'show'); - startCountdown = undefined; - location.reload(); - } + + TimeUpMessage.classList.replace('show', 'hide'); + minutes.classList.replace('hide', 'show'); + seconds.classList.replace('hide', 'show'); + // if (TimeUpMessage.classList.contains('show')) { + // mZero.classList.replace('show', 'hide'); + // sZero.classList.replace('show', 'hide'); + // } + startCountdown = undefined; + location.reload(); } stopBtn.addEventListener('click', reset); + pauseBtn.addEventListener('click', function () { + notification.innerText = 'Paused!'; + stopBtn.style.display = 'inline'; + pauseBtn.style.display = 'none'; stopCountdown(); startCountdown = undefined; - pauseCountdown = true; + // pauseCountdown = true; }); arrowUp.addEventListener('click', function () { if (startCountdown === undefined) { - minutes.innerHTML++; - } else { - alert('running'); - } - if (pauseCountdown === true) { - alert('running'); + minutes.innerText++; + sessionLength.innerText++; } + // } else { + // alert('running'); + // } + // if (pauseCountdown === true) { + // alert('running'); + // } }); arrowDown.addEventListener('click', function () { - if (startCountdown === undefined) { - minutes.innerHTML--; - } else { - alert('running'); - } - if (pauseCountdown === true) { - alert('running'); + if (startCountdown === undefined && minutes.innerText > 0) { + minutes.innerText--; + sessionLength.innerText--; } + // } else { + // alert('running'); + // } + // if (pauseCountdown === true) { + // alert('running'); + // } }); function play() { - if (seconds.innerHTML != 0) { - seconds.innerHTML--; - } else if (seconds.innerHTML == 0 && minutes.innerHTML != 0) { - seconds.innerHTML = 59; - minutes.innerHTML--; + if (seconds.innerText != 0) { + seconds.innerText--; + } else if (seconds.innerText == 0 && minutes.innerText != 0) { + seconds.innerText = 59; + minutes.innerText--; } - if (seconds.innerHTML == 0 && minutes.innerHTML == 0) { + if (seconds.innerText == 0 && minutes.innerText == 0) { + timeUp = true; + if (timeUp == true) { + sZero.style.display = 'none'; + mZero.style.display = 'none'; + } minutes.classList.add('hide'); seconds.classList.add('hide'); + colon.classList.replace('show', 'hide'); + TimeUpMessage.classList.replace('hide', 'show'); - document.querySelector('body').addEventListener('click', reset); + notification.innerText = 'Click anywhere to start a new session!'; + + document.querySelector('html').addEventListener('click', reset); + } + // if (TimeUpMessage.classList.contains('show')) { + + // } + if (seconds.innerText >= 0 && seconds.innerText < 10 && timeUp == false) { + sZero.style.display = 'inline'; + } else { + sZero.style.display = 'none'; + } + if (minutes.innerText >= 0 && minutes.innerText < 10 && timeUp == false) { + mZero.style.display = 'inline'; + } else { + mZero.style.display = 'none'; } } + function stopCountdown() { clearInterval(startCountdown); } diff --git a/Week2/project/style.css b/Week2/project/style.css index 106e777e9..2618843ef 100644 --- a/Week2/project/style.css +++ b/Week2/project/style.css @@ -1,3 +1,86 @@ +@font-face { + font-family: digital-7; + src: url(digital-7-font/Digital7-1e1Z.ttf); +} +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} +body { + width: 70%; + height: 100%; + margin: 0 auto; + text-align: center; + background-color: #23555c; + color: white; + font-family: 'Orbitron', sans-serif; +} +button { + background-color: transparent; + border: none; + color: white; + outline: none; + width: 4rem; +} +button:hover { + color: #4cd137; +} +#stop { + display: none; +} +.set-timer { + display: flex; + justify-content: center; + font-size: 2rem; +} +.timer-wrapper { + width: 80%; + margin: 0 auto; + /* background-color: red; */ + line-height: 5em; +} +.clock { + display: flex; + justify-content: center; + + flex-wrap: wrap; + border: solid 6px grey; + border-radius: 35px; +} +.m-display { + display: flex; + justify-content: center; + + font-family: digital-7, sans-serif; + font-size: 6rem; + margin-bottom: 2rem; +} +.s-display { + display: flex; + justify-content: center; + font-family: digital-7, sans-serif; + font-size: 6rem; +} +#colon { + font-size: 3rem; +} +#m-zero { + display: none; +} +#session-length { + margin-left: 15px; + margin-right: 15px; +} +#time-up-message { + font-size: 3rem; + margin-bottom: 3rem; + font-weight: bold; + color: #e84118; +} +.inside-title { + width: 100%; +} .hide { display: none; } From e484b6cb4e05f036f4290969cdc35e76eaf4d337 Mon Sep 17 00:00:00 2001 From: obada othman Date: Sat, 15 Aug 2020 20:08:30 +0200 Subject: [PATCH 07/17] Finished project --- Week2/project/index.js | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/Week2/project/index.js b/Week2/project/index.js index 0224615d4..7c1a61c68 100644 --- a/Week2/project/index.js +++ b/Week2/project/index.js @@ -25,7 +25,7 @@ const mZero = document.getElementById('m-zero'); const colon = document.getElementById('colon'); let startCountdown; -// let pauseCountdown = false; + let timeUp = false; pauseBtn.disabled = true; pauseBtn.style.color = 'grey'; @@ -61,10 +61,6 @@ function reset() { TimeUpMessage.classList.replace('show', 'hide'); minutes.classList.replace('hide', 'show'); seconds.classList.replace('hide', 'show'); - // if (TimeUpMessage.classList.contains('show')) { - // mZero.classList.replace('show', 'hide'); - // sZero.classList.replace('show', 'hide'); - // } startCountdown = undefined; location.reload(); } @@ -76,31 +72,18 @@ pauseBtn.addEventListener('click', function () { pauseBtn.style.display = 'none'; stopCountdown(); startCountdown = undefined; - // pauseCountdown = true; }); arrowUp.addEventListener('click', function () { if (startCountdown === undefined) { minutes.innerText++; sessionLength.innerText++; } - // } else { - // alert('running'); - // } - // if (pauseCountdown === true) { - // alert('running'); - // } }); arrowDown.addEventListener('click', function () { if (startCountdown === undefined && minutes.innerText > 0) { minutes.innerText--; sessionLength.innerText--; } - // } else { - // alert('running'); - // } - // if (pauseCountdown === true) { - // alert('running'); - // } }); function play() { @@ -125,9 +108,7 @@ function play() { document.querySelector('html').addEventListener('click', reset); } - // if (TimeUpMessage.classList.contains('show')) { - // } if (seconds.innerText >= 0 && seconds.innerText < 10 && timeUp == false) { sZero.style.display = 'inline'; } else { From c20cb2cc569349577a5f31e0ddafbcf2899d7619 Mon Sep 17 00:00:00 2001 From: obada othman Date: Wed, 19 Aug 2020 12:14:47 +0200 Subject: [PATCH 08/17] Finished ex1 to ex4 --- Week2/project/.DS_Store | Bin 0 -> 6148 bytes Week3/js-exercises/ex1-AddSix.js | 13 +++++--- Week3/js-exercises/ex2-RemoveDuplicates.js | 21 +++++++++---- Week3/js-exercises/ex3-GuessTheOutput.js | 10 +++++-- Week3/js-exercises/ex4-GuessMore.js | 20 +++++++++++-- Week3/js-exercises/ex5-LotteryMachine.js | 33 ++++++++++++++++++--- 6 files changed, 79 insertions(+), 18 deletions(-) create mode 100644 Week2/project/.DS_Store diff --git a/Week2/project/.DS_Store b/Week2/project/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1fcd49c9ae354da1983df45090ec5a2a51c4c6a5 GIT binary patch literal 6148 zcmeHK&2G~`5S~p#SqA|*AhpN6AaO`hqEK=`NLFYMy&)OFp{-iGHjR<%tzw5z(p0|m zA>a*ols-Wpr~USas!2{<4>}H9G^+$1ss7XW|uCV5zxy97H@*7sO zBa1+$*C;8Zj8>=zclIwRpx)gRiYcXi`1SYqnIz>@Ze(&V%4CE*d?f4?_~JsFF7Hlm zG%gM;_bfWh(xPm)&slAu{$TMT=MCO?+}I8VavYRlIV$?$a8vc(hvgu$@dqiht2m54 zrpb7x`Rtv{%P`H8p(dwsf|RXKX&%dQUyky)(CY+df^(01JI&?Eq`SJ>65URF+7gpq zuiX-_y052Gk1sv%yxrJ6IQl+0o}T>BWf8*%t?jAB-|!Q`okf2QhIuCQedMV%8jv-I zzzKb$mo$LH2b9f Date: Wed, 19 Aug 2020 14:52:01 +0200 Subject: [PATCH 09/17] edited ex1 , removed header styling from loop --- Week1/js-exercises/ex1-bookList.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Week1/js-exercises/ex1-bookList.js b/Week1/js-exercises/ex1-bookList.js index 93dee35ef..3f98e0451 100644 --- a/Week1/js-exercises/ex1-bookList.js +++ b/Week1/js-exercises/ex1-bookList.js @@ -22,6 +22,7 @@ function createBookList(books) { const ulElement = document.createElement('ul'); const bookList = document.getElementById('bookList'); const header = document.querySelector('h1'); + header.style.textAlign = 'center'; bookList.appendChild(ulElement); @@ -37,7 +38,7 @@ function createBookList(books) { bookLi.style.backgroundColor = 'green'; } const image = document.createElement('img'); - header.style.textAlign = 'center'; + image.setAttribute('src', book.imgURL); image.setAttribute('width', '150'); image.setAttribute('height', '200'); From ce08b54abebe08257b080cb5a5a84a0dd81fdc29 Mon Sep 17 00:00:00 2001 From: obada othman Date: Wed, 19 Aug 2020 19:23:57 +0200 Subject: [PATCH 10/17] finished ex5 --- Week3/js-exercises/ex5-LotteryMachine.js | 43 ++++++++++++------------ 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/Week3/js-exercises/ex5-LotteryMachine.js b/Week3/js-exercises/ex5-LotteryMachine.js index 8886b56f5..e84fc6acd 100644 --- a/Week3/js-exercises/ex5-LotteryMachine.js +++ b/Week3/js-exercises/ex5-LotteryMachine.js @@ -26,35 +26,36 @@ Don't you just love the thrill of the lottery? What if I told you we can make ou */ debugger; -function threeFive(startIndex, stopIndex, threeCallback, fiveCallback) { +function threeFive(startNumber, stopNumber, threeCallback, fiveCallback) { // make array - + function makeArray() { + let numbers = []; - // start at beginning of array and check if you should call threeCallback or fiveCallback or go on to next - } - for (let i = 0; i < numbers.length; i++) { - if (numbers[i] % 3 === 0) { - return threeCallback; + for (let i = 0; i <= stopNumber - startNumber; i++) { + numbers.push(startNumber + i); } - if (numbers[i] % 5 === 0) { - return fiveCallback; + return numbers; + } + let newArray = makeArray(); + + function checkArray(newArray) { + for (let i = 0; i < newArray.length; i++) { + if (newArray[i] % 3 === 0) { + threeCallback(newArray[i]); + } + if (newArray[i] % 5 === 0) { + fiveCallback(newArray[i]); + } } } + checkArray(newArray); } -function makeArray(){ - const numbers = []; - - for (let i = 0; i <= stopIndex - startIndex; i++) { - numbers.push(startIndex + i); - return numbers; +function sayThree(num) { + console.log(num + ' Is devisible By Three'); } - -function sayThree() { - console.log('Devisible By Three'); -} -function sayFive() { - console.log('devisible By Five'); +function sayFive(num) { + console.log(num + ' Is devisible By Five'); } threeFive(10, 15, sayThree, sayFive); From 50ac46b011035d71c58e1c1c11a2e94e4f648419 Mon Sep 17 00:00:00 2001 From: obada othman Date: Thu, 20 Aug 2020 10:28:50 +0200 Subject: [PATCH 11/17] added basic html structure to the tip calculator project --- Week3/project/index.html | 44 +++++++++++++++++++++++++++++----------- Week3/project/index.js | 17 +++++++++++++++- 2 files changed, 48 insertions(+), 13 deletions(-) diff --git a/Week3/project/index.html b/Week3/project/index.html index fac819b21..b3c327ab8 100644 --- a/Week3/project/index.html +++ b/Week3/project/index.html @@ -1,15 +1,35 @@ + + + + Tip Calculator + - - - - Tip Calculator - - - -
- - - - \ No newline at end of file + +
+ +
+
+ + + + + + + + + + +
+ +
+
+

+
+
+ + + diff --git a/Week3/project/index.js b/Week3/project/index.js index e12fb76ed..2364eec76 100644 --- a/Week3/project/index.js +++ b/Week3/project/index.js @@ -1,3 +1,18 @@ // Your code goes in here +// debugger; +document.querySelector('#header').innerText = 'Tip Calculator'; +function calculateTip() { + const billAmount = document.getElementById('bill-amount'); + const serviceRating = document.getElementById('service-rating'); + const peopleCount = document.getElementById('people-count'); + const calculate = document.getElementById('calculate'); + const output = document.getElementById('tip-amount'); + calculate.addEventListener('click', calculateTip); -document.querySelector("#app").innerText = "Tip Calculator"; \ No newline at end of file + billAmount.value === billAmount.innerText; + + return (output.innerText = (billAmount.value * 10) / 100); +} + +// console.log(billAmount.value); +calculateTip(); From f46a1bd22915d0f051f4364df307df2a73b6522a Mon Sep 17 00:00:00 2001 From: obada othman Date: Thu, 20 Aug 2020 11:23:08 +0200 Subject: [PATCH 12/17] made changes suggested by reviewer --- Week2/js-exercises/ex1-oddOnesOut.js | 4 ++-- Week2/js-exercises/ex3-lemonAllergy.js | 3 ++- Week2/js-exercises/ex4-collectiveAge.js | 5 +---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Week2/js-exercises/ex1-oddOnesOut.js b/Week2/js-exercises/ex1-oddOnesOut.js index 03ca79372..26261dc71 100644 --- a/Week2/js-exercises/ex1-oddOnesOut.js +++ b/Week2/js-exercises/ex1-oddOnesOut.js @@ -22,8 +22,8 @@ const myNumbers = [1, 2, 3, 4]; function doubleEvenNumbers(numbers) { - const evenNumbers = numbers.filter((number) => (number % 2 == 0 ? true : false)); + const evenNumbers = numbers.filter((number) => number % 2 === 0); return evenNumbers.map((number) => number * 2); } -console.log(doubleEvenNumbers(myNumbers1)); // Logs "[4,8]" +console.log(doubleEvenNumbers(myNumbers)); // Logs "[4,8]" diff --git a/Week2/js-exercises/ex3-lemonAllergy.js b/Week2/js-exercises/ex3-lemonAllergy.js index 2847916c8..2af4d70da 100644 --- a/Week2/js-exercises/ex3-lemonAllergy.js +++ b/Week2/js-exercises/ex3-lemonAllergy.js @@ -15,7 +15,8 @@ function takeOutLemons(basket) { // your code goes in here. The output is a string // returns an array that doesn't contain 'lemon' or 'Lemon' const lemonlessBasket = basket.filter((fruit) => fruit != 'Lemon' && fruit != 'lemon'); - return `My mom bought me a fruit basket, containing [${lemonlessBasket}]`; + + return `My mom bought me a fruit basket, containing : ${lemonlessBasket.join(', ')}.`; } const fruitBasket = ['Apple', 'Lemon', 'Grapefruit', 'Lemon', 'Banana', 'Watermelon', 'Lemon']; diff --git a/Week2/js-exercises/ex4-collectiveAge.js b/Week2/js-exercises/ex4-collectiveAge.js index 3b9b8930e..cb1aed4c0 100644 --- a/Week2/js-exercises/ex4-collectiveAge.js +++ b/Week2/js-exercises/ex4-collectiveAge.js @@ -13,9 +13,6 @@ function collectiveAge(people) { const individualAges = people.map((person) => person.age); return individualAges.reduce((total, individualAge) => total + individualAge, 0); } -function collectiveMembers(hackYourFutureMembers) { - return collectiveAge(hackYourFutureMembers); -} const hackYourFutureMembers = [ { @@ -36,4 +33,4 @@ const hackYourFutureMembers = [ }, ]; -console.log('The collective age of the HYF team is: ' + collectiveMembers(hackYourFutureMembers)); +console.log('The collective age of the HYF team is: ' + collectiveAge(hackYourFutureMembers)); From 913065b44dcff3900543c6a00d0cf57db7bbbcba Mon Sep 17 00:00:00 2001 From: obada othman Date: Thu, 20 Aug 2020 19:31:17 +0200 Subject: [PATCH 13/17] finished project tip calculator --- Week3/project/index.css | 51 ++++++++++++++++++++++++++++++++++ Week3/project/index.html | 59 ++++++++++++++++++++++++---------------- Week3/project/index.js | 55 +++++++++++++++++++++++++++++++++---- 3 files changed, 137 insertions(+), 28 deletions(-) create mode 100644 Week3/project/index.css diff --git a/Week3/project/index.css b/Week3/project/index.css new file mode 100644 index 000000000..cbbb0a627 --- /dev/null +++ b/Week3/project/index.css @@ -0,0 +1,51 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} +body { + background-color: #eccc68; +} +#app { + width: 40%; + + margin: 50px auto; + text-align: center; + line-height: 3rem; +} +main { + padding-top: 2rem; + padding-bottom: 2rem; + background-color: white; + display: flex; + flex-direction: column; + border-radius: 0 0 10px 10px; +} + +#header { + background-color: #ff6348; + border-radius: 10px 10px 0 0; + color: white; +} + +input, +select { + width: 50%; + margin: 0 auto; + padding: 10px; + border-radius: 5px; + border: none; + background-color: #dfe4ea; +} +button { + background-color: #ff6348; + border: none; + padding: 20px 40px; + font-size: 1.1rem; + border-radius: 5px; + outline: none; + color: white; +} +button:hover { + background-color: chartreuse; +} diff --git a/Week3/project/index.html b/Week3/project/index.html index b3c327ab8..e55a0dc88 100644 --- a/Week3/project/index.html +++ b/Week3/project/index.html @@ -3,33 +3,46 @@ + Tip Calculator -
- -
-
- - - - - - - - - - -
- -
-
-

-
-
+
+
+

+
+
+ +
+ + +
+ + + + +
+
+ +
+
+

Tip Amount

+

0.00

+

+
+
+
+ diff --git a/Week3/project/index.js b/Week3/project/index.js index 2364eec76..1c3508c39 100644 --- a/Week3/project/index.js +++ b/Week3/project/index.js @@ -1,18 +1,63 @@ // Your code goes in here // debugger; document.querySelector('#header').innerText = 'Tip Calculator'; +calculate.addEventListener('click', calculateTip); function calculateTip() { const billAmount = document.getElementById('bill-amount'); const serviceRating = document.getElementById('service-rating'); const peopleCount = document.getElementById('people-count'); const calculate = document.getElementById('calculate'); - const output = document.getElementById('tip-amount'); - calculate.addEventListener('click', calculateTip); + const outPut = document.getElementById('tip-amount'); + const each = document.getElementById('each'); - billAmount.value === billAmount.innerText; + if ( + !billAmount.value || + !serviceRating.value || + serviceRating.value === '--Choose an Option--' || + !peopleCount.value + ) { + console.log(outPut.innerText); + alert('All fields must be filled'); + } else { + billAmount.value === billAmount.innerText; + serviceRating.value === serviceRating.innerText; + peopleCount.value === peopleCount.innerText; + if (peopleCount.value > 1) { + each.innerText = 'each'; + } else { + each.innerText = ' '; + } + let formatter = new Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD', + minimumFractionDigits: 2, + }); - return (output.innerText = (billAmount.value * 10) / 100); + switch (serviceRating.value) { + case '30% - Outstanding': + outPut.innerText = formatter.format((billAmount.value * (30 / 100)) / peopleCount.value); + console.log(outPut.innerText); + break; + case '20% - Good': + outPut.innerText = formatter.format((billAmount.value * (20 / 100)) / peopleCount.value); + break; + case '15% - It was OK': + outPut.innerText = formatter.format((billAmount.value * (15 / 100)) / peopleCount.value); + break; + case '10% - Bad': + outPut.innerText = formatter.format((billAmount.value * (10 / 100)) / peopleCount.value); + break; + case '5% - Terrible': + outPut.innerText = formatter.format((billAmount.value * (5 / 100)) / peopleCount.value); + break; + + default: + break; + } + } + + // return (output.innerText = (billAmount.value * 10) / 100 + serviceRating.value); } // console.log(billAmount.value); -calculateTip(); +// calculateTip(); From c17bd44e86474de2bd8e3c74ade918af56c5a37a Mon Sep 17 00:00:00 2001 From: obada othman Date: Fri, 21 Aug 2020 10:47:21 +0200 Subject: [PATCH 14/17] fixed a bug in project tip calculator --- Week3/project/index.css | 1 + Week3/project/index.html | 3 ++- Week3/project/index.js | 6 ++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Week3/project/index.css b/Week3/project/index.css index cbbb0a627..6bbae6dd1 100644 --- a/Week3/project/index.css +++ b/Week3/project/index.css @@ -5,6 +5,7 @@ } body { background-color: #eccc68; + font-family: 'Bangers', cursive; } #app { width: 40%; diff --git a/Week3/project/index.html b/Week3/project/index.html index e55a0dc88..e147d6a74 100644 --- a/Week3/project/index.html +++ b/Week3/project/index.html @@ -4,6 +4,7 @@ + Tip Calculator @@ -37,7 +38,7 @@

Tip Amount

-

0.00

+

$0.00

diff --git a/Week3/project/index.js b/Week3/project/index.js index 1c3508c39..e4f6600fa 100644 --- a/Week3/project/index.js +++ b/Week3/project/index.js @@ -13,11 +13,13 @@ function calculateTip() { if ( !billAmount.value || !serviceRating.value || + !peopleCount.value || serviceRating.value === '--Choose an Option--' || - !peopleCount.value + billAmount.value === '0' || + peopleCount.value === '0' ) { - console.log(outPut.innerText); alert('All fields must be filled'); + input; } else { billAmount.value === billAmount.innerText; serviceRating.value === serviceRating.innerText; From 33ce73ba7d4780ce7bcf01f0a82c42cd85d0111e Mon Sep 17 00:00:00 2001 From: obada othman Date: Fri, 21 Aug 2020 13:34:53 +0200 Subject: [PATCH 15/17] fixed a bug in project tip calculator --- Week3/project/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week3/project/index.js b/Week3/project/index.js index e4f6600fa..16c36f016 100644 --- a/Week3/project/index.js +++ b/Week3/project/index.js @@ -14,7 +14,7 @@ function calculateTip() { !billAmount.value || !serviceRating.value || !peopleCount.value || - serviceRating.value === '--Choose an Option--' || + serviceRating.value === '--Choose an option--' || billAmount.value === '0' || peopleCount.value === '0' ) { From fe31b7af75d080655314604cedd2e49a3b0c2148 Mon Sep 17 00:00:00 2001 From: obada othman Date: Tue, 25 Aug 2020 22:17:11 +0200 Subject: [PATCH 16/17] made changes suggested by reviewer on ex-2 --- Week3/js-exercises/ex2-RemoveDuplicates.js | 22 +++++++++------------- Week3/project/.vscode/settings.json | 3 +++ 2 files changed, 12 insertions(+), 13 deletions(-) create mode 100644 Week3/project/.vscode/settings.json diff --git a/Week3/js-exercises/ex2-RemoveDuplicates.js b/Week3/js-exercises/ex2-RemoveDuplicates.js index a62045734..45d8a451e 100644 --- a/Week3/js-exercises/ex2-RemoveDuplicates.js +++ b/Week3/js-exercises/ex2-RemoveDuplicates.js @@ -13,20 +13,16 @@ does not return anything but removes any duplicate elements from the array. // WRITE YOUR FUNCTION HERE // debugger; const letters = ['a', 'b', 'c', 'd', 'a', 'e', 'f', 'c', 'b']; - -function removeDuplicates(letters) { - let occuredOnce = []; - for (let i = 0; i < letters.length; i++) { - letter = letters[i]; - if (occuredOnce.indexOf(letter) === -1) { - occuredOnce.push(letter); +let removeDuplicates = (letters) => { + letters.sort().forEach((letter, index) => { + if (letters.indexOf(letter) !== index) { + letters.splice(index, 1); } - } - - return occuredOnce; -} - + }); + return letters; +}; console.log(removeDuplicates(letters)); -if (JSON.stringify(removeDuplicates(letters)) === JSON.stringify(['a', 'b', 'c', 'd', 'e', 'f'])) +if (JSON.stringify(removeDuplicates(letters)) === JSON.stringify(['a', 'b', 'c', 'd', 'e', 'f'])) { console.log('Hooray!'); +} diff --git a/Week3/project/.vscode/settings.json b/Week3/project/.vscode/settings.json new file mode 100644 index 000000000..3b6641073 --- /dev/null +++ b/Week3/project/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "git.ignoreLimitWarning": true +} \ No newline at end of file From c4a94ad0e32feea6af8fb7c3dba53897e627db03 Mon Sep 17 00:00:00 2001 From: obada othman Date: Tue, 25 Aug 2020 22:31:13 +0200 Subject: [PATCH 17/17] made changes suggested by reviewer on ex-5 --- Week3/js-exercises/ex5-LotteryMachine.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Week3/js-exercises/ex5-LotteryMachine.js b/Week3/js-exercises/ex5-LotteryMachine.js index e84fc6acd..2c2e0c04d 100644 --- a/Week3/js-exercises/ex5-LotteryMachine.js +++ b/Week3/js-exercises/ex5-LotteryMachine.js @@ -38,17 +38,14 @@ function threeFive(startNumber, stopNumber, threeCallback, fiveCallback) { } let newArray = makeArray(); - function checkArray(newArray) { - for (let i = 0; i < newArray.length; i++) { - if (newArray[i] % 3 === 0) { - threeCallback(newArray[i]); - } - if (newArray[i] % 5 === 0) { - fiveCallback(newArray[i]); - } + newArray.forEach((num) => { + if (num % 3 === 0) { + threeCallback(num); } - } - checkArray(newArray); + if (num % 5 === 0) { + fiveCallback(num); + } + }); } function sayThree(num) {