unique git
This commit is contained in:
commit
e65bc44fad
45
cacher-desc.riot
Normal file
45
cacher-desc.riot
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<cacher-desc>
|
||||||
|
|
||||||
|
<button id="cacher-desc-but" onclick={toggle}>
|
||||||
|
<i id="logo-cacher-desc-but" class="fa-solid fa-eye"></i>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
state: {
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
cache: false
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.update({
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
cache: false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async toggle(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
this.state.cache=!this.state.cache;
|
||||||
|
if(this.state.cache){
|
||||||
|
document.getElementById("logo-cacher-desc-but").classList="fa-solid fa-eye-slash";
|
||||||
|
} else {
|
||||||
|
document.getElementById("logo-cacher-desc-but").classList="fa-solid fa-eye";
|
||||||
|
}
|
||||||
|
|
||||||
|
this.props.t_setvisi(!this.state.cache);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#cacher-desc-but {
|
||||||
|
width: 50px;
|
||||||
|
padding: -50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</cacher-desc>
|
47
cat-selector.riot
Normal file
47
cat-selector.riot
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<cat-selector>
|
||||||
|
|
||||||
|
<button id="aff" class="bleu" onclick={change} >A l'affiche</button>
|
||||||
|
<button id="pop" onclick={change} >Populaires</button>
|
||||||
|
<button id="not" onclick={change} >Mieux notés</button>
|
||||||
|
<button id="nex" onclick={change} >A venir</button>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
state: {
|
||||||
|
loading: false,
|
||||||
|
error: null
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.update({
|
||||||
|
loading: false,
|
||||||
|
error: null
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async change(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
document.getElementById('pop').classList='gris';
|
||||||
|
document.getElementById('not').classList='gris';
|
||||||
|
document.getElementById('nex').classList='gris';
|
||||||
|
document.getElementById('aff').classList='gris';
|
||||||
|
|
||||||
|
e.target.classList="bleu";
|
||||||
|
this.props.t_changer(e.target.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.gris{
|
||||||
|
background: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bleu{
|
||||||
|
background: lightblue;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</cat-selector>
|
55
compofilm.riot
Normal file
55
compofilm.riot
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<compofilm>
|
||||||
|
<a if="{state.visible && state.film!=null}" target="blanc" href="https://www.themoviedb.org/movie/{state.film.id}?language=fr">{state.film.title}</a>
|
||||||
|
<img if="{state.film!=null && state.film.poster_path!=null}" src="https://image.tmdb.org/t/p/original{state.film.poster_path}" width="100%"/>
|
||||||
|
<i class="fa-solid fa-star" each={ i in Array(10).keys() } if="{ state.visible && state.film!=null && state.film.vote_average>=i+1 }"></i>
|
||||||
|
<i class="fa-regular fa-star-half-stroke" each={ i in Array(10).keys() } if="{state.visible && state.film!=null && state.film.vote_average>=i+0.5 && state.film.vote_average<i+1}"></i>
|
||||||
|
<i class="fa-regular fa-star tamer" each={ i in Array(10).keys() } if="{state.visible && state.film!=null && state.film.vote_average>=i && state.film.vote_average<i+0.5}"></i>
|
||||||
|
<i class="fa-regular fa-star" each={ i in Array(10).keys() } if="{ state.visible && state.film!=null && state.film.vote_average<i }"></i>
|
||||||
|
<span if="{state.visible && state.film!=null}">{state.film.vote_average}</span>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
state: {
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
film: null,
|
||||||
|
visible: true
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.update({
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
film: null,
|
||||||
|
visible: true
|
||||||
|
})
|
||||||
|
},
|
||||||
|
onBeforeMount (props,state){
|
||||||
|
|
||||||
|
state.film=props.v_film;
|
||||||
|
props.v_setVisiSetter(this.setVisi);
|
||||||
|
props.v_setFilmSetter(this.setFilm);
|
||||||
|
},
|
||||||
|
setVisi(visible){
|
||||||
|
this.state.visible=visible;
|
||||||
|
this.update();
|
||||||
|
},
|
||||||
|
setFilm(film){
|
||||||
|
this.state.film=film;
|
||||||
|
this.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
*{
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
compofilm{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</compofilm>
|
49
genre-selector.riot
Normal file
49
genre-selector.riot
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<genre-selector>
|
||||||
|
<select id="genre-selector-sel" onchange={choisi}></select>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
const NOTHING = 0;
|
||||||
|
const RECHERCHE = 1;
|
||||||
|
const GET_GENRES = 2;
|
||||||
|
|
||||||
|
export default {
|
||||||
|
state: {
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.update({
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
choisi(e){
|
||||||
|
this.props.t_changer(e.target.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fetch("https://api.themoviedb.org/3/genre/movie/list?api_key=64a9b2af6577bd1f5553143e0eacd4a8&language=fr")
|
||||||
|
.then(result => result.json())
|
||||||
|
.then( genres => {
|
||||||
|
let selecteur = document.getElementById("genre-selector-sel");
|
||||||
|
|
||||||
|
const tout = document.createElement("option");
|
||||||
|
tout.setAttribute("value", 666);
|
||||||
|
tout.innerHTML = "Tout";
|
||||||
|
selecteur.appendChild(tout);
|
||||||
|
|
||||||
|
for(let i = 0 ; i < genres.genres.length ; i++){
|
||||||
|
const newOption = document.createElement("option");
|
||||||
|
newOption.setAttribute("value", genres.genres[i].id);
|
||||||
|
newOption.innerHTML = genres.genres[i].name;
|
||||||
|
selecteur.appendChild(newOption);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</genre-selector>
|
30
index.html
Executable file
30
index.html
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<hmtl>
|
||||||
|
<head>
|
||||||
|
<script src="https://kit.fontawesome.com/3f74e6a305.js" crossorigin="anonymous"></script>
|
||||||
|
<script type="riot" src="./vue.riot"></script>
|
||||||
|
<script type="riot" src="./tout.riot"></script>
|
||||||
|
<script type="riot" src="./search.riot"></script>
|
||||||
|
<script type="riot" src="./compofilm.riot"></script>
|
||||||
|
<script type="riot" src="./cacher-desc.riot"></script>
|
||||||
|
<script type="riot" src="./cat-selector.riot"></script>
|
||||||
|
<script type="riot" src="./genre-selector.riot"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/riot@6.1.2/riot+compiler.min.js"></script>
|
||||||
|
<title>Cinema</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<tout></tout>
|
||||||
|
</body>
|
||||||
|
<script>
|
||||||
|
riot.compile().then(()=>{
|
||||||
|
riot.mount('tout');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body{
|
||||||
|
background: gray;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</hmtl>
|
85
search.riot
Executable file
85
search.riot
Executable file
@ -0,0 +1,85 @@
|
|||||||
|
<search>
|
||||||
|
<label>
|
||||||
|
<form onsubmit={_search}>
|
||||||
|
<input type="input" id="input" placeholder="Recherche">
|
||||||
|
</form>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<button id="search-but" onclick={ _search }>
|
||||||
|
<i class="fa-solid fa-magnifying-glass"></i>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<p if={state.error} class="error">{ state.error }</p>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
const NOTHING = 0;
|
||||||
|
const RECHERCHE = 1;
|
||||||
|
const GET_GENRES = 2;
|
||||||
|
|
||||||
|
export default {
|
||||||
|
state: {
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
results: []
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.update({
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
results: [],
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async _search(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
if(document.getElementById("input").value == "")
|
||||||
|
return;
|
||||||
|
|
||||||
|
results = await fetch( "https://api.themoviedb.org/3/search/movie?api_key=64a9b2af6577bd1f5553143e0eacd4a8&query="+document.getElementById("input").value+"&language=fr&include_adult=true")
|
||||||
|
.then(result => result.json());
|
||||||
|
this.state.results=results.results;
|
||||||
|
console.log(this.state.results);
|
||||||
|
this.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
.loader {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.loader {
|
||||||
|
margin: 6rem 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error {
|
||||||
|
color: #AA8222;
|
||||||
|
margin: 1rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
margin: 1rem 0 0;
|
||||||
|
font-weight: 300;
|
||||||
|
padding: 0.8rem 1rem;
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.05);
|
||||||
|
background: rgba(255, 255, 255, 0.05);
|
||||||
|
transition: all 0.3s;
|
||||||
|
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
|
||||||
|
-moz-appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
outline: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus {
|
||||||
|
background: rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</search>
|
147
tout.riot
Normal file
147
tout.riot
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
<tout>
|
||||||
|
|
||||||
|
<div id="topbar">
|
||||||
|
<div id="gauche">
|
||||||
|
<cacher-desc t_setvisi="{setVisibilite}"></cacher-desc>
|
||||||
|
<genre-selector t_changer="{setGenre}"></genre-selector>
|
||||||
|
</div>
|
||||||
|
<div id="droite">
|
||||||
|
<search></search>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="ndbar">
|
||||||
|
<cat-selector t_changer="{changeAff}"></cat-selector>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="panneau">
|
||||||
|
<vue if="{state.films}!=[]" t_data="{state.films}" t_setSetters="{setSetters}" ></vue>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const API_KEY="64a9b2af6577bd1f5553143e0eacd4a8";
|
||||||
|
const R_AFFICHE="https://api.themoviedb.org/3/movie/now_playing?api_key="+API_KEY+"&language=fr&include_adult=true";
|
||||||
|
const R_POPULAIRE="https://api.themoviedb.org/3/movie/popular?api_key=" + API_KEY+"&language=fr&include_adult=true";
|
||||||
|
const R_NOTES="https://api.themoviedb.org/3/movie/top_rated?api_key=" + API_KEY + "&language=fr&include_adult=true";
|
||||||
|
const R_AVENIR="https://api.themoviedb.org/3/movie/upcoming?api_key=" + API_KEY + "&language=fr&include_adult=true";
|
||||||
|
|
||||||
|
|
||||||
|
export default {
|
||||||
|
state: {
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
films: [],
|
||||||
|
visible: true,
|
||||||
|
req: R_AFFICHE,
|
||||||
|
genre: 666,
|
||||||
|
v_changeFilm: null,
|
||||||
|
v_changeVisibilite: null
|
||||||
|
},
|
||||||
|
|
||||||
|
reset() {
|
||||||
|
this.update({
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
films: [],
|
||||||
|
visible: true,
|
||||||
|
req: R_AFFICHE,
|
||||||
|
genre: 666
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async changeAff(aff){
|
||||||
|
switch (aff) {
|
||||||
|
case "aff":
|
||||||
|
this.state.req=R_AFFICHE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "pop":
|
||||||
|
this.state.req=R_POPULAIRE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "not":
|
||||||
|
this.state.req=R_NOTES;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "nex":
|
||||||
|
this.state.req=R_AVENIR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(this.state.genre != 666){
|
||||||
|
this.state.req+="&with_genres="+this.state.genre
|
||||||
|
}
|
||||||
|
await this.updateFilms();
|
||||||
|
|
||||||
|
this.state.v_changeFilm(this.state.films);
|
||||||
|
},
|
||||||
|
async updateFilms(){
|
||||||
|
|
||||||
|
this.state.films=await fetch(this.state.req)
|
||||||
|
.then(result => result.json())
|
||||||
|
.then(data => data);
|
||||||
|
|
||||||
|
this.update();
|
||||||
|
},
|
||||||
|
onBeforeMount (props,state){
|
||||||
|
this.updateFilms();
|
||||||
|
},
|
||||||
|
setVisibilite(visible){
|
||||||
|
this.state.visible=!!visible;
|
||||||
|
this.state.v_changeVisibilite(this.state.visible);
|
||||||
|
},
|
||||||
|
setGenre(genre){
|
||||||
|
this.state.genre=genre;
|
||||||
|
this.updateFilms();
|
||||||
|
this.state.v_changeFilm(this.state.films);
|
||||||
|
this.update();
|
||||||
|
},
|
||||||
|
setSetters(films,visibilite){
|
||||||
|
this.state.v_changeFilm=films;
|
||||||
|
this.state.v_changeVisibilite=visibilite;
|
||||||
|
|
||||||
|
this.state.v_changeVisibilite(this.state.visible);
|
||||||
|
this.state.v_changeFilm(this.state.films);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#topbar *{
|
||||||
|
margin:10px;
|
||||||
|
vertical-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#gauche{
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#droite{
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#droite *{
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#search-but{
|
||||||
|
margin-left: -20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#topbar{
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ndbar{
|
||||||
|
text-align: center;
|
||||||
|
padding-left: 10%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ndbar *{
|
||||||
|
display: inline-block;
|
||||||
|
margin: 5px;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</tout>
|
67
vue.riot
Normal file
67
vue.riot
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<vue>
|
||||||
|
<div id="conteneur" >
|
||||||
|
<compofilm each={ film in state.films.results } v_film="{ film }" v_setVisiSetter="{ addVisibilitySetter }" v_setFilmSetter="{ addSetter }">
|
||||||
|
</compofilm> <!--Refuse de s'update-->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
state: {
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
films: [],
|
||||||
|
visible: true,
|
||||||
|
setters: [],
|
||||||
|
film_setters: [],
|
||||||
|
genres_names: [],
|
||||||
|
genres_ids: []
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.update({
|
||||||
|
loading: false,
|
||||||
|
error: null,
|
||||||
|
films: [],
|
||||||
|
visible: true,
|
||||||
|
setters: [],
|
||||||
|
film_setters: [],
|
||||||
|
genres_names: [],
|
||||||
|
genres_ids: []
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async onBeforeMount(props,state){
|
||||||
|
await new Promise(r => setTimeout(r, 200));
|
||||||
|
|
||||||
|
props.t_setSetters(this.setFilms,this.setVisibilite);
|
||||||
|
|
||||||
|
this.update();
|
||||||
|
},
|
||||||
|
setFilms(data){
|
||||||
|
this.state.films=data;
|
||||||
|
i = 0;
|
||||||
|
for(setter of this.state.film_setters){
|
||||||
|
setter(data.results[i++]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setVisibilite(visible){
|
||||||
|
this.state.visible=visible;
|
||||||
|
for(setter of this.state.setters){
|
||||||
|
setter(visible);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addVisibilitySetter(setter){
|
||||||
|
this.state.setters.push(setter);
|
||||||
|
},
|
||||||
|
addSetter(setter){
|
||||||
|
this.state.film_setters.push(setter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
compofilm{
|
||||||
|
display: inline-block;
|
||||||
|
width: 22%;
|
||||||
|
margin: 1%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</vue>
|
Loading…
Reference in New Issue
Block a user