From 299b2a8f54a8611e54476207f42b3ac7721cfd24 Mon Sep 17 00:00:00 2001 From: Tomislav Dukez Date: Wed, 12 Aug 2026 11:22:55 +0100 Subject: [PATCH 1/7] add basic html css js setup --- fetch/programmer-humour/index.html | 13 +++++++++++++ fetch/programmer-humour/script.js | 2 ++ fetch/programmer-humour/style.css | 3 +++ 3 files changed, 18 insertions(+) create mode 100644 fetch/programmer-humour/index.html create mode 100644 fetch/programmer-humour/script.js create mode 100644 fetch/programmer-humour/style.css diff --git a/fetch/programmer-humour/index.html b/fetch/programmer-humour/index.html new file mode 100644 index 000000000..b5444c051 --- /dev/null +++ b/fetch/programmer-humour/index.html @@ -0,0 +1,13 @@ + + + + + + Programmer Humour + + + + +

Hello, I am here.

+ + diff --git a/fetch/programmer-humour/script.js b/fetch/programmer-humour/script.js new file mode 100644 index 000000000..f508548ce --- /dev/null +++ b/fetch/programmer-humour/script.js @@ -0,0 +1,2 @@ +document.getElementsByTagName("h1")[0].innerText = + "Hello from the other side!!!"; diff --git a/fetch/programmer-humour/style.css b/fetch/programmer-humour/style.css new file mode 100644 index 000000000..adc68fa6a --- /dev/null +++ b/fetch/programmer-humour/style.css @@ -0,0 +1,3 @@ +h1 { + color: red; +} From 6596bfa2bbbd1e5200a79d34ccab06746ec90d51 Mon Sep 17 00:00:00 2001 From: Tomislav Dukez Date: Wed, 12 Aug 2026 11:43:20 +0100 Subject: [PATCH 2/7] add img tag --- fetch/programmer-humour/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/fetch/programmer-humour/index.html b/fetch/programmer-humour/index.html index b5444c051..ffbb93d58 100644 --- a/fetch/programmer-humour/index.html +++ b/fetch/programmer-humour/index.html @@ -9,5 +9,6 @@

Hello, I am here.

+ programmer humour image From 5db507ce0871ef989e0d3ecfb8cf7c7b874f6ec5 Mon Sep 17 00:00:00 2001 From: Tomislav Dukez Date: Wed, 12 Aug 2026 11:43:33 +0100 Subject: [PATCH 3/7] add fetch image and render to html --- fetch/programmer-humour/script.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/fetch/programmer-humour/script.js b/fetch/programmer-humour/script.js index f508548ce..e2506ec8a 100644 --- a/fetch/programmer-humour/script.js +++ b/fetch/programmer-humour/script.js @@ -1,2 +1,13 @@ -document.getElementsByTagName("h1")[0].innerText = - "Hello from the other side!!!"; +const imgEl = document.getElementsByTagName("img")[0]; +const endpointAPI = "https://xkcd.now.sh/?comic=latest"; + +const fetchData = async () => { + const response = await fetch(endpointAPI); + return await response.json(); +}; + +let data; +fetchData().then((object) => { + console.log(object); + imgEl.src = object.img || ""; +}); From 45874f4fe008ab1b0930dc3dce6473aa5ef75ea8 Mon Sep 17 00:00:00 2001 From: Tomislav Dukez Date: Wed, 12 Aug 2026 12:04:27 +0100 Subject: [PATCH 4/7] add error handling implementation and default image --- fetch/programmer-humour/assets/no_image.webp | Bin 0 -> 33992 bytes fetch/programmer-humour/index.html | 2 +- fetch/programmer-humour/script.js | 25 ++++++++++++++----- fetch/programmer-humour/style.css | 5 ++-- 4 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 fetch/programmer-humour/assets/no_image.webp diff --git a/fetch/programmer-humour/assets/no_image.webp b/fetch/programmer-humour/assets/no_image.webp new file mode 100644 index 0000000000000000000000000000000000000000..04a412ac1588a77d32102c4918770ccb4f070c88 GIT binary patch literal 33992 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 literal 0 HcmV?d00001 diff --git a/fetch/programmer-humour/index.html b/fetch/programmer-humour/index.html index ffbb93d58..a05ebf616 100644 --- a/fetch/programmer-humour/index.html +++ b/fetch/programmer-humour/index.html @@ -9,6 +9,6 @@

Hello, I am here.

- programmer humour image + programmer humour image diff --git a/fetch/programmer-humour/script.js b/fetch/programmer-humour/script.js index e2506ec8a..bf9dd1200 100644 --- a/fetch/programmer-humour/script.js +++ b/fetch/programmer-humour/script.js @@ -1,13 +1,26 @@ const imgEl = document.getElementsByTagName("img")[0]; -const endpointAPI = "https://xkcd.now.sh/?comic=latest"; +const endpointAPI = "https://xkcd.now.ssh/?comic=latest"; const fetchData = async () => { - const response = await fetch(endpointAPI); - return await response.json(); + try { + const response = await fetch(endpointAPI); + if (!response.ok) { + throw new Error(`Network response status: ${response.status}`); + } + const data = await response.json(); + return data; + } catch (error) { + console.log("Error fetching data:", error); + return null; + } }; let data; -fetchData().then((object) => { - console.log(object); - imgEl.src = object.img || ""; +fetchData().then((data) => { + console.log(data); + if (data && data.img) { + imgEl.src = data.img; + } else { + console.error("Image data not received"); + } }); diff --git a/fetch/programmer-humour/style.css b/fetch/programmer-humour/style.css index adc68fa6a..cf6fc0f18 100644 --- a/fetch/programmer-humour/style.css +++ b/fetch/programmer-humour/style.css @@ -1,3 +1,4 @@ -h1 { - color: red; +img { + margin: 0 auto; + width: 500px; } From 9b6d8c21f83e574876d966f19b83b8b108949862 Mon Sep 17 00:00:00 2001 From: Tomislav Dukez Date: Wed, 12 Aug 2026 12:11:03 +0100 Subject: [PATCH 5/7] fix change h1 text and correct api link --- fetch/programmer-humour/index.html | 2 +- fetch/programmer-humour/script.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fetch/programmer-humour/index.html b/fetch/programmer-humour/index.html index a05ebf616..365e2b24a 100644 --- a/fetch/programmer-humour/index.html +++ b/fetch/programmer-humour/index.html @@ -8,7 +8,7 @@ -

Hello, I am here.

+

Programmer Humour

programmer humour image diff --git a/fetch/programmer-humour/script.js b/fetch/programmer-humour/script.js index bf9dd1200..d22ba1e61 100644 --- a/fetch/programmer-humour/script.js +++ b/fetch/programmer-humour/script.js @@ -1,5 +1,5 @@ const imgEl = document.getElementsByTagName("img")[0]; -const endpointAPI = "https://xkcd.now.ssh/?comic=latest"; +const endpointAPI = "https://xkcd.now.sh/?comic=latest"; const fetchData = async () => { try { From c13ee1294ef3daefcc337388338b0b89a53a1d39 Mon Sep 17 00:00:00 2001 From: Tomislav Dukez Date: Sat, 22 Aug 2026 20:39:19 +0100 Subject: [PATCH 6/7] fix dynamically render container and image element and fetch improvement --- fetch/programmer-humour/index.html | 2 +- fetch/programmer-humour/script.js | 28 ++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/fetch/programmer-humour/index.html b/fetch/programmer-humour/index.html index 365e2b24a..3eb05b153 100644 --- a/fetch/programmer-humour/index.html +++ b/fetch/programmer-humour/index.html @@ -9,6 +9,6 @@

Programmer Humour

- programmer humour image +
diff --git a/fetch/programmer-humour/script.js b/fetch/programmer-humour/script.js index d22ba1e61..e999b42f8 100644 --- a/fetch/programmer-humour/script.js +++ b/fetch/programmer-humour/script.js @@ -1,6 +1,21 @@ -const imgEl = document.getElementsByTagName("img")[0]; +const fallbackImg = "./assets/no_image.webp"; const endpointAPI = "https://xkcd.now.sh/?comic=latest"; +const container = document.getElementById("comic-container"); + +const imgEl = document.createElement("img"); +imgEl.src = fallbackImg; +imgEl.alt = "Loading comic..."; + +imgEl.onerror = () => { + imgEl.src = fallbackImg; + imgEl.alt = "Failed to load comic"; +}; + +if (container) { + container.appendChild(imgEl); +} + const fetchData = async () => { try { const response = await fetch(endpointAPI); @@ -15,12 +30,17 @@ const fetchData = async () => { } }; -let data; -fetchData().then((data) => { +const renderComic = async () => { + const data = await fetchData(); console.log(data); if (data && data.img) { imgEl.src = data.img; + imgEl.alt = data.alt || data.title || "Programmer humour comic"; } else { console.error("Image data not received"); + imgEl.src = fallbackImage; + imgEl.alt = "No image available"; } -}); +}; + +renderComic(); From 9bda503f38e77ec3deae938fbf4292fcc842e820 Mon Sep 17 00:00:00 2001 From: Tomislav Dukez Date: Sat, 22 Aug 2026 20:43:39 +0100 Subject: [PATCH 7/7] fix: add null check for container and correct fallback image variable name in renderComic --- fetch/programmer-humour/script.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fetch/programmer-humour/script.js b/fetch/programmer-humour/script.js index e999b42f8..77023db5a 100644 --- a/fetch/programmer-humour/script.js +++ b/fetch/programmer-humour/script.js @@ -31,6 +31,11 @@ const fetchData = async () => { }; const renderComic = async () => { + if (!container) { + console.error("Comic container not found in DOM"); + return; + } + const data = await fetchData(); console.log(data); if (data && data.img) { @@ -38,7 +43,7 @@ const renderComic = async () => { imgEl.alt = data.alt || data.title || "Programmer humour comic"; } else { console.error("Image data not received"); - imgEl.src = fallbackImage; + imgEl.src = fallbackImg; imgEl.alt = "No image available"; } };