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
+
+
+
+
+
+
+
+
+
+
+
+
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;
+}