Compare commits

..

3 Commits

Author SHA1 Message Date
Override-6 da30c5879b drone script update
2 years ago
Override-6 162df156f3 drone script update
2 years ago
Override-6 4c1d72657a updating drone
2 years ago

27
.gitignore vendored

@ -1,25 +1,12 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
.DS_Store
# testing
/coverage
# Generated by package manager
node_modules/
# production
/build
# Generated by Cordova
/plugins/
/platforms/
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.idea

@ -0,0 +1,15 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="org.tbasket.app" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>TactiqueBasketApplication</name>
<description>Sample Apache Cordova App</description>
<author email="dev@cordova.apache.org" href="https://cordova.apache.org">
Apache Cordova Team
</author>
<content src="index.html" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<platform name="android">
<preference name="Scheme" value="http" />
</platform>
</widget>

@ -33,10 +33,7 @@ case "$TYPE" in
;;
"browser")
OUT_DIR="platforms/browser/www/"
if [ "$DRONE_BRANCH" = "production" ]; then
SERV_DIR="public_html/basket"
else SERV_DIR="/server/apache/TBasket/"
fi
SERV_DIR="/server/apache/TBasket/"
;;
"electron")
OUT_DIR="platforms/electron/build"

29401
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -1,53 +1,28 @@
{
"name": "tbasket",
"version": "0.1.0",
"private": true,
"main": "public/electron.js",
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.3.0",
"@fortawesome/free-solid-svg-icons": "^6.3.0",
"@fortawesome/react-fontawesome": "^0.2.0",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"ionicons": "^6.1.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-native-ionicons": "^4.6.5",
"react-router-dom": "^6.8.1",
"react-scripts": "^5.0.1",
"web-vitals": "^2.1.4"
},
"name": "org.tbasket.app",
"displayName": "TactiqueBasketApplication",
"version": "1.0.0",
"description": "A sample Apache Cordova application that responds to the deviceready event.",
"main": "index.js",
"scripts": {
"start": "react-scripts start --openssl-legacy-provider",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"dev": "concurrently -k \"BROWSER=none npm start\" \"npm:electron\"",
"electron": "wait-on tcp:3000 && electron ."
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
"test": "echo \"Error: no test specified\" && exit 1"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
"keywords": [
"ecosystem:cordova"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"author": "Apache Cordova Team",
"license": "Apache-2.0",
"devDependencies": {
"concurrently": "^7.6.0",
"electron": "^23.0.0",
"electron-is-dev": "^2.0.0",
"wait-on": "^7.0.1"
"cordova-android": "^11.0.0",
"cordova-browser": "^6.0.0",
"cordova-electron": "^3.1.0"
},
"cordova": {
"platforms": [
"electron",
"browser",
"android"
],
"plugins": {}
}
}

@ -1,47 +0,0 @@
const path = require('path');
const { app, BrowserWindow } = require('electron');
const isDev = require('electron-is-dev');
function createWindow() {
// Create the browser window.
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true,
},
});
// and load the index.html of the app.
// win.loadFile("index.html");
win.loadURL(
isDev
? 'http://localhost:3000'
: `file://${path.join(__dirname, '../build/index.html')}`
);
// Open the DevTools.
if (isDev) {
win.webContents.openDevTools({ mode: 'detach' });
}
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(createWindow);
// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

@ -1,43 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body style="display: block">
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root" style="width: 100%; height: 100%"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Connection</title>
<link rel="stylesheet" href="../../src/css/login.css">
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
<script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>
</head>
<body>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

@ -1,93 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Accueil</title>
<link rel="stylesheet" type="text/css" href="../src/css/main.css">
</head>
<body>
<header>
<div class="header-left">
<img src="img/logo2.png" alt="logo">
</div>
<div class="header-center">
<h2>Hello Prénom Nom !</h2>
</div>
<div class="header-right">
<!-- <button>
<img src="deconnection.png" alt="Déconnection">
<span>Déconnection</span>
</button>-->
<button class="submit-button">Déconnexion</button>
</div>
</header>
<main>
<div id="teams-section">
<div id="team-list-h">
<h2>Mes équipes</h2>
</div>
<div id="teams-list">
<!-- afficher la liste des équipes -->
<div class="team-item">
<img src="../src/img/logo2.png">
<p class="team-name">Equipe 1</p>
</div>
<div class="team-item">
<img src="../src/img/logo2.png">
<p class="team-name">Equipe 2</p>
</div>
<div class="team-item">
<img src="../src/img/logo2.png">
<p class="team-name">Equipe 3</p>
</div>
<div class="team-item">
<img src="../src/img/logo2.png">
<p class="team-name">Equipe 3</p>
</div>
<div class="team-item">
<img src="../src/img/logo2.png">
<p class="team-name">Equipe 3</p>
</div>
<div class="team-item">
<img src="../src/img/logo2.png">
<p class="team-name">Equipe 3</p>
</div>
</div>
</div>
<div id="schema-section">
<div id="schema-list-h">
<h2>Mes Schémas</h2>
</div>
<div id="schema-list">
<!-- afficher la liste des équipes -->
<div class="schema-item">
<img src="img/schema.png">
<p class="schema-name">Schémas 1</p>
</div>
<div class="schema-item">
<img src="img/schema.png">
<p class="schema-name">Schémas 2</p>
</div>
<div class="schema-item">
<img src="img/schema.png">
<p class="schema-name">Schémas 3</p>
</div>
<div class="schema-item">
<img src="img/schema.png">
<p class="schema-name">Schémas 3</p>
</div>
<div class="schema-item">
<img src="img/schema.png">
<p class="schema-name">Schémas 3</p>
</div>
<div class="schema-item">
<img src="img/schema.png">
<p class="schema-name">Schémas 3</p>
</div>
</div>
</div>
</main>
</body>
</html>

@ -1,25 +0,0 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Connection</title>
<link rel="stylesheet" href="../../src/css/login.css">
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
<script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>
</head>
<body>
</body>
</html>

@ -1,3 +0,0 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

@ -1,38 +0,0 @@
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 5s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

@ -1,22 +0,0 @@
import Register from './components/register/Register';
import Login from "./components/login/Login";
import {MainPage} from "./components/main/Main";
import {BrowserRouter, Routes, Route} from "react-router-dom";
function App() {
return (
<div className="App">
<BrowserRouter>
<Routes>
<Route path="/" element={<MainPage />} />
<Route path="/sign-up" element={<Register />} />
<Route path="/sign-in" element={<Login />} />
<Route path="/main" element={<MainPage/>} />
<Route path="/main/:id" element={<MainPage/>} />
<Route path="/*" element={<MainPage />} />
</Routes>
</BrowserRouter>
</div>
);
}
export default App;

@ -1,8 +0,0 @@
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});

@ -1,52 +0,0 @@
import React from 'react'
import '../../css/login.css'
import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
export default function Login() {
return (
<>
<div className={"body"}>
<div className="container">
<form action="/login" method="POST">
<h3>Se connecter :</h3>
<div className="Input">
<span>Identifiant (eMail)</span>
<div className="box">
<div className="icon">
<FontAwesomeIcon icon="envelope" />
</div>
<input type="input" className="form__field" placeholder="email" name="email" id='email'
required/>
</div>
</div>
<div className="Input">
<span>Mot de passe</span>
<div className="box">
<div className="icon">
<FontAwesomeIcon icon="lock" />
</div>
<input type="password" className="form__field" placeholder="mot de passe" name="password"
id="password" required/>
</div>
</div>
<label>
<input type="checkbox" value="se souvenir de moi" id={"remember me"} name={"remember me"}/>
se souvenir de moi
</label>
<div className="Input">
<div className="box">
<input type="submit" value="Se connecter"/>
</div>
</div>
<div className={"Href"}>
<a href="src/components/login#">J'ai oublier mon mot de passe</a>
<a href="/sign-up">Je n'ai pas encore de compte</a>
</div>
</form>
</div>
</div>
</>
)
}

@ -1,76 +0,0 @@
import React from 'react'
import '../../css/main.css'
export function MainPage() {
return (<>
<header>
<div className="header-left">
<img src={require("../../img/logo2.png")}/>
</div>
<div className="header-center">
<h2>Bienvenue, Prénom Nom</h2>
</div>
<div className="header-right">
<button className="submit-button">Déconnexion</button>
</div>
</header>
<div id="teams-section">
<div id="team-list-h">
<h2>Mes équipes</h2>
</div>
<div id="teams-list">
{/*afficher la liste des équipes*/}
<div className="team-item">
<img src={require("../../img/logo2.png")}/>
<p className="team-name">Equipe 1</p>
</div>
<div className="team-item">
<img src={require("../../img/logo2.png")}/>
<p className="team-name">Equipe 2</p>
</div>
<div className="team-item">
<img src={require("../../img/logo2.png")}/>
<p className="team-name">Equipe 3</p>
</div>
<div className="team-item">
<img src={require("../../img/logo2.png")}/>
<p className="team-name">Equipe 3</p>
</div>
<div className="team-item">
<img src={require("../../img/logo2.png")}/>
<p className="team-name">Equipe 3</p>
</div>
<div className="team-item">
<img src={require("../../img/logo2.png")}/>
<p className="team-name">Equipe 3</p>
</div>
</div>
</div>
<div id="schemas-section">
<div id="schemas-list-h">
<h2>Mes Schémas</h2>
</div>
<div id="schemas-list">
{/*afficher la liste des Schémas*/}
<div className="schemas-item">
<img src={require("../../img/Visualiseur.png")}/>
<p className="schemas-name">Schéma 1</p>
</div>
<div className="schemas-item">
<img src={require("../../img/Visualiseur.png")}/>
<p className="schemas-name">Schéma 2</p>
</div>
<div className="schemas-item">
<img src={require("../../img/Visualiseur.png")}/>
<p className="schemas-name">Schéma 3</p>
</div>
<div className="schemas-item">
<img src={require("../../img/Visualiseur.png")}/>
<p className="schemas-name">Schéma 3</p>
</div>
</div>
</div>
</>
)
}

@ -1,81 +0,0 @@
import React from 'react'
import '../../css/login.css'
import { library } from '@fortawesome/fontawesome-svg-core';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faLock, faEnvelope, faUser } from '@fortawesome/free-solid-svg-icons';
library.add(faLock);
library.add(faEnvelope);
library.add(faUser);
export default function Register() {
return (
<>
<div className={"body"}>
<div className="container">
<form action="/signup" method="POST">
<h3>S'inscrire :</h3>
<div className="Input">
<span>Adresse e-mail</span>
<div className="box">
<div className="icon">
<FontAwesomeIcon icon="envelope" />
</div>
<input type="input" className="form__field" placeholder="email" name="email" id='email'
required/>
</div>
</div>
<div className="Input">
<span>Nom</span>
<div className="box">
<div className="icon">
<FontAwesomeIcon icon="user" />
</div>
<input type="input" placeholder="nom" name="name" id='name' required/>
</div>
</div>
<div className="Input">
<span>Prénom</span>
<div className="box">
<div className="icon">
<FontAwesomeIcon icon="user" />
</div>
<input type="input" placeholder="Prénom" name="forename" id='forename' required/>
</div>
</div>
<div className="Input">
<span>Mot de passe</span>
<div className="box">
<div className="icon">
<FontAwesomeIcon icon="lock" />
</div>
<input type="password" className="form__field" placeholder="mot de passe" name="password"
id="password"
required/>
</div>
</div>
<div className="Input">
<span>Confirmer le mot de passe</span>
<div className="box">
<div className="icon">
<FontAwesomeIcon icon="lock" />
</div>
<input type="password" className="form__field" placeholder="mot de passe" name="cpassword"
id="cpassword" required/>
</div>
</div>
<div className="Input">
<div className="box">
<input type="submit" value="S'inscrire"/>
</div>
</div>
<a href="/sign-in">J'ai déjà un compte</a>
</form>
</div>
</div>
</>
)
}

@ -1,126 +0,0 @@
@import url('https://fonts.googleapis.com/css2?family=Alegreya+Sans:ital,wght@0,100;0,300;0,400;0,500;0,700;0,800;0,900;1,100;1,300;1,400;1,500;1,700;1,800;1,900&display=swap');
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Alegreya',sans-serif;
}
a{
text-decoration: none;
}
.body{
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background-image: url("../img/background-login.jpg");
-webkit-backdrop-filter: blur(15px); /* assure la compatibilité avec safari */
backdrop-filter: blur(35px);
background-color: rgba(182, 182, 182, 0.2);
}
.container{
position: relative;
width: 400px;
min-height: 550px;
justify-content: center;
align-items: center;
background: #F2561D;
box-shadow: 25px 25px 75px rgba(0,0,0,0.25), 10px 10px 70px rgba(0,0,0,0.5);
border-radius: 30px;
padding: 50px;
}
form{
position: relative;
width: 100%;
}
.container h3{
color: #0D0D0D;
font-weight: 600;
font-size: 2em;
width: 100%;
text-align: center;
margin-bottom: 30px;
letter-spacing: 1px;
}
container a:link{
color: #0D0D0D;
}
container a:visited{
color: #0D0D0D;
}
container a:hover{
color: #0D0D0D;
}
.Input{
position: relative;
width: 100%;
margin-bottom: 20px;
}
.Input span{
display: inline-block;
color: #0D0D0D;
margin-bottom: 10px;
letter-spacing: 1px;
font-size: 1.25em;
border-left: 4px solid #FF8444;
padding-left: 4px;
line-height: 1em;
}
.Input .box{
display: flex;
}
.Input .box .icon{
position: relative;
min-width: 40px;
height: 40px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 50%;
margin-right: 10px;
color: #0D0D0D;
font-size: 1.15em;
box-shadow: 5px 5px 7px rgba(0,0,0,0.25);
}
.Input .box input{
position: relative;
width: 100%;
border: none;
outline: none;
padding: 10px 20px;
border-radius: 30px;
font-size: 0.85em;
box-shadow: 5px 5px 7px rgba(0,0,0,0.25);
}
.Input .box input[type="submit"]{
background-color: #0D0D0D;
box-shadow: 5px 5px 7px rgba(0,0,0,0.25);
color: #FF8444;
cursor:pointer;
letter-spacing: 2px;
font-weight: 600;
margin-top: 10px;
}
label{
color: #0D0D0D;
letter-spacing: 1px;
font-size: 0.95em;
display: flex;
align-items: center;
}
label input{
margin-right: 5px;
}
a:nth-of-type(1) {
display: block;
}

@ -1,159 +0,0 @@
header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px 0 20px;
background-color: #FF8444;
height: 160px;
}
body{
margin: 0;
padding: 0;
font-family: sans-serif;
background: #34495e;
}
.header-left {
display: flex;
align-items: center;
}
.header-left img {
width: 120px;
height: 120px;
}
.header-center h2 {
font-size: 30px;
margin: 0;
}
.submit-button {
background-color: #34495e;
color: white;
padding: 18px 30px;
border: none;
border-radius: 6px;
cursor: pointer;
float: right;
font-size: 24px;
box-shadow: 4px 4px #1B1B1B;
}
#teams-section {
display: flex;
flex-direction: column;
padding: 60px;
background-color: #f2f2f2;
border-radius: 10px 10px 10px 10px;
box-shadow: 5px 5px #1B1B1B;
margin: 10px;
}
#teams-section h2 {
text-align: center;
font-size: 24px;
margin-top: 0;
margin-bottom: 5px;
}
#teams-list {
display: flex;
flex-direction: row;
flex-wrap: wrap;
overflow: hidden;
justify-content: center;
}
.team-item {
padding: 15px 15px 5px;
display: flex;
flex-direction: column;
align-items: center;
height: 100%;
min-width: 150px;
margin: 10px;
background-color: #ccc;
border-radius: 15px;
overflow: hidden;
box-shadow: 3px 3px #585858;
}
.team-item .team-name {
margin-bottom: 3px;
}
.team-name {
font-size: 18px;
margin-top: 10px;
}
.team-item img {
border-radius: 15px;
width: 100%;
height: auto;
max-width: 150px;
max-height: 150px;
box-shadow: 2px 2px #A7A7A7;
}
#schemas-section {
display: flex;
flex-direction: column;
padding: 60px;
background-color: #f2f2f2;
border-radius: 10px 10px 10px 10px;
box-shadow: 5px 5px #1B1B1B;
margin: 10px;
}
#schemas-section h2 {
text-align: center;
font-size: 24px;
margin-top: 0;
margin-bottom: 5px;
}
#schemas-list {
display: flex;
flex-direction: row;
flex-wrap: wrap;
overflow: hidden;
justify-content: center;
}
.schemas-item {
padding: 15px 15px 5px;
display: flex;
flex-direction: column;
align-items: center;
height: 100%;
min-width: 150px;
margin: 10px;
background-color: #ccc;
border-radius: 15px;
overflow: hidden;
box-shadow: 3px 3px #585858;
}
.schemas-item .schemas-name {
margin-bottom: 3px;
}
.schemas-name {
font-size: 18px;
margin-top: 10px;
}
.schemas-item img {
border-radius: 15px;
width: 100%;
height: auto;
max-width: 150px;
max-height: 150px;
box-shadow: 2px 2px #A7A7A7;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 568 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

@ -1,13 +0,0 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}

@ -1,17 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

@ -1,13 +0,0 @@
const reportWebVitals = onPerfEntry => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);
getLCP(onPerfEntry);
getTTFB(onPerfEntry);
});
}
};
export default reportWebVitals;

@ -1,5 +0,0 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="../js/counter.js" type="module"></script>
<title>Counter</title>
</head>
<body>
<div id="page">
<label>Compteur : </label>
<label id="counter">{0}</label>
<button id="increment" onclick="makeIncrement()">Incrémenter</button>
<button id="reload" onclick="window.location.reload()">recharger la page</button>
</div>
<script src="/cordova.js"></script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="index.js"></script>
<title>hello</title>
</head>
<body onload="">
<div id="page">
<button onclick="window.location.href = 'counter/index.html'">aller au compteur</button>
</div>
<script src="/cordova.js"></script>
</body>
</html>

@ -0,0 +1 @@
export const ADDRESS = "92.132.64.175:950"

@ -0,0 +1,27 @@
import {ADDRESS} from "./constants.js";
let counter = 0;
window.onload = () => initCounter();
window.makeIncrement = () => makeIncrement();
function updateText() {
document.getElementById("counter").innerHTML = counter
}
async function makeIncrement() {
fetch(`http://${ADDRESS}/counter`, {method: 'POST'})
.then(response => { //TODO verify if it's not an error
counter++
updateText()
})
}
function initCounter() {
fetch(`http://${ADDRESS}/counter`, {method: 'GET'})
.then(response => response.json())
.then(json => {
counter = json.value
updateText()
})
}

@ -0,0 +1,29 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// Wait for the deviceready event before using any of Cordova's device APIs.
// See https://cordova.apache.org/docs/en/latest/cordova/events/events.html#deviceready
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
// Cordova is now initialized. Have fun!
console.log('Running cordova-' + cordova.platformId + '@' + cordova.version);
document.getElementById('deviceready').classList.add('ready');
}
Loading…
Cancel
Save