diff --git a/index.html b/index.html index c2ca5a4..7f20938 100644 --- a/index.html +++ b/index.html @@ -101,9 +101,9 @@

Learning Activities

  • Lesson 07: Lazy Loading | Local Storage
  • Lesson 08: Table Build | Form Build
  • +
  • Lesson 09: JSON File | Fetch API
  • Lesson 10:
  • Lesson 11:
  • -
  • Lesson 09:
  • Lesson 12:
  • Lesson 13:
  • Lesson 14:
  • diff --git a/lesson09/new-ward-members.json b/lesson09/new-ward-members.json new file mode 100644 index 0000000..ffa46f8 --- /dev/null +++ b/lesson09/new-ward-members.json @@ -0,0 +1,91 @@ +{ + "wardInfo": { + "familyName": "Wolfley", + "moveInDate": "2002-04-12", + "numberOfPeople": 7, + "visitedByBishopric": true, + "familyMembers": [ + { + "name": "Vern Wolfley", + "gender": "Male", + "birthdate": "1973-04-01" + }, + { + "name": "Kindy Wolfley", + "gender": "Female", + "birthdate": "1975-11-10" + }, + { + "name": "Elena Wolfley", + "gender": "Female", + "birthdate": "2001-09-03" + }, + { + "name": "Natalie Wolfley", + "gender": "Female", + "birthdate": "2003-08-27" + }, + { + "name": "Meghan Wolfley", + "gender": "Female", + "birthdate": "2005-08-10" + }, + { + "name": "Vern Wolfley", + "gender": "Male", + "birthdate": "2007-04-18" + }, + { + "name": "Benjamin Wolfley", + "gender": "Male", + "birthdate": "2008-10-05" + } + ] + }, + "familyName": "Sherwood", + "moveInDate": "2004-05-11", + "numberOfPeople": 8, + "visitedByBishopric": true, + "familyMembers": [ + { + "name": "Bill Sherwood", + "gender": "Male", + "birthdate": "1966-04-01" + }, + { + "name": "Kathy Sherwood", + "gender": "Female", + "birthdate": "1969-11-10" + }, + { + "name": "Kimberly Sherwood", + "gender": "Female", + "birthdate": "2081-09-03" + }, + { + "name": "Kris Sherwood", + "gender": "Female", + "birthdate": "2083-08-27" + }, + { + "name": "Koni Sherwood", + "gender": "Female", + "birthdate": "2085-08-10" + }, + { + "name": "Jeff Sherwood", + "gender": "Male", + "birthdate": "2087-04-18" + }, + { + "name": "Greg Sherwood", + "gender": "Male", + "birthdate": "2089-10-05" + }, + { + "name": "Katie Sherwood", + "gender": "Female", + "birthdate": "2091-10-05" + } + ] +} \ No newline at end of file diff --git a/lesson09/prophets.html b/lesson09/prophets.html new file mode 100644 index 0000000..2b753f8 --- /dev/null +++ b/lesson09/prophets.html @@ -0,0 +1,22 @@ + + + + + + Latter-Day Prophets + + + + +
    +

    Latter-day Prophets

    +
    +
    +
    +
    + + + + diff --git a/lesson09/scripts/prophets.js b/lesson09/scripts/prophets.js new file mode 100644 index 0000000..b20c580 --- /dev/null +++ b/lesson09/scripts/prophets.js @@ -0,0 +1,61 @@ +const url = "https://brotherblazzard.github.io/canvas-content/latter-day-prophets.json"; +const cards = document.querySelector("#cards"); + +async function getProphetData() { + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error("Failed to fetch data"); + } + const data = await response.json(); + // console.table(data); + displayProphets(data.prophets); + return data; + } catch (error) { + console.error("Error fetching data:", error); + throw error; + } +} + +getProphetData(); + +const displayProphets = (prophets) => { + console.log(prophets); + prophets.forEach((prophet) => { + // Create a section element and store it in a variable named card + const card = document.createElement("section"); + // Create an h2 element and store it in a variable named "fullName" + const fullName = document.createElement("h2"); + // Create a p element and store it in a variable named "birthdate" + const birthdate = document.createElement("p"); + // Create a p element and store it in a variable named "birthplace" + const birthplace = document.createElement("p"); + // Create an img element and store it in a variable named "portrait" + const portrait = document.createElement("img"); + + // Populate the heading element with the prophet's full name using a template string + fullName.textContent = `${prophet.name} ${prophet.lastname}`; + + // Populate the paragraph element with the prophet's birthdate using a template string + birthdate.textContent = `Date of Birth: ${prophet.birthdate}`; + + // Populate the paragraph element with the prophet's birthplace using a template string + birthplace.textContent = `Place of Birth: ${prophet.birthplace}`; + + // Build the image element by setting attributes + portrait.setAttribute("src", prophet.imageurl); + portrait.setAttribute("alt", prophet.fullName); + portrait.setAttribute("loading", "lazy"); + portrait.setAttribute("width", "200"); + portrait.setAttribute("height", "300"); + + card.appendChild(fullName); + card.appendChild(birthdate); + card.appendChild(birthplace); + card.appendChild(portrait); + + // add the section card to the "cards" div + cards.appendChild(card); + }); +}; + diff --git a/lesson09/styles/normalize.css b/lesson09/styles/normalize.css new file mode 100644 index 0000000..c45a85f --- /dev/null +++ b/lesson09/styles/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | 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; + } + + /** + * Render the `main` element consistently in IE. + */ + + main { + display: block; + } + + /** + * 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/lesson09/styles/prophets.css b/lesson09/styles/prophets.css new file mode 100644 index 0000000..af535ad --- /dev/null +++ b/lesson09/styles/prophets.css @@ -0,0 +1,62 @@ +@import url("https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=PT+Serif:ital,wght@0,400;0,700;1,400;1,700&display=swap"); + +body { + font-family: "PT Serif", serif; + background-color: #f5f5f5; + color: #273640; + margin: 0; + padding: 0; +} + +header, +main, +footer { + margin: 2rem; + position: relative; +} + +h1, h2, h3, h4, h5, h6 { + font-family: "Fira Sans", sans-serif; + color: #273640; +} + +h1 { + text-align: center; +} + +#cards { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); +} +section { + margin: 0.25rem; + padding: 0.35rem; + background-color: #eee; + border: 1px solid #bbb; + display: flex; + flex-direction: column; + align-items: center; + background-color: #84b7d7; + color: #273640; +} +section > h2 { + margin: 5px; +} +section > p { + margin: 3px; +} + +img { + width: auto; + max-width: 325px; + box-shadow: 0 0 30px #777; + height: 200px; + border: 1px solid #333; + margin: 10px; +} + +footer { + border-top: 1px solid #555; + padding: 20px; + text-align: center; +}