-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
200 lines (130 loc) · 5.76 KB
/
main.js
File metadata and controls
200 lines (130 loc) · 5.76 KB
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
//Variabler som representerar vilken sida vi befinner oss på
let defaultPage = 1;
let pagesTotal;
let pagesToShow = 10;
//Eventlistener för att få fram fösta sidan efter en sökning via onclick (kolla i html)
async function getSearchedImages()
{
let warning = document.getElementById("searchtwo");
if(warning.value.length == 0)
{
alert("No entry.... Please try again!");
}
else if(warning.value[0] == " ")
{
alert("No whitespace allowed as first character.... Please try again!");
}
else{
defaultPage = 1;
let images = await getImages();
updateMainAndOverlay(images);
}
};
//Eventlistener för att gå till föregående sida via onclick i html
async function getPreviousImages()
{
defaultPage--;
if (defaultPage >= 1)
{
let images = await getImages();
updateMainAndOverlay(images);
}
};
//Eventlistener för att gå till nästa sida via onclick i html
async function getNextImages()
{
defaultPage++;
if (defaultPage <= pagesTotal)
{
let images = await getImages();
updateMainAndOverlay(images);
}
};
async function getImages(){
// queryselectors som låter oss lägga in respektive api queryparam som värde i select satserna
// text = input i searchbaren, sort = select sortby etc
let per_page = getSizePerPage();
let text = document.querySelector("input").value;
let sort = document.querySelector("select.Sortby").value;
let tags = document.querySelector("select.tags").value;
let notags = document.getElementsByClassName("notags").value;
//urlförfrågan med apikey för att få svar från servern
let apiUrl = `https://api.flickr.com/services/rest?api_key=b1eaa4ec93be98caf2889b9007a14324&method=flickr.photos.search&text=${text}&tag_mode=${notags}&tags=${tags}&sort=${sort}&per_page=${per_page}&page=${defaultPage}&format=json&nojsoncallback=1`;
try{
let manipulateApi = await fetch(apiUrl);
//konverterar json innehållet efter fetchen från servern till javascript objekt
let apiData = await manipulateApi.json();
pagesTotal = apiData.photos.pages;
// låter oss ändra och lägga in innehållet i paragraphen med id pages, vi sätter innehållet i innerHTML för att få tillbaka pagnation sidorna
let pagenotationPages = `Page ${defaultPage} of ${pagesTotal}`
document.getElementById("pages").innerHTML = pagenotationPages;
return await apiData;
}
//I catchen så hanterar vi felet vilket hamnar i konsolen
catch(errorMsg){
console.error(errorMsg)
}
};
// Hämtar bilden/bilderna beroende på storlek och gör om
function imgUrl(imgUrl, suffixSize){
let imgSize = "z" // z = size suffix class = medium px= 640
if(suffixSize == "thumb") {imgSize = "q"}
if(suffixSize =="large") {imgSize = "b"} // om en bild är i klassen thumb eller large så sätter vi bilden/bilderna till imgSize q = 150px b = 1024px
let photoUrl = `https://farm${imgUrl.farm}.staticflickr.com/${imgUrl.server}/${imgUrl.id}_${imgUrl.secret}_${imgSize}.jpg`
return photoUrl;
};
function updateMainAndOverlay(urlData){
//vi lägger in alla bilder i main
let main = document.querySelector("main");
main.innerHTML = "";
urlData.photos.photo.forEach(img =>{
if(img.farm !==0){
let newImgElem = document.createElement("img");
newImgElem.setAttribute("src", imgUrl(img, "thumb"));
newImgElem.setAttribute("alt", img.title);
// onclick event som förstorar bild vid musklick
newImgElem.addEventListener("click", function() {
let ellarge = document.createElement("img");
ellarge.setAttribute("src", imgUrl(img, "large"));
ellarge.setAttribute("alt", img.title);
//Overlay effekt som triggas igång när vi förstorar den specifika bilden
document.querySelector(".overlay").appendChild(ellarge);
/*skapar klassen show i overlay section när bilden förstoras och klassen hide, vi skapar sedan en overlay"show" effekt när vi klickar på bilden och
och en overlay hide när vi vill tillbaka till default vyn av galleriet */
document.querySelector(".overlay").classList.add("show");
document.querySelector(".overlay").classList.remove("hide");
});
main.appendChild(newImgElem);
}
});
};
//En onclick eventlistener som responsivt reagerar för att tabort overlay effekten vid klick
//En eventlistener i html section overlay som triggas igång vid musklick
//Genom innerhtml så får vi tillgång till innehållet i overlay section
function clickOnImage() {
document.querySelector(".overlay").innerHTML = "";
document.querySelector(".overlay").classList.remove("show");
document.querySelector(".overlay").classList.add("hide");
};
//Hämtar värdet av antal foton ska returneras per sida och en bredd som anpassar hur många bilder som får plats för varje sida i bredden
//Sedan kallar vi på funktionen i getImages()
function getSizePerPage(){
let elem = document.querySelector("select.page");
let returnValue = elem.value
let elemPhone = document.querySelector("select.mobilepage");
let returnValuePhone = elemPhone.value;
if(window.innerWidth >= 375 ){
return returnValue;
}
else{
return returnValuePhone;
}
};
//eventlistener som låter använder klicka på enter efter en sökning och då få upp resultat.
let enterKey = document.querySelector("input");
enterKey.addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault();
document.querySelector("button.search").click();
}
});