1
0

16 Commits

Author SHA1 Message Date
mberard
a5a934a108 feat: add htacces to redirect php file 2021-11-24 22:57:51 +01:00
mathieu_berard
876a925f79 Merge branch 'fix-bug-picto-lang-apropos' of DTux/avion-poeme into master 2021-11-24 21:51:56 +00:00
mberard
5b06af2026 fix: îcto bulgare donation elt apropos 2021-11-24 22:48:28 +01:00
mberard
d8070b6260 fix: attachment and gitignore 2021-11-11 15:18:01 +01:00
mberard
ca9d3b2d98 fix: update repo directy master branch 2021-11-11 14:37:27 +01:00
Daniel Tartavel
92c26dab45 replacing end of line 2021-11-03 10:33:04 +01:00
DTux
4da327413c Merge branch 'anim-plane-reverse' of DTux/avion-poeme into master 2021-11-03 08:22:58 +00:00
DTux
8d8ea7adf3 Merge branch 'add-attachment' of DTux/avion-poeme into master 2021-11-03 08:22:07 +00:00
mberard
ea34094d41 Reverse anim plane 2021-11-01 20:12:31 +01:00
mberard
de54555d77 add-attachment-in-form 2021-11-01 13:48:35 +01:00
Daniel Tartavel
8f7e94e482 comparison of lat and long made on 3 decimals only 2021-10-30 12:43:54 +02:00
Daniel Tartavel
952121b1d2 correction of some regressions 2021-10-30 12:37:27 +02:00
Daniel Tartavel
5cb0055bee corrected bug same coordinates 2021-10-30 12:15:02 +02:00
mathieu_berard
af9b97596f Merge branch 'donation-button' of DTux/avion-poeme into master 2021-10-26 21:55:30 +00:00
mberard
f911853410 feat: add donation block in about page 2021-10-26 23:53:51 +02:00
mathieu_berard
79c241eb27 Merge branch 'add-two-pages' of DTux/avion-poeme into master 2021-10-25 21:55:06 +00:00
26 changed files with 653 additions and 441 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
.DS_Store
.history/

View File

@@ -0,0 +1,9 @@
RewriteEngine On
# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]

View File

@@ -1,37 +1,31 @@
<?php <?php
require_once 'session_init.php'; require_once 'session_init.php';
require_once 'config.inc.php'; require_once 'config.inc.php';
require_once 'db.class.php'; require_once 'db.class.php';
require_once 'log.php'; require_once 'log.php';
require_once 'fonctions.inc.php'; require_once 'fonctions.inc.php';
$table=array("message", "expeMail", "expeKnown", "expeLang", "destLang", "startLat", "startLon", "startName", "startTime", "startTZ", "destMail", "destLat", "destLon", "destName", "public", "color", "deliveryTime", "deliveryTZ", "deliveryTimeServer", "deliveryMethod"); $table = array("message", "expeMail", "expeKnown", "expeLang", "destLang", "startLat", "startLon", "startName", "startTime", "startTZ", "destMail", "destLat", "destLon", "destName", "public", "color", "deliveryTime", "deliveryTZ", "deliveryTimeServer", "deliveryMethod");
$db = new db(); $db = new db();
//$db->open(); //$db->open();
foreach ($table as $var) foreach ($table as $var) {
{ if (getpost($var) != null) {
if ( getpost( $var ) != null ) $r = getpost($var);
{ /*if ( $r == "true")
$r = getpost( $var );
/*if ( $r == "true")
{ {
$r = 1; $r = 1;
}elseif( $r ="false")*/ }elseif( $r ="false")*/
$db->$var = trim($r, ' \"'); $db->$var = trim($r, ' \"');
}else } else {
{ $erreur[] = $var;
$erreur[] = $var;
}
} }
if (!empty ($erreur)) }
{ if (!empty($erreur)) {
echo json_encode($erreur); echo json_encode($erreur);
log_error("erreur lors de l'acquisition des données:" . EOLH . print_r($erreur, true)); log_error("erreur lors de l'acquisition des données:" . EOLH . print_r($erreur, true));
}else } else {
{ $db->newPlane();
$db->newPlane(); }
} $db->close();
$db->close();
?>

View File

@@ -16,7 +16,9 @@
peripeties(); peripeties();
print "Envoi des arrivées" . EOLH; print "Envoi des arrivées" . EOLH;
arrivee(); arrivee();
anonymisation();
################################### FONCTIONS #################################""
function peripetieDatee() function peripetieDatee()
{ {
global $db; global $db;
@@ -130,7 +132,7 @@
$query = "SELECT * FROM avionpoeme WHERE atteri = 0 AND TIMEDIFF(CONCAT_WS(' ',CURDATE(),CURTIME()),deliveryTimeServer) > '00:00'"; $query = "SELECT * FROM avionpoeme WHERE atteri = 0 AND TIMEDIFF(CONCAT_WS(' ',CURDATE(),CURTIME()),deliveryTimeServer) > '00:00'";
$db->query($query); $db->query($query);
$avionArrive = $db->result->fetch_all(MYSQLI_ASSOC); $avionArrive = $db->result->fetch_all(MYSQLI_ASSOC);
var_dump($avionArrive); //var_dump($avionArrive);
foreach ($avionArrive as $avion) foreach ($avionArrive as $avion)
{ {
print "avion poème n° " . $avion['idAvion'] . "a atterri" . EOLH; print "avion poème n° " . $avion['idAvion'] . "a atterri" . EOLH;
@@ -196,5 +198,18 @@
print json_last_error_msg() .EOLH; print json_last_error_msg() .EOLH;
} }
} }
function anonymisation()
{
global $db;
$query = "SELECT idAvion FROM avionpoeme WHERE atteri = 1 AND public = 0 AND DATEDIFF(CONCAT_WS(' ',CURDATE(),CURTIME()),deliveryTimeServer) > '7'";
$db->query($query);
$avionArrive = $db->result->fetch_all(MYSQLI_ASSOC);
//print_r($avionArrive);
foreach($avionArrive as $avion)
{
$query = "UPDATE avionpoeme SET message='', expeMail='', destMail='' WHERE idAvion='" . $avion['idAvion'] ."'";
$db->query($query);
}
}
$db->close(); $db->close();
?>

View File

@@ -67,15 +67,22 @@ function verifPeripetieAvion()
$db->query($query); $db->query($query);
$avions = $db->result->fetch_all(MYSQLI_ASSOC); $avions = $db->result->fetch_all(MYSQLI_ASSOC);
$avionsId = array_column($avions, 'expeMail', 'idAvion'); $avionsId = array_column($avions, 'expeMail', 'idAvion');
print_r($avionsId); //print_r($avionsId);
$flag = false;
foreach($peripeties as $peripetie) foreach($peripeties as $peripetie)
{ {
print "Péripétie " . $peripetie["idAP"] . EOLH; //print "Péripétie " . $peripetie["idAP"] . EOLH;
$idAvion = $peripetie["idAvion"]; $idAvion = $peripetie["idAvion"];
if ( empty($avionsId[$idAvion]) ) if ( empty($avionsId[$idAvion]) )
{ {
print "Péripétie " . $peripetie["idAP"] . " n'a pas d'avion poème idAvion=>" . $idAvion . EOLH; print "Péripétie " . $peripetie["idAP"] . " n'a pas d'avion poème idAvion=>" . $idAvion . EOLH;
$flag = true;
} }
}
if ( ! $flag )
{
print "Aucune erreur détectée";
} }
$db->close(); $db->close();
} }

View File

@@ -30,6 +30,7 @@
</head> </head>
<body> <body>
<a href="stats.php">Statistiques</a><br>
<a href="lang.php">Générer les fichiers de langue</a><br> <a href="lang.php">Générer les fichiers de langue</a><br>
<a href="logs.php">Lire les logs</a><br> <a href="logs.php">Lire les logs</a><br>
<a href="gestionDB.php">Vérifier la base de données</a><br> <a href="gestionDB.php">Vérifier la base de données</a><br>

View File

@@ -14,6 +14,7 @@
$result = $db->result->fetch_assoc(); $result = $db->result->fetch_assoc();
return $result['Auto_increment']-1; return $result['Auto_increment']-1;
} }
function total() //nombre d'avions poèmes présents dans la base function total() //nombre d'avions poèmes présents dans la base
{ {
global $db; global $db;
@@ -27,26 +28,42 @@
function totalenvol() //nombre d'avions poèmes en vol function totalenvol() //nombre d'avions poèmes en vol
{ {
global $db; global $db;
$query = "SELECT COUNT(*) as n FROM avionpoeme WHERE public!=2"; $query = "SELECT COUNT(*) as n FROM avionpoeme WHERE atteri!=1";
$db->query($query); $db->query($query);
$result = $db->result->fetch_assoc(); $result = $db->result->fetch_assoc();
return $result["n"]; return $result["n"];
} }
function alea() function alea($nAvionEnvoye)
{ {
global $db; global $db;
$query = "SELECT COUNT(*) as nAvion FROM avionpoeme WHERE "; $query = "SELECT DISTINCT deliveryMethod FROM avionpoeme";
$db->query($query); $db->query($query);
$result = $db->result->fetch_assoc(); $result = $db->result->fetch_all(MYSQLI_ASSOC);
return $result["n"]; //var_dump($result);
foreach ( $result as $method )
{
$query = "SELECT COUNT(*) as nAvion FROM avionpoeme WHERE deliveryMethod='" . $method["deliveryMethod"] . "'";
$db->query($query);
$result = $db->result->fetch_assoc();
echo "Méthode => " . $method["deliveryMethod"] . " nombre d'avion poèmes => " . $result["nAvion"] . " => " . round($result["nAvion"]/$nAvionEnvoye*100,2) . "%" . EOLH;
}
} }
function anonymous() //nombre d'avions poèmes envoyés anonymement function anonymous() //nombre d'avions poèmes envoyés anonymement
{ {
global $db; global $db;
$query = "SELECT COUNT(*) as n FROM avionpoeme WHERE expemail=''"; $query = "SELECT COUNT(*) as n FROM avionpoeme WHERE expeknown='0'";
$db->query($query);
$result = $db->result->fetch_assoc();
return $result["n"];
}
function deleted()
{
global $db;
$query = "SELECT COUNT(*) as n FROM avionpoeme WHERE public='2'";
$db->query($query); $db->query($query);
$result = $db->result->fetch_assoc(); $result = $db->result->fetch_assoc();
return $result["n"]; return $result["n"];
@@ -63,11 +80,14 @@
echo "Nombre total d'avions-poème : " . $nAvionEnvoye . EOLH; echo "Nombre total d'avions-poème : " . $nAvionEnvoye . EOLH;
$total = total(); $total = total();
$avionSupp = $nAvionEnvoye-$total; $avionSupp = $nAvionEnvoye-$total;
echo "Nombre d'avion supprimés : " . $avionSupp . " => " . round($avionSupp/$nAvionEnvoye*100,3) . "%" . EOLH; echo "Nombre d'avion supprimés : " . $avionSupp . " => " . round($avionSupp/$nAvionEnvoye*100,2) . "%" . EOLH;
$nAvionenvol = totalenvol(); $nAvionenvol = totalenvol();
echo "Nombre d'avions-poème en vol : " . $nAvionenvol . " => " . round($nAvionenvol/$nAvionEnvoye*100) . "%" . EOLH; echo "Nombre d'avions-poème en vol : " . $nAvionenvol . " => " . round($nAvionenvol/$nAvionEnvoye*100,2) . "%" . EOLH;
$anonymous = anonymous(); $anonymous = anonymous();
echo "Nombre d'envois anonymes : " . $anonymous . " => " . round($anonymous/$nAvionEnvoye*100) . "%" . EOLH; echo "Nombre d'envois anonymes : " . $anonymous . " => " . round($anonymous/$nAvionEnvoye*100,2) . "%" . EOLH;
$deleted = deleted();
echo "Nombre d'avions anonymisés(effacés) : " . $deleted . " => " . round($deleted/$nAvionEnvoye*100,2) . "%" . EOLH;
alea($nAvionEnvoye);
} }

View File

@@ -1,31 +1,29 @@
<?php <?php
define( 'EOL', "\n" ); define('EOL', "\n");
define( 'EOLH', "<br>\n" ); define('EOLH', "<br>\n");
define( 'LF', "\r\n" ); define('LF', "\r\n");
define( 'TAB', "\t" ); define('TAB', "\t");
//constantes des niveaux de log //constantes des niveaux de log
define( "INFO", 1 ); define("INFO", 1);
define( "ALERT", 2 ); define("ALERT", 2);
define( "ERROR", 3 ); define("ERROR", 3);
define( "RESULTS_BY_PAGE", 20 ); //Nombre de ligne d'anthologie par page define("RESULTS_BY_PAGE", 20); //Nombre de ligne d'anthologie par page
define( "DATE_MYSQL", "Y-m-d H:i:s" ); define("DATE_MYSQL", "Y-m-d H:i:s");
//variables diverses //variables diverses
$admin = "Daniel"; $admin = "Daniel";
$webmaster = "dtux@free.fr"; $webmaster = "dtux@free.fr";
$site = "Avion Poème"; $site = "Avion Poème";
$dossier = "/www"; $dossier = "/www";
$basedir = dirname( $_SERVER['DOCUMENT_ROOT'] ) . $dossier; $basedir = dirname($_SERVER['DOCUMENT_ROOT']) . $dossier;
$base_url = "http://avion-poe.me"; $base_url = "https://avion-poe.me";
$base_path = "/flex/storage/avion-poe.me/site/www/"; $base_path = "/flex/storage/avion-poe.me/site/www/";
$url_admin = $base_url . "/gestion"; $url_admin = $base_url . "/gestion";
$accueil = $base_url . "/index.html"; $accueil = $base_url . "/index.html";
if (empty( $_SERVER["PHP_AUTH_USER"])) if (empty($_SERVER["PHP_AUTH_USER"])) {
{
$_SERVER["PHP_AUTH_USER"] = 'script'; $_SERVER["PHP_AUTH_USER"] = 'script';
} }
?>

View File

@@ -98,6 +98,11 @@ class db
function newPlane() //return 0 on error function newPlane() //return 0 on error
{ {
global $base_url; global $base_url;
if (round($this->startLat,3,PHP_ROUND_HALF_DOWN)==round($this->destLat,3,PHP_ROUND_HALF_DOWN) && round($this->startLon,3,PHP_ROUND_HALF_DOWN)==round($this->destLon,3,PHP_ROUND_HALF_DOWN))
{
$this->destLon+=0.001;
$this->destLat+=0.001;
}
$query = "INSERT INTO avionpoeme VALUES ('0','"; $query = "INSERT INTO avionpoeme VALUES ('0','";
$query .= $this->protect($this->message) . "', '"; $query .= $this->protect($this->message) . "', '";
$query .= $this->protect($this->expeMail) . "', "; $query .= $this->protect($this->expeMail) . "', ";
@@ -165,7 +170,7 @@ class db
function getCurrentPlanes() function getCurrentPlanes()
{ {
$query = "SELECT idAvion as uid, UNIX_TIMESTAMP(deliveryTime) as deliveryTime, deliveryTZ, destLat, destLon, destName, UNIX_TIMESTAMP(startTime) as startTime, startTZ, startLon, startLat, startName, color FROM avionpoeme WHERE deliveryTimeServer>NOW()"; $query = "SELECT idAvion as uid, UNIX_TIMESTAMP(deliveryTime) as deliveryTime, deliveryTZ, destLat, destLon, destName, message, UNIX_TIMESTAMP(startTime) as startTime, startTZ, startLon, startLat, startName, color, message FROM avionpoeme WHERE deliveryTimeServer>NOW()";
$this->query($query); $this->query($query);
$planes = $this->result->fetch_all(MYSQLI_ASSOC); $planes = $this->result->fetch_all(MYSQLI_ASSOC);
print json_encode($planes); print json_encode($planes);
@@ -234,6 +239,3 @@ class db
return $this->avionJournalier; return $this->avionJournalier;
} }
} }
?>

254
index.php
View File

@@ -1,111 +1,145 @@
<!-- Head --> <!-- Head -->
<?php require_once './parts/head.php'; ?> <?php require_once './parts/head.php'; ?>
<body> <body>
<!-- Header --> <!-- Header -->
<?php require_once './parts/header.php'; ?> <?php require_once './parts/header.php'; ?>
<!-- map --> <!-- map -->
<div id="map" style="display:block"></div> <div id="map" style="display:block"></div>
<!-- Paper Plane animation --> <!-- Paper Plane animation -->
<canvas id="canvas3d"></canvas> <canvas id="canvas3d"></canvas>
<canvas id="blankCanvas1" width="400" height="400" style="border:1px solid #d3d3d3; display:none"></canvas> <canvas id="blankCanvas1" width="400" height="400" style="border:1px solid #d3d3d3; display:none"></canvas>
<canvas id="blankCanvas2" width="400" height="400" style="border:1px solid #d3d3d3; display:none"></canvas> <canvas id="blankCanvas2" width="400" height="400" style="border:1px solid #d3d3d3; display:none"></canvas>
<img style="display:none;" id="front" src="src/img/front.jpg" /> <img style="display:none;" id="front" src="src/img/front.jpg" />
<img style="display:none;" id="back" src="src/img/back-FF5555.jpg" /> <img style="display:none;" id="back" src="src/img/back-FF5555.jpg" />
<script id="planeFoldScript.txt" type="not-javascript"> <!-- From https://github.com/RemiKoutcherawy/OriSim3D-JS was fun to code --> <?php
d -200 200 -200 -200 200 -200 200 200 if (isset($_GET['avionpoeme']) && $_GET['avionpoeme'] !== '') { ?>
c 0 1 c 0 3 c 0 2 c 1 3 <script id="planeFoldScript.txt" type="not-javascript"> <!-- From https://github.com/RemiKoutcherawy/OriSim3D-JS was fun to code -->
c 0 8 c 8 3 c 0 4 c 4 1 d -200 200 -200 -200 200 -200 200 200
c 6 0 c 6 1 c 6 2 c 6 3 c 0 1 c 0 3 c 0 2 c 1 3
iad t 1200 ty 6 tx -3) c 0 8 c 8 3 c 0 4 c 4 1
t 750 r 48 -179.99 21 0 10 r 55 -179.99 17 3 19 ) c 6 0 c 6 1 c 6 2 c 6 3
t 750 r 43 160 1 4 0 21 24 12 11 13 9 10) iad t 0 ty 6 tx -3)
t 700 ty -80 tx -60) t 0 r 48 -179.99 21 0 10 r 55 -179.99 17 3 19 )
t 500 r 27 -80 3 19 5 22 2 a 3 ) t 0 r 43 160 1 4 0 21 24 12 11 13 9 10)
t 500 r 23 -80 0 21 4 24 1 a 0) t 0 ty -80)
t 1000 tx -35 z 0 0 0 il 100 100) t 0 tx -60)
</script> t 0 r 27 -80 3 19 5 22 2 a 3)
<!-- Modal new plane--> t 0 r 23 -80 0 21 4 24 1 a 0)
<div class="modal fade" id="newPlaneModal" tabindex="-1" role="dialog" aria-labelledby="newPlaneModal" aria-hidden="true"> t 500 r 23 80 0 21 4 24 1 a 0)
<div class="modal-dialog modal-lg" role="document"> t 0 r 23 -90 0 a 0)
<div class="modal-content"> t 500 r 27 80 3 19 5 22 2 a 3)
<div class="modal-header"> t 0 r 27 -90 3 a 3)
<h5 class="modal-title" id="newPlaneModalTitle">Lancer un avion-poème</h5> t 700 tx 60)
<button type="button" id="closeModal" class="close" data-dismiss="modal" aria-label="Close"> t 700 ty 80)
<span aria-hidden="true">&times;</span> t 750 r 43 -160 1 4 0 21 24 12 11 13 9 10)
</button> t 750 r 48 179.99 21 0 10 r 55 179.99 17 3 19 )
</div> iad t 1200 ty -6 tx 3)
<div class="modal-body"> </script>
<form> <?php } else { ?>
<div class="row"> <script id="planeFoldScript.txt" type="not-javascript"> <!-- From https://github.com/RemiKoutcherawy/OriSim3D-JS was fun to code -->
<div class="col-md-6"> d -200 200 -200 -200 200 -200 200 200
<div class="form-group"> c 0 1 c 0 3 c 0 2 c 1 3
<b class="bold" id="newPlaneModalMessage">Message</b>&nbsp;&nbsp; c 0 8 c 8 3 c 0 4 c 4 1
<div class="form-check form-check-inline"> c 6 0 c 6 1 c 6 2 c 6 3
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="prive" value="prive" checked> iad t 1200 ty 6 tx -3)
<label class="form-check-label" for="prive" id="newPlaneModalPrive">privé</label> t 750 r 48 -179.99 21 0 10 r 55 -179.99 17 3 19 )
</div> t 750 r 43 160 1 4 0 21 24 12 11 13 9 10)
<div class="form-check form-check-inline"> t 700 ty -80 tx -60)
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="public" value="public"> t 500 r 27 -80 3 19 5 22 2 a 3 )
<label class="form-check-label" for="public" id="newPlaneModalPublic">public</label>&nbsp;&nbsp;<i id="publicTooltip" class="fas fa-question-circle" data-toggle="tooltip" data-placement="auto" title="Message publié dans lAnthologie une fois lavion-poème arrivé"></i> t 500 r 23 -80 0 21 4 24 1 a 0)
</div> t 1000 tx -35 z 0 0 0 il 100 100)
<br> </script>
<br> <?php }
<div class="form-control rounded-0" id="messageTextArea"></div> ?>
</div> <!-- Modal new plane-->
<div class="form-group"> <div class="modal fade" id="newPlaneModal" tabindex="-1" role="dialog" aria-labelledby="newPlaneModal" aria-hidden="true">
<label class="bold" for="selectTime" id="flightTime">Temps de vol</label> <div class="modal-dialog modal-lg" role="document">
<select class="form-control" id="selectTime"> <div class="modal-content">
<option id="newPlaneModalRandom" value="random">Aléatoire</option> <div class="modal-header">
<option id="newPlaneModal3j" value="3days">3,14 jours</option> <h5 class="modal-title" id="newPlaneModalTitle">Lancer un avion-poème</h5>
<option id="newPlaneModal7j" value="7days">7 jours</option> <button type="button" id="closeModal" class="close" data-dismiss="modal" aria-label="Close">
<option id="newPlaneModal30j" value="30days">30 jours</option> <span aria-hidden="true">&times;</span>
<option id="newPlaneModal365j" value="365days">365 jours</option> </button>
</select> </div>
</div> <div class="modal-body">
</div> <form>
<div class="col-md-6"> <div class="row">
<div class="form-group"> <div class="col-md-6">
<b class="bold" id="newPlaneModalExpediteur">Expediteur</b>&nbsp;&nbsp; <div class="form-group">
<input type="checkbox" class="form-check-input" id="expeKnown"> <b class="bold" id="newPlaneModalMessage">Message</b>&nbsp;&nbsp;
<label class="form-check-label" for="expeKnown" id="newPlaneModalAnonyme">envoi anonyme</label>&nbsp;&nbsp;<i id="anonymeTooltip" class="fas fa-question-circle" data-toggle="tooltip" data-placement="auto" title="Votre adresse électronique ne sera communiquée au destinataire quà larrivée de lavion-poème"></i> <div class="form-check form-check-inline">
</div> <input class="form-check-input" type="radio" name="inlineRadioOptions" id="prive" value="prive" checked>
<div class="form-group"> <label class="form-check-label" for="prive" id="newPlaneModalPrive">privé</label>
<input type="email" autocomplete="off" class="form-control" id="expeMail" aria-describedby="emailHelp" placeholder="Insérer votre adresse électronique"> </div>
</div> <div class="form-check form-check-inline">
<input type="text" autocomplete="off" class="form-control typeahead" id="expeGeocoderPhoton" placeholder="Choisissez un point de départ" data-provide="typeahead"> <input class="form-check-input" type="radio" name="inlineRadioOptions" id="public" value="public">
<br> <label class="form-check-label" for="public" id="newPlaneModalPublic">public</label>&nbsp;&nbsp;<i id="publicTooltip" class="fas fa-question-circle" data-toggle="tooltip" data-placement="auto" title="Message publié dans lAnthologie une fois lavion-poème arrivé"></i>
<div class="form-group"> </div>
<label class="bold" id="newPlaneModalDestinataire" for="destMail">Destinataire</label> <br>
<input type="email" autocomplete="off" class="form-control" id="destMail" aria-describedby="emailHelp" placeholder="Insérer l'adresse électronique du destinataire"> <br>
</div> <div class="form-control rounded-0" id="messageTextArea"></div>
<div class="form-group"> </div>
<input type="text" autocomplete="off" class="form-control typeahead" id="destGeocoderPhoton" placeholder="Choisissez une destination" data-provide="typeahead"> <div class="form-group">
</div> <label class="bold" id="labelAttachment"></label>
<div class="form-group form-inline"> <div class="custom-file">
<label for="selectDestLang" id="destLang">Langue parlée par le destinataire:</label>&nbsp; <input type="file" class="custom-file-input" id="attachmentPlane" aria-describedby="inputGroupFileAddon01">
<select class="form-control form-control-sm" id="selectDestLang"> <label class="custom-file-label" for="attachmentPlane" id="attachmentPlaneLabel"></label>
</select> </div>
</div> </div>
</div> <div class="form-group">
</div> <label class="bold" for="selectTime" id="flightTime">Temps de vol</label>
</div> <select class="form-control" id="selectTime">
<div class="modal-footer"> <option id="newPlaneModalRandom" value="random">Aléatoire</option>
<button type="button" class="btn btn-light" id="newPlaneModalCancel" data-dismiss="modal">Annuler</button> <option id="newPlaneModal3j" value="3days">3,14 jours</option>
<button type="button" class="btn btn-warning" id="sendNewPlane" disabled>Lancer</button> <option id="newPlaneModal7j" value="7days">7 jours</option>
</div> <option id="newPlaneModal30j" value="30days">30 jours</option>
</form> <option id="newPlaneModal365j" value="365days">365 jours</option>
</div> </select>
</div> </div>
</div> </div>
<script src="src/map.js"></script> <div class="col-md-6">
<script src="src/geocoder.js"></script> <div class="form-group">
<script src="src/paperPlaneAnimation.js"></script> <b class="bold" id="newPlaneModalExpediteur">Expediteur</b>&nbsp;&nbsp;
<script src="src/formValidation.js"></script> <input type="checkbox" class="form-check-input" id="expeKnown">
<script src="src/newPlane.js"></script> <label class="form-check-label" for="expeKnown" id="newPlaneModalAnonyme">envoi anonyme</label>&nbsp;&nbsp;<i id="anonymeTooltip" class="fas fa-question-circle" data-toggle="tooltip" data-placement="auto" title="Votre adresse électronique ne sera communiquée au destinataire quà larrivée de lavion-poème"></i>
<script src="src/translation.js"></script> </div>
<script src="src/anthology.js"></script> <div class="form-group">
</body> <input type="email" autocomplete="off" class="form-control" id="expeMail" aria-describedby="emailHelp" placeholder="Insérer votre adresse électronique">
</div>
<input type="text" autocomplete="off" class="form-control typeahead" id="expeGeocoderPhoton" placeholder="Choisissez un point de départ" data-provide="typeahead">
<br>
<div class="form-group">
<label class="bold" id="newPlaneModalDestinataire" for="destMail">Destinataire</label>
<input type="email" autocomplete="off" class="form-control" id="destMail" aria-describedby="emailHelp" placeholder="Insérer l'adresse électronique du destinataire">
</div>
<div class="form-group">
<input type="text" autocomplete="off" class="form-control typeahead" id="destGeocoderPhoton" placeholder="Choisissez une destination" data-provide="typeahead">
</div>
<div class="form-group form-inline">
<label for="selectDestLang" id="destLang">Langue parlée par le destinataire:</label>&nbsp;
<select class="form-control form-control-sm" id="selectDestLang">
</select>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light" id="newPlaneModalCancel" data-dismiss="modal">Annuler</button>
<button type="button" class="btn btn-warning" id="sendNewPlane" disabled>Lancer</button>
</div>
</form>
</div>
</div>
</div>
<script src="src/map.js"></script>
<script src="src/geocoder.js"></script>
<script src="src/paperPlaneAnimation.js"></script>
<script src="src/formValidation.js"></script>
<script src="src/newPlane.js"></script>
<script src="src/translation.js"></script>
<script src="src/anthology.js"></script>
</body>
</html> </html>

View File

@@ -74,3 +74,5 @@ AvionPoeme_epuise|100 avions-poèmes ont déjà été lancés aujourd'hui, veuil
NB_AvionPoeme_restant|$NB_avion_poeme avions-poèmes peuvent encore être lancés aujourd'hui! A votre plume!|$NB_avion_poeme flight-poems can still be launched today! Get out your pens!|$NB_avion_poeme Gedichte-Flieger können noch heute losgeschickt werden! An Ihrem Stift!|$NB_avion_poeme самолет–поеми могат да стартират днес! Хващайте писалката!|$NB_avion_poeme 詩作紙飞机今天仍然可发送 。拿起笔來吧!|$NB_avion_poeme 今日も飛行機の詩を飛ばしていただくことができます!あなたが書いたものを!|$NB_avion_poeme aviones-poemas todavía se pueden lanzar hoy. ¡En tu pluma!|$NB_avion_poeme aviões-poemas ainda podem ser lançados hoje! Na sua caneta!|لا يزال من الممكن إطلاق $NB_avion_poeme الطائرات-القصائد اليوم! أحضروا أقلامكم NB_AvionPoeme_restant|$NB_avion_poeme avions-poèmes peuvent encore être lancés aujourd'hui! A votre plume!|$NB_avion_poeme flight-poems can still be launched today! Get out your pens!|$NB_avion_poeme Gedichte-Flieger können noch heute losgeschickt werden! An Ihrem Stift!|$NB_avion_poeme самолет–поеми могат да стартират днес! Хващайте писалката!|$NB_avion_poeme 詩作紙飞机今天仍然可发送 。拿起笔來吧!|$NB_avion_poeme 今日も飛行機の詩を飛ばしていただくことができます!あなたが書いたものを!|$NB_avion_poeme aviones-poemas todavía se pueden lanzar hoy. ¡En tu pluma!|$NB_avion_poeme aviões-poemas ainda podem ser lançados hoje! Na sua caneta!|لا يزال من الممكن إطلاق $NB_avion_poeme الطائرات-القصائد اليوم! أحضروا أقلامكم
Soutenez_avionpoeme|Offrez-nous un verre de vin  |Offer us a beer |Schenken Sie uns ein Bier!|Почерпете ни с ракия!|请给我们倒茶|お酒をください|¡Ofrécenos una cerveza! |Ofereça-nos uma cerveja|من فضلك اعطنا الشاي Soutenez_avionpoeme|Offrez-nous un verre de vin  |Offer us a beer |Schenken Sie uns ein Bier!|Почерпете ни с ракия!|请给我们倒茶|お酒をください|¡Ofrécenos una cerveza! |Ofereça-nos uma cerveja|من فضلك اعطنا الشاي
AvionPoeme_free_independent|Avion-poe.me est gratuit, libre (open source) et indépendant|Avion-poe.me is free (as in freedom), free (as in free beer) and independent|Avion-poe.me ist kostenlos, frei (open source) und unabhängig |Avion-poe.me е безплатен, свободен (с отворен код) и независим |Avion-poe.me 是免费、开源和独立的 |Avion-poe.me は無料で、オープンソースで独立しています |Avion-poe.me es gratuito, libre (de código abierto) e independiente |Avion-poe.me é gratuito, libre (de código aberto) e independente |عملنا مجاني وحر (مفتوح المصدر) ومستقل AvionPoeme_free_independent|Avion-poe.me est gratuit, libre (open source) et indépendant|Avion-poe.me is free (as in freedom), free (as in free beer) and independent|Avion-poe.me ist kostenlos, frei (open source) und unabhängig |Avion-poe.me е безплатен, свободен (с отворен код) и независим |Avion-poe.me 是免费、开源和独立的 |Avion-poe.me は無料で、オープンソースで独立しています |Avion-poe.me es gratuito, libre (de código abierto) e independiente |Avion-poe.me é gratuito, libre (de código aberto) e independente |عملنا مجاني وحر (مفتوح المصدر) ومستقل
PJ_Parcourir|Parcourir|Browse|Durchsuchen|Прегледаване|浏览|ブラウズ |Navegar|Navegar|تصفح
PJ_Ajouter|Ajouter un pièce jointe (max. 2 Mo)|Attach file (2 MB max.)|Datei anhängen (2 MB max.)|Прикачване на файл (2 MB макс.)|附加文件 (最大 2 MB )|ファイルを添付する (最大2MB)|Adjuntar archivo (2 MB máx. )|Anexar arquivo (2 MB máx.)|إرفق ملف (2MB max)
Can't render this file because it contains an unexpected character in line 37 and column 114.

View File

@@ -1,7 +1,7 @@
[ [
{ {
"fr": "<p align=\"center\" style=\"border: 1px solid black; padding-top:50px; padding-bottom:50px; border-radius: 10px;\"><em>Cher·e·s semblables<br><br>Nous ne sommes pas comme vos milles et un prétendants<br><br>Si dautres que nous vous offrent linstantané,<br>Nous vous offrirons le temps et lattente<br><br>Sils vous offrent une lettre<br>Nous vous offrirons un poème<br><br>Sils vous offrent une certitude<br>Nous vous offrirons les aléas et linconnu<br><br>Sils vous offrent labondance<br>Nous vous offrirons le partage<br><br>Et sils vous offrent un message<br>Nous vous offrirons le voyage<br><br>Librement,<br><br>Léquipe davion-poe.me</em></p><br><br><p><b>En quelques mots</b><br><ul><li>Cette œuvre a été conçue par Maxime Sténuit (créateur), <a href=\"https://github.com/martinedoesgis\">martinedoesgis</a> (développeur front-end), et Daniel Tartavel (développeur back-end).</li><li>Lœuvre est sous licence <a href=\"https://creativecommons.org/licenses/by-nc-sa/2.0/fr/\">Creative Commons BY-NC-SA 2.0 FR</a> et le code source sous licence <a href=\"http://www.gnu.org/licenses/gpl-3.0.en.html\">GPLv3</a>.</li><li>Nous souhaitons que cette application mise librement à votre disposition soit utilisée à des fins excluant tous types de violences, quelles soient verbales ou physiques.</li><li>Les messages privés sont supprimés physiquement de notre serveur une fois arrivés, ainsi que lensemble des adresses électroniques. Ce site ne contient pas de traceurs.</li><li>Pour en savoir davantage sur <a href=\"https://lalis69.ddns.net:10443/laliscloud/index.php/s/Jf7BkZCWFpEF9tJ\">lorigine des avions-poèmes</a>.</li></ul><br>Nhésitez pas à nous faire part de vos commentaires et vos idées à <a href=\"mailto:contact@avion-poe.me\">contact@avion-poe.me</a>.<br><br>", "fr": "<p align=\"center\" style=\"border: 1px solid black; padding-top:50px; padding-bottom:50px; border-radius: 10px;\"><em>Cher·e·s semblables<br><br>Nous ne sommes pas comme vos milles et un prétendants<br><br>Si dautres que nous vous offrent linstantané,<br>Nous vous offrirons le temps et lattente<br><br>Sils vous offrent une lettre<br>Nous vous offrirons un poème<br><br>Sils vous offrent une certitude<br>Nous vous offrirons les aléas et linconnu<br><br>Sils vous offrent labondance<br>Nous vous offrirons le partage<br><br>Et sils vous offrent un message<br>Nous vous offrirons le voyage<br><br>Librement,<br><br>Léquipe davion-poe.me</em></p><br><br><div id='donationElt'><div id='donationText'></div><div id='donationButton' ><a id='donationButtonText' class='btn btn-outline-primary' href='https://lydia-app.com/collect/98550-support-avion-poe-me/fr' target='_blank'></a></div></div><p><b>En quelques mots</b><br><ul><li>Cette œuvre a été conçue par Maxime Sténuit (créateur), <a href=\"https://github.com/martinedoesgis\">martinedoesgis</a> (développeur front-end), et Daniel Tartavel (développeur back-end).</li><li>Lœuvre est sous licence <a href=\"https://creativecommons.org/licenses/by-nc-sa/2.0/fr/\">Creative Commons BY-NC-SA 2.0 FR</a> et le code source sous licence <a href=\"http://www.gnu.org/licenses/gpl-3.0.en.html\">GPLv3</a>.</li><li>Nous souhaitons que cette application mise librement à votre disposition soit utilisée à des fins excluant tous types de violences, quelles soient verbales ou physiques.</li><li>Les messages privés sont supprimés physiquement de notre serveur une fois arrivés, ainsi que lensemble des adresses électroniques. Ce site ne contient pas de traceurs.</li><li>Pour en savoir davantage sur <a href=\"https://lalis69.ddns.net:10443/laliscloud/index.php/s/Jf7BkZCWFpEF9tJ\">lorigine des avions-poèmes</a>.</li></ul><br>Nhésitez pas à nous faire part de vos commentaires et vos idées à <a href=\"mailto:contact@avion-poe.me\">contact@avion-poe.me</a>.<br><br>",
"en": "<p align=\"center\" style=\"border: 1px solid black; padding-top:50px; padding-bottom:50px; border-radius: 10px;\"><em>Dear fellow,<br><br>We do not resemble your sycophants and suitors<br><br>Should others offer you the instant,<br>We shall offer you the time and the wait<br><br>Should they offer you a letter<br>We shall offer you a poem<br><br>Should they offer you certainty<br>We shall offer you the vagaries and the unknown<br><br>Should they offer you abundance<br>We shall offer you sharing<br><br>And should they offer you a valley<br>We shall offer you the journey<br><br>Freely,<br><br>The team of avion-poe.me</em></p><br><br><p><b>In a few words :</b><br><ul><li>Avion-poe.me was created by Maxime Sténuit, <a href=\"https://github.com/martinedoesgis\">martinedoesgis</a> (front-end developer), and Daniel Tartavel (back-end developer).</li><li>The work is under the <a href=\"https://creativecommons.org/licenses/by-nc-sa/2.0/fr/\">Creative Commons BY-NC-SA 2.0 FR</a> license and the source code under the <a href=\"http://www.gnu.org/licenses/gpl-3.0.en.html\">GPLv3</a> licence.</li><li>We wish this application, made freely available to you, to be used for purposes that exclude all types of violence, whether verbal or physical.</li><li>Private messages are physically deleted from our server when they arrive. This site does not contain cookies.</li><li>To learn more about <a href=\"https://lalis69.ddns.net:10443/laliscloud/index.php/s/Jf7BkZCWFpEF9tJ\">the origin of the flight-poem</a>.</li></ul><br>Please feel free to share your comments and ideas with us at <a href=\"mailto:contact@avion-poe.me\">contact@avion-poe.me</a>.<br><br>", "en": "<p align=\"center\" style=\"border: 1px solid black; padding-top:50px; padding-bottom:50px; border-radius: 10px;\"><em>Dear fellow,<br><br>We do not resemble your sycophants and suitors<br><br>Should others offer you the instant,<br>We shall offer you the time and the wait<br><br>Should they offer you a letter<br>We shall offer you a poem<br><br>Should they offer you certainty<br>We shall offer you the vagaries and the unknown<br><br>Should they offer you abundance<br>We shall offer you sharing<br><br>And should they offer you a valley<br>We shall offer you the journey<br><br>Freely,<br><br>The team of avion-poe.me</em></p><br><br><div id='donationElt'><div id='donationText'></div><div id='donationButton' ><a id='donationButtonText' class='btn btn-outline-primary' href='https://lydia-app.com/collect/98550-support-avion-poe-me/en' target='_blank'></a></div></div><p><b>In a few words :</b><br><ul><li>Avion-poe.me was created by Maxime Sténuit, <a href=\"https://github.com/martinedoesgis\">martinedoesgis</a> (front-end developer), and Daniel Tartavel (back-end developer).</li><li>The work is under the <a href=\"https://creativecommons.org/licenses/by-nc-sa/2.0/fr/\">Creative Commons BY-NC-SA 2.0 FR</a> license and the source code under the <a href=\"http://www.gnu.org/licenses/gpl-3.0.en.html\">GPLv3</a> licence.</li><li>We wish this application, made freely available to you, to be used for purposes that exclude all types of violence, whether verbal or physical.</li><li>Private messages are physically deleted from our server when they arrive. This site does not contain cookies.</li><li>To learn more about <a href=\"https://lalis69.ddns.net:10443/laliscloud/index.php/s/Jf7BkZCWFpEF9tJ\">the origin of the flight-poem</a>.</li></ul><br>Please feel free to share your comments and ideas with us at <a href=\"mailto:contact@avion-poe.me\">contact@avion-poe.me</a>.<br><br>",
"de": "<p align=\"center\" style=\"border: 1px solid black; padding-top:50px; padding-bottom:50px; border-radius: 10px;\"><em>Liebe Freunde<br><br>Wir gleichen euren Liebhabern nicht.<br><br>Bieten sie euch das Unmittelbare an<br>Schenken wir euch Zeit und Warten<br><br>Schreiben sie euch einen Brief<br>Überreichen wir euch ein Gedicht<br><br>Geben sie euch Gewissheit<br>bieten wir euch Launen und das Unbekannte<br><br>Überhäufen sie euch mit Überfluss<br>Lehren wir euch das Teilen<br><br>Und schicken sie euch eine Nachricht,<br>Dann schenken wir euch eine Reise.<br><br>Frei,<br><br>Das Team von avion-poe.me</em></p><br><br><p><b>In wenigen Worten:</b><br><ul><li>Diese Arbeit wurde von Maxime Sténuit (Schöpfer), <a href=\"https://github.com/martinedoesgis\">martinedoesgis</a> (Front-End-Entwickler) und Daniel Tartavel (Back-End-Entwickler) entworfen.</li><li>Die Arbeit ist unter der <a href=\"https://creativecommons.org/licenses/by-nc-sa/2.0/fr/\">Creative Commons BY-NC-SA 2.0 FR</a>-Lizenz und der Quellcode unter der <a href=\"http://www.gnu.org/licenses/gpl-3.0.en.html\">GPLv3</a>-Lizenz.</li><li>Wir möchten, dass diese Anwendung, die Ihnen frei zur Verfügung gestellt wird, für Zwecke verwendet wird, die alle Arten von verbaler oder physischer Gewalt ausschließen.</li><li>Private Nachrichten werden bei ihrem Eintreffen zusammen mit allen E-Mail-Adressen physisch von unserem Server gelöscht. Diese Seite enthält keine Cookies.</li><li>Um mehr <a href=\"https://lalis69.ddns.net:10443/laliscloud/index.php/s/Jf7BkZCWFpEF9tJ\">über den Ursprung von Gedicht-Flieger</a> zu erfahren.</li></ul><br>Bitte zögern Sie nicht, uns Ihre Kommentare und Ideen an <a href=\"mailto:contact@avion-poe.me\">contact@avion-poe.me</a> zu senden.<br><br>" "de": "<p align=\"center\" style=\"border: 1px solid black; padding-top:50px; padding-bottom:50px; border-radius: 10px;\"><em>Liebe Freunde<br><br>Wir gleichen euren Liebhabern nicht.<br><br>Bieten sie euch das Unmittelbare an<br>Schenken wir euch Zeit und Warten<br><br>Schreiben sie euch einen Brief<br>Überreichen wir euch ein Gedicht<br><br>Geben sie euch Gewissheit<br>bieten wir euch Launen und das Unbekannte<br><br>Überhäufen sie euch mit Überfluss<br>Lehren wir euch das Teilen<br><br>Und schicken sie euch eine Nachricht,<br>Dann schenken wir euch eine Reise.<br><br>Frei,<br><br>Das Team von avion-poe.me</em></p><br><br><div id='donationElt'><div id='donationText'></div><div id='donationButton' ><a id='donationButtonText' class='btn btn-outline-primary' href='https://lydia-app.com/collect/98550-support-avion-poe-me/fr' target='_blank'></a></div></div><p><b>In wenigen Worten:</b><br><ul><li>Diese Arbeit wurde von Maxime Sténuit (Schöpfer), <a href=\"https://github.com/martinedoesgis\">martinedoesgis</a> (Front-End-Entwickler) und Daniel Tartavel (Back-End-Entwickler) entworfen.</li><li>Die Arbeit ist unter der <a href=\"https://creativecommons.org/licenses/by-nc-sa/2.0/fr/\">Creative Commons BY-NC-SA 2.0 FR</a>-Lizenz und der Quellcode unter der <a href=\"http://www.gnu.org/licenses/gpl-3.0.en.html\">GPLv3</a>-Lizenz.</li><li>Wir möchten, dass diese Anwendung, die Ihnen frei zur Verfügung gestellt wird, für Zwecke verwendet wird, die alle Arten von verbaler oder physischer Gewalt ausschließen.</li><li>Private Nachrichten werden bei ihrem Eintreffen zusammen mit allen E-Mail-Adressen physisch von unserem Server gelöscht. Diese Seite enthält keine Cookies.</li><li>Um mehr <a href=\"https://lalis69.ddns.net:10443/laliscloud/index.php/s/Jf7BkZCWFpEF9tJ\">über den Ursprung von Gedicht-Flieger</a> zu erfahren.</li></ul><br>Bitte zögern Sie nicht, uns Ihre Kommentare und Ideen an <a href=\"mailto:contact@avion-poe.me\">contact@avion-poe.me</a> zu senden.<br><br>"
} }
] ]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,10 @@
:root {
/** Colors **/
--primary: #007bff;
--primary-rgb: 0, 123, 255;
--primary-hover: #0056b3;
}
html, html,
body { body {
overflow-x: hidden; overflow-x: hidden;
@@ -72,12 +79,12 @@ body {
/* Anthology */ /* Anthology */
#anthology { #anthology {
margin-top: 30px; margin-top: 56px;
z-index: 1029; z-index: 1029;
padding-top: 66px; padding-top: 66px;
padding-bottom: 35px; padding-bottom: 35px;
padding-left: 30%; padding-left: 25%;
padding-right: 30%; padding-right: 25%;
overflow-x: hidden; overflow-x: hidden;
width: 100vw; width: 100vw;
background-color: rgba(255, 255, 255, 0.9); background-color: rgba(255, 255, 255, 0.9);
@@ -85,12 +92,12 @@ body {
/* About */ /* About */
#about { #about {
margin-top: 30px; margin-top: 56px;
z-index: 1029; z-index: 1029;
padding-top: 66px; padding-top: 66px;
padding-bottom: 35px; padding-bottom: 35px;
padding-left: 30%; padding-left: 25%;
padding-right: 30%; padding-right: 25%;
overflow-x: hidden; overflow-x: hidden;
width: 100vw; width: 100vw;
background-color: rgba(255, 255, 255, 0.9); background-color: rgba(255, 255, 255, 0.9);
@@ -254,3 +261,82 @@ a#navbarDropdownLang.nav-link.dropdown-toggle::after {
padding-right: 5% !important; padding-right: 5% !important;
} }
} }
/* About donation */
#donationElt {
background: rgba(var(--primary-rgb), 0.2);
margin-bottom: 50px;
padding: 5%;
display: grid;
grid-template-columns: fit-content(370px) auto;
column-gap: 8%;
align-items: center;
}
#donationElt #donationButton {
text-align: right;
}
#donationElt #donationButton .btn {
background: white;
}
#donationElt #donationButton .btn:before {
font-family: "Font Awesome 5 Pro";
display: inline-block;
margin-right: 10px;
font-weight: 300;
}
#donationElt #donationButton .btn.fr:before {
content: "\f5ce";
}
#donationElt #donationButton .btn.en:before,
#donationElt #donationButton .btn.de:before,
#donationElt #donationButton .btn.pt:before,
#donationElt #donationButton .btn.es:before {
content: "\f0fc";
}
#donationElt #donationButton .btn.ar:before {
content: "\f875";
}
#donationElt #donationButton .btn.zh:before,
#donationElt #donationButton .btn.ja:before,
#donationElt #donationButton .btn.bg:before {
content: "\f7a0";
font-size: 13px;
font-weight: normal;
}
#donationElt #donationButton .btn:hover {
color: var(--primary-hover);
border-color: var(--primary-hover);
}
@media screen and (max-width: 990px) {
#donationElt {
grid-template-columns: 1fr;
grid-row-gap: 25px;
}
#donationElt #donationButton {
text-align: left;
}
}
@media screen and (max-width: 600px) {
#donationElt {
text-align: center;
}
#donationElt #donationButton {
text-align: center;
}
}
.custom-file-label::after {
content: attr(data-after);
}

View File

@@ -1,25 +1,43 @@
var validExpeMail = false var validExpeMail = false;
var validExpeLoc = false //turned to true in geocoder.js var validExpeLoc = false; //turned to true in geocoder.js
var validDestMail = false var validDestMail = false;
var validDestLoc = false //turned to true in geocoder.js var validDestLoc = false; //turned to true in geocoder.js
function validateEmail(email) { //from https://stackoverflow.com/questions/46155/how-to-validate-an-email-address-in-javascript function validateEmail(email) {
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; //from https://stackoverflow.com/questions/46155/how-to-validate-an-email-address-in-javascript
return re.test(String(email).toLowerCase()); const re =
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
} }
$("#expeMail").change(function() { $("#expeMail").change(function () {
validExpeMail = validateEmail($("#expeMail").val()) validExpeMail = validateEmail($("#expeMail").val());
checkFormValid() checkFormValid();
}) });
$("#destMail").change(function() { $("#destMail").change(function () {
validDestMail = validateEmail($("#destMail").val()) validDestMail = validateEmail($("#destMail").val());
checkFormValid() checkFormValid();
}) });
function checkFormValid(){ document
if(validExpeMail && validExpeLoc && validDestMail && validDestLoc){ .querySelector(".custom-file-input")
$('#sendNewPlane').prop("disabled", false) .addEventListener("change", function (e) {
} const file = e.target.files[0];
const fileName = file.name;
var nextSibling = e.target.nextElementSibling;
nextSibling.innerText = fileName;
const filesize = (file.size / 1024 / 1024).toFixed(4); // MB
if (filesize >= 2.2) {
e.target.classList.add("is-invalid");
} else {
e.target.classList.remove("is-invalid");
}
});
function checkFormValid() {
if (validExpeMail && validExpeLoc && validDestMail && validDestLoc) {
$("#sendNewPlane").prop("disabled", false);
}
} }

View File

@@ -303,12 +303,20 @@ loader.load(function(loader, resources) {
var queryString = window.location.search; var queryString = window.location.search;
queryString = queryString.split('=')[1] queryString = queryString.split('=')[1]
if(Number(queryString)==data.uid){ if(Number(queryString)==data.uid){
setTimeout( $("#back").attr("src","src/img/back-"+data.color+".jpg");
function() html = data.message;
{ var canvas1 = document.getElementById("blankCanvas1");
map.setView([data.currentPosition.geometry.coordinates[1],data.currentPosition.geometry.coordinates[0]], 15); rasterizeHTML.drawHTML(html, canvas1,{zoom:0.7}).then(function success(renderResult) {
openPopup(marker) var canvas2 = document.getElementById("blankCanvas2");
}, 100); var ctx = canvas2.getContext("2d");
ctx.fillStyle = "#" + data.color;
ctx.fillRect(0,0,400,400);
ctx.drawImage(canvas1, 0, 0,400,400)
ctx.font = "9px Courier";
$("#front").attr('src',document.getElementById("blankCanvas2").toDataURL())
$("#canvas3d").css('display','block')
animePlane();
})
} }
} }

View File

@@ -108,8 +108,30 @@ $("#sendNewPlane").on('click',function(){
var message = quill.root.innerHTML var message = quill.root.innerHTML
var randomColor = getRandomColor() var randomColor = getRandomColor()
console.log(message) var formData = new FormData()
var attachment = $("#attachmentPlane").prop('files')[0];
formData.append('file', attachment);
formData.append('message', encodeURIComponent(message));
formData.append('expeMail', $("#expeMail").val());
formData.append('expeKnown', expeKnown);
formData.append('expeLang', lang);
formData.append('destLang', $("#selectDestLang").val());
formData.append('startLat', expeLoc.center[1]);
formData.append('startLon', expeLoc.center[0]);
formData.append('startName', expeLoc.name);
formData.append('startTime', sentDate);
formData.append('startTZ', expeTimezone);
formData.append('destMail', $("#destMail").val());
formData.append('destLat', destLoc.center[1]);
formData.append('destLon', destLoc.center[0]);
formData.append('destName', destLoc.name);
formData.append('public', publicMessage, );
formData.append('color', randomColor);
formData.append('deliveryTime', deliveryDate);
formData.append('deliveryTZ', destTimezone);
formData.append('deliveryTimeServer', deliverySecondsServer);
formData.append('deliveryMethod', $("#selectTime").val());
var data = { var data = {
'message':encodeURIComponent(message), 'message':encodeURIComponent(message),
@@ -131,76 +153,56 @@ $("#sendNewPlane").on('click',function(){
'deliveryTime':deliveryDate, 'deliveryTime':deliveryDate,
'deliveryTZ':destTimezone, 'deliveryTZ':destTimezone,
'deliveryTimeServer':deliverySecondsServer, 'deliveryTimeServer':deliverySecondsServer,
'deliveryMethod':$("#selectTime").val() 'deliveryMethod':$("#selectTime").val(),
} }
var query = 'avionpoeme.php?'+
'message='+data.message+'&'+
'expeMail='+data.expeMail+'&'+
'expeKnown='+data.expeKnown+'&'+
'expeLang='+data.expeLang+'&'+
'destLang='+data.destLang+'&'+
'startLat='+data.startLat+'&'+
'startLon='+data.startLon+'&'+
'startName='+data.startName+'&'+
'startTime='+data.startTime+'&'+
'startTZ='+data.startTZ+'&'+
'destMail='+data.destMail+'&'+
'destLat='+data.destLat+'&'+
'destLon='+data.destLon+'&'+
'destName='+data.destName+'&'+
'public='+data.public+'&'+
'color='+data.color+'&'+
'deliveryTime='+data.deliveryTime+'&'+
'deliveryTZ='+data.deliveryTZ+'&'+
'deliveryTimeServer='+data.deliveryTimeServer+'&'+
'deliveryMethod='+data.deliveryMethod+'';
$.post(query, function(result) { $.ajax({
result = result.replace(/'/g, '"'); url: 'avionpoeme.php',
console.log(result) data: formData,
result = $.parseJSON(result) processData: false,
var planeId = Number(result.uid); contentType: false,
//selecting proper color for back cache : false,
$("#back").attr("src","src/img/back-"+data.color+".jpg"); type: 'POST',
success: function(result){
// creating image for plane, need to link it to the inputs tog et entered values. result = result.replace(/'/g, '"');
var message = quill.root.innerHTML result = $.parseJSON(result)
var planeId = Number(result.uid);
var canvas1 = document.getElementById("blankCanvas1"), //selecting proper color for back
html = quill.root.innerHTML; $("#back").attr("src","src/img/back-"+randomColor+".jpg");
rasterizeHTML.drawHTML(html, canvas1,{zoom:0.7}).then(function success(renderResult) {
var canvas2 = document.getElementById("blankCanvas2"); // creating image for plane, need to link it to the inputs tog et entered values.
var ctx = canvas2.getContext("2d"); var message = quill.root.innerHTML
ctx.fillStyle = "#"+data.color;
ctx.fillRect(0,0,400,400);
ctx.drawImage(canvas1, 0, 0,400,400)
ctx.fillStyle = "rgb(0,0,0)";
ctx.font = "9px Courier";
$("#front").attr('src',document.getElementById("blankCanvas2").toDataURL())
//display and animate plane
$("#canvas3d").css('display','block')
animePlane()
var canvas1 = document.getElementById("blankCanvas1"),
html = quill.root.innerHTML;
//moving plane at the end rasterizeHTML.drawHTML(html, canvas1,{zoom:0.7}).then(function success(renderResult) {
setInterval(function(){
$("#canvas3d").css('transition','transform 2500ms ease-in-out') var canvas2 = document.getElementById("blankCanvas2");
$("#canvas3d").css('transform','translate(50vw, -150vh)') var ctx = canvas2.getContext("2d");
},4400); ctx.fillStyle = "#"+data.color;
//reloading page (to change) ctx.fillRect(0,0,400,400);
setInterval(function(){ ctx.drawImage(canvas1, 0, 0,400,400)
window.location.href ='https://avion-poe.me?avion='+planeId+''; ctx.fillStyle = "rgb(0,0,0)";
},5500); ctx.font = "9px Courier";
}) $("#front").attr('src',document.getElementById("blankCanvas2").toDataURL())
}) //display and animate plane
$("#canvas3d").css('display','block')
animePlane()
//moving plane at the end
setInterval(function(){
$("#canvas3d").css('transition','transform 2500ms ease-in-out')
$("#canvas3d").css('transform','translate(50vw, -150vh)')
},4400);
//reloading page (to change)
setInterval(function(){
window.location.href ='https://www.avion-poe.me/?avion='+planeId+'';
},5500);
})
}
});
}) })
}); });

View File

@@ -1,179 +1,193 @@
// Default lang // Default lang
var lang = 'en' var lang = "en";
// Lang by session // Lang by session
var langSession = sessionStorage.getItem('lang'); var langSession = sessionStorage.getItem("lang");
// Lang by navigator config // Lang by navigator config
var userLang = navigator.userLanguage || navigator.language; var userLang = navigator.userLanguage || navigator.language;
if (langSession) { if (langSession) {
lang = langSession.substring(0,2) lang = langSession.substring(0, 2);
} else if (userLang) { } else if (userLang) {
lang = userLang.substring(0,2) lang = userLang.substring(0, 2);
} }
//loading the lang.json file //loading the lang.json file
$(document).ready(function(){ $(document).ready(function () {
translateUI(lang) translateUI(lang);
$.getJSON("lang/lang.json", function(data){ $.getJSON("lang/lang.json", function (data) {
//creating dropdown list of languages in navbar //creating dropdown list of languages in navbar
for (var key in data){ for (var key in data) {
$("#langChoices").append( '<a class="dropdown-item langSelect" value="'+key+'" href="#">'+data[key]+'</a>' ) $("#langChoices").append(
$("#selectDestLang").append( '<option value="'+key+'" href="#">'+data[key]+'</option>' ) '<a class="dropdown-item langSelect" value="' +
} key +
//setting the user lang '" href="#">' +
if(data[lang]){ data[key] +
//$("#navbarDropdownLang").html(data[lang]) "</a>"
translateUI(lang) );
} $("#selectDestLang").append(
//or english if not in list '<option value="' + key + '" href="#">' + data[key] + "</option>"
else{ );
//$("#navbarDropdownLang").html("English") }
translateUI('en') //setting the user lang
} if (data[lang]) {
$(".langSelect").on('click',function(e){ //$("#navbarDropdownLang").html(data[lang])
lang = e.currentTarget.attributes[1].value translateUI(lang);
sessionStorage.setItem('lang', lang); }
translateUI(lang) //or english if not in list
//$("#navbarDropdownLang").html($(this).html()) else {
}) //$("#navbarDropdownLang").html("English")
}).fail(function(error){ translateUI("en");
console.log(error); }
}); $(".langSelect").on("click", function (e) {
lang = e.currentTarget.attributes[1].value;
sessionStorage.setItem("lang", lang);
translateUI(lang);
//$("#navbarDropdownLang").html($(this).html())
});
}).fail(function (error) {
console.log(error);
});
}); });
var dictionnary = [] var dictionnary = [];
function translateUI(l){ function translateUI(l) {
$.getJSON("lang/"+l+"", function(s){ $.getJSON("lang/" + l + "", function (s) {
//console.log(s) dictionnary = s;
dictionnary = s //if arabic : display left to right (ltr) + troubleshooting a lot of individual elements
//if arabic : display left to right (ltr) + troubleshooting a lot of individual elements if (lang == "ar") {
if (lang == "ar"){ //navbar
//navbar $("nav").css("direction", "rtl");
$("nav").css('direction','rtl') $(".nav-menus").removeClass("mr-auto");
$(".nav-menus").removeClass('mr-auto') $(".nav-button").addClass("mr-auto");
$(".nav-button").addClass('mr-auto') //form
//form // $(".ql-container").css('direction','rtl')
// $(".ql-container").css('direction','rtl') // $(".ql-container").css('float','right')
// $(".ql-container").css('float','right') // $(".ql-editor").css('float','right')
// $(".ql-editor").css('float','right') // $(".ql-editor p").css('float','right')
// $(".ql-editor p").css('float','right') $(".modal-content").css("direction", "rtl");
$(".modal-content").css('direction','rtl') $(".bold").css("float", "right");
$(".bold").css('float','right') $("#public").css("margin-left", "5px");
$("#public").css('margin-left','5px') $("#prive").css("margin-left", "5px");
$("#prive").css('margin-left','5px') $("#newPlaneModalAnonyme").css("margin-right", "25px");
$("#newPlaneModalAnonyme").css('margin-right','25px') $("#newPlaneModalCancel").css("margin-left", "8px");
$("#newPlaneModalCancel").css('margin-left','8px') $("#closeModal").css("margin-left", "0px");
$("#closeModal").css('margin-left','0px') $("#closeModal").css("padding-left", "0px");
$("#closeModal").css('padding-left','0px') //anthology
//anthology $("#anthology").css("direction", "rtl");
$("#anthology").css('direction','rtl') $("#anthologyDisclaimer").css("float", "right");
$("#anthologyDisclaimer").css('float','right') } else {
//navbar
} $("nav").css("direction", "ltr");
else{ $(".nav-menus").addClass("mr-auto");
//navbar $(".nav-button").removeClass("mr-auto");
$("nav").css('direction','ltr') //form
$(".nav-menus").addClass('mr-auto') // $(".ql-container").css('direction','ltr')
$(".nav-button").removeClass('mr-auto') // $(".ql-container").css('float','left')
//form // $(".ql-editor").css('float','left')
// $(".ql-container").css('direction','ltr') // $(".ql-editor p").css('float','none')
// $(".ql-container").css('float','left') $(".modal-content").css("direction", "ltr");
// $(".ql-editor").css('float','left') $(".bold").css("float", "left");
// $(".ql-editor p").css('float','none') $("#public").css("margin-left", "0px");
$(".modal-content").css('direction','ltr') $("#prive").css("margin-left", "0px");
$(".bold").css('float','left') $("#newPlaneModalAnonyme").css("margin-right", "0px");
$("#public").css('margin-left','0px') $("#newPlaneModalCancel").css("margin-left", "0px");
$("#prive").css('margin-left','0px') //anthology
$("#newPlaneModalAnonyme").css('margin-right','0px') $("#anthology").css("direction", "ltr");
$("#newPlaneModalCancel").css('margin-left','0px') $("#anthologyDisclaimer").css("float", "left");
//anthology }
$("#anthology").css('direction','ltr')
$("#anthologyDisclaimer").css('float','left') //changing all strings
} //main page
$("head title", window.parent.document).text(s.avionpoeme);
//changing all strings $("#navTitle").html(s.avionpoeme);
//main page $("#buttonAnthology").html(s.anthologie);
$('head title', window.parent.document).text(s.avionpoeme); $("#buttonAbout").html(s.apropos);
$("#navTitle").html(s.avionpoeme) if (typeof nbPlane !== "undefined") {
$("#buttonAnthology").html(s.anthologie) $("#buttonNewPlane").val(s.lancer_avion + " " + nbPlane + "/100");
$("#buttonAbout").html(s.apropos) } else {
if (typeof nbPlane !== 'undefined') { $("#buttonNewPlane").on("click", () => {
$("#buttonNewPlane").val(s.lancer_avion+" "+nbPlane+"/100") window.location.replace("/");
} else { });
$("#buttonNewPlane").on('click', () => { }
window.location.replace("/"); //new plane form
}) $("#newPlaneModalTitle").html(s.lancer_avion);
} $("#newPlaneModalMessage").html(s.message);
//new plane form $("#newPlaneModalPrive").html(s.prive);
$("#newPlaneModalTitle").html(s.lancer_avion) $("#newPlaneModalPublic").html(s.public);
$("#newPlaneModalMessage").html(s.message) $("#labelAttachment").html(s.PJ_Ajouter);
$("#newPlaneModalPrive").html(s.prive) console.log(s);
$("#newPlaneModalPublic").html(s.public) $("#attachmentPlaneLabel").attr("data-after", s.PJ_Parcourir);
$("#flightTime").html(s.temps_de_vol) $("#flightTime").html(s.temps_de_vol);
$("#newPlaneModalRandom").html(s.aléatoire) $("#newPlaneModalRandom").html(s.aléatoire);
$("#newPlaneModal3j").html(s.trois_jours) $("#newPlaneModal3j").html(s.trois_jours);
$("#newPlaneModal7j").html(s.sept_jours) $("#newPlaneModal7j").html(s.sept_jours);
$("#newPlaneModal30j").html(s.trente_jours) $("#newPlaneModal30j").html(s.trente_jours);
$("#newPlaneModal365j").html(s.unan_jours) $("#newPlaneModal365j").html(s.unan_jours);
$("#newPlaneModalExpediteur").html(s.expediteur) $("#newPlaneModalExpediteur").html(s.expediteur);
$("#newPlaneModalDestinataire").html(s.destinataire) $("#newPlaneModalDestinataire").html(s.destinataire);
$("#newPlaneModalAnonyme").html(s.anonyme) $("#newPlaneModalAnonyme").html(s.anonyme);
$("#newPlaneModalCancel").html(s.annuler) $("#newPlaneModalCancel").html(s.annuler);
$("#sendNewPlane").html(s.lancer) $("#sendNewPlane").html(s.lancer);
$("#destLang").html(s.langue_destinataire) $("#destLang").html(s.langue_destinataire);
$("#expeMail").attr("placeholder", s.expeMail_placeholder) $("#expeMail").attr("placeholder", s.expeMail_placeholder);
$("#expeGeocoderPhoton").attr("placeholder", s.expeLoc_placeholder) $("#expeGeocoderPhoton").attr("placeholder", s.expeLoc_placeholder);
$("#destMail").attr("placeholder", s.destMail_placeholder) $("#destMail").attr("placeholder", s.destMail_placeholder);
$("#destGeocoderPhoton").attr("placeholder", s.destLoc_placeholder) $("#destGeocoderPhoton").attr("placeholder", s.destLoc_placeholder);
$('#anonymeTooltip').attr("title", s.anonyme_tooltip).tooltip("_fixTitle"); $("#anonymeTooltip").attr("title", s.anonyme_tooltip).tooltip("_fixTitle");
$('#publicTooltip').attr("title", s.public_tooltip).tooltip("_fixTitle"); $("#publicTooltip").attr("title", s.public_tooltip).tooltip("_fixTitle");
$('#selectDestLang option[value="'+lang+'"]').prop('selected', true); //selecting by default recipient language same as interface $('#selectDestLang option[value="' + lang + '"]').prop("selected", true); //selecting by default recipient language same as interface
//Anthology //Anthology
displayAnthology() displayAnthology();
$("#anthologyTitle").html(s.anthologie) $("#anthologyTitle").html(s.anthologie);
$("#anthologyDisclaimer").html(s.suppr_message_public) $("#anthologyDisclaimer").html(s.suppr_message_public);
$("#closeAnthologyAbout").html(s.retour_carte) $("#closeAnthologyAbout").html(s.retour_carte);
//About //About
$("#aboutTitle").html(s.apropos) $("#aboutTitle").html(s.apropos);
$("#librairies").html(s.librairies) $("#librairies").html(s.librairies);
$("#mapSources").html(s.source_carte) $("#mapSources").html(s.source_carte);
$("#mapBackground").html(s.map_background) $("#mapBackground").html(s.map_background);
$("#clouds").html(s.clouds) $("#clouds").html(s.clouds);
$.getJSON("lang/about.json", function(e){ $.getJSON("lang/about.json", function (e) {
if(lang !== 'en' && lang !== 'fr' && lang !== 'de'){ if (lang !== "en" && lang !== "fr" && lang !== "de") {
$("#aboutText").html(e[0].en) $("#aboutText").html(e[0].en);
} } else {
else{ $("#aboutText").html(e[0][lang]);
$("#aboutText").html(e[0][lang]) }
} $("#donationText").html(s.AvionPoeme_free_independent);
}) $("#donationButtonText").html(s.Soutenez_avionpoeme);
$("#donationButtonText").addClass(lang);
//plane limit tooltip });
if (nbPlane && nbPlane > 99){
$("#planeLimitTooltip").attr("title", s.AvionPoeme_epuise).tooltip("_fixTitle"); //plane limit tooltip
} if (typeof nbPlane !== "undefined") {
else{ if (nbPlane > 99) {
var remainingPlanes = 100 - nbPlane; $("#planeLimitTooltip")
s.NB_AvionPoeme_restant = s.NB_AvionPoeme_restant.replace('$NB_avion_poeme',remainingPlanes) .attr("title", s.AvionPoeme_epuise)
$("#planeLimitTooltip").attr("title", s.NB_AvionPoeme_restant).tooltip("_fixTitle"); .tooltip("_fixTitle");
} } else {
var remainingPlanes = 100 - nbPlane;
}) s.NB_AvionPoeme_restant = s.NB_AvionPoeme_restant.replace(
.always(function(callback) { "$NB_avion_poeme",
//console.log( callback ); remainingPlanes
}); );
$("#planeLimitTooltip")
.attr("title", s.NB_AvionPoeme_restant)
.tooltip("_fixTitle");
}
}
}).always(function (callback) {
//console.log( callback );
});
} }
//hovering lang icon //hovering lang icon
$( "#navbarDropdownLang" ).mouseenter(function() { $("#navbarDropdownLang").mouseenter(function () {
$("#langIcon").attr("src","src/img/lang-hover.png"); $("#langIcon").attr("src", "src/img/lang-hover.png");
}); });
$( "#navbarDropdownLang" ).mouseleave(function() { $("#navbarDropdownLang").mouseleave(function () {
$("#langIcon").attr("src","src/img/lang.png"); $("#langIcon").attr("src", "src/img/lang.png");
}); });