parent
08aa653b93
commit
542d1dfd88
26 changed files with 627 additions and 576 deletions
@ -1,3 +0,0 @@ |
||||
{ |
||||
"liveServer.settings.port": 5501 |
||||
} |
@ -1,61 +1,165 @@ |
||||
/* Copyright © 2023 Entreprise SkamCraft */ |
||||
|
||||
/* @font-face { |
||||
font-family: M42; |
||||
src: url(/fonts/m42.TTF); |
||||
} */ |
||||
|
||||
* { |
||||
background-color: #272727; |
||||
font-family: "Montserrat", sans-serif; |
||||
font-size: 16px; |
||||
color: #ffffff; |
||||
margin: 0; |
||||
padding: 0; |
||||
text-decoration: none; |
||||
list-style: none; |
||||
} |
||||
|
||||
body { |
||||
text-align: center; |
||||
background-color: #212121; |
||||
} |
||||
|
||||
.logo { |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
height: 100vh; |
||||
} |
||||
|
||||
.container-auth { |
||||
border-radius: 10px; |
||||
.logo img { |
||||
width: 80px; |
||||
padding: 20px; |
||||
} |
||||
|
||||
.logo h4 { |
||||
font-size: 30px; |
||||
} |
||||
|
||||
.form { |
||||
--input-focus: #a37b03; |
||||
--font-color: #323232; |
||||
--font-color-sub: #666666; |
||||
--bg-color: beige; |
||||
--main-color: black; |
||||
padding: 20px; |
||||
background: #eab308; |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
justify-content: center; |
||||
text-align: center; |
||||
max-width: 400px; |
||||
width: 100%; |
||||
gap: 20px; |
||||
border-radius: 20px; |
||||
border: 2px solid var(--main-color); |
||||
box-shadow: 4px 4px var(--main-color); |
||||
width: 20%; |
||||
margin: auto; |
||||
margin-top: 10%; |
||||
} |
||||
|
||||
.title { |
||||
color: var(--font-color); |
||||
font-weight: 900; |
||||
font-size: 20px; |
||||
} |
||||
|
||||
h1 { |
||||
font-weight: bold; |
||||
font-size: 24px; |
||||
line-height: 30px; |
||||
.title span { |
||||
color: var(--font-color-sub); |
||||
font-weight: 600; |
||||
font-size: 17px; |
||||
} |
||||
|
||||
h2 { |
||||
font-weight: 400; |
||||
font-size: 16px; |
||||
line-height: 20px; |
||||
color: #fa777c; |
||||
.input { |
||||
width: 250px; |
||||
height: 40px; |
||||
border-radius: 5px; |
||||
border: 2px solid var(--main-color); |
||||
background-color: var(--bg-color); |
||||
box-shadow: 4px 4px var(--main-color); |
||||
font-size: 15px; |
||||
font-weight: 600; |
||||
color: var(--font-color); |
||||
padding: 5px 10px; |
||||
outline: none; |
||||
} |
||||
|
||||
.input::placeholder { |
||||
color: var(--font-color-sub); |
||||
opacity: 0.8; |
||||
} |
||||
|
||||
.input:focus { |
||||
border: 2px solid var(--input-focus); |
||||
} |
||||
|
||||
label { |
||||
font-weight: 700; |
||||
font-size: 12px; |
||||
color: #b5bac1; |
||||
line-height: 16px; |
||||
.select * { |
||||
color: var(--main-color); |
||||
} |
||||
|
||||
input { |
||||
color: #fff; |
||||
width: 100%; |
||||
height: 30px; |
||||
.button-confirm { |
||||
width: 120px; |
||||
height: 40px; |
||||
border-radius: 5px; |
||||
padding: 5px; |
||||
border: 2px solid var(--main-color); |
||||
background-color: var(--bg-color); |
||||
box-shadow: 4px 4px var(--main-color); |
||||
font-size: 17px; |
||||
font-weight: 600; |
||||
color: var(--font-color); |
||||
cursor: pointer; |
||||
} |
||||
|
||||
button { |
||||
font-weight: 500; |
||||
font-size: 16px; |
||||
line-height: 24px; |
||||
color: #fff; |
||||
margin-top: 10px; |
||||
padding: 10px 20px; |
||||
.button-confirm:active { |
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |
||||
} |
||||
|
||||
.link-connection { |
||||
position: relative; |
||||
display: inline-block; |
||||
} |
||||
|
||||
.link-connection:hover { |
||||
cursor: pointer; |
||||
border-radius: 10px; |
||||
width: 100%; |
||||
margin-bottom: 10px; |
||||
} |
||||
text-underline-offset: 2px; |
||||
text-decoration: underline; |
||||
transform: scale(1.1); |
||||
transition: 0.3s; |
||||
} |
||||
|
||||
.alert { |
||||
position: fixed; |
||||
left: 50%; |
||||
transform: translateX(-50%); |
||||
bottom: 10%; |
||||
border-radius: 0.5rem; |
||||
border-width: 0.25rem; |
||||
border-color: #ef4444; |
||||
background-color: #fee2e2; |
||||
padding: 1rem; |
||||
width: 300px; |
||||
max-width: 90%; |
||||
text-align: center; |
||||
} |
||||
|
||||
.alert-inner { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 0.5rem; |
||||
color: #ef4444; |
||||
} |
||||
|
||||
.icon { |
||||
height: 1.25rem; |
||||
width: 1.25rem; |
||||
fill: #d94848; |
||||
} |
||||
|
||||
.message { |
||||
color: #d94848; |
||||
font-weight: 500; |
||||
} |
||||
|
||||
.content { |
||||
margin-top: 0.5rem; |
||||
font-size: 0.875rem; |
||||
color: #d94848; |
||||
} |
||||
|
@ -1,8 +0,0 @@ |
||||
#title{ |
||||
text-align: center; |
||||
margin-bottom: 100px; |
||||
} |
||||
.card{ |
||||
display: grid; |
||||
grid-template-columns: 1fr 1fr 1fr; |
||||
} |
Binary file not shown.
After Width: | Height: | Size: 209 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 4.7 KiB |
@ -0,0 +1,54 @@ |
||||
<!-- Copyright © 2023 Entreprise SkamKraft --> |
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="fr" class="html-index"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
<link rel="preconnect" href="https://fonts.googleapis.com" /> |
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
||||
<link |
||||
href="https://fonts.googleapis.com/css2?family=Inter:wght@500&display=swap" |
||||
rel="stylesheet" |
||||
/> |
||||
<script |
||||
src="https://code.jquery.com/jquery-3.7.1.min.js" |
||||
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" |
||||
crossorigin="anonymous" |
||||
></script> |
||||
<script type="module" src="scripts/main.js" defer></script> |
||||
<link rel="stylesheet" href="/css/global.css" /> |
||||
<link rel="icon" href="img/logo.png" /> |
||||
<title>SkamCraft</title> |
||||
</head> |
||||
|
||||
<body> |
||||
<header id="header"> |
||||
<div class="menu"> |
||||
<div class="title-section"> |
||||
<img src="img/Skamkraft.png" alt="Logo AppleTech.svg" /> |
||||
<p>SkamCraft</p> |
||||
<div class="page-change-button"> |
||||
<button id="btn-contract">Mes contracts</button> |
||||
<button id="btn-faction">Ma faction</button> |
||||
<button id="btn-ship">Mes vaisseaux</button> |
||||
<button id="btn-system">Systeme</button> |
||||
</div> |
||||
</div> |
||||
<div class="title-section"> |
||||
<p id="credits">N/A Credtis</p> |
||||
<button id="btn-logout">Se deconnecter</button> |
||||
</div> |
||||
</div> |
||||
<hr /> |
||||
</header> |
||||
|
||||
<main></main> |
||||
|
||||
<footer id="footer"> |
||||
<hr /> |
||||
<p>SkamKraft © 2023</p> |
||||
</footer> |
||||
</body> |
||||
</html> |
@ -1,41 +0,0 @@ |
||||
class renderer { |
||||
constructor(canvas) { |
||||
this.canvas = canvas; |
||||
this.ctx = canvas.getContext("2d"); |
||||
this.waypoints = []; |
||||
this.ships = []; |
||||
} |
||||
|
||||
drawSystem() { |
||||
const canvas = document.getElementById("canvas"); |
||||
let w = canvas.width; |
||||
let h = canvas.height;
|
||||
const ctx = canvas.getContext("2d"); |
||||
|
||||
this.waypoints.forEach(waypoint => { |
||||
switch (waypoint.type) { |
||||
case "PLANET":
|
||||
drawWaypoint(waypoint, ctx, w/2, h/2, 'green'); |
||||
break; |
||||
case "ASTEROID":
|
||||
drawWaypoint(waypoint, ctx, w/2, h/2, 'blue'); |
||||
break; |
||||
case "GAS_GIANT":
|
||||
drawWaypoint(waypoint, ctx, w/2, h/2, 'red'); |
||||
break;
|
||||
} |
||||
|
||||
}); |
||||
} |
||||
|
||||
drawShips() { |
||||
|
||||
} |
||||
|
||||
drawWaypoint(wayPoint, ctx, w, h, color) { |
||||
ctx.beginPath(); |
||||
ctx.fillStyle = color; |
||||
ctx.arc(wayPoint.x/offset.x + w, wayPoint.y/offset.y + h, 1, 0, 2 * Math.PI); |
||||
ctx.fill(); |
||||
} |
||||
} |
@ -1,49 +0,0 @@ |
||||
// Copyright © 2023 Entreprise SpaceTarders
|
||||
'use strict' |
||||
import { listSystems, getSystem, listWaypointsInSystem } from "./system.js" |
||||
let token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiUlVCRU4iLCJ2ZXJzaW9uIjoidjIuMS40IiwicmVzZXRfZGF0ZSI6IjIwMjMtMTItMDIiLCJpYXQiOjE3MDIwMzg1ODgsInN1YiI6ImFnZW50LXRva2VuIn0.Brl1Mm9K7bG7kLfWGiU6M0WFvOXy-sV3T_p9-c-v97XMFvsmA85lpdKzeaAyVpOPMF4uM08HqxWb9mEGbag5whX0LPk39B_vjKeQVB9cjpjDsaElQz2HuWIUlB33eOQTyt_LKdQYnY7Jqh2HLopMbzK5sjeaGYzjoWILCuZXjqQkp5b0M_0EvXqCgDn1PpEb_MXSLkTpSQ1xa6hCaGjf6fE3KfTgRxEGpIunAeLRq1edaN4fU7TFU0SWSJZ1HO9CMfxA7eZt274sw4Wiea6LpwlPsGOMf1HFVl2sWdpbdIwdaFHyKpUAHWOGORKBB4B9G77wFLcOukwQMOQYOFL48Q" |
||||
export function getAgent() { |
||||
const settings = { |
||||
async: true, |
||||
crossDomain: true, |
||||
url: 'https://api.spacetraders.io/v2/my/agent', |
||||
method: 'GET', |
||||
headers: { |
||||
Accept: 'application/json', |
||||
Authorization: `Bearer ${token}` |
||||
} |
||||
}; |
||||
/*$.ajax(settings).done(function (reponse) { |
||||
$('.main-window').prepend(` |
||||
<article class="agent-card"> |
||||
<p class="account"> ID du joueur : ${reponse.data.accountId}</p> |
||||
<p class="symbol">${reponse.data.symbol}</p> |
||||
<p class="headquarters">${reponse.data.headquarters}</p> |
||||
<p class="credits">${reponse.data.credits}</p> |
||||
<p class="startingFaction">${reponse.data.startingFaction}</p> |
||||
<p class="shipCount">${reponse.data.shipCount}</p> |
||||
</article> |
||||
`);
|
||||
let metaSystem = reponse.data.headquarters.split("-"); |
||||
getSystem(metaSystem[0] + "-" + metaSystem[1]); |
||||
});*/ |
||||
} |
||||
export async function createAgent(symbol, faction){ |
||||
const settings = { |
||||
method: 'POST', |
||||
headers: { |
||||
'Content-Type': 'application/json', |
||||
}, |
||||
body: JSON.stringify({ |
||||
symbol: symbol, |
||||
faction: faction, |
||||
}), |
||||
success: function(response){ |
||||
symbol = response.data;
|
||||
}, |
||||
error: function(error){ |
||||
console.log(error); |
||||
} |
||||
}; |
||||
|
||||
} |
@ -1,96 +0,0 @@ |
||||
// Copyright © 2023 Entreprise SpaceTarders
|
||||
'use strict' |
||||
let token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiUlVCRU4iLCJ2ZXJzaW9uIjoidjIuMS40IiwicmVzZXRfZGF0ZSI6IjIwMjMtMTItMDIiLCJpYXQiOjE3MDIwMzg1ODgsInN1YiI6ImFnZW50LXRva2VuIn0.Brl1Mm9K7bG7kLfWGiU6M0WFvOXy-sV3T_p9-c-v97XMFvsmA85lpdKzeaAyVpOPMF4uM08HqxWb9mEGbag5whX0LPk39B_vjKeQVB9cjpjDsaElQz2HuWIUlB33eOQTyt_LKdQYnY7Jqh2HLopMbzK5sjeaGYzjoWILCuZXjqQkp5b0M_0EvXqCgDn1PpEb_MXSLkTpSQ1xa6hCaGjf6fE3KfTgRxEGpIunAeLRq1edaN4fU7TFU0SWSJZ1HO9CMfxA7eZt274sw4Wiea6LpwlPsGOMf1HFVl2sWdpbdIwdaFHyKpUAHWOGORKBB4B9G77wFLcOukwQMOQYOFL48Q" |
||||
|
||||
export function CreateCardContrat(contrats){ |
||||
$('#contrats').empty() |
||||
|
||||
contrats.forEach(contrat => { |
||||
console.log(contrat); |
||||
const card = |
||||
`
|
||||
<div class="card" style="width: 20rem;"> |
||||
<img src="/img/contrat.jpg" class="card-img-top" alt=""> |
||||
<div class="card-body"> |
||||
<h5 style="color:white" class="card-title">${contrat.factionSymbol}</h5> |
||||
<p style="color:white" class="card-text">${contrat.accepted}</p> |
||||
<button id="btn-infos" contratID="${contrat.id}" type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">Infos</button> |
||||
<button id="btn-accepter" class="btn-modify btn btn-primary" data-toggle="modal" data-target="#Modify" >Accepter</button> |
||||
</div> |
||||
</div> |
||||
` |
||||
|
||||
$('#contrats').append(card) |
||||
$('#btn-infos').on('click', async function(){ |
||||
await getInfosContrat($(this).attr('contratID')); |
||||
|
||||
}) |
||||
}) |
||||
} |
||||
{/* <button id="btn-infos" contratID="${contrat.id}" class="btn btn-primary btn-infos" data-toggle="modal" data-target="#Infos" >Infos</button> */} |
||||
export function listContrats(){ |
||||
const settings = { |
||||
async: true, |
||||
crossDomain: true, |
||||
url: 'https://api.spacetraders.io/v2/my/contracts', |
||||
method: 'GET', |
||||
headers: { |
||||
Accept: 'application/json', |
||||
Authorization: `Bearer ${token}` |
||||
} |
||||
}; |
||||
|
||||
$.ajax(settings).done(function (response) { |
||||
CreateCardContrat(response.data); |
||||
}); |
||||
} |
||||
|
||||
export async function getContrat(contratId){ |
||||
let contrat; |
||||
|
||||
await $.ajax(`https://api.spacetraders.io/v2/my/contracts/${contratId}`, { |
||||
method: 'GET', |
||||
headers: { |
||||
Accept: 'application/json', |
||||
Authorization: `Bearer ${token}` |
||||
}, |
||||
success: function(response){ |
||||
contrat = response.data; |
||||
|
||||
}, |
||||
error: function(error){ |
||||
console.log(error); |
||||
} |
||||
}); |
||||
|
||||
return contrat; |
||||
} |
||||
|
||||
export async function getInfosContrat(contratId){ |
||||
|
||||
let contrat; |
||||
await $.ajax(`https://api.spacetraders.io/v2/my/contracts/${contratId}`, { |
||||
method: 'GET', |
||||
headers: { |
||||
Accept: 'application/json', |
||||
Authorization: `Bearer ${token}` |
||||
}, |
||||
success: function(contrat){ |
||||
console.log(contrat); |
||||
window.contratID.innerText = `ID Contrat : ${contratId}` |
||||
window.exampleModalLabel.innerText = `${contrat.factionSymbol}` |
||||
|
||||
|
||||
}, |
||||
error: function(error){ |
||||
console.log(error); |
||||
} |
||||
}); |
||||
|
||||
return contrat; |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
@ -1,49 +0,0 @@ |
||||
// Copyright © 2023 Entreprise SpaceTarders
|
||||
'use strict' |
||||
let token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiUlVCRU4iLCJ2ZXJzaW9uIjoidjIuMS40IiwicmVzZXRfZGF0ZSI6IjIwMjMtMTItMDIiLCJpYXQiOjE3MDIwMzg1ODgsInN1YiI6ImFnZW50LXRva2VuIn0.Brl1Mm9K7bG7kLfWGiU6M0WFvOXy-sV3T_p9-c-v97XMFvsmA85lpdKzeaAyVpOPMF4uM08HqxWb9mEGbag5whX0LPk39B_vjKeQVB9cjpjDsaElQz2HuWIUlB33eOQTyt_LKdQYnY7Jqh2HLopMbzK5sjeaGYzjoWILCuZXjqQkp5b0M_0EvXqCgDn1PpEb_MXSLkTpSQ1xa6hCaGjf6fE3KfTgRxEGpIunAeLRq1edaN4fU7TFU0SWSJZ1HO9CMfxA7eZt274sw4Wiea6LpwlPsGOMf1HFVl2sWdpbdIwdaFHyKpUAHWOGORKBB4B9G77wFLcOukwQMOQYOFL48Q" |
||||
export async function listFactions(limit, pages){ |
||||
let factions = []; |
||||
|
||||
for(let page = 1; page <= pages; page++){ |
||||
await $.ajax('https://api.spacetraders.io/v2/factions', { |
||||
method: 'GET', |
||||
headers: { |
||||
Accept: 'application/json', |
||||
}, |
||||
data: { |
||||
limit: limit, |
||||
page: page |
||||
}, |
||||
success: function(response){ |
||||
response.data.forEach(faction => { |
||||
factions.push(faction); |
||||
}); |
||||
}, |
||||
error: function(error){ |
||||
console.log(error); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
return factions; |
||||
} |
||||
|
||||
export async function getFaction(symbol){ |
||||
let faction; |
||||
|
||||
await $.ajax(`https://api.spacetraders.io/v2/factions/${symbol}`, { |
||||
method: 'GET', |
||||
headers: { |
||||
Accept: 'application/json' |
||||
}, |
||||
success: function(response){ |
||||
faction = response.data; |
||||
|
||||
}, |
||||
error: function(error){ |
||||
console.log(error); |
||||
} |
||||
}); |
||||
|
||||
return faction; |
||||
} |
@ -1,28 +0,0 @@ |
||||
// Copyright © 2023 Entreprise SpaceTarders
|
||||
'use strict' |
||||
import { createAgent, getAgent } from "./agents.js"; |
||||
import { listSystems, getSystem, listWaypointsInSystem } from "./system.js"; |
||||
import {getFaction, listFactions} from "./faction.js"; |
||||
import {getContrat, listContrats, CreateCardContrat, getInfosContrat} from "./contrat.js"; |
||||
|
||||
|
||||
|
||||
let token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiUlVCRU4iLCJ2ZXJzaW9uIjoidjIuMS40IiwicmVzZXRfZGF0ZSI6IjIwMjMtMTItMDIiLCJpYXQiOjE3MDIwMzg1ODgsInN1YiI6ImFnZW50LXRva2VuIn0.Brl1Mm9K7bG7kLfWGiU6M0WFvOXy-sV3T_p9-c-v97XMFvsmA85lpdKzeaAyVpOPMF4uM08HqxWb9mEGbag5whX0LPk39B_vjKeQVB9cjpjDsaElQz2HuWIUlB33eOQTyt_LKdQYnY7Jqh2HLopMbzK5sjeaGYzjoWILCuZXjqQkp5b0M_0EvXqCgDn1PpEb_MXSLkTpSQ1xa6hCaGjf6fE3KfTgRxEGpIunAeLRq1edaN4fU7TFU0SWSJZ1HO9CMfxA7eZt274sw4Wiea6LpwlPsGOMf1HFVl2sWdpbdIwdaFHyKpUAHWOGORKBB4B9G77wFLcOukwQMOQYOFL48Q" |
||||
|
||||
$(document).ready(async function(){ |
||||
let contrat = listContrats() |
||||
if (document.URL.includes('contrats.html')) { |
||||
|
||||
return; |
||||
} |
||||
|
||||
}) |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,79 +0,0 @@ |
||||
// Copyright © 2023 Entreprise SpaceTarders
|
||||
'use strict' |
||||
let token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiUlVCRU4iLCJ2ZXJzaW9uIjoidjIuMS40IiwicmVzZXRfZGF0ZSI6IjIwMjMtMTItMDIiLCJpYXQiOjE3MDIwMzg1ODgsInN1YiI6ImFnZW50LXRva2VuIn0.Brl1Mm9K7bG7kLfWGiU6M0WFvOXy-sV3T_p9-c-v97XMFvsmA85lpdKzeaAyVpOPMF4uM08HqxWb9mEGbag5whX0LPk39B_vjKeQVB9cjpjDsaElQz2HuWIUlB33eOQTyt_LKdQYnY7Jqh2HLopMbzK5sjeaGYzjoWILCuZXjqQkp5b0M_0EvXqCgDn1PpEb_MXSLkTpSQ1xa6hCaGjf6fE3KfTgRxEGpIunAeLRq1edaN4fU7TFU0SWSJZ1HO9CMfxA7eZt274sw4Wiea6LpwlPsGOMf1HFVl2sWdpbdIwdaFHyKpUAHWOGORKBB4B9G77wFLcOukwQMOQYOFL48Q" |
||||
const lienSysteme = 'https://api.spacetraders.io/v2/systems' |
||||
|
||||
export async function listSystems(limit, pages){ |
||||
let systems = []; |
||||
|
||||
for(let page = 1; page <= pages; page++){ |
||||
await $.ajax('https://api.spacetraders.io/v2/systems/', { |
||||
method: 'GET', |
||||
headers: { |
||||
Accept: 'application/json', |
||||
}, |
||||
data: { |
||||
limit: limit, |
||||
page: page |
||||
}, |
||||
success: function(response){ |
||||
response.data.forEach(sytem => { |
||||
systems.push(sytem); |
||||
}); |
||||
}, |
||||
error: function(error){ |
||||
console.log(error); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
return systems; |
||||
} |
||||
|
||||
export async function getSystem(systemSymbol){ |
||||
let system; |
||||
|
||||
await $.ajax(`https://api.spacetraders.io/v2/systems/${systemSymbol}`, { |
||||
method: 'GET', |
||||
headers: { |
||||
Accept: 'application/json' |
||||
}, |
||||
success: function(response){ |
||||
system = response.data; |
||||
|
||||
}, |
||||
error: function(error){ |
||||
console.log(error); |
||||
} |
||||
}); |
||||
|
||||
return system; |
||||
} |
||||
|
||||
export async function listWaypointsInSystem(limit, pages, systemSymbol){ |
||||
let waypoints = []; |
||||
|
||||
for(let page = 1; page <= pages; page++){ |
||||
await $.ajax(`https://api.spacetraders.io/v2/systems/${systemSymbol}/waypoints`, { |
||||
method: 'GET', |
||||
headers: { |
||||
Accept: 'application/json', |
||||
}, |
||||
data: { |
||||
limit: limit, |
||||
page: page |
||||
}, |
||||
success: function(response){ |
||||
response.data.forEach(waypoint => { |
||||
waypoints.push(waypoint); |
||||
}); |
||||
}, |
||||
error: function(error){ |
||||
console.log(error); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
return waypoints; |
||||
} |
||||
|
@ -0,0 +1,65 @@ |
||||
<!-- Copyright © 2023 Entreprise SkamKraft --> |
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
<title>Skamkraft</title> |
||||
<link rel="icon" type="image/png" href="/img/Skamkraft.png" /> |
||||
|
||||
<link rel="stylesheet" href="/css/auth.css" /> |
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" /> |
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
||||
<link |
||||
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;500&display=swap" |
||||
rel="stylesheet" |
||||
/> |
||||
<script |
||||
src="https://code.jquery.com/jquery-3.7.1.min.js" |
||||
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" |
||||
crossorigin="anonymous" |
||||
></script> |
||||
<script type="module" src="scripts/main.js" defer></script> |
||||
</head> |
||||
<body> |
||||
<div class="logo"> |
||||
<img src="/img/Skamkraft.png" /> |
||||
<h4>Skamkraft</h4> |
||||
</div> |
||||
|
||||
<div class="form" aria-setsize="19"> |
||||
<div class="title"> |
||||
Bienvenue sur Skamkraft,<br /><span |
||||
>Entrez votre token pour continuer</span |
||||
> |
||||
</div> |
||||
<input id="input-token" class="input" placeholder="Token" type="text" /> |
||||
<button id="btn-login" class="button-confirm">Continuer →</button> |
||||
<div class="link-connection"> |
||||
<a class="animation-underline" href="register.html">Sign Up</a> |
||||
</div> |
||||
</div> |
||||
|
||||
<div id="box-alert" class="alert" hidden> |
||||
<div class="alert-inner"> |
||||
<svg |
||||
xmlns="http://www.w3.org/2000/svg" |
||||
viewBox="0 0 24 24" |
||||
class="icon" |
||||
> |
||||
<path |
||||
fill-rule="evenodd" |
||||
d="M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z" |
||||
clip-rule="evenodd" |
||||
></path> |
||||
</svg> |
||||
|
||||
<strong class="message"> Quelque chose s'est mal passé</strong> |
||||
</div> |
||||
|
||||
<p id="error-message" class="content"></p> |
||||
</div> |
||||
</body> |
||||
</html> |
@ -0,0 +1,68 @@ |
||||
<!-- Copyright © 2023 Entreprise SkamKraft --> |
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
<title>Skamkraft</title> |
||||
<link rel="icon" type="image/png" href="/img/Skamkraft.png" /> |
||||
|
||||
<link rel="stylesheet" href="/css/auth.css" /> |
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" /> |
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
||||
<link |
||||
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;500&display=swap" |
||||
rel="stylesheet" |
||||
/> |
||||
<script |
||||
src="https://code.jquery.com/jquery-3.7.1.min.js" |
||||
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" |
||||
crossorigin="anonymous" |
||||
></script> |
||||
<script type="module" src="scripts/main.js" defer></script> |
||||
</head> |
||||
<body> |
||||
<div class="logo"> |
||||
<img src="/img/Skamkraft.png" /> |
||||
<h4>Skamkraft</h4> |
||||
</div> |
||||
|
||||
<div class="form" aria-setsize="19"> |
||||
<div class="title"> |
||||
Bienvenue sur Skamkraft,<br /> |
||||
<span>Entrez votre symbol pour continuer</span> |
||||
</div> |
||||
<input id="input-symbol" class="input" placeholder="Symbol" type="text" /> |
||||
<select id="input-faction" class="input select"> |
||||
<option value="" disabled selected>Faction</option> |
||||
<optgroup id="group-faction" label="---------"></optgroup> |
||||
</select> |
||||
<button id="btn-register" class="button-confirm">Continuer →</button> |
||||
<div class="link-connection"> |
||||
<a class="animation-underline" href="login.html">Login</a> |
||||
</div> |
||||
</div> |
||||
|
||||
<div id="box-alert" class="alert" hidden> |
||||
<div class="alert-inner"> |
||||
<svg |
||||
xmlns="http://www.w3.org/2000/svg" |
||||
viewBox="0 0 24 24" |
||||
class="icon" |
||||
> |
||||
<path |
||||
fill-rule="evenodd" |
||||
d="M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z" |
||||
clip-rule="evenodd" |
||||
></path> |
||||
</svg> |
||||
|
||||
<strong class="message"> Quelque chose s'est mal passé</strong> |
||||
</div> |
||||
|
||||
<p id="error-message" class="content"></p> |
||||
</div> |
||||
</body> |
||||
</html> |
@ -0,0 +1,125 @@ |
||||
// Copyright © 2023 Entreprise SkamKraft
|
||||
|
||||
"use strict"; |
||||
|
||||
const spacetradersApiUrl = "https://api.spacetraders.io/v2/"; |
||||
|
||||
const REQUEST = async (url, method, headers, data) => { |
||||
try { |
||||
const response = await $.ajax(url, { |
||||
method, |
||||
headers, |
||||
data, |
||||
}); |
||||
|
||||
return response.data; |
||||
} catch (error) { |
||||
return error; |
||||
} |
||||
}; |
||||
|
||||
export default { |
||||
Agent: { |
||||
create: (symbol, faction) => { |
||||
const url = `${spacetradersApiUrl}register`; |
||||
const headers = { "Content-Type": "application/json" }; |
||||
const data = JSON.stringify({ symbol, faction }); |
||||
|
||||
return REQUEST(url, "POST", headers, data); |
||||
}, |
||||
|
||||
get: (token) => { |
||||
const url = `${spacetradersApiUrl}my/agent`; |
||||
const headers = { |
||||
Accept: "application/json", |
||||
Authorization: `Bearer ${token}`, |
||||
}; |
||||
|
||||
return REQUEST(url, "GET", headers); |
||||
}, |
||||
|
||||
getPublic: (symbol) => { |
||||
const url = `${spacetradersApiUrl}agents/${symbol}`; |
||||
const headers = { Accept: "application/json" }; |
||||
|
||||
return REQUEST(url, "GET", headers); |
||||
}, |
||||
|
||||
list: (limit, page) => { |
||||
const url = `${spacetradersApiUrl}agents`; |
||||
const headers = { Accept: "application/json" }; |
||||
const data = { limit, page }; |
||||
|
||||
return REQUEST(url, "GET", headers, data); |
||||
}, |
||||
}, |
||||
|
||||
Faction: { |
||||
list: (limit, page) => { |
||||
const url = `${spacetradersApiUrl}factions`; |
||||
const headers = { Accept: "application/json" }; |
||||
const data = { limit, page }; |
||||
|
||||
return REQUEST(url, "GET", headers, data); |
||||
}, |
||||
}, |
||||
|
||||
System: { |
||||
list: (limit, page) => { |
||||
const url = `${spacetradersApiUrl}systems/`; |
||||
const headers = { Accept: "application/json" }; |
||||
const data = { limit, page }; |
||||
|
||||
return REQUEST(url, "GET", headers, data); |
||||
}, |
||||
|
||||
get: (symbol) => { |
||||
const url = `${spacetradersApiUrl}systems/${symbol}`; |
||||
const headers = { Accept: "application/json" }; |
||||
|
||||
return REQUEST(url, "GET", headers); |
||||
}, |
||||
}, |
||||
|
||||
Waypoint: { |
||||
list: (limit, page, systemSymbol) => { |
||||
const url = `${spacetradersApiUrl}systems/${systemSymbol}/waypoints`; |
||||
const headers = { Accept: "application/json" }; |
||||
const data = { limit, page }; |
||||
|
||||
return REQUEST(url, "GET", headers, data); |
||||
}, |
||||
|
||||
get: (systemSymbol, waypointSymbol, token) => { |
||||
const url = `${spacetradersApiUrl}systems/${systemSymbol}/waypoints/${waypointSymbol}/market`; |
||||
const headers = { |
||||
Accept: "application/json", |
||||
Authorization: `Bearer ${token}`, |
||||
}; |
||||
|
||||
return REQUEST(url, "GET", headers); |
||||
}, |
||||
}, |
||||
|
||||
Contract: { |
||||
list: (token) => { |
||||
const url = `${spacetradersApiUrl}my/contracts/`; |
||||
const headers = { |
||||
Accept: "application/json", |
||||
Authorization: `Bearer ${token}`, |
||||
}; |
||||
|
||||
return REQUEST(url, "GET", headers); |
||||
}, |
||||
|
||||
get: async (contratId, token) => { |
||||
const url = `${spacetradersApiUrl}my/contracts/${contratId}`; |
||||
const headers = { |
||||
Accept: "application/json", |
||||
Authorization: `Bearer ${token}`, |
||||
}; |
||||
|
||||
return REQUEST(url, "GET", headers); |
||||
}, |
||||
}, |
||||
}; |
@ -0,0 +1,83 @@ |
||||
// Copyright © 2023 Entreprise SkamCraft
|
||||
|
||||
"use strict"; |
||||
|
||||
import SpaceTraders from "./api.js"; |
||||
|
||||
const $inputToken = $("#input-token"); |
||||
const $inputSymbol = $("#input-symbol"); |
||||
const $inputFaction = $("#input-faction"); |
||||
const $alert = document.querySelector("#box-alert"); |
||||
const $error = $("#error-message"); |
||||
|
||||
const showError = (message) => { |
||||
$alert.removeAttribute("hidden"); |
||||
$error.text(message); |
||||
}; |
||||
|
||||
const redirectToIndex = () => { |
||||
window.location.href = "/index.html"; |
||||
}; |
||||
|
||||
export default { |
||||
login: async () => { |
||||
const token = $inputToken.val(); |
||||
|
||||
if (!token) { |
||||
showError("Token manquant"); |
||||
return; |
||||
} |
||||
|
||||
try { |
||||
await SpaceTraders.Agent.get(token); |
||||
localStorage.setItem("token", token); |
||||
redirectToIndex(); |
||||
} catch { |
||||
showError("Token invalide"); |
||||
} |
||||
}, |
||||
|
||||
register: async () => { |
||||
const symbol = $inputSymbol.val(); |
||||
|
||||
if (!symbol) { |
||||
showError("Symbol manquant"); |
||||
return; |
||||
} |
||||
|
||||
const faction = $inputFaction.val(); |
||||
|
||||
console.log(faction); |
||||
|
||||
if (!faction) { |
||||
showError("Faction manquante"); |
||||
return; |
||||
} |
||||
|
||||
try { |
||||
const agent = await SpaceTraders.Agent.create(symbol, faction); |
||||
|
||||
if (agent.token !== undefined) { |
||||
localStorage.setItem("token", agent.token); |
||||
redirectToIndex(); |
||||
} else { |
||||
showError("Symbol ou faction invalide"); |
||||
} |
||||
} catch { |
||||
showError("Erreur lors de l'inscription"); |
||||
} |
||||
}, |
||||
|
||||
isLogin: async () => { |
||||
const token = localStorage.getItem("token"); |
||||
|
||||
if (!token) return false; |
||||
|
||||
try { |
||||
await SpaceTraders.Agent.get(token); |
||||
return true; |
||||
} catch { |
||||
return false; |
||||
} |
||||
}, |
||||
}; |
@ -0,0 +1,76 @@ |
||||
// Copyright © 2023 Entreprise SkamCraft
|
||||
|
||||
"use strict"; |
||||
|
||||
import AUTH from "./auth.js"; |
||||
import SpaceTraders from "./api.js"; |
||||
|
||||
$(document).ready(async function () { |
||||
//Auth
|
||||
if (document.URL.includes("login.html")) { |
||||
$("#btn-login").on("click", () => { |
||||
AUTH.login(); |
||||
}); |
||||
return; |
||||
} |
||||
|
||||
if (document.URL.includes("register.html")) { |
||||
const factions = await SpaceTraders.Faction.list(10, 1); |
||||
factions.forEach((faction) => { |
||||
const option = `<option>${faction.symbol}</option>`; |
||||
$("#group-faction").append(option); |
||||
}); |
||||
|
||||
$("#btn-register").on("click", () => { |
||||
AUTH.register(); |
||||
}); |
||||
return; |
||||
} |
||||
|
||||
if (!(await AUTH.isLogin())) window.location.href = "login.html"; |
||||
|
||||
agent(); |
||||
|
||||
//Buttons
|
||||
$("#btn-contract").on("click", () => { |
||||
contract(); |
||||
}); |
||||
$("#btn-faction").on("click", () => {}); |
||||
$("#btn-ship").on("click", () => {}); |
||||
$("#btn-system").on("click", () => {}); |
||||
$("#btn-logout").on("click", () => { |
||||
logout(); |
||||
}); |
||||
}); |
||||
|
||||
function loadPage(page) { |
||||
$("main").load(`templates/${page}.html`); |
||||
} |
||||
|
||||
function logout() { |
||||
localStorage.removeItem("token"); |
||||
window.location.href = "login.html"; |
||||
} |
||||
|
||||
async function agent() { |
||||
let token = localStorage.getItem("token"); |
||||
let agent = await SpaceTraders.Agent.get(token); |
||||
|
||||
$("#credits").text(agent.credits.toLocaleString() + " $"); |
||||
} |
||||
|
||||
async function contract() { |
||||
const token = localStorage.getItem("token"); |
||||
const contracts = await SpaceTraders.Contract.list(token); |
||||
|
||||
$("main").empty(); |
||||
|
||||
contracts.forEach((contract) => { |
||||
let card = `<div class="card">
|
||||
<div class="card-title"> |
||||
<h1>${contract.id}</h1> |
||||
</div> |
||||
</div>;`; |
||||
$("main").append(card); |
||||
}); |
||||
} |
@ -0,0 +1 @@ |
||||
<div class="contrats"></div> |
@ -1,77 +0,0 @@ |
||||
<!--Copyright © 2023 Entreprise SpaceTarders --> |
||||
|
||||
<!DOCTYPE html> |
||||
<html lang="fr" class="html-index"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
<link rel="preconnect" href="https://fonts.googleapis.com" /> |
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
||||
<link |
||||
href="https://fonts.googleapis.com/css2?family=Inter:wght@500&display=swap" |
||||
rel="stylesheet" |
||||
/> |
||||
<script |
||||
src="https://code.jquery.com/jquery-3.7.1.min.js" |
||||
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" |
||||
crossorigin="anonymous" |
||||
></script> |
||||
<script type="module" src="/js/contrat.js" defer></script> |
||||
<script type="module" src="/js/main.js" defer></script> |
||||
<link rel="stylesheet" href="/css/global.css"/> |
||||
<link rel="stylesheet" href="/css/contrats.css"/> |
||||
<link rel="icon" href="/img/logo.png" /> |
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> |
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script> |
||||
<title>SpaceTraders</title> |
||||
</head> |
||||
<body> |
||||
<header id="header"> |
||||
<div class="menu"> |
||||
<div class="title-section"> |
||||
<img src="/img/logo.png" alt="Logo AppleTech.svg" /> |
||||
<p>SpaceTraders</p> |
||||
</div> |
||||
<div class="page-change-button"> |
||||
<a id="btn-agent" href="http://127.0.0.1:5501/templates/agent.html">Mon agent</a> |
||||
<a id="btn-contract" href="http://127.0.0.1:5501/templates/contrats.html">Mes contrats</a> |
||||
<a id="btn-faction" href="http://blog.local/user/index">Ma faction</a> |
||||
<a id="btn-ship" href="http://blog.local/user/create">Mes vaiseaux</a> |
||||
<a id="btn-ship" href="http://blog.local/user/logout">Systeme</a> |
||||
</div> |
||||
</div> |
||||
<hr /> |
||||
</header> |
||||
|
||||
<main id="main"> |
||||
<h1 style="color:white" id="title">Mes contrats</h1> |
||||
<ul id="contrats"></ul> |
||||
|
||||
|
||||
<!-- Modal --> |
||||
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="modal-header"> |
||||
<h1 class="modal-title fs-5" id="exampleModalLabel">Modal title</h1> |
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> |
||||
</div> |
||||
<div class="modal-body"> |
||||
<div id="contratID"></div> |
||||
<p></p> |
||||
</div> |
||||
<div class="modal-footer"> |
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Close</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</main> |
||||
|
||||
<footer id="footer"> |
||||
<hr /> |
||||
<p>SpaceTrader © 2023</p> |
||||
</footer> |
||||
</body> |
||||
</html> |
@ -0,0 +1 @@ |
||||
<div id="faction" class="page-faction"></div> |
@ -1,55 +0,0 @@ |
||||
<!--Copyright © 2023 Entreprise SpaceTarders --> |
||||
<!DOCTYPE html> |
||||
<html lang="fr" class="html-index"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
<link rel="preconnect" href="https://fonts.googleapis.com" /> |
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
||||
<link |
||||
href="https://fonts.googleapis.com/css2?family=Inter:wght@500&display=swap" |
||||
rel="stylesheet" |
||||
/> |
||||
<script |
||||
src="https://code.jquery.com/jquery-3.7.1.min.js" |
||||
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" |
||||
crossorigin="anonymous" |
||||
></script> |
||||
<script type="module" src="/js/agent.js" defer></script> |
||||
<script type="module" src="/js/contrat.js" defer></script> |
||||
<script type="module" src="/js/faction.js" defer></script> |
||||
<script type="module" src="/js/main.js" defer></script> |
||||
<script type="module" src="/js/system.js" defer></script> |
||||
<link rel="stylesheet" href="/css/global.css" /> |
||||
<link rel="icon" href="/img/logo.png" /> |
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> |
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script> |
||||
<title>SpaceTraders</title> |
||||
</head> |
||||
<body> |
||||
<header id="header"> |
||||
<div class="menu"> |
||||
<div class="title-section"> |
||||
<img src="/img/logo.png" alt="Logo AppleTech.svg" /> |
||||
<p>SpaceTraders</p> |
||||
</div> |
||||
<div class="page-change-button"> |
||||
<a id="btn-agent" href="http://127.0.0.1:5501/templates/agent.html">Mon agent</a> |
||||
<a id="btn-contract" href="http://127.0.0.1:5501/templates/contrats.html">Mes contrats</a> |
||||
<a id="btn-faction" href="http://blog.local/user/index">Ma faction</a> |
||||
<a id="btn-ship" href="http://blog.local/user/create">Mes vaiseaux</a> |
||||
<a id="btn-ship" href="http://blog.local/user/logout">Systeme</a> |
||||
</div> |
||||
</div> |
||||
<hr /> |
||||
</header> |
||||
|
||||
<main><p>Page accueil</p></main> |
||||
|
||||
<footer id="footer"> |
||||
<hr /> |
||||
<p>SpaceTrader © 2023</p> |
||||
</footer> |
||||
</body> |
||||
</html> |
@ -1 +0,0 @@ |
||||
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiUlVCRU4iLCJ2ZXJzaW9uIjoidjIuMS40IiwicmVzZXRfZGF0ZSI6IjIwMjMtMTItMDIiLCJpYXQiOjE3MDIwMzg1ODgsInN1YiI6ImFnZW50LXRva2VuIn0.Brl1Mm9K7bG7kLfWGiU6M0WFvOXy-sV3T_p9-c-v97XMFvsmA85lpdKzeaAyVpOPMF4uM08HqxWb9mEGbag5whX0LPk39B_vjKeQVB9cjpjDsaElQz2HuWIUlB33eOQTyt_LKdQYnY7Jqh2HLopMbzK5sjeaGYzjoWILCuZXjqQkp5b0M_0EvXqCgDn1PpEb_MXSLkTpSQ1xa6hCaGjf6fE3KfTgRxEGpIunAeLRq1edaN4fU7TFU0SWSJZ1HO9CMfxA7eZt274sw4Wiea6LpwlPsGOMf1HFVl2sWdpbdIwdaFHyKpUAHWOGORKBB4B9G77wFLcOukwQMOQYOFL48Q" |
Loading…
Reference in New Issue