From 250b5187f353ec8b003fd5172fbb73aed8cc1e0c Mon Sep 17 00:00:00 2001 From: Lemony Date: Fri, 14 Sep 2018 17:31:32 +0100 Subject: [PATCH 01/14] Publication object created --- .DS_Store | Bin 0 -> 6148 bytes index.html | 30 +++ scripts/javascript-workings.js | 78 ++++++++ scripts/javascript.js | 71 +++++++ styles/normalize.css | 341 +++++++++++++++++++++++++++++++++ styles/styles.css | 63 ++++++ 6 files changed, 583 insertions(+) create mode 100644 .DS_Store create mode 100644 index.html create mode 100644 scripts/javascript-workings.js create mode 100644 scripts/javascript.js create mode 100644 styles/normalize.css create mode 100644 styles/styles.css diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + + + + + News Sorter + + + + + +
+
+ +
+

News comparison filter

+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/scripts/javascript-workings.js b/scripts/javascript-workings.js new file mode 100644 index 0000000..362a959 --- /dev/null +++ b/scripts/javascript-workings.js @@ -0,0 +1,78 @@ +const parentNode = document.querySelector(".news--area--feed"); + +// compile this Url = "https://newsapi.org/v2/top-headlines?sources=bbc-news,daily-mail,mirror,&apiKey=93238bcda39e4404852697d364b77971"; +const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; + + +const publicationList = { + "bbc-news": true, + "daily-mail": true, + "mirror": true +} + +// create an array from object using key values +let publicationArray = Object.keys(publicationList); + + +//console.log(defaultArray); +const sourceList = `&sources=${defaultArray}`; +const fullURL = `${baseUrl}${sourceList}`; + + + + +function displayDataOnPage(newsStories) { + const newsArray = newsStories.articles; + console.log(newsStories.articles); + + // add news blocks (as articles) + newsArray.forEach(function(newsitem) { + + const node = document.createElement("article"); + node.innerHTML = `${newsitem.source.name} (source logo) + ${newsitem.title}: ${newsitem.description}`; + parentNode.appendChild(node); + + }) + + + + // filter + let checkboxArray = document.querySelectorAll(".news--filter input"); + console.log(checkboxArray) + + checkboxArray.forEach(function(input) { + input.addEventListener("change", event => { + console.log(event.target.value); + + if (publicationList[event.target.value]) { + publicationList[event.target.value] = false + filteredArray.push(event.target.value); + } + + console.log(filteredArray) + + }) + }) + + +} + +function displayErrorToUser() {} + +fetch(fullURL) // by default fetch makes a GET request + .then(function(response) { + return response.json(); + }) + .then(function(body) { + //console.log(body); + displayDataOnPage(body); + }) + .catch(function(error) { + displayErrorToUser("Server failed to return data"); + + // need filter to NOT SHOW any news story with empty values + // if any value is empty do no show + }); + + \ No newline at end of file diff --git a/scripts/javascript.js b/scripts/javascript.js new file mode 100644 index 0000000..1fb5364 --- /dev/null +++ b/scripts/javascript.js @@ -0,0 +1,71 @@ +const parentNode = document.querySelector(".news--area--feed"); + +const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; + +// news sources +const publicationList = { + "bbc-news": true, + "daily-mail": true, + "mirror": true +} +// create an array from object using key values +let publicationArray = Object.keys(publicationList); +console.log(publicationArray); + +const sourceList = `&sources=${publicationArray}`; +const fullURL = `${baseUrl}${sourceList}`; + + +function displayDataOnPage(newsStories) { + const newsArray = newsStories.articles; + console.log(newsStories.articles); + + // add news blocks (as articles) + newsArray.forEach(function(newsitem) { + + const node = document.createElement("article"); + node.innerHTML = `${newsitem.source.name} (source logo) + ${newsitem.title}: ${newsitem.description}`; + parentNode.appendChild(node); + + }) + + // filter + // let checkboxArray = document.querySelectorAll(".news--filter input"); + // console.log(checkboxArray) + + // checkboxArray.forEach(function(input) { + // input.addEventListener("change", event => { + // console.log(event.target.value); + + // if (publicationList[event.target.value]) { + // publicationList[event.target.value] = false + // filteredArray.push(event.target.value); + // } + + // console.log(filteredArray) + + // }) + // }) + + +} + +function displayErrorToUser() {} + +fetch(fullURL) // by default fetch makes a GET request + .then(function(response) { + return response.json(); + }) + .then(function(body) { + //console.log(body); + displayDataOnPage(body); + }) + .catch(function(error) { + displayErrorToUser("Server failed to return data"); + + // need filter to NOT SHOW any news story with empty values + // if any value is empty do no show + }); + + \ No newline at end of file diff --git a/styles/normalize.css b/styles/normalize.css new file mode 100644 index 0000000..3d6624c --- /dev/null +++ b/styles/normalize.css @@ -0,0 +1,341 @@ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} \ No newline at end of file diff --git a/styles/styles.css b/styles/styles.css new file mode 100644 index 0000000..0321eed --- /dev/null +++ b/styles/styles.css @@ -0,0 +1,63 @@ +/* Variables + ========================================================================== */ + + :root { + --main-txt-color: #0a0a0a; + --light-color: #EEE8CD; + --bright-color: #FFE600; + --dark-color: #808069; + + --main-padding: 1rem; +} + +/* BASE + ========================================================================== */ + + body { + font-family: "Gill Sans", "Gill Sans MT", Calibri, "Trebuchet MS", sans-serif; + margin: 0; + padding: 0; + background: #e8e8e8; + line-height: 1.5; + color: var(--main-txt-color); + -webkit-font-smoothing: antialiased; +} + +.container { + padding-left: var(--main-padding); + padding-right: var(--main-padding); + margin: 0 auto; +} + +.menu--settings { + list-style-type: none; + padding-left: 0; + padding-right: 0; + margin: 0; +} +img { +max-width: 100%; +height: auto; +border-style: none; +} +figure { + padding: 0; + margin: 0; +} +section +article { + +} + +h1 { text-align: center} + +@media (min-width: 768px) { + } + +@media (min-width: 960px) { + .container {max-width: 930px} +} + +@media (min-width: 1200px) { + .container {max-width: 1170px} + } From 0fa549ab861cf51fc610d5892ad1de4380b4fb1c Mon Sep 17 00:00:00 2001 From: Lemony Date: Sat, 15 Sep 2018 10:52:06 +0100 Subject: [PATCH 02/14] Filter publication array for fetched url --- scripts/javascript.js | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/scripts/javascript.js b/scripts/javascript.js index 1fb5364..eac657b 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -3,22 +3,25 @@ const parentNode = document.querySelector(".news--area--feed"); const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; // news sources -const publicationList = { +let publicationList = { "bbc-news": true, "daily-mail": true, "mirror": true } // create an array from object using key values let publicationArray = Object.keys(publicationList); -console.log(publicationArray); +let filteredArray = publicationArray.filter(function(pub) { + return publicationList[pub] === true; +}); +console.log(filteredArray); -const sourceList = `&sources=${publicationArray}`; -const fullURL = `${baseUrl}${sourceList}`; +const publicationUrl = `&sources=${filteredArray}`; +const fullURL = `${baseUrl}${publicationUrl}`; function displayDataOnPage(newsStories) { const newsArray = newsStories.articles; - console.log(newsStories.articles); + // console.log(newsStories.articles); // add news blocks (as articles) newsArray.forEach(function(newsitem) { @@ -31,23 +34,22 @@ function displayDataOnPage(newsStories) { }) // filter - // let checkboxArray = document.querySelectorAll(".news--filter input"); - // console.log(checkboxArray) + let checkboxArray = document.querySelectorAll(".news--filter input"); + console.log(checkboxArray) - // checkboxArray.forEach(function(input) { - // input.addEventListener("change", event => { - // console.log(event.target.value); + checkboxArray.forEach(function(input) { + input.addEventListener("change", event => { + console.log(event.target.value); - // if (publicationList[event.target.value]) { - // publicationList[event.target.value] = false - // filteredArray.push(event.target.value); - // } + // if (publicationList[event.target.value]) { + // publicationList[event.target.value] = false + // filteredArray.push(event.target.value); + // } - // console.log(filteredArray) - - // }) - // }) + // console.log(filteredArray) + }) + }) } From d62014dc04d53533f331a5d6a99a4ba0807e6cd4 Mon Sep 17 00:00:00 2001 From: Lemony Date: Sat, 15 Sep 2018 16:12:17 +0100 Subject: [PATCH 03/14] Working on fetch url --- index.html | 6 +-- scripts/javascript.js | 114 ++++++++++++++++++++++++++++-------------- 2 files changed, 79 insertions(+), 41 deletions(-) diff --git a/index.html b/index.html index dcfa99c..997cbd9 100644 --- a/index.html +++ b/index.html @@ -13,9 +13,9 @@

News comparison filter

diff --git a/scripts/javascript.js b/scripts/javascript.js index eac657b..c99db42 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -1,28 +1,83 @@ -const parentNode = document.querySelector(".news--area--feed"); -const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; +// I am trying to work in stages - currently focusing on building a generate fetch url function +// this means that the code not running when the fetch() is run + +// To explain what I am trying to do: +// 1) create object with keys as news sources, values as true/false. +// 2) These values to be changed on "change" event when checkbox is checked / unchecked. +// 3) If (any of the) values are true, they are used to create an array +// 4) The array is used as the sources part of the fetch url. + +// I THINK the problem at the moment is that my filter event code +// is not returning an updated object. I think I am updating individual keys but not updating the object… + + +/// GENERATE FETCH URL +function generateFetchUrl() { + + // baseUrl and default + const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; + const defaultArray = ["bbc-news","daily-mail","mirror"]; + let checkboxArray = document.querySelectorAll(".news--filter input"); + + // news sources object + let publicationList = { + "bbc-news": false, + "daily-mail": false, + "mirror": false + } + + //filter event + checkboxArray.forEach(function(input) { + input.addEventListener("change", event => { + // new assigned value to match object key + console.log(event.target.value); + + // assign object value if checked is true + if (event.target.checked === true) { + return publicationList[event.target.value] = true; + } + else { + return publicationList[event.target.value] = false; + } + }) +}) + +/// THIS IS WHERE I AM STUCK; I think I need to be updating the publicationList but am only changing the individual values +console.log(publicationList) -// news sources -let publicationList = { - "bbc-news": true, - "daily-mail": true, - "mirror": true + // create an array from object using key values + let publicationArray = Object.keys(publicationList); + let filteredArray = publicationArray.filter(function(pub) { + return publicationList[pub] === true; + }); + + // compile fetch url + let defaultArrayUrl = `&sources=${defaultArray}`; + let filteredPublicationUrl = `&sources=${filteredArray}`; + let fullURL = ""; + + checkboxArray.forEach(function (checkbox) { + if (checkbox.checked === true) { + return fullURL = `${baseUrl}${filteredPublicationUrl}`; + } + else { + return fullURL = `${baseUrl}${defaultArrayUrl}`; + } + }) } -// create an array from object using key values -let publicationArray = Object.keys(publicationList); -let filteredArray = publicationArray.filter(function(pub) { - return publicationList[pub] === true; -}); -console.log(filteredArray); -const publicationUrl = `&sources=${filteredArray}`; -const fullURL = `${baseUrl}${publicationUrl}`; +generateFetchUrl(); +/// DISPLAY DATA ON PAGE + +const parentNode = document.querySelector(".news--area--feed"); + function displayDataOnPage(newsStories) { + const newsArray = newsStories.articles; // console.log(newsStories.articles); - // add news blocks (as articles) newsArray.forEach(function(newsitem) { @@ -32,25 +87,6 @@ function displayDataOnPage(newsStories) { parentNode.appendChild(node); }) - - // filter - let checkboxArray = document.querySelectorAll(".news--filter input"); - console.log(checkboxArray) - - checkboxArray.forEach(function(input) { - input.addEventListener("change", event => { - console.log(event.target.value); - - // if (publicationList[event.target.value]) { - // publicationList[event.target.value] = false - // filteredArray.push(event.target.value); - // } - - // console.log(filteredArray) - - }) - }) - } function displayErrorToUser() {} @@ -66,8 +102,10 @@ fetch(fullURL) // by default fetch makes a GET request .catch(function(error) { displayErrorToUser("Server failed to return data"); - // need filter to NOT SHOW any news story with empty values - // if any value is empty do no show + // need filter to NOT SHOW any news story with empty values. if any value is empty do no show }); - \ No newline at end of file + + + + From 630a5d1a5455e052ba2fea90f2189edc8ac7a4e4 Mon Sep 17 00:00:00 2001 From: Lemony Date: Sat, 15 Sep 2018 19:02:49 +0100 Subject: [PATCH 04/14] Function call confusion --- scripts/javascript.js | 107 +++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 63 deletions(-) diff --git a/scripts/javascript.js b/scripts/javascript.js index c99db42..88d8f20 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -1,56 +1,24 @@ -// I am trying to work in stages - currently focusing on building a generate fetch url function -// this means that the code not running when the fetch() is run - -// To explain what I am trying to do: -// 1) create object with keys as news sources, values as true/false. -// 2) These values to be changed on "change" event when checkbox is checked / unchecked. -// 3) If (any of the) values are true, they are used to create an array -// 4) The array is used as the sources part of the fetch url. - -// I THINK the problem at the moment is that my filter event code -// is not returning an updated object. I think I am updating individual keys but not updating the object… - - /// GENERATE FETCH URL -function generateFetchUrl() { - - // baseUrl and default - const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; - const defaultArray = ["bbc-news","daily-mail","mirror"]; - let checkboxArray = document.querySelectorAll(".news--filter input"); - // news sources object +// news sources object let publicationList = { "bbc-news": false, "daily-mail": false, "mirror": false } - - //filter event - checkboxArray.forEach(function(input) { - input.addEventListener("change", event => { - // new assigned value to match object key - console.log(event.target.value); - - // assign object value if checked is true - if (event.target.checked === true) { - return publicationList[event.target.value] = true; - } - else { - return publicationList[event.target.value] = false; - } - }) -}) -/// THIS IS WHERE I AM STUCK; I think I need to be updating the publicationList but am only changing the individual values -console.log(publicationList) +function generateFetchURL(publicationList) { + + // baseUrl and default + const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; + const defaultArray = ["bbc-news","daily-mail","mirror"]; - // create an array from object using key values - let publicationArray = Object.keys(publicationList); - let filteredArray = publicationArray.filter(function(pub) { - return publicationList[pub] === true; - }); + // create an array from object using key values + let publicationArray = Object.keys(publicationList); + let filteredArray = publicationArray.filter(function(pub) { + return publicationList[pub] === true; + }); // compile fetch url let defaultArrayUrl = `&sources=${defaultArray}`; @@ -67,11 +35,25 @@ console.log(publicationList) }) } -generateFetchUrl(); - +generateFetchURL(console.log(fullURL)); + +//filter event +// let checkboxArray = document.querySelectorAll(".news--filter input"); +// checkboxArray.forEach(function(input) { +// input.addEventListener("change", function(generateFetchURL) { +// // new assigned value to match object key +// // console.log(event.target.value); +// // assign object value if checked is true +// if (event.target.checked === true) { +// publicationList[event.target.value] = true; +// } +// else { +// publicationList[event.target.value] = false; +// } +// }) +// }) /// DISPLAY DATA ON PAGE - const parentNode = document.querySelector(".news--area--feed"); function displayDataOnPage(newsStories) { @@ -91,21 +73,20 @@ function displayDataOnPage(newsStories) { function displayErrorToUser() {} -fetch(fullURL) // by default fetch makes a GET request - .then(function(response) { - return response.json(); - }) - .then(function(body) { - //console.log(body); - displayDataOnPage(body); - }) - .catch(function(error) { - displayErrorToUser("Server failed to return data"); - - // need filter to NOT SHOW any news story with empty values. if any value is empty do no show - }); - +// function goFetch(fullURL) { +// fetch(fullURL) // by default fetch makes a GET request +// .then(function(response) { +// return response.json(); +// }) +// .then(function(body) { +// //console.log(body); +// displayDataOnPage(body); +// }) +// .catch(function(error) { +// displayErrorToUser("Server failed to return data"); + +// // need filter to NOT SHOW any news story with empty values. if any value is empty do no show +// }); +// } - - - +// goFetch(); From f62707716d8b06bcc6cd4a41d7846302ae0014af Mon Sep 17 00:00:00 2001 From: Lemony Date: Sat, 15 Sep 2018 19:52:33 +0100 Subject: [PATCH 05/14] Function generateFetchUrl debug --- scripts/javascript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/javascript.js b/scripts/javascript.js index 88d8f20..2e40331 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -35,7 +35,7 @@ function generateFetchURL(publicationList) { }) } -generateFetchURL(console.log(fullURL)); +generateFetchURL(console.log(publicationList)); //filter event // let checkboxArray = document.querySelectorAll(".news--filter input"); From ed31de87967da1e774f3cced7d82cf87691a3040 Mon Sep 17 00:00:00 2001 From: Lemony Date: Sat, 15 Sep 2018 23:13:07 +0100 Subject: [PATCH 06/14] Adding stylesheet --- .DS_Store | Bin 6148 -> 6148 bytes images/bbc.png | Bin 0 -> 16694 bytes images/ft.png | Bin 0 -> 33444 bytes images/mail.png | Bin 0 -> 8317 bytes images/metro.png | Bin 0 -> 18675 bytes images/mirror.png | Bin 0 -> 10685 bytes images/telegraph.png | Bin 0 -> 18048 bytes index.html | 28 ++++++++++++--------- scripts/javascript.js | 47 ++++++++++++++++++++--------------- styles/styles.css | 56 +++++++++++++++++++++++++++++++++--------- 10 files changed, 88 insertions(+), 43 deletions(-) create mode 100644 images/bbc.png create mode 100644 images/ft.png create mode 100644 images/mail.png create mode 100644 images/metro.png create mode 100644 images/mirror.png create mode 100644 images/telegraph.png diff --git a/.DS_Store b/.DS_Store index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..30bd6c7e9bcc3e3fba1a8855b450e3be6b2407f2 100644 GIT binary patch delta 266 zcmZoMXfc=|#>B`mF;Q%yo}wrl0|Nsi1A_nqLn=dYPP$=ma(-^X#Kh(GAPF{xOom*B zM22)^NuW3kpvdRuySSv3mLxMUTtBS91y+J4pMqDuAOm7K#BeK21ImJn@^bR?(t$ES z7Xuwv%uvEm$&dqb9J1WTL}#|i1|lq*xjDEwfIi)r_?>w&zlb6$6Hu4JWJ3|*%^o6q Fm;s2)IP3rb delta 70 zcmZoMXfc=|#>AjHu~2NHo+1YW5HK<@2yDK{XvVhr0b>>8W_AvK4xj>{$am(+{342+ UKzW7)kiy9(Jj$D6L{=~Z06T*Zn*aa+ diff --git a/images/bbc.png b/images/bbc.png new file mode 100644 index 0000000000000000000000000000000000000000..e259f0dee02b1f08adb63d5f119587bb5239a0f2 GIT binary patch literal 16694 zcmdVC2Q*#X+CRD@dM7$z6B43#d+VJDf+*2@w{=?yLbT{1h#p<^zID+Py^G#^@16h3 zd){-t@80|W&N$2?fH#TE)w{rkS zgFr%}?hZyKHfAnhV>1gYm@wTzLkk_)%2b$6lUI>L(LvJ8(n`+L$xO{t>8**UjS0k* zPE-Ue1L2`3K+m>rCnH?~Yq^)a&j@3a1)$`qKFj)(pKd~*MF^8b_`aX_yBoU8NSypS-m z_!n11cqPU8rFq36GScFb0^D32lG5A|9tl2iNl8gAJ^=yFf2?I|^Hl z!^I~f!_5gupp=9-2Zw+(pA;Xr1cZ|VA_4ioKK4)f73UEUkQR`U<`s~X;pCL&7vL4= zljh}>-~}u$w+w{qzdiZaHvd5_`@i4TUnBpUN&Y8~06YKZ@?Q=H`0y_mWd;NI=>#~S zzU|aR5D1DdFD3rgJ!LNy?oQQt)otPCc9FDC|E@ot;oTe#<;6T@jbl3w{E37m1_lG| zX$(F(MgRr+ty~#H9VI^trRJ>Hfr#s`?HKh^yW|BLBol?{rdXHyhPd^U&8609_{BVA z&Ktfy2cIW34u1p!eXx7h{Uucp4;>k))dGEg65h4+7=ADB(NBQnCuT_}Rfdl2Zw>aB z2IIedOu&NV_l+XNkN_QdTnsr(44jWjr-h6p&WqnlhmT(1hfd-r_6FzwwMQ)N1s6}m z7@<@#i-$Ed{g1hzk3W=^KeL1Dx&_nM)HxD>KvHEXbVs^x4)mXTUbJOy+8HFF2D~Yo zI=R>--gT23Pk*H#MEc(M;K$8=d(6vjSDQh76_~E~0p9METJg$slkBR19FGF9X(fCC zo!v%=xBhh{;;9v`gx%hCT9Zdu&JwB4s%`nn#@xd)P1CX#)>2`?)GbkVU$CI>b>`xo4S12VBSSr|x zJ7b(|nq?%!>UkDpre-==SbJ*-6b06hh8Wh- zD9ji4KMoFY6O@vhBBYZlXIa_E!@=e1><-4I`0X+K`^Sx^XV+k^YHV_Y>reDybDN%8 z|GSkH2~?b2AtPPGDC)GMQN0j1*`sn3#Q83(h+E@G$~q%EsfQpc5X1RS?501+4^!yP z(QulIJw!eW3dW@_Iv5*Ho=2#J7*->Zh2aKoItbhuKL(X`E;F*14)n2zc+57wlwTno za$F5bQx+xWwJSgqvZLsynk-K)jN$3}q4Z4l)cyKXchx+>U8KP8| zSQ-t*GSrM#kvm*vpNK`iCPr1kNBq9^ZY-E)OVAaQoQK16Jv>DI33jTW*T_{34ndK| zBf7U2E3W=na*~mZ2)XE+P=R2-R$*BOR69lMT_}<#uln%nwey#`)>p%!*+g8Dl z`XW3}?%p$uRvf;7MAxwyA(zKpsx&2HWW1(Wi4b;J0md6Xh!Z|zQG!ZKY10!f;h%C-2=endreJIKYuv$(wl zN6_ozvykY>e_~)iIFGYgBW2T=uQe)VL<0>`q%waNkx&D8Oe-}{aP=cwfAB8jvkBQk zv*%e)clz9|8%k%z#cO#+OoiJB`}>_re}<#;pG>g_H+KgV)NN#%x^+%#v4b$5hKl)G zu(UiK{G{dKq{PsXnAmGwSl9E2YUZmph6Z!?*3a*14I&kdqnn=xXow7T<37K8e`
  • 8=td2Gpn15 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 literal 0 HcmV?d00001 diff --git a/images/ft.png b/images/ft.png new file mode 100644 index 0000000000000000000000000000000000000000..a805335f6d1c41298aaf28d7e17ff0152914c6e3 GIT binary patch literal 33444 zcmeFXWmuHa*Ec$pl1ih5z|h^@Fm%HVAvwU%-Q6*SlyoQ^LxX^nv>+0K(k0y`DF~eL zU(b8adEe)HzMOC8zAl)1VC}WmUh!Lduf1cnG!*f$$*}mkh&PoEPFQCq??kWefwNvtUhw1ujfGzzUEJdt{ zzM@D5PB2d>jjxlVvxlg!1n?hxMUn4+|I7uX`3H%og9K3KuRt0DbuAh>7k3zq0H+{_ zB@aJ0jgSZ@k03X{01rD2FE@`67q}|yu2Jp3JwoHXHTdvhqDLWzd3+l9+vKQ zuAX)-&NP2HLM>dpJSBigP5(IsC)fY5b@up|nUDtK@`bu`@o;kgozlMv)z$xdQYWYX zP`~Rk) zmF0f~x_Y@g{=+<0mRvALm=lt>2a=ZOANsk9%DKa!o-XcS7Z=BWJ4)-{5^3b*{yIjO zhFKkIY3KY`4VJ%Z{c98q1oebT0RK{OaEoy82!MHcMEUte`S{uX`jGpdr0U3Eu!4F* z|7XN5R(95Y{}WPmbx~z!4^ODGB}^G40YoarX=i68YH4jP#LF)P<>2Mz=jY%Tvb5q5 z=C`!ufbzk31+91lt+_>n{-GCgJjlh;>#sTfj{j%uTDe#vdHlzuqC7B|wY4R$AcvKJ zkO&7iACjdAuaE$TwY9JyAGa{nil5i&-`q6a?U3mMb^Kqs{?*C~$&sH=h))Cnz$A z?3|!BFfLbTo4+BA{~YgQ3qvyfZ=C;6G7lGPPami|OvVOj>Hk@Tas8iW-~sji@AdzmdH?@w z{r_cPOIxV34Gf8+T)@9G;`)m?|8x)6|I>5-<@tX{j|?)d|N7PAU$&5i+Wf~Vk^*uv zLh=GKA`0>{a>9JP+;Z}KBK)#~GIDZqyn@2QJpYvCX!ladxNpATAI4()OYlSlx;30) z`HhCD8cBsqz8RU094Hf!SMR<#%wwBOq=y{+1n>VJ%s@eN*DHXgHoi7lFdS4l$w)!m2uv{c83g zhKmiE<}ThF*mg{(dkPq6HiNT<^`U-YWdxx!7tCK4BR~jjpbn%_!l}Hbj`yB|tA9n5 z4E}^ty&dNN=86k1uyFq5Y5TXZYeM`*YWskKNxZuT2cs7?Ap%v_b5C=06X-p9WV-} zo&H>gOJ6xC+#Gu8gzLPZup4V@dRq5Td6g8$3<853eFXf$;aFxO?wxP6*`TqQ$>*;sIFdHYX{mwQHURcIE|FfC$WO2S+i2i*j8 z<^99#4{7=+uIamgP-0ngRDgB}zSP4H^O#X#fX%2X#F`N01!!73sw&LNidC!~;J8|q zucWNpGz+A8qK4MG8i_B$fghWS0C|Ifu!Wo#S#(2-C_!M^&>n1t9

    `IwKWjo03o> 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

    uc`g;I}WZthcPU||_=*Y_I6-f-fI6vPw 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 QAb~GwNd<{Av9Esr4@!@Dr2qf` literal 0 HcmV?d00001 diff --git a/images/mail.png b/images/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..c19f7291bc8884c7589213ab0343b234c33f5b14 GIT binary patch literal 8317 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 literal 0 HcmV?d00001 diff --git a/images/telegraph.png b/images/telegraph.png new file mode 100644 index 0000000000000000000000000000000000000000..e516620c32ba10851a3d378676eb67e2fa2146db GIT binary patch literal 18048 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 -

    +
    - -
    -

    News comparison filter

    -
    -
    - +

    Eye on the Newsmakers

    +
    + +
    +
    +
    +
    -
    + diff --git a/scripts/javascript.js b/scripts/javascript.js index 2e40331..e7e7fcd 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -3,12 +3,16 @@ // news sources object let publicationList = { - "bbc-news": false, "daily-mail": false, - "mirror": false + "mirror": false, + "metro": false, + "the-telegraph": false, + "financial-times": false, + "bbc-news": false, } + let checkboxArray = document.querySelectorAll(".news--filter input"); -function generateFetchURL(publicationList) { +// function generateFetchURL(publicationList) { // baseUrl and default const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; @@ -33,12 +37,10 @@ function generateFetchURL(publicationList) { return fullURL = `${baseUrl}${defaultArrayUrl}`; } }) -} +// } -generateFetchURL(console.log(publicationList)); //filter event -// let checkboxArray = document.querySelectorAll(".news--filter input"); // checkboxArray.forEach(function(input) { // input.addEventListener("change", function(generateFetchURL) { // // new assigned value to match object key @@ -64,8 +66,13 @@ function displayDataOnPage(newsStories) { newsArray.forEach(function(newsitem) { const node = document.createElement("article"); - node.innerHTML = `${newsitem.source.name} (source logo) - ${newsitem.title}: ${newsitem.description}`; + node.innerHTML = `
    +
    +

    ${newsitem.title}

    +

    ${newsitem.description}

    +

    ${newsitem.content}

    +

    Read full article +

    `; parentNode.appendChild(node); }) @@ -74,19 +81,19 @@ function displayDataOnPage(newsStories) { function displayErrorToUser() {} // function goFetch(fullURL) { -// fetch(fullURL) // by default fetch makes a GET request -// .then(function(response) { -// return response.json(); -// }) -// .then(function(body) { -// //console.log(body); -// displayDataOnPage(body); -// }) -// .catch(function(error) { -// displayErrorToUser("Server failed to return data"); + fetch(fullURL) // by default fetch makes a GET request + .then(function(response) { + return response.json(); + }) + .then(function(body) { + //console.log(body); + displayDataOnPage(body); + }) + .catch(function(error) { + displayErrorToUser("Server failed to return data"); -// // need filter to NOT SHOW any news story with empty values. if any value is empty do no show -// }); + // need filter to NOT SHOW any news story with empty values. if any value is empty do no show + }); // } // goFetch(); diff --git a/styles/styles.css b/styles/styles.css index 0321eed..a4b6e1c 100644 --- a/styles/styles.css +++ b/styles/styles.css @@ -2,10 +2,11 @@ ========================================================================== */ :root { - --main-txt-color: #0a0a0a; - --light-color: #EEE8CD; - --bright-color: #FFE600; - --dark-color: #808069; + --main-txt-color: #060607; + --light-color: #f4f5f7; + --bright-color: #afb9c5; + --mid-color: #484e52; + --dark-color: #111f28; --main-padding: 1rem; } @@ -13,11 +14,11 @@ /* BASE ========================================================================== */ - body { - font-family: "Gill Sans", "Gill Sans MT", Calibri, "Trebuchet MS", sans-serif; +body { + font-family: "Palatino Linotype", Palatino, Palladio, "URW", sans-serif; margin: 0; padding: 0; - background: #e8e8e8; + background: var(--light-color); line-height: 1.5; color: var(--main-txt-color); -webkit-font-smoothing: antialiased; @@ -44,14 +45,43 @@ figure { padding: 0; margin: 0; } -section -article { +h1.main-title { + text-align: center; + text-transform: uppercase; +} +.news--article-image img { + display: none; } - -h1 { text-align: center} @media (min-width: 768px) { + .main { + display: flex; + } + .news--filter { + flex: 1 + } + .news--area { + flex: 2 + } + .news--area--feed { + display: flex; + flex-flow: row wrap; + } + article { + width: 50%; + padding-bottom: var(--main-padding); + } + .news--article-content, .news--article-image { + padding-left: var(--main-padding); + padding-right: var(--main-padding); + } + .news--article-content { + + } + .news--article-image img { + display: block + } } @media (min-width: 960px) { @@ -60,4 +90,8 @@ h1 { text-align: center} @media (min-width: 1200px) { .container {max-width: 1170px} + article { + width: 33.3333334%; + padding-bottom: var(--main-padding); + } } From 86d7c06d2c6711e38b6922475f2d9492e8ad4477 Mon Sep 17 00:00:00 2001 From: Lemony Date: Sun, 16 Sep 2018 10:40:07 +0100 Subject: [PATCH 07/14] Functions wrangling --- index.html | 2 +- scripts/javascript.js | 158 ++++++++++++++++++++++++------------------ 2 files changed, 92 insertions(+), 68 deletions(-) diff --git a/index.html b/index.html index b5e6c45..4f47785 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@

    Eye on the Newsmakers

    Metro
    The Telegraph
    Financial Times
    - BBC News
    + BBC News
    diff --git a/scripts/javascript.js b/scripts/javascript.js index e7e7fcd..7652e26 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -1,19 +1,69 @@ +let checkboxArray = document.querySelectorAll(".news--filter input"); +const parentNode = document.querySelector(".news--area--feed"); + +/* +-------------- +FETCH FUNCTION +-------------- +*/ +const goFetch = function(fullURL) { + + fetch(fullURL) // by default fetch makes a GET request + .then(function(response) { + return response.json(); + }) + .then(function(body) { + displayDataOnPage(body); + }) + .catch(function(error) { + displayErrorToUser("Server failed to return data"); + // need filter to NOT SHOW any news story with empty values. if any value is empty do no show + }); +} + +/* +-------------------- +DISPLAY DATA ON PAGE +-------------------- +*/ + +function displayDataOnPage(newsStories) { + + const newsArray = newsStories.articles; + // console.log(newsStories.articles); + // add news blocks (as articles) + newsArray.forEach(function(newsitem) { + + const node = document.createElement("article"); + node.innerHTML = `
    +
    +

    ${newsitem.title}

    +

    ${newsitem.description}

    +

    ${newsitem.content}

    +

    Read full article +

    `; + parentNode.appendChild(node); + + }) +} -/// GENERATE FETCH URL +/* +------------------ +GENERATE FETCH URL +------------------ +*/ // news sources object - let publicationList = { - "daily-mail": false, - "mirror": false, - "metro": false, - "the-telegraph": false, - "financial-times": false, - "bbc-news": false, - } - let checkboxArray = document.querySelectorAll(".news--filter input"); - -// function generateFetchURL(publicationList) { - +let publicationList = { + "daily-mail": false, + "mirror": false, + "metro": false, + "the-telegraph": false, + "financial-times": false, + "bbc-news": false, +} + +const generateFetchURL = function (publicationList) { // baseUrl and default const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; const defaultArray = ["bbc-news","daily-mail","mirror"]; @@ -31,69 +81,43 @@ checkboxArray.forEach(function (checkbox) { if (checkbox.checked === true) { + // RETURN VALUES - fullURL return fullURL = `${baseUrl}${filteredPublicationUrl}`; } else { return fullURL = `${baseUrl}${defaultArrayUrl}`; } }) -// } - - -//filter event -// checkboxArray.forEach(function(input) { -// input.addEventListener("change", function(generateFetchURL) { -// // new assigned value to match object key -// // console.log(event.target.value); -// // assign object value if checked is true -// if (event.target.checked === true) { -// publicationList[event.target.value] = true; -// } -// else { -// publicationList[event.target.value] = false; -// } -// }) -// }) - -/// DISPLAY DATA ON PAGE -const parentNode = document.querySelector(".news--area--feed"); - -function displayDataOnPage(newsStories) { - - const newsArray = newsStories.articles; - // console.log(newsStories.articles); - // add news blocks (as articles) - newsArray.forEach(function(newsitem) { - - const node = document.createElement("article"); - node.innerHTML = `
    -
    -

    ${newsitem.title}

    -

    ${newsitem.description}

    -

    ${newsitem.content}

    -

    Read full article -

    `; - parentNode.appendChild(node); +} - }) +/* +---------------------- +CREATE CHECKBOX FILTER +---------------------- +*/ +const createCheckboxFilter = function() { + checkboxArray.forEach(function(input) { + input.addEventListener("change", function(event) { + // new assigned value to match object key + // assign object value if checked is true + if (event.target.checked === true) { + publicationList[event.target.value] = true; + } + else { + publicationList[event.target.value] = false; + } + generateFetchURL(publicationList); + }) + }) } +/* this function to run generateFetchURL() */ +createCheckboxFilter(); +/* +--------------------- +ERROR HANDLER - TO DO +--------------------- +*/ function displayErrorToUser() {} -// function goFetch(fullURL) { - fetch(fullURL) // by default fetch makes a GET request - .then(function(response) { - return response.json(); - }) - .then(function(body) { - //console.log(body); - displayDataOnPage(body); - }) - .catch(function(error) { - displayErrorToUser("Server failed to return data"); - // need filter to NOT SHOW any news story with empty values. if any value is empty do no show - }); -// } - -// goFetch(); From 8d60ec0b25196b08e633f4d890ec77a4a5f71f14 Mon Sep 17 00:00:00 2001 From: Lemony Date: Sun, 16 Sep 2018 12:42:25 +0100 Subject: [PATCH 08/14] URL returned but filter not working --- scripts/javascript.js | 74 +++++++++++++++++++++++++++---------------- styles/styles.css | 6 ++-- 2 files changed, 51 insertions(+), 29 deletions(-) diff --git a/scripts/javascript.js b/scripts/javascript.js index 7652e26..8e2ff31 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -1,6 +1,9 @@ -let checkboxArray = document.querySelectorAll(".news--filter input"); +const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; const parentNode = document.querySelector(".news--area--feed"); +let checkboxArray = document.querySelectorAll(".news--filter input"); +let userOpted = false; + /* -------------- FETCH FUNCTION @@ -17,7 +20,6 @@ const goFetch = function(fullURL) { }) .catch(function(error) { displayErrorToUser("Server failed to return data"); - // need filter to NOT SHOW any news story with empty values. if any value is empty do no show }); } @@ -35,7 +37,7 @@ function displayDataOnPage(newsStories) { newsArray.forEach(function(newsitem) { const node = document.createElement("article"); - node.innerHTML = `
    + node.innerHTML = `

    ${newsitem.title}

    ${newsitem.description}

    @@ -64,12 +66,12 @@ let publicationList = { } const generateFetchURL = function (publicationList) { - // baseUrl and default - const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; - const defaultArray = ["bbc-news","daily-mail","mirror"]; + // default url array + const defaultArray = ["daily-mail","mirror","metro","the-telegraph","financial-times","bbc-news"]; // create an array from object using key values let publicationArray = Object.keys(publicationList); + // filter array to keys with 'true' values let filteredArray = publicationArray.filter(function(pub) { return publicationList[pub] === true; }); @@ -79,15 +81,27 @@ const generateFetchURL = function (publicationList) { let filteredPublicationUrl = `&sources=${filteredArray}`; let fullURL = ""; - checkboxArray.forEach(function (checkbox) { - if (checkbox.checked === true) { - // RETURN VALUES - fullURL - return fullURL = `${baseUrl}${filteredPublicationUrl}`; - } - else { - return fullURL = `${baseUrl}${defaultArrayUrl}`; - } - }) + if (userOpted === true) { + // RETURN VALUES - fullURL + fullURL = `${baseUrl}${filteredPublicationUrl}`; + } else { + fullURL = `${baseUrl}${defaultArrayUrl}`; + } + // CHANGE filteredArray GOOD + // console.log(filteredArray); + + goFetch(fullURL) + + // Try a different way of doing this - this is not influenced by the event + // checkboxArray.forEach(function (checkbox) { + // if (checkbox.checked === true) { + // // RETURN VALUES - fullURL + // return fullURL = `${baseUrl}${filteredPublicationUrl}`; + // } + // else { + // return fullURL = `${baseUrl}${defaultArrayUrl}`; + // } + // }) } /* @@ -96,18 +110,23 @@ CREATE CHECKBOX FILTER ---------------------- */ const createCheckboxFilter = function() { + // Reset UserOpted to false + userOpted = false; checkboxArray.forEach(function(input) { - input.addEventListener("change", function(event) { - // new assigned value to match object key - // assign object value if checked is true - if (event.target.checked === true) { - publicationList[event.target.value] = true; - } - else { - publicationList[event.target.value] = false; - } - generateFetchURL(publicationList); - }) + input.addEventListener("change", function(event) { + // new assigned value to match object key + // assign object value if checked is true + if (event.target.checked === true) { + publicationList[event.target.value] = true; + userOpted = true; + } + else { + publicationList[event.target.value] = false; + } + // CHANGE publicationList object GOOD + // console.log(publicationList); + generateFetchURL(publicationList); + }) }) } /* this function to run generateFetchURL() */ @@ -120,4 +139,5 @@ ERROR HANDLER - TO DO */ function displayErrorToUser() {} - +// Initial call to fetch data +generateFetchURL(baseUrl); diff --git a/styles/styles.css b/styles/styles.css index a4b6e1c..8fb82c9 100644 --- a/styles/styles.css +++ b/styles/styles.css @@ -79,8 +79,10 @@ h1.main-title { .news--article-content { } - .news--article-image img { - display: block + .news--article-image { + display: block; + padding-top: 30%; + background-size: contain; } } From d1506a5c94b7c0bc50b73488336e7c1bff60b81c Mon Sep 17 00:00:00 2001 From: Lemony Date: Sun, 16 Sep 2018 13:26:40 +0100 Subject: [PATCH 09/14] Returning default URL, filter broken --- index.html | 14 +++++-------- scripts/javascript.js | 5 +---- styles/styles.css | 48 ++++++++++++++++++++++++++++--------------- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/index.html b/index.html index 4f47785..4479203 100644 --- a/index.html +++ b/index.html @@ -10,17 +10,14 @@ - +

    Eye on the Tabloids

    +
    -

    Eye on the Newsmakers

    @@ -28,7 +25,6 @@

    Eye on the Newsmakers

    - \ No newline at end of file diff --git a/scripts/javascript.js b/scripts/javascript.js index 8e2ff31..e3eb028 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -60,14 +60,11 @@ let publicationList = { "daily-mail": false, "mirror": false, "metro": false, - "the-telegraph": false, - "financial-times": false, - "bbc-news": false, } const generateFetchURL = function (publicationList) { // default url array - const defaultArray = ["daily-mail","mirror","metro","the-telegraph","financial-times","bbc-news"]; + const defaultArray = ["daily-mail","mirror","metro"]; // create an array from object using key values let publicationArray = Object.keys(publicationList); diff --git a/styles/styles.css b/styles/styles.css index 8fb82c9..6c44f90 100644 --- a/styles/styles.css +++ b/styles/styles.css @@ -37,9 +37,9 @@ body { margin: 0; } img { -max-width: 100%; -height: auto; -border-style: none; + max-width: 100%; + height: auto; + border-style: none; } figure { padding: 0; @@ -49,21 +49,35 @@ figure { h1.main-title { text-align: center; text-transform: uppercase; + background-color: var(--main-txt-color); + color: var(--light-color); + padding: calc( 2 * var(--main-padding) ) 0; + margin: 0 0 calc( 2 * var(--main-padding) ); } + +calc( 3 * var(--main-padding) ); + .news--article-image img { display: none; } +/* Checkbox navigation */ +.news--filter { + text-align: center; + margin-bottom: var(--main-padding); + } +.news--filter label { + display: inline-block; + margin-right: var(--main-padding); + text-transform: uppercase; + font-weight: 700; +} +.news--filter input[type="checkbox"] { + display: inline-block; + margin-right: 0.5rem; + } + @media (min-width: 768px) { - .main { - display: flex; - } - .news--filter { - flex: 1 - } - .news--area { - flex: 2 - } .news--area--feed { display: flex; flex-flow: row wrap; @@ -73,16 +87,18 @@ h1.main-title { padding-bottom: var(--main-padding); } .news--article-content, .news--article-image { - padding-left: var(--main-padding); - padding-right: var(--main-padding); + margin-left: var(--main-padding); + margin-right: var(--main-padding); } .news--article-content { } .news--article-image { display: block; - padding-top: 30%; - background-size: contain; + padding-top: 56% /*widescreen */; + background-repeat: no-repeat; + background-position: center center; + background-size: cover; } } From f4e6ff5f44f635f94e2ee6de30f2dcfb193b4345 Mon Sep 17 00:00:00 2001 From: Lemony Date: Sun, 16 Sep 2018 17:16:08 +0100 Subject: [PATCH 10/14] Filter working --- .DS_Store | Bin 6148 -> 6148 bytes scripts/javascript.js | 37 ++++++++++++------------------------- styles/styles.css | 27 +++++++++++++++++++++++++-- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/.DS_Store b/.DS_Store index 30bd6c7e9bcc3e3fba1a8855b450e3be6b2407f2..de29b7ca03e0016c50e7087e272f83fcc20d8e91 100644 GIT binary patch delta 41 xcmZoMXfc@J&&WP8U^gTCWFE%(yzC6c49N^d44DiC3?-XqG5WJ@X6N|J4*>1G3rzq3 delta 30 mcmZoMXfc@J&&W10U^gS%WFE%(n@=*@u}y4{+sw}KmmdI_j0x`m diff --git a/scripts/javascript.js b/scripts/javascript.js index e3eb028..f1ff693 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -2,7 +2,6 @@ const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852 const parentNode = document.querySelector(".news--area--feed"); let checkboxArray = document.querySelectorAll(".news--filter input"); -let userOpted = false; /* -------------- @@ -29,17 +28,17 @@ DISPLAY DATA ON PAGE -------------------- */ -function displayDataOnPage(newsStories) { - +function displayDataOnPage(newsStories){ + const newsArray = newsStories.articles; // console.log(newsStories.articles); // add news blocks (as articles) newsArray.forEach(function(newsitem) { const node = document.createElement("article"); - node.innerHTML = `
    + node.innerHTML = `
    -

    ${newsitem.title}

    +

    ${newsitem.title}

    ${newsitem.description}

    ${newsitem.content}

    Read full article @@ -78,27 +77,17 @@ const generateFetchURL = function (publicationList) { let filteredPublicationUrl = `&sources=${filteredArray}`; let fullURL = ""; - if (userOpted === true) { - // RETURN VALUES - fullURL - fullURL = `${baseUrl}${filteredPublicationUrl}`; - } else { + // check if filteredArray has values + if (filteredArray.length == 0 ) { fullURL = `${baseUrl}${defaultArrayUrl}`; + } else { + fullURL = `${baseUrl}${filteredPublicationUrl}`; } // CHANGE filteredArray GOOD - // console.log(filteredArray); + console.log(filteredArray); + console.log(filteredArray.length); goFetch(fullURL) - - // Try a different way of doing this - this is not influenced by the event - // checkboxArray.forEach(function (checkbox) { - // if (checkbox.checked === true) { - // // RETURN VALUES - fullURL - // return fullURL = `${baseUrl}${filteredPublicationUrl}`; - // } - // else { - // return fullURL = `${baseUrl}${defaultArrayUrl}`; - // } - // }) } /* @@ -107,21 +96,19 @@ CREATE CHECKBOX FILTER ---------------------- */ const createCheckboxFilter = function() { - // Reset UserOpted to false - userOpted = false; checkboxArray.forEach(function(input) { input.addEventListener("change", function(event) { // new assigned value to match object key // assign object value if checked is true if (event.target.checked === true) { publicationList[event.target.value] = true; - userOpted = true; + // displayDataOnPage(); } else { publicationList[event.target.value] = false; } // CHANGE publicationList object GOOD - // console.log(publicationList); + console.log(publicationList); generateFetchURL(publicationList); }) }) diff --git a/styles/styles.css b/styles/styles.css index 6c44f90..4d0846c 100644 --- a/styles/styles.css +++ b/styles/styles.css @@ -99,8 +99,31 @@ calc( 3 * var(--main-padding) ); background-repeat: no-repeat; background-position: center center; background-size: cover; + position: relative; + + -moz-filter: url("data:image/svg+xml;utf8,#grayscale"); + -o-filter: url("data:image/svg+xml;utf8,#grayscale"); + -webkit-filter: grayscale(100%); + filter: gray; + filter: url("data:image/svg+xml;utf8,#grayscale"); + } - } + .news--article-image span { + display: block; + position: absolute; + right: -10px; + top: -10px; + width: 100px; + padding-top: 50px; + background-color: black; + background-repeat: no-repeat; + background-position: center center; + background-size: cover; + } + .Metro { background-image: url(../images/metro.png);} + .Mail { background-image: url(../images/mail.png); } + .Mirror { background-image: url(../images/mirror.png); } +} @media (min-width: 960px) { .container {max-width: 930px} @@ -112,4 +135,4 @@ calc( 3 * var(--main-padding) ); width: 33.3333334%; padding-bottom: var(--main-padding); } - } +} From c1c31e661f2f2b1dc112e54017d0c60444186c2c Mon Sep 17 00:00:00 2001 From: Lemony Date: Sun, 16 Sep 2018 17:21:01 +0100 Subject: [PATCH 11/14] Filter working - but need to reset content --- scripts/javascript-workings2.js | 128 ++++++++++++++++++++++++++++++++ scripts/javascript-workings3.js | 123 ++++++++++++++++++++++++++++++ 2 files changed, 251 insertions(+) create mode 100644 scripts/javascript-workings2.js create mode 100644 scripts/javascript-workings3.js diff --git a/scripts/javascript-workings2.js b/scripts/javascript-workings2.js new file mode 100644 index 0000000..ca6179c --- /dev/null +++ b/scripts/javascript-workings2.js @@ -0,0 +1,128 @@ +const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; +const parentNode = document.querySelector(".news--area--feed"); + +let checkboxArray = document.querySelectorAll(".news--filter input"); +let userOpted = false; +/* +-------------- +FETCH FUNCTION +-------------- +*/ +const goFetch = function(fullURL) { + + fetch(fullURL) // by default fetch makes a GET request + .then(function(response) { + return response.json(); + }) + .then(function(body) { + displayDataOnPage(body); + }) + .catch(function(error) { + displayErrorToUser("Server failed to return data"); + // need filter to NOT SHOW any news story with empty values. if any value is empty do no show + }); +} + +/* +-------------------- +DISPLAY DATA ON PAGE +-------------------- +*/ + +function displayDataOnPage(newsStories) { + + const newsArray = newsStories.articles; + // console.log(newsStories.articles); + // add news blocks (as articles) + newsArray.forEach(function(newsitem) { + + const node = document.createElement("article"); + node.innerHTML = `

    +
    +

    ${newsitem.title}

    +

    ${newsitem.description}

    +

    ${newsitem.content}

    +

    Read full article +

    `; + parentNode.appendChild(node); + + }) +} + +/* +------------------ +GENERATE FETCH URL +------------------ +*/ + +// news sources object +let publicationList = { + "daily-mail": false, + "mirror": false, + "metro": false, + "the-telegraph": false, + "financial-times": false, + "bbc-news": false, +} + +const generateFetchURL = function (publicationList) { + // baseUrl and default + const defaultArray = ["bbc-news","daily-mail","mirror"]; + + // create an array from object using key values + let publicationArray = Object.keys(publicationList); + let filteredArray = publicationArray.filter(function(pub) { + return publicationList[pub] === true; + }); + + // compile fetch url + let defaultArrayUrl = `&sources=${defaultArray}`; + let filteredPublicationUrl = `&sources=${filteredArray}`; + let fullURL = ""; + + if (userOpted === true) { + // RETURN VALUES - fullURL + fullURL = `${baseUrl}${filteredPublicationUrl}`; + } else { + fullURL = `${baseUrl}${defaultArrayUrl}`; + } + goFetch(fullURL) +} + +/* +---------------------- +CREATE CHECKBOX FILTER +---------------------- +*/ +const createCheckboxFilter = function() { + // Reset UserOpted to false + userOpted = false; + checkboxArray.forEach(function(input) { + input.addEventListener("change", function(event) { + // new assigned value to match object key + // assign object value if checked is true + if (event.target.checked === true) { + publicationList[event.target.value] = true; + userOpted = true; + } + else { + publicationList[event.target.value] = false; + } + console.log(publicationList) + generateFetchURL(publicationList); + }) + }) +} +/* this function to run generateFetchURL() */ +createCheckboxFilter(); + +/* +--------------------- +ERROR HANDLER - TO DO +--------------------- +*/ +function displayErrorToUser() {} + + +// Initial call to fetch data +generateFetchURL(baseUrl); \ No newline at end of file diff --git a/scripts/javascript-workings3.js b/scripts/javascript-workings3.js new file mode 100644 index 0000000..8b3330c --- /dev/null +++ b/scripts/javascript-workings3.js @@ -0,0 +1,123 @@ +const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; +const parentNode = document.querySelector(".news--area--feed"); + +let checkboxArray = document.querySelector(".news--filter"); +let userOpted = false; +/* +-------------- +FETCH FUNCTION +-------------- +*/ +const goFetch = function(fullURL) { + + fetch(fullURL) // by default fetch makes a GET request + .then(function(response) { + return response.json(); + }) + .then(function(body) { + displayDataOnPage(body); + }) + .catch(function(error) { + displayErrorToUser("Server failed to return data"); + // need filter to NOT SHOW any news story with empty values. if any value is empty do no show + }); +} + +/* +-------------------- +DISPLAY DATA ON PAGE +-------------------- +*/ + +function displayDataOnPage(newsStories) { + + const newsArray = newsStories.articles; + // console.log(newsStories.articles); + // add news blocks (as articles) + newsArray.forEach(function(newsitem) { + + const node = document.createElement("article"); + node.innerHTML = `
    +
    +

    ${newsitem.title}

    +

    ${newsitem.description}

    +

    ${newsitem.content}

    +

    Read full article +

    `; + parentNode.appendChild(node); + + }) +} + +/* +------------------ +GENERATE FETCH URL +------------------ +*/ + +// news sources object +let publicationList = { + "daily-mail": false, + "mirror": false, + "metro": false, + "the-telegraph": false, + "financial-times": false, + "bbc-news": false, +} + +const generateFetchURL = function (publicationList) { + // baseUrl and default + const defaultArray = ["bbc-news","daily-mail","mirror"]; + + // create an array from object using key values + let publicationArray = Object.keys(publicationList); + let filteredArray = publicationArray.filter(function(pub) { + return publicationList[pub] === true; + }); + + // compile fetch url + let defaultArrayUrl = `&sources=${defaultArray}`; + let filteredPublicationUrl = `&sources=${filteredArray}`; + let fullURL = ""; + + if (userOpted === true) { + // RETURN VALUES - fullURL + fullURL = `${baseUrl}${filteredPublicationUrl}`; + } else { + fullURL = `${baseUrl}${defaultArrayUrl}`; + } + goFetch(fullURL) +} + +/* +---------------------- +CREATE CHECKBOX FILTER +---------------------- +*/ + +// Attach change event on checkboxes. +checkboxArray.addEventListener("change", function(event) { + + // new assigned value to match object key + // assign object value if checked is true + if (event.target.checked === true) { + publicationList[event.target.value] = true; + } else { + publicationList[event.target.value] = false; + } + + // Verify if any of the options are being selected. + userOpted = Object.values(publicationList).reduce(function (val1, val2) { return val1 || val2 }) + generateFetchURL(publicationList) +}) + +/* +--------------------- +ERROR HANDLER - TO DO +--------------------- +*/ +function displayErrorToUser() {} + + +// Initial call to fetch data +generateFetchURL(baseUrl); \ No newline at end of file From 5fdb5eb42473d9d735a6bf6f5105f96c6bb61772 Mon Sep 17 00:00:00 2001 From: Lemony Date: Sun, 16 Sep 2018 22:37:18 +0100 Subject: [PATCH 12/14] Filter, Styles, Fallbacks --- index.html | 2 +- scripts/javascript-workings.js | 3 - scripts/javascript.js | 68 ++++++++++++++++------ styles/styles.css | 102 +++++++++++++++++++++------------ 4 files changed, 117 insertions(+), 58 deletions(-) diff --git a/index.html b/index.html index 4479203..89646b2 100644 --- a/index.html +++ b/index.html @@ -24,7 +24,7 @@

    Eye on the Tabloids

  • - + \ No newline at end of file diff --git a/scripts/javascript-workings.js b/scripts/javascript-workings.js index 362a959..8e93c69 100644 --- a/scripts/javascript-workings.js +++ b/scripts/javascript-workings.js @@ -18,9 +18,6 @@ let publicationArray = Object.keys(publicationList); const sourceList = `&sources=${defaultArray}`; const fullURL = `${baseUrl}${sourceList}`; - - - function displayDataOnPage(newsStories) { const newsArray = newsStories.articles; console.log(newsStories.articles); diff --git a/scripts/javascript.js b/scripts/javascript.js index f1ff693..59ad9c8 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -1,8 +1,10 @@ const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; const parentNode = document.querySelector(".news--area--feed"); +const killCheckbox = document.querySelector(".kill-checkbox"); let checkboxArray = document.querySelectorAll(".news--filter input"); + /* -------------- FETCH FUNCTION @@ -27,27 +29,57 @@ const goFetch = function(fullURL) { DISPLAY DATA ON PAGE -------------------- */ +const newsLayout = newsitem => { + // fallbacks or empty if data is null + const imageurl = (newsitem.urlToImage !== null) ? `${newsitem.urlToImage}` : "https://placeholdit.co//i/400x400?&bg=808069&fc=eee8cd&text=Project Image"; + const source = (newsitem.source.name !== null) ? `` : ""; + const url = (newsitem.url !== null) ? `${newsitem.url}` : "#"; + const title = (newsitem.title !== null) ? `${newsitem.title}` : "News article"; + const description = (newsitem.description !== null) ? `

    ${newsitem.description}

    ` : ""; + const content = (newsitem.content !== null) ? `

    ${newsitem.content.split("[+")[0]}

    ` : ""; + + return ` + +
    + ${source} +
    +
    +

    ${title}

    + ${description} + ${content} +

    Read full article

    +
    +
    `; +} function displayDataOnPage(newsStories){ + parentNode.innerHTML = ""; const newsArray = newsStories.articles; - // console.log(newsStories.articles); - // add news blocks (as articles) + // add news blocks (as articles) newsArray.forEach(function(newsitem) { - const node = document.createElement("article"); - node.innerHTML = `
    -
    -

    ${newsitem.title}

    -

    ${newsitem.description}

    -

    ${newsitem.content}

    -

    Read full article -

    `; + node.innerHTML = newsLayout(newsitem); parentNode.appendChild(node); - }) + + createKillCheckbox(); +} + +/* +------------- +KILL CHECKBOX +------------- +*/ + +const createKillCheckbox = function() { + killCheckbox.addEventListener("input", function(event) { + console.log(event); + if (event.target.checked === true) {} + }) } + /* ------------------ GENERATE FETCH URL @@ -84,9 +116,8 @@ const generateFetchURL = function (publicationList) { fullURL = `${baseUrl}${filteredPublicationUrl}`; } // CHANGE filteredArray GOOD - console.log(filteredArray); - console.log(filteredArray.length); - + // console.log(filteredArray); + goFetch(fullURL) } @@ -108,7 +139,7 @@ const createCheckboxFilter = function() { publicationList[event.target.value] = false; } // CHANGE publicationList object GOOD - console.log(publicationList); + // console.log(publicationList); generateFetchURL(publicationList); }) }) @@ -116,10 +147,11 @@ const createCheckboxFilter = function() { /* this function to run generateFetchURL() */ createCheckboxFilter(); + /* ---------------------- -ERROR HANDLER - TO DO ---------------------- +------------- +ERROR HANDLER +------------- */ function displayErrorToUser() {} diff --git a/styles/styles.css b/styles/styles.css index 4d0846c..61f7ab4 100644 --- a/styles/styles.css +++ b/styles/styles.css @@ -45,26 +45,44 @@ figure { padding: 0; margin: 0; } - -h1.main-title { +h1.main-title {font-size: 1.5em} +h1.main-title, .site--footer { text-align: center; text-transform: uppercase; background-color: var(--main-txt-color); color: var(--light-color); padding: calc( 2 * var(--main-padding) ) 0; +} +h1.main-title { margin: 0 0 calc( 2 * var(--main-padding) ); } - -calc( 3 * var(--main-padding) ); - -.news--article-image img { - display: none; +.site--footer a { + color: var(--bright-color); + text-decoration: none; +} +.kill-checkbox { + color: var(--bright-color); + font-weight: 700; } +/* Source logo */ +.news--article-link span { + display: block; + width: 100px; + padding-top: 50px; + background-color: black; + background-repeat: no-repeat; + background-position: center center; + background-size: cover; +} +.Metro { background-image: url(../images/metro.png);} +.Mail { background-image: url(../images/mail.png); } +.Mirror { background-image: url(../images/mirror.png); } + /* Checkbox navigation */ .news--filter { text-align: center; - margin-bottom: var(--main-padding); + margin-bottom: calc(2* var(--main-padding)); } .news--filter label { display: inline-block; @@ -76,53 +94,65 @@ calc( 3 * var(--main-padding) ); display: inline-block; margin-right: 0.5rem; } - + +/* ARTICLES + ========================================================================== */ + +.news--area--feed article { + border-bottom: 3px dashed var(--bright-color); + margin-bottom: calc(2* var(--main-padding)); +} +.news--article-content { + margin-bottom: calc(2* var(--main-padding)); +} +.news--article-content a { + display: inline-block; + color: var(--mid-color); + text-decoration: none; + padding: 0.5rem 0; + text-transform: uppercase; +} +.news--article-content p:last-of-type {margin-bottom: 0;} +.news--article-content a:after { + content:'\00a0\25b8'; +} + +/* MEDIA QUERIES + ========================================================================== */ @media (min-width: 768px) { + h1.main-title {font-size: 2em} .news--area--feed { display: flex; flex-flow: row wrap; } - article { + .news--area--feed article { width: 50%; padding-bottom: var(--main-padding); + border-bottom: none; + margin-bottom: none; } .news--article-content, .news--article-image { margin-left: var(--main-padding); margin-right: var(--main-padding); } - .news--article-content { - } .news--article-image { display: block; - padding-top: 56% /*widescreen */; + padding-top: 56% /*widescreen 16:9*/; background-repeat: no-repeat; background-position: center center; background-size: cover; - position: relative; - - -moz-filter: url("data:image/svg+xml;utf8,#grayscale"); - -o-filter: url("data:image/svg+xml;utf8,#grayscale"); - -webkit-filter: grayscale(100%); - filter: gray; - filter: url("data:image/svg+xml;utf8,#grayscale"); - - } - .news--article-image span { + } + .news--article-link { display: block; - position: absolute; - right: -10px; - top: -10px; - width: 100px; - padding-top: 50px; - background-color: black; - background-repeat: no-repeat; - background-position: center center; - background-size: cover; + position: relative; + } + .news--article-link span { + position: absolute; + right: 1rem; + top: 0px; } - .Metro { background-image: url(../images/metro.png);} - .Mail { background-image: url(../images/mail.png); } - .Mirror { background-image: url(../images/mirror.png); } + } @media (min-width: 960px) { @@ -131,7 +161,7 @@ calc( 3 * var(--main-padding) ); @media (min-width: 1200px) { .container {max-width: 1170px} - article { + .news--area--feed article { width: 33.3333334%; padding-bottom: var(--main-padding); } From 728bab696895bac7f26cdfbd466d5cf20f4b09b1 Mon Sep 17 00:00:00 2001 From: Lemony Date: Mon, 17 Sep 2018 10:56:31 +0100 Subject: [PATCH 13/14] Red Card - in progress --- scripts/javascript.js | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/scripts/javascript.js b/scripts/javascript.js index 59ad9c8..defce36 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -1,10 +1,7 @@ const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; const parentNode = document.querySelector(".news--area--feed"); -const killCheckbox = document.querySelector(".kill-checkbox"); - let checkboxArray = document.querySelectorAll(".news--filter input"); - /* -------------- FETCH FUNCTION @@ -48,10 +45,12 @@ const newsLayout = newsitem => { ${description} ${content}

    Read full article

    -
    + `; } + + function displayDataOnPage(newsStories){ parentNode.innerHTML = ""; @@ -62,24 +61,8 @@ function displayDataOnPage(newsStories){ node.innerHTML = newsLayout(newsitem); parentNode.appendChild(node); }) - - createKillCheckbox(); } -/* -------------- -KILL CHECKBOX -------------- -*/ - -const createKillCheckbox = function() { - killCheckbox.addEventListener("input", function(event) { - console.log(event); - if (event.target.checked === true) {} - }) -} - - /* ------------------ GENERATE FETCH URL @@ -157,3 +140,16 @@ function displayErrorToUser() {} // Initial call to fetch data generateFetchURL(baseUrl); + + +const redcardCheckbox = document.querySelectorAll(".redcard-checkbox"); + +redcardCheckbox.forEach(item => { + addEventListener("change", function(event) { + console.log(event); + if (event.target.checked) { + console.log("checkbox!"); + event.target.parentNode.parentNode.style.backgroundColor = "red"; + } +}) +}) \ No newline at end of file From b45873c6ff6dfcacb717f9dbf600063e2df5e2c9 Mon Sep 17 00:00:00 2001 From: Lemony Date: Mon, 17 Sep 2018 18:19:09 +0100 Subject: [PATCH 14/14] Red card functionality added --- scripts/javascript.js | 130 ++++++++++++++++++++++-------------------- 1 file changed, 69 insertions(+), 61 deletions(-) diff --git a/scripts/javascript.js b/scripts/javascript.js index defce36..e2105c5 100644 --- a/scripts/javascript.js +++ b/scripts/javascript.js @@ -1,4 +1,5 @@ -const baseUrl = "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; +const baseUrl = + "https://newsapi.org/v2/top-headlines?apiKey=93238bcda39e4404852697d364b77971"; const parentNode = document.querySelector(".news--area--feed"); let checkboxArray = document.querySelectorAll(".news--filter input"); @@ -8,7 +9,6 @@ FETCH FUNCTION -------------- */ const goFetch = function(fullURL) { - fetch(fullURL) // by default fetch makes a GET request .then(function(response) { return response.json(); @@ -19,7 +19,7 @@ const goFetch = function(fullURL) { .catch(function(error) { displayErrorToUser("Server failed to return data"); }); -} +}; /* -------------------- @@ -27,13 +27,23 @@ DISPLAY DATA ON PAGE -------------------- */ const newsLayout = newsitem => { - // fallbacks or empty if data is null - const imageurl = (newsitem.urlToImage !== null) ? `${newsitem.urlToImage}` : "https://placeholdit.co//i/400x400?&bg=808069&fc=eee8cd&text=Project Image"; - const source = (newsitem.source.name !== null) ? `` : ""; - const url = (newsitem.url !== null) ? `${newsitem.url}` : "#"; - const title = (newsitem.title !== null) ? `${newsitem.title}` : "News article"; - const description = (newsitem.description !== null) ? `

    ${newsitem.description}

    ` : ""; - const content = (newsitem.content !== null) ? `

    ${newsitem.content.split("[+")[0]}

    ` : ""; + // fallbacks or empty if data is null + const imageurl = + newsitem.urlToImage !== null + ? `${newsitem.urlToImage}` + : "https://placeholdit.co//i/400x400?&bg=808069&fc=eee8cd&text=Project Image"; + const source = + newsitem.source.name !== null + ? `` + : ""; + const url = newsitem.url !== null ? `${newsitem.url}` : "#"; + const title = newsitem.title !== null ? `${newsitem.title}` : "News article"; + const description = + newsitem.description !== null ? `

    ${newsitem.description}

    ` : ""; + const content = + newsitem.content !== null + ? `

    ${newsitem.content.split("[+")[0]}

    ` + : ""; return ` @@ -45,22 +55,35 @@ const newsLayout = newsitem => { ${description} ${content}

    Read full article

    - + `; -} +}; +// TOFIX cleared on refresh, due to reset on displayDateOnPage? +function redCard() { + const redcardCheckbox = document.querySelectorAll(".redcard-checkbox"); + return redcardCheckbox.forEach(item => { + item.addEventListener("change", function(event) { + event.target.checked + ? (event.target.parentNode.style.backgroundColor = "red") + : (event.target.parentNode.style.backgroundColor = ""); + }); + }); +} -function displayDataOnPage(newsStories){ +function displayDataOnPage(newsStories) { parentNode.innerHTML = ""; - + const newsArray = newsStories.articles; - // add news blocks (as articles) - newsArray.forEach(function(newsitem) { - const node = document.createElement("article"); - node.innerHTML = newsLayout(newsitem); - parentNode.appendChild(node); - }) + // add news blocks (as articles) + newsArray.forEach(function(newsitem) { + const node = document.createElement("article"); + node.innerHTML = newsLayout(newsitem); + parentNode.appendChild(node); + }); + // + redCard(); } /* @@ -72,37 +95,37 @@ GENERATE FETCH URL // news sources object let publicationList = { "daily-mail": false, - "mirror": false, - "metro": false, -} + mirror: false, + metro: false +}; -const generateFetchURL = function (publicationList) { +const generateFetchURL = function(publicationList) { // default url array - const defaultArray = ["daily-mail","mirror","metro"]; + const defaultArray = ["daily-mail", "mirror", "metro"]; // create an array from object using key values let publicationArray = Object.keys(publicationList); // filter array to keys with 'true' values let filteredArray = publicationArray.filter(function(pub) { - return publicationList[pub] === true; + return publicationList[pub] === true; }); // compile fetch url let defaultArrayUrl = `&sources=${defaultArray}`; let filteredPublicationUrl = `&sources=${filteredArray}`; let fullURL = ""; - + // check if filteredArray has values - if (filteredArray.length == 0 ) { + if (filteredArray.length == 0) { fullURL = `${baseUrl}${defaultArrayUrl}`; } else { fullURL = `${baseUrl}${filteredPublicationUrl}`; } // CHANGE filteredArray GOOD - // console.log(filteredArray); - - goFetch(fullURL) -} + // console.log(filteredArray); + + goFetch(fullURL); +}; /* ---------------------- @@ -112,25 +135,23 @@ CREATE CHECKBOX FILTER const createCheckboxFilter = function() { checkboxArray.forEach(function(input) { input.addEventListener("change", function(event) { - // new assigned value to match object key - // assign object value if checked is true - if (event.target.checked === true) { - publicationList[event.target.value] = true; - // displayDataOnPage(); - } - else { - publicationList[event.target.value] = false; - } - // CHANGE publicationList object GOOD - // console.log(publicationList); - generateFetchURL(publicationList); - }) - }) -} + // new assigned value to match object key + // assign object value if checked is true + if (event.target.checked === true) { + publicationList[event.target.value] = true; + // displayDataOnPage(); + } else { + publicationList[event.target.value] = false; + } + // CHANGE publicationList object GOOD + // console.log(publicationList); + generateFetchURL(publicationList); + }); + }); +}; /* this function to run generateFetchURL() */ createCheckboxFilter(); - /* ------------- ERROR HANDLER @@ -140,16 +161,3 @@ function displayErrorToUser() {} // Initial call to fetch data generateFetchURL(baseUrl); - - -const redcardCheckbox = document.querySelectorAll(".redcard-checkbox"); - -redcardCheckbox.forEach(item => { - addEventListener("change", function(event) { - console.log(event); - if (event.target.checked) { - console.log("checkbox!"); - event.target.parentNode.parentNode.style.backgroundColor = "red"; - } -}) -}) \ No newline at end of file