1
+ let url = 'https://pokeapi.co/api/v2/pokemon?&limit=50'
2
+ let mainTable = document . querySelector ( '.table--body' )
3
+ let searchBar = document . querySelector ( '.search__bar' )
4
+ let fetchBtn = document . querySelector ( '.fetch--button' )
5
+ let ascendingSort = document . querySelector ( '.ascendingSort' )
6
+ let descendingSort = document . querySelector ( '.descendingSort' )
7
+ let indexOfPokemon = 1
8
+ let pokemonArr = [ ]
9
+ let filterArr = [ ]
10
+ let delButton
11
+
12
+ const fetchPokemon = async ( ) => {
13
+
14
+ // Fetch Pokemon Function
15
+ mainTable . innerHTML = `<p class = "load">Loading information...</p`
16
+ let response = await fetch ( url )
17
+ let result = await response . json ( )
18
+ mainTable . innerHTML = ''
19
+ let pokemons = result . results
20
+ pokemons . forEach ( ( pokemon ) => {
21
+ let { name : pokemonName , url : pokemonUrl } = pokemon
22
+ let pokemonID = Math . floor ( Math . random ( ) * 1500 )
23
+ pokemonArr . push ( { 'pokemonName' : pokemonName , 'pokemonUrl' : pokemonUrl , 'pokemonID' : pokemonID , 'indexOfPokemon' : indexOfPokemon } )
24
+ let ihtml = `
25
+ <div class = "mainDiv">
26
+ <div class = "details">
27
+ <p class="table--sn">${ pokemonID } </p>
28
+ <p class="table--name"><img src = "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/versions/generation-ii/crystal/${ indexOfPokemon } .png" class ="pokemons--image" title =${ pokemonName . charAt ( 0 ) . toUpperCase ( ) + pokemonName . slice ( 1 ) } >${ pokemonName . charAt ( 0 ) . toUpperCase ( ) + pokemonName . slice ( 1 ) } </p>
29
+ <a href = "${ pokemonUrl } " target = "_blank"><p class="table--url">${ pokemonUrl } </p></a>
30
+ </div>
31
+ <img src="images/trash.png" alt="" class="delete-img" />
32
+ </div>
33
+ `
34
+ mainTable . innerHTML += ihtml
35
+ indexOfPokemon ++
36
+
37
+
38
+ // Delete Function
39
+ delButton = document . querySelectorAll ( '.delete-img' )
40
+ delButton . forEach ( ( btn ) => {
41
+ btn . addEventListener ( 'mouseenter' , ( ) => {
42
+ btn . src = 'images/hover-trash.png'
43
+ } )
44
+
45
+ btn . addEventListener ( 'mouseleave' , ( ) => {
46
+ btn . src = 'images/trash.png'
47
+ } )
48
+
49
+ btn . addEventListener ( 'click' , ( ) => {
50
+ let element = btn . parentElement
51
+ element . remove ( )
52
+ } )
53
+ } )
54
+ } )
55
+
56
+
57
+ // Search Function
58
+ searchBar . addEventListener ( 'input' , ( ) => {
59
+ filterArr = pokemonArr . filter ( ( pokemon ) => {
60
+ return pokemon . pokemonName . startsWith ( searchBar . value . toLowerCase ( ) )
61
+ } )
62
+ mainTable . innerHTML = ''
63
+ filterArr . forEach ( ( arr ) => {
64
+ let ihtml2 = `
65
+ <div class = "mainDiv">
66
+ <div class = "details">
67
+ <p class="table--sn">${ arr . pokemonID } </p>
68
+ <p class="table--name"><img src = "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/versions/generation-ii/crystal/${ arr . indexOfPokemon } .png" class ="pokemons--image" title = ${ arr . pokemonName . charAt ( 0 ) . toUpperCase ( ) + arr . pokemonName . slice ( 1 ) } >${ arr . pokemonName . charAt ( 0 ) . toUpperCase ( ) + arr . pokemonName . slice ( 1 ) } </p>
69
+ <a href = "${ arr . pokemonUrl } " target = "_blank"><p class="table--url">${ arr . pokemonUrl } </p></a>
70
+ <p class = "hidden">${ arr . indexOfPokemon } </p>
71
+ </div>
72
+ <img src="images/trash.png" alt="" class="delete-img" />
73
+ </div>
74
+ `
75
+ mainTable . innerHTML += ihtml2
76
+
77
+
78
+ // Delete Function
79
+ delButton = document . querySelectorAll ( '.delete-img' )
80
+ delButton . forEach ( ( btn ) => {
81
+ btn . addEventListener ( 'mouseenter' , ( ) => {
82
+ btn . src = 'images/hover-trash.png'
83
+ } )
84
+
85
+ btn . addEventListener ( 'mouseleave' , ( ) => {
86
+ btn . src = 'images/trash.png'
87
+ } )
88
+
89
+ btn . addEventListener ( 'click' , ( ) => {
90
+ let element = btn . parentElement
91
+ element . remove ( )
92
+ } )
93
+ } )
94
+ } )
95
+ } )
96
+
97
+
98
+ // <=================== Sort Function ======================>
99
+ // Ascending Function
100
+ ascendingSort . addEventListener ( 'click' , ( ) => {
101
+ mainTable . innerHTML = ''
102
+ const sortFunc = ( a , b ) => { return ( a . pokemonName < b . pokemonName ) ? - 1 : 1 }
103
+ pokemonArr . sort ( sortFunc )
104
+ pokemonArr . forEach ( ( arr ) => {
105
+ let ihtml2 = `
106
+ <div class = "mainDiv">
107
+ <div class = "details">
108
+ <p class="table--sn">${ arr . pokemonID } </p>
109
+ <p class="table--name"><img src = "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/versions/generation-ii/crystal/${ arr . indexOfPokemon } .png" class ="pokemons--image" title = ${ arr . pokemonName . charAt ( 0 ) . toUpperCase ( ) + arr . pokemonName . slice ( 1 ) } >${ arr . pokemonName . charAt ( 0 ) . toUpperCase ( ) + arr . pokemonName . slice ( 1 ) } </p>
110
+ <a href = "${ arr . pokemonUrl } " target = "_blank"><p class="table--url">${ arr . pokemonUrl } </p></a>
111
+ </div>
112
+ <img src="images/trash.png" alt="" class="delete-img" />
113
+ </div>
114
+ `
115
+ mainTable . innerHTML += ihtml2
116
+
117
+
118
+ // Delete Function
119
+ delButton = document . querySelectorAll ( '.delete-img' )
120
+ delButton . forEach ( ( btn ) => {
121
+ btn . addEventListener ( 'mouseenter' , ( ) => {
122
+ btn . src = 'images/hover-trash.png'
123
+ } )
124
+
125
+ btn . addEventListener ( 'mouseleave' , ( ) => {
126
+ btn . src = 'images/trash.png'
127
+ } )
128
+
129
+ btn . addEventListener ( 'click' , ( ) => {
130
+ let element = btn . parentElement
131
+ element . remove ( )
132
+ } )
133
+ } )
134
+ } )
135
+
136
+ } )
137
+
138
+
139
+ // Descending Function
140
+ descendingSort . addEventListener ( 'click' , ( ) => {
141
+ mainTable . innerHTML = ''
142
+ const sortFuncDesc = ( a , b ) => { return ( a . pokemonName > b . pokemonName ) ? - 1 : 1 }
143
+ pokemonArr . sort ( sortFuncDesc )
144
+ pokemonArr . forEach ( ( arr ) => {
145
+ let ihtml2 = `
146
+ <div class = "mainDiv">
147
+ <div class = "details">
148
+ <p class="table--sn">${ arr . pokemonID } </p>
149
+ <p class="table--name"><img src = "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/versions/generation-ii/crystal/${ arr . indexOfPokemon } .png" class ="pokemons--image" title = ${ arr . pokemonName . charAt ( 0 ) . toUpperCase ( ) + arr . pokemonName . slice ( 1 ) } >${ arr . pokemonName . charAt ( 0 ) . toUpperCase ( ) + arr . pokemonName . slice ( 1 ) } </p>
150
+ <a href = "${ arr . pokemonUrl } " target = "_blank"><p class="table--url">${ arr . pokemonUrl } </p></a>
151
+ </div>
152
+ <img src="images/trash.png" alt="" class="delete-img" />
153
+ </div
154
+ `
155
+ mainTable . innerHTML += ihtml2
156
+
157
+
158
+ // Delete Function
159
+ delButton = document . querySelectorAll ( '.delete-img' )
160
+ delButton . forEach ( ( btn ) => {
161
+ btn . addEventListener ( 'mouseenter' , ( ) => {
162
+ btn . src = 'images/hover-trash.png'
163
+ } )
164
+
165
+ btn . addEventListener ( 'mouseleave' , ( ) => {
166
+ btn . src = 'images/trash.png'
167
+ } )
168
+
169
+ btn . addEventListener ( 'click' , ( ) => {
170
+ let element = btn . parentElement
171
+ element . remove ( )
172
+ } )
173
+ } )
174
+ } )
175
+ } )
176
+
177
+ }
178
+
179
+ fetchBtn . addEventListener ( 'click' , fetchPokemon )
0 commit comments