const url_title = "http://localhost:8000/api/v1/titles/";
const url_genre = "http://localhost:8000/api/v1/genres/";
const blockEnd = `
`;
let filmNumber = 10
let categoryMovieBlock = 6
async function getMovies(url, id, type) {
const filmList = [];
for (let j=1; j<3; j++) {
const response = await fetch(`${url_title}${url}&format=json&page=${j}`);
const film1 = await response.json();
for (i in film1.results) {
filmList.push(film1.results[i]);
}
}
let blockToLook = document.getElementById(id);
blockToLook.innerHTML = "";
for (let i = 0; i < 6; i++) {
film = filmList[i];
let id = i+1
let movieBlock = `
${film.title}
`;
// retrieve the specific film detail from URL using id then concatenate with the modal creator
const response2 = await fetch(`${url_title}${film.id}`);
const film2 = await response2.json();
let modal = getModalDetail(film2, film2.id);
blockToLook.innerHTML += movieBlock+modal+blockEnd;
}
}
// tried to make some dynamic pagination browsing... nok
async function getCount(type) {
const response = await fetch(`http://localhost:8000/api/v1/${type}`);
const result = await response.json();
return result;
}
// get categories and create the options in select menu
async function getCategory() {
listeGenres = [];
for (let i = 1; i<6; i++) {
const response = await fetch(`${url_genre}?page=${i}`);
const genres = await response.json();
for (let j in genres.results) {
listeGenres.push(genres.results[j].name);
};
}
let categorySelect = document.getElementById("category-select");
for (i in listeGenres) {
let option = `
`;
categorySelect.innerHTML += option;
}
}
// create the best film block and get a movie from a given ID
async function bestFilm(filmId) {
const response = await fetch(`${url_title}${filmId}`);
const bfilm = await response.json();
let detail = `
${bfilm.title}
${bfilm.description}
`;
let modal = getModalDetail(bfilm, bfilm.id);
document.getElementById("bestFilm").innerHTML += detail+modal;
}
// create the modal HTML block for a given film object
function getModalDetail(film, modalId) {
let recette = "N/A";
let genre = recette;
if (film.worldwide_gross_income) {
recette = film.worldwide_gross_income;
}
if (film.genre) {
genre = film.genre;
}
let modalContent = `
Détail du film
${film.title}
${film.year} - ${genre}
${film.duration} minutes (${film.countries})
IMDB score: ${film.imdb_score}/10
Recettes au Box-Office : ${recette}
Realisé par:
${film.directors}
${film.long_description}
Avec:
${film.actors}
`;
return modalContent;
}
// get MovieList, returns a promise
async function getMovies3(url) {
const filmList = [];
for (let j=1; j<3; j++) {
const response = await fetch(`${url_title}${url}&format=json&page=${j}`);
const film1 = await response.json();
for (i in film1.results) {
filmList.push(film1.results[i]);
}
}
return filmList;
}
// get a movie List and create HTML blocks
function createBlock(filmList, id, count) {
// get the element to change
let blockToLook = document.getElementById(id);
blockToLook.innerHTML = "";
for (let i = 0; i < count; i++) {
film = filmList[i];
let movieBlock = `
${film.title}
`;
// retrieve the specific film detail from URL using id then concatenate with the modal creator
let modal = getModalDetail(film, film.id);
blockToLook.innerHTML += movieBlock+modal;
}
}
// add button with requested display
function addSeeMore(id, display) {
let blockToChange = document.getElementById(id)
let blockToAdd = `
`
blockToChange.innerHTML += blockToAdd
}
function addSeeLess(id, display) {
let blockToChange = document.getElementById(id)
let blockToAdd = `
`
blockToChange.innerHTML += blockToAdd;
}
// add movie block quantity depending on screen size
function generateMovies(movieProm, id) {
if (screen.width < 768 ) {
movieProm.then((data) => {
createBlock(data, id, 2);
addSeeMore(id, "d-block");
})
}
if (screen.width === 768 || screen.width > 768 && screen.width < 992) {
movieProm.then((data) => {
createBlock(data, id, 4);
addSeeMore(id, "d-block");
})
}
if (screen.width > 992) {
movieProm.then((data) => {
createBlock(data, id, 6);
addSeeMore(id, "d-none");
})
}
}
function generateMoviesUnsized(movieProm, id) {
movieProm.then((data) => {
createBlock(data, id, 6);
});
}
function listenButton(blockId) {
let more = document.querySelector("#blockId button");
// when the button is clicked ; regenerate blocks and hide button
more.addEventListener("click", ()=> {
blockId.then((data) => {
createBlock(data, "blockId", 6);
addSeeMore("blockId", "d-none");
addSeeLess("blockId", "d-block");
})
})
let less = document.querySelector("#bockId button");
less.addEventListener("click", ()=> {
blockId.then((data) => {
generateMovies(blockId, "blockId");
})
})
// when the screen changes, regenerate blocks
window.addEventListener("resize", ()=> {
generateMovies(bestRated, "bestRated")
})
}
// ============ best film ============
// Il Grande Lebowski
// bestFilm("118715")
bestFilm("101928");
// ============ Best Rated ============
//getMovies("?sort_by=-imdb_score", "bestRated");
let bestRated = getMovies3("?sort_by=-imdb_score");
// create blocks depending on current screen's size
generateMovies(bestRated, "bestRated");
//retrieve the button when it exists (better than getElementById which could raise an error
let more = document.querySelector("#bestRated");
console.log(more)
// when the button is clicked ; regenerate blocks and hide button
more.addEventListener("click", ()=> {
bestRated.then((data) => {
createBlock(data, "bestRated", 6);
addSeeMore("bestRated", "d-none");
addSeeLess("bestRated", "d-block");
})
})
let less = document.getElementById("bestRated");
less.addEventListener("click", ()=> {
bestRated.then((data) => {
createBlock(data, "bestRated", 6);
addSeeMore("bestRated", "d-none");
addSeeLess("bestRated", "d-block");
})
})
// when the screen changes, regenerate blocks
window.addEventListener("resize", ()=> {
generateMovies(bestRated, "bestRated")
})
// ============ Mystery ============
let mystery = getMovies3("?genre=mystery")
generateMovies(mystery, "mystery")
// fill the selection menu
getCategory();
let other = getMovies3("?genre=action");
generateMovies(other, "other");
// listen for any change in menu
let selectedItem = document.getElementById("category-select");
selectedItem.addEventListener("change", ()=> {
// getMovies(`?genre=${selectedItem.value}`, "other");
let block = getMovies3(`?genre=${selectedItem.value}`);
generateMovies(block, "other");
});
function createBlock2(filmList, id, count) {
let blockToLook = document.getElementById(id);
blockToLook.innerHTML = "";
let display = "d-block"
for (let i = 0; i < count; i++) {
film = filmList[i];
let id = i+1
if (i === 0 || i === 1 ) {
display = "d-block"
}
if (i === 2 || i === 3) {
display = "d-none d-md-block"
}
if (i === 4 || i === 5) {
display = "d-none d-lg-block"
}
let movieBlock = `
${film.title}
`;
// retrieve the specific film detail from URL using id then concatenate with the modal creator
let modal = getModalDetail(film, film.id);
blockToLook.innerHTML += movieBlock+modal+blockEnd;
}
}
async function getMovies2(url, id) {
const filmList = [];
//let countMovies = 6;
for (let j=1; j<3; j++) {
const response = await fetch(`${url_title}${url}&format=json&page=${j}`);
const film1 = await response.json();
for (i in film1.results) {
filmList.push(film1.results[i]);
}
}
let blockToLook = document.getElementById(id);
blockToLook.innerHTML = "";
for (let i = 0; i < count; i++) {
film = filmList[i];
let movieBlock = `
${film.title}
`;
// retrieve the specific film detail from URL using id then concatenate with the modal creator
const response2 = await fetch(`${url_title}${film.id}`);
const film2 = await response2.json();
let modal = getModalDetail(film2, film2.id);
blockToLook.innerHTML += movieBlock+modal+blockEnd;
}
}