Este es un proyecto para practicar e integrar lo visto sobre hacer requests usando Fetch API, Promises, manipulación del DOM, modularización, refactoring, Git y CSS.
Nota: trabajar en un branch dev
y pushear a master
(haciendo PR) cuando tengamos una feature completa, siguiendo el Feature Branch Workflow como metodología.
- Leer la documentación de la API de Memes
- Crear un nuevo repo (no fork!) en GitHub para el código del ejercicio. Clonarlo para trabajar de forma local.
- Dentro del repo, crear un archivo
index.js
, donde va a estar nuestro código. - Hacer un request de tipo
GET
al endpointhttps://api.imgflip.com/get_memes
, usandoFetch API
. - Investigar el objeto Response. Si la respuesta es exitosa (
status code: 200
), mostrar en consola el mensaje "Successful request!", sino mostrar "Oops, we got an error ${STATUS_CODE}", con el valor correspondiente. Ver Handling Failed HTTP Responses With fetch() - A partir de la respuesta obtenida, generar el siguiente resultado:
- Quedarnos sólo con las propiedades
id
,name
,width
,height
yurl
(en ese orden) de cada elemento del array. Omitir el resto (Tip: usar destructuring). Ver ejemplo más abajo. - Generar un nuevo array de memes, donde cada uno tendrá las propiedades mencionadas en el ítem anterior
- En este array, filtraremos aquellos elementos cuyas propiedades
width
óheight
tengan un valor <500
- Ordenar el array por
id
, de forma ascendente
- Quedarnos sólo con las propiedades
- Mostrar el resultado en la consola. Recordá que podés usar
console.dir
para visualizar mejor objetos. - Usar siempre nombres declarativos para las variables, constantes, etc. Guía de buenas prácticas.
- En caso de error al hacer el request, mostrar el
message
del error.
// resultado esperado
[
{
id: "93895088",
name: "Expanding Brain",
width: 857,
height: 1202,
url: "https://i.imgflip.com/1jwhww.jpg"
},
...
]
Vamos a separar el código en 2 archivos, api.js
y index.js
. Usar ES6 Modules para exportar e importar entre ambos.
api.js
va a contener el código necesario para realizar el request a la API y retornar el array de memes original, sin modificaciones.- este código irá dentro de la función
getMemes(URL)
, que recibe la url como parámetro - guardar el endpoint de la API en una constante global
ENDPOINT
- este código irá dentro de la función
index.js
va a importar la funcióngetMemes()
deapi.js
, invocarla y hacer todo el procesamiento posterior que hicimos en la parte 1- modularizar los diferentes procesamientos que hacemos en los callbacks en funciones y usarlas. Ver abajo cómo debería quedar
do1()
.then(do2())
.then(do3());
- Escribir la función
getMemeOfTheDay()
(enindex.js
), que reciba un array de memes (resultado de la parte 2) y retorne el meme correspondiente al día actual, es decir, si hoy fuera 21 de Octubre, debe retornar el meme Nº 21 de la lista, mañana el Nº 22, etc. - Analizar posibilidades de modularizar y refactorizar esta función y aplicarlas.
- Escribir la función
getRandomMeme()
(enindex.js
), que reciba un array de memes (resultado de la parte 2) y retorne, de forma aleatoria, algún meme del mismo. - Analizar posibilidades de modularizar y refactorizar esta función y aplicarlas.
- Crear un
index.html
en el mismo repo, usando la estructura predefinida de un HTML5 vacío. - Crear dentro un
div
con la clasecontainer
.- Usar Flexbox para centrar (horizontal y verticalmente) todo el contenido de este
div
- Agregarle un
h1
con el texto "Meme of the Day" - Agregarle debajo un tag
img
con la clasememe
y asignarle comosrc
el meme obtenido con la funcióngetMemeOfTheDay()
- Agregar un botón debajo del
img
, con la clasebtn-get-random-meme
y el texto "Get random Meme!"
- Usar Flexbox para centrar (horizontal y verticalmente) todo el contenido de este
Abajo se muestra cómo quedaría la estructura
container
|-- h1
|-- img
|-- button
- Al hacer click en el botón, debe ocurrir lo siguiente:
- Modificar el texto del
h1
a "Random Meme" - Modificar el texto del botón a "Get another random Meme!"
- Utilizar la función
getRandomMeme()
de la parte 4 para obtener un meme aleatorio- Setear la
url
del meme random comosrc
de la imagen obtenida - Setear el
name
del meme como randomalt
de la imagen obtenida
- Setear la
- Crear el archivo
styles.css
, donde irá todo el código que usaremos para los estilos. - Aplicar el reset con
padding: 0
,margin: 0
ybox-sizing: border-box
donde corresponda. - Usar fuentes de Google Fonts para los
h1
yh2
. - Aplicar los estilos necesarios para que los elementos del container queden con la estructura y orden definidos en la parte 5.
- Aplicar márgenes entre los diferentes elementos del container.
- Agregar efectos y transiciones al botón, al hacerle hover y clickearlo.
- Al hacer hover sobre la imagen del meme, se debe visualizar un texto con transición sobre la imagen, con el
name
del meme como texto. Ver texto con transición fade in como ejemplo. - Agregar todos los estilos que consideren necesarios
Investigar cómo y hostear el proyecto usando