-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
110 lines (94 loc) · 3.46 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
document.addEventListener("DOMContentLoaded", function () {
const generateButton = document.getElementById("generateButton");
const likeButton = document.getElementById("likeButton");
const dogImage = document.getElementById("dogImage");
const loadingSpinner = document.getElementById("loadingSpinner");
const breedInfo = document.getElementById("breedInfo");
const likesList = document.getElementById("likesList");
const likedDogsContainer = document.getElementById("likedDogsContainer");
const viewLikedDogsButton = document.getElementById("viewLikedDogsButton");
const closeLikesButton = document.getElementById("closeLikesButton"); // Add reference to the close button
const likedDogs = [];
function updateLocalStorage() {
localStorage.setItem("likedDogs", JSON.stringify(likedDogs));
}
generateButton.addEventListener("click", function () {
showLoadingSpinner();
getRandomDog();
});
likeButton.addEventListener("click", function () {
const imageUrl = dogImage.src;
if (imageUrl && !likedDogs.includes(imageUrl)) {
likedDogs.push(imageUrl);
updateLikesList();
updateLocalStorage();
showLikedDogs();
}
});
viewLikedDogsButton.addEventListener("click", function () {
showLikedDogs();
});
closeLikesButton.addEventListener("click", function () {
hideLikedDogs();
});
function getRandomDog() {
fetch("https://dog.ceo/api/breeds/image/random")
.then((response) => response.json())
.then((data) => {
const imageUrl = data.message;
dogImage.src = imageUrl;
fetchBreedInfo(imageUrl);
})
.catch((error) => {
console.error("Error fetching random dog:", error);
hideLoadingSpinner();
});
}
function updateLikesList() {
likesList.innerHTML = "";
likedDogs.forEach((likedDog) => {
const likedImage = document.createElement("img");
likedImage.src = likedDog;
likedImage.alt = "Liked Dog";
likesList.appendChild(likedImage);
});
}
function fetchBreedInfo(imageUrl) {
const breed = extractBreedFromUrl(imageUrl);
if (breed) {
fetch(`https://dog.ceo/api/breed/${breed}/images/random`)
.then((response) => response.json())
.then((data) => {
const breedImageUrl = data.message;
breedInfo.textContent = `Breed: ${breed}`;
breedInfo.classList.remove("hidden");
hideLoadingSpinner();
})
.catch((error) => {
console.error("Error fetching breed info:", error);
hideLoadingSpinner();
});
} else {
breedInfo.classList.add("hidden");
hideLoadingSpinner();
}
}
function extractBreedFromUrl(url) {
const match = url.match(/breeds\/(.+)\//);
return match ? match[1] : null;
}
function showLoadingSpinner() {
loadingSpinner.classList.remove("hidden");
}
function hideLoadingSpinner() {
loadingSpinner.classList.add("hidden");
}
function showLikedDogs() {
likedDogsContainer.classList.remove("hidden");
}
function hideLikedDogs() {
likedDogsContainer.classList.add("hidden");
}
// Initial dog image on page load
getRandomDog();
});