Assemblage avec le code de michael

ruben
Ruben Tome ago%!(EXTRA string=1 year)
parent 08aa653b93
commit 542d1dfd88
  1. 3
      .vscode/settings.json
  2. 178
      css/auth.css
  3. 8
      css/contrats.css
  4. 66
      css/global.css
  5. BIN
      fonts/m42.TTF
  6. BIN
      img/Skamkraft.png
  7. BIN
      img/contrat.jpg
  8. BIN
      img/logo.png
  9. 54
      index.html
  10. 0
      js/API/API.js
  11. 41
      js/Render/renderer.js
  12. 49
      js/agents.js
  13. 96
      js/contrat.js
  14. 49
      js/faction.js
  15. 28
      js/main.js
  16. 79
      js/system.js
  17. 65
      login.html
  18. 68
      register.html
  19. 125
      scripts/api.js
  20. 83
      scripts/auth.js
  21. 76
      scripts/main.js
  22. 1
      templates/contract.html
  23. 77
      templates/contrats.html
  24. 1
      templates/faction.html
  25. 55
      templates/index.html
  26. 1
      token

@ -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;
}

@ -1,3 +1,5 @@
/* Copyright © 2023 Entreprise SkamCraft */
* {
font-family: "Inter", sans-serif;
box-sizing: border-box;
@ -12,14 +14,6 @@ html {
flex-direction: column;
}
.modal-header,
.modal-title,
.modal-body,
#contratID{
color: black;
background-color: white;
}
/* Menu */
.menu {
display: flex;
@ -39,21 +33,19 @@ html {
max-height: 50px;
}
.page-change-a {
padding-right: 10px;
.page-change-button {
padding-left: 10px;
}
.page-change-button a {
button {
margin: 2px;
color: black;
background-color: white;
border: 2px solid white;
border-radius: 10px;
text-decoration: none;
}
.page-change-button a:hover {
button:hover {
border-color: #eab308;
background-color: #eab308;
transition: all 1s;
@ -63,6 +55,13 @@ main {
flex: 1;
}
#credits {
background-color: white;
border: 2px solid white;
border-radius: 10px;
color: black;
}
/* Footer */
footer {
color: white;
@ -73,42 +72,3 @@ footer p {
justify-content: center;
margin-bottom: 0px;
}
h5{
color: red;
}
/* Canvas system
#canvas-system {
border: 1px solid white;
}
/* Login modal */
/* #loginModal {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px black;
z-index: 1000;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
} */
/* #loginModal p {
margin-top: -10px;
}
#loginModal input {
margin-bottom: 10px;
} */
.card-title{
color: white;
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

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 &copy; 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 &copy; 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 &copy; 2023</p>
</footer>
</body>
</html>

@ -1 +0,0 @@
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiUlVCRU4iLCJ2ZXJzaW9uIjoidjIuMS40IiwicmVzZXRfZGF0ZSI6IjIwMjMtMTItMDIiLCJpYXQiOjE3MDIwMzg1ODgsInN1YiI6ImFnZW50LXRva2VuIn0.Brl1Mm9K7bG7kLfWGiU6M0WFvOXy-sV3T_p9-c-v97XMFvsmA85lpdKzeaAyVpOPMF4uM08HqxWb9mEGbag5whX0LPk39B_vjKeQVB9cjpjDsaElQz2HuWIUlB33eOQTyt_LKdQYnY7Jqh2HLopMbzK5sjeaGYzjoWILCuZXjqQkp5b0M_0EvXqCgDn1PpEb_MXSLkTpSQ1xa6hCaGjf6fE3KfTgRxEGpIunAeLRq1edaN4fU7TFU0SWSJZ1HO9CMfxA7eZt274sw4Wiea6LpwlPsGOMf1HFVl2sWdpbdIwdaFHyKpUAHWOGORKBB4B9G77wFLcOukwQMOQYOFL48Q"
Loading…
Cancel
Save