-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
executable file
·160 lines (143 loc) · 5.43 KB
/
index.js
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
const app = {
// Propriétés du module (objet)
appRoot: document.getElementById('app-root'),
apiUrl: 'http://localhost:8080/api',
/**
* Initialisation de l'application
*/
init: function() {
// Page d'accueil
app.homePage();
app.handleRouteEventListerner();
},
handleRouteEventListerner: function() {
let allRoutes = document.querySelectorAll("[data-page]");
allRoutes.forEach((route) => {
route.addEventListener('click', (event) => {
// Si data-page ="app.homePage"
// pageMethod = 'app.homePage'
let pageMethod = event.target.dataset.page;
if (pageMethod) {
// On affiche la route (appel de la fonction)
// app.homePage();
eval(`${pageMethod}`)();
} else {
alert("la route demandée n'existe pas");
}
});
});
},
homePage: function() {
let homepageTpl = `
<div class="py-5 text-center container text-dark" style="height:100%">
<div class="row py-lg-5">
<div class="col-lg-6 col-md-8 mx-auto">
<h1 class="display-4">Bienvenue sur O'flix</h1>
<p>Regardez des séries TV <br /> et des films en ligne</p>
<p>
<a class="btn btn-danger btn-lg" href="#" data-page="app.tvshowPage" role="button">Commencez-maintenant</a>
</p>
</div>
</div>
</div>
`;
app.render(homepageTpl);
},
contactPage: function()
{
app.render('<h2>Page de contact</h2>')
},
tvshowPage: function() {
let appToken = sessionStorage.getItem('appToken');
if (appToken) {
fetch(`${app.apiUrl}/v1/tvshows`, {
method: 'GET',
headers: {
'Authorization': `Bearer ${appToken}`,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
})
.then((resp) => resp.json()) // On transforme la réponse en json
.then(function(data) {
// On récupère les datas
// console.log('tvshowPage', data);
let templateHtml = '<h2>Dernières séries</h2>';
templateHtml += '<ul>';
for(tvshow of data) {
console.log(tvshow.title);
templateHtml += `<li>${tvshow.title}</li>`;
}
templateHtml += '<ul>'
app.render(templateHtml);
})
.catch(function(error) {
// Une erreur s'est produite
console.log("ERROR !", error);
app.loginPage();
});
} else {
app.loginPage();
}
},
/**
* Page de connexion permettant une récupération d'un token JWT
*/
loginPage: function() {
let loginTpl = `
<div class="container">
<form onsubmit="app.doLogin(event)" method="post">
<div class="form-group">
<label for="inputEmail">Email</label>
<input type="email" class="form-control" id="inputEmail" name="email" aria-describedby="emailHelp">
</div>
<div class="form-group">
<label for="inputPassword">Password</label>
<input type="password" class="form-control" name="password" id="inputPassword">
</div>
<button type="submit" class="btn btn-danger btn-block">Connexion</button>
</form>
</div>
`;
app.render(loginTpl);
},
doLogin: function(event) {
let form = event.target;
fetch(`${app.apiUrl}/login_check`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: form.email.value,
password: form.password.value
})
})
.then((resp) => resp.json()) // On transforme la réponse en json
.then(function(data) {
// On récupère les datas
console.log(data);
// Si les identifiants saisis sont incorrects, on affiche une Alert
if (data.code == 401) {
alert('Identifiants incorrects');
} else {
console.log(data);
sessionStorage.setItem('appToken', data.token);
// On redirige ensuite vers la page des tvshows
app.tvshowPage();
}
})
.catch(function(error) {
// Une erreur s'est produite
console.log(error);
});
event.preventDefault();
},
render: function(template) {
// On remplace le contenu de la balise <main> par le contenu de la variable template
app.appRoot.innerHTML = template;
},
};
// Chargement de l'application
window.addEventListener("load", app.init);