Initial commit (again)

This commit is contained in:
Pascal Engélibert 2020-12-11 19:52:55 +01:00
parent 0771771e11
commit ee8a28e302
640 changed files with 28807 additions and 0 deletions

20
.htaccess Normal file
View File

@ -0,0 +1,20 @@
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^guide/?$ guide.php
RewriteRule ^guide/installer-minetest/?$ guide/installer-minetest.php
RewriteRule ^guide/se-deplacer-dans-minetest/?$ guide/se-deplacer-dans-minetest.php
RewriteRule ^guide/constuire-inventaire-minetest/?$ guide/constuire-inventaire-minetest.php
RewriteRule ^guide/monnaie-argent-minetest/?$ guide/monnaie-argent-minetest.php
RewriteRule ^guide/discuter-minetest-mumble/?$ guide/discuter-minetest-mumble.php
RewriteRule ^guide/rejoindre-serveur-minetest/?$ guide/rejoindre-serveur-minetest.php
RewriteRule ^guide/panneaux-minetest/?$ guide/panneaux-minetest.php
RewriteRule ^guide/boite-aux-lettres-minetest/?$ guide/boite-aux-lettres-minetest.php
RewriteRule ^guide/boutique-g1-minetest/?$ guide/boutique-g1-minetest.php
RewriteRule ^soutenir/?$ soutenir.php
RewriteRule ^developper/?$ developper.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^thumbs/([0-9]+)w/(.*\.(jpg|jpeg|png))$ thumb.php?filename=$2&thumbWidth=$1

BIN
Minetest_logo-240px.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
Minetest_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

136
config.php Normal file
View File

@ -0,0 +1,136 @@
<?php
if ($_SERVER['SERVER_NAME'] == 'localhost' || $_SERVER['SERVER_NAME'] == '127.0.0.1') {
// Adaptez la ligne suivante à votre configuration
define('ROOT_URL', '/juneland/');
} else {
define('ROOT_URL', '/');
}
define('DEFAULT_TITLE', 'Juneland');
$imgLayouts = [
'col_3_2_1_bordered' => [
'w' => [400, 620],
'breakpoints' => '
(max-width: 42.249rem) 400px,
(max-width: 55.999rem) 620px,
400px
'
],
'col_3_2_1' => [
'w' => [408, 628],
'breakpoints' => '
(max-width: 42.249rem) 408px,
(max-width: 55.999rem) 628px,
408px
',
],
'col_2_1_bordered' => [
'w' => [400, 620, 840],
'breakpoints' => '
(max-width: 42.249rem) 400px,
(max-width: 55.999rem) 620px,
(max-width: 83.490rem) 840px,
620px
',
],
'col_2_1' => [
'w' => [408, 628, 848],
'breakpoints' => '
(max-width: 42.249rem) 408px,
(max-width: 55.999rem) 628px,
(max-width: 83.490rem) 848px,
628px
',
],
'article_full_width' => [
'w' => [392, 502, 612, 832, 942],
'breakpoints' => '
(max-width: 35.374rem) 392px,
(max-width: 42.249rem) 502px,
(max-width: 55.999rem) 612px,
(max-width: 83.499rem) 832px,
942px
',
],
'gallery_3_2_1' => [
'w' => [502, 298, 267, 303],
'breakpoints' => '
(max-width: 42.249rem) 502px,
(max-width: 55.999rem) 298px,
(max-width: 84.499rem) 267px,
303px
',
],
'gallery_2_1' => [
'w' => [612, 408, 463],
'breakpoints' => '
(max-width: 55.999rem) 612px,
(max-width: 84.499rem) 408px,
463px
',
],
];
$thumbExt = '.jpg';
function image ($filename, $alt, $layout) {
global $thumbExt;
$imgName = substr($filename, 0, strrpos($filename, '.'));
$out = '';
$out .= '<img ';
$out .= ' src="'. ROOT_URL .'img/'. $filename .'"';
$out .= ' srcset="';
$first = true;
foreach ($layout['w'] as $w) {
if ($first) {
$first = false;
} else {
$out .= ', ';
}
$out .= ROOT_URL .'thumbs/'. $w . 'w/'. $imgName . $thumbExt .' '. $w . 'w';
}
$out .= '" ';
$out .= ' sizes="' . $layout['breakpoints'] . '"';
$out .= ' alt="'. $alt .'"';
$out .= ' />';
return $out;
}

BIN
css/banner-330w.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
css/banner-550w.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
css/banner-660w.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
css/banner-770w.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

BIN
css/banner-800w.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
css/banner-880w.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

BIN
css/banner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 KiB

BIN
css/banner.xcf Normal file

Binary file not shown.

259
css/calendar.svg Executable file
View File

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
viewBox="0 0 512 512"
style="enable-background:new 0 0 512 512;"
xml:space="preserve"
sodipodi:docname="calendar.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
id="metadata133"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs131" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="740"
id="namedview129"
showgrid="false"
inkscape:zoom="0.78858979"
inkscape:cx="132.50487"
inkscape:cy="250.6145"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g96" />
<g
id="g96">
<g
id="g4">
<path
style="fill:#eee8e8;fill-opacity:1"
d="M0,134v328c0,22.055,17.945,40,40,40h432c22.055,0,40-17.945,40-40V134H0z"
id="path2" />
</g>
<g
id="g8">
<path
style="fill:#ff2020;fill-opacity:1"
d="M472,22H40C17.945,22,0,39.945,0,62v72h512V62C512,39.945,494.054,22,472,22z M64,102 c-13.255,0-24-10.745-24-24s10.745-24,24-24s24,10.745,24,24S77.255,102,64,102z M448,102c-13.255,0-24-10.745-24-24 s10.745-24,24-24s24,10.745,24,24S461.255,102,448,102z"
id="path6" />
</g>
<g
id="g70">
<g
id="g12">
<path
style="fill:#FFFFFF;"
d="M256,206c-17.648,0-32,14.352-32,32s14.352,32,32,32s32-14.352,32-32S273.648,206,256,206z"
id="path10" />
</g>
<g
id="g16">
<path
style="fill:#FFFFFF;"
d="M176,206c-17.648,0-32,14.352-32,32s14.352,32,32,32s32-14.352,32-32S193.648,206,176,206z"
id="path14" />
</g>
<g
id="g20">
<path
style="fill:#FFFFFF;"
d="M96,206c-17.648,0-32,14.352-32,32s14.352,32,32,32s32-14.352,32-32S113.648,206,96,206z"
id="path18" />
</g>
<g
id="g24">
<path
style="fill:#FFFFFF;"
d="M336,206c-17.648,0-32,14.352-32,32s14.352,32,32,32c17.648,0,32-14.352,32-32 S353.648,206,336,206z"
id="path22" />
</g>
<g
id="g28">
<path
style="fill:#FFFFFF;"
d="M416,270c17.648,0,32-14.352,32-32s-14.352-32-32-32c-17.648,0-32,14.352-32,32 S398.351,270,416,270z"
id="path26" />
</g>
<g
id="g32">
<path
style="fill:#FFFFFF;"
d="M256,286c-17.648,0-32,14.352-32,32s14.352,32,32,32s32-14.352,32-32S273.648,286,256,286z"
id="path30" />
</g>
<g
id="g36">
<path
style="fill:#FFFFFF;"
d="M176,286c-17.648,0-32,14.352-32,32s14.352,32,32,32s32-14.352,32-32S193.648,286,176,286z"
id="path34" />
</g>
<g
id="g40">
<path
style="fill:#FFFFFF;"
d="M96,286c-17.648,0-32,14.352-32,32s14.352,32,32,32s32-14.352,32-32S113.648,286,96,286z"
id="path38" />
</g>
<g
id="g44">
<path
style="fill:#FFFFFF;"
d="M336,286c-17.648,0-32,14.352-32,32s14.352,32,32,32c17.648,0,32-14.352,32-32 S353.648,286,336,286z"
id="path42" />
</g>
<g
id="g48">
<path
style="fill:#FFFFFF;"
d="M416,286c-17.648,0-32,14.352-32,32s14.352,32,32,32c17.648,0,32-14.352,32-32 S433.648,286,416,286z"
id="path46" />
</g>
<g
id="g52">
<path
style="fill:#FFFFFF;"
d="M256,366c-17.648,0-32,14.352-32,32c0,17.648,14.352,32,32,32s32-14.352,32-32 C288,380.351,273.648,366,256,366z"
id="path50" />
</g>
<g
id="g56">
<path
style="fill:#FFFFFF;"
d="M176,366c-17.648,0-32,14.352-32,32c0,17.648,14.352,32,32,32s32-14.352,32-32 C208,380.351,193.648,366,176,366z"
id="path54" />
</g>
<g
id="g60">
<path
style="fill:#FFFFFF;"
d="M96,366c-17.648,0-32,14.352-32,32c0,17.648,14.352,32,32,32s32-14.352,32-32 C128,380.351,113.648,366,96,366z"
id="path58" />
</g>
<g
id="g64">
<path
style="fill:#FFFFFF;"
d="M336,366c-17.648,0-32,14.352-32,32c0,17.648,14.352,32,32,32c17.648,0,32-14.352,32-32 C368,380.351,353.648,366,336,366z"
id="path62" />
</g>
<g
id="g68">
<path
style="fill:#FFFFFF;"
d="M416,366c-17.648,0-32,14.352-32,32c0,17.648,14.352,32,32,32c17.648,0,32-14.352,32-32 C448,380.351,433.648,366,416,366z"
id="path66" />
</g>
</g>
<g
id="g76">
<g
id="g74">
<path
style="fill:#5C546A;"
d="M64,90c-6.625,0-12-5.371-12-12V22c0-6.629,5.375-12,12-12s12,5.371,12,12v56 C76,84.629,70.625,90,64,90z"
id="path72" />
</g>
</g>
<g
id="g82">
<g
id="g80">
<path
style="fill:#5C546A;"
d="M448,90c-6.625,0-12-5.371-12-12V22c0-6.629,5.375-12,12-12s12,5.371,12,12v56 C460,84.629,454.625,90,448,90z"
id="path78" />
</g>
</g>
<g
id="g86">
<circle
style="fill:#fef332;fill-opacity:1"
cx="96"
cy="238"
r="32"
id="circle84" />
</g>
<g
id="g90">
<circle
style="fill:#ac5c21;fill-opacity:1"
cx="256"
cy="398"
r="32"
id="circle88" />
</g>
<g
id="g94">
<circle
style="fill:#fe9b32;fill-opacity:1"
cx="336"
cy="318"
r="32"
id="circle92" />
</g>
</g>
<g
id="g98">
</g>
<g
id="g100">
</g>
<g
id="g102">
</g>
<g
id="g104">
</g>
<g
id="g106">
</g>
<g
id="g108">
</g>
<g
id="g110">
</g>
<g
id="g112">
</g>
<g
id="g114">
</g>
<g
id="g116">
</g>
<g
id="g118">
</g>
<g
id="g120">
</g>
<g
id="g122">
</g>
<g
id="g124">
</g>
<g
id="g126">
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
css/ciel-etoile-orig.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

BIN
css/ciel-etoile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

65
css/cols.css Normal file
View File

@ -0,0 +1,65 @@
:root {
font-size: 16px;
--col-width: 4.875rem;
--col-gap: 2rem;
--box-border-width: 0.25rem;
}
@media screen and (min-width: 28.5rem) {
:root {
--page-col-nb: 4;
--benefits-col-nb: 4;
--worlds-col-nb: 4;
--guides-col-nb: 4;
}
}
@media screen and (min-width: 42.25rem) {
:root {
--page-col-nb: 6;
--benefits-col-nb: 6;
--worlds-col-nb: 6;
--guides-col-nb: 6;
}
}
@media screen and (min-width: 56rem) {
:root {
--page-col-nb: 8;
--benefits-col-nb: 4;
--worlds-col-nb: 8;
--guides-col-nb: 4;
}
}
@media screen and (min-width: 83.5rem) {
:root {
--page-col-nb: 12;
--benefits-col-nb: 4;
--worlds-col-nb: 6;
--guides-col-nb: 4;
}
}

59
css/decoration-donors.css Normal file
View File

@ -0,0 +1,59 @@
/* ------------------------------------------ DONORS ------------------------------------------ */
.donorsList {
list-style: none;
font-family: sans-serif;
}
.donorsList li {
background-color: white;
box-shadow: -0.125rem 0.125rem 0.75rem hsla(0, 0%, 0%, 0.2);
border-style: solid;
border-color: transparent;
position: relative;
}
.donorsList li:before {
position: absolute;
top: 0.125rem;
content: ".";
color: transparent;
background-image: url("sprites/heart.png");
background-size: cover;
background-repeat: no-repeat;
right: 0.125rem;
width: 1rem;
height: 1rem;
}
.donorsList li a {
color: hsl(0, 0%, 10%);
text-decoration: none;
}
.donorsList li a img {
background: black;
}
.donorsList li a .name {
font-weight: bold;
background: white;
color: #1d1d1d;
}

208
css/decoration-home.css Normal file
View File

@ -0,0 +1,208 @@
:root {
--navy: #15262b;
}
#guides > li a dfn span,
body.home main h2 > span {
display: inline-block;
}
/* ------------------------------------------ BLOCK STYLE ------------------------------------------ */
#worlds a,
#worlds a:visited,
#guides a,
#guides a:visited {
color: white;
}
#worlds dt,
#worlds dd,
#benefits dt,
#benefits dd,
#guides > li a {
position: relative;
}
#worlds dt:before,
#worlds dd:before,
#benefits dt:before,
#benefits dd:before,
#guides > li a {
box-shadow:
0 0 1.00rem hsl(0, 100%, 100%, 0.5),
0 0rem 0.75rem hsla(0, 0%, 0%, 0.5),
0 0rem 0.5rem hsla(0, 0%, 0%, 0.75),
0 0rem 0.25rem hsla(0, 0%, 0%, 1);
}
/*
#worlds dt:before,
#worlds dd:before,
#benefits dt:before,
#benefits dd:before {
content: " ";
width: 100%;
height: 100%;
z-index: 10;
display: block;
top: 0;
left: 0;
position: absolute;
}
*/
#worlds dt,
#benefits dt {
z-index: 50;
}
#worlds dd img,
#benefits dd img {
position: relative;
z-index: 200;
}
#benefits dt,
#benefits dd,
#worlds dt,
#worlds dd
{
border-style: solid;
}
#benefits dd,
#worlds dd {
font-weight: 600;
}
#benefits dt,
#worlds dt {
font-weight: bold;
}
/* --------------------------------------- RAISONS DE VENIR --------------------------------------- */
#benefits dd,
#benefits dt {
color: hsl(0, 0%, 20%);
border-color: var(--navy);
overflow: hidden;
}
#benefits a,
#benefits a:visited {
color: inherit;
}
#benefits dd {
background-color: var(--nuage-1);
}
#benefits dt{
background-color: var(--nuage-1);
}
/* ------------------------------------------ MONDES ------------------------------------------ */
#worlds dt {
font-weight: bold;
}
#worlds dd address {
font-style: normal;
}
#worlds dt,
#worlds dd {
border-color: #ffff81;
overflow: hidden;
}
#worlds dt {
background-color: green;
color: white;
}
#worlds dd {
background-color: var(--marron);
color: white;
}
/* ------------------------------------------ GUIDES ------------------------------------------ */
#guides > li a {
border-color: transparent;
background-image:
linear-gradient(hsla(0, 0%, 100%, 0.6) 0%, hsla(0, 0%, 100%, 0.61) 100%),
url("sprites/default_gravel.png");
background-size: cover, 25.5rem;
}
#guides > li a > span,
#guides > li a img {
background-color: transparent;
color: black;
}
#guides > li a dfn,
#guides > li a:visited dfn {
background-color: hsl(0, 0%, 15%);
color: hsl(0, 0%, 95%);
}
#guides > li a:hover {
transform: scale(1.05);
border-color: black;
}
#guides {
counter-reset: num-tuto;
}
#guides > li a,
#guides > li a:visited {
text-decoration: none;
}

259
css/decoration.css Normal file
View File

@ -0,0 +1,259 @@
:root {
--marron: hsl(25.5, 67.8%, 40.2%);
--marron-fonce: hsl(25.5, 67.8%, 20.1%);
--nuage-1: hsl(60, 100%, 97.6%);
--nuage-2: hsl(48, 20%, 80.4%);
--bleu-ciel: hsl(215.3, 91.1%, 78%);
--orange: #ff4000;
--rouge: rgb(255, 110, 110);
}
@font-face {
font-family: Cantarell;
src: url("https://txmn.tk:8480/ipfs/QmdrTnJY7sW7DPJDwwoujoAAuKPwjDLbjzBKEVj8uuBoTF/Cantarell-Regular.otf") format("opentype"),
url("/fonts/Cantarell-Regular.otf") format("opentype");
}
@font-face {
font-family: SourceCodePro;
src: url("https://txmn.tk:8480/ipfs/Qmf1N4o5DjrPRLaSiqCmBf9CUyksvgys2m2oj5WA2gAwDR/SourceCodePro-Regular.otf") format("opentype"),
url("/fonts/SourceCodePro-Regular.otf") format("opentype");
}
html, body {
font-family: Cantarell, "Liberation Sans", Helvetica, Arial;
}
.sr-only {
display: none !important;
}
body > header nav button {
background-color: transparent;
color: rgba(255, 255, 255, 0.5);
cursor: pointer;
}
body > header nav button:after {
background-color: transparent;
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.8)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
background-repeat: repeat;
background-position: center center;
background-size: cover;
}
header nav ul li a {
text-decoration: none;
}
header .sitedesc {
font-weight: bold;
}
footer [role="contentinfo"] {
opacity: 0.666;
}
/* ------------------------------------------ CONTENTS ------------------------------------------ */
article {
border-style: solid;
border-color: var(--marron-fonce);
background-image:
linear-gradient(hsla(0, 0%, 100%, 0.5) 0%, hsla(0, 0%, 100%, 0.5) 100%),
url("sprites/default_pine_wood.png");
background-size: cover, 2rem;
background-position-y: 0, -0.75rem;
color: black;
}
body.guide article {
border-color: transparent;
background-image:
linear-gradient(hsla(0, 0%, 100%, 0.6) 0%, hsla(0, 0%, 100%, 0.61) 100%),
url("sprites/default_gravel.png");
background-size: cover, 25.5rem;
}
article h1 {
background: var(--marron-fonce);
color: white;
}
body.guide article h1 {
background: #222;
color: white;
}
a, a:visited {
color: blue;
}
#successMsg {
opacity: 0;
}
code {
background-color: black;
color: white;
padding: 0.25rem 0.5rem;
}
/* ------------------------------------------ TABLEAUX ------------------------------------------ */
table {
border-collapse: collapse;
}
table thead {
background: black;
color: white;
}
tbody > tr:nth-of-type(odd) {
background-color: #ededed;
}
tbody > tr:nth-of-type(even) {
background-color: white;
}
table td,
table th {
border-style: solid;
border-color: black;
}
table td.nombre,
table th.nombre {
text-align: right;
}
/* ------------------------------------------ SERVEURS ------------------------------------------ */
address, dfn {
font-style: normal;
}
address.server > * {
font-family: SourceCodePro, "DroidSans Mono", Cantarell, "Liberation Sans", Helvetica, Arial;
border-style: solid;
background-color: var(--orange);
border-color: var(--orange);
color: white;
}
address.server dfn {
background-color: white;
color: black;
}
address.server span:last-of-type {
border-left-color: white;
}
address.server span:first-of-type {
border-right-color: white;
}
/* ------------------------------------------ BOITES ------------------------------------------ */
.warn {
background-color: var(--rouge);
}
.warn:before {
content: "⚠ ";
float: left;
font-size: 3em;
}
kdb, .mono {
font-family: SourceCodePro, "DroidSans Mono", Cantarell, "Liberation Sans", Helvetica, Arial;
border-style: solid;
border-color: rgba(200,200,200,0.5);
background-color: hsl(0, 0%, 98%);
color: black;
}
.pubkey-and-copy-button input {
border-color: var(--marron-fonce);
}
.pubkey-and-copy-button button {
background-color: var(--marron-fonce);
color: white;
font-weight: bold;
}
q {
font-style: italic;
}
q:before {
padding-right: 0.25em;
}
q:after {
padding-left: 0.25em;
}

180
css/layout-donors.css Normal file
View File

@ -0,0 +1,180 @@
@import "cols.css";
/* ------------------------------------------ DONORS ------------------------------------------ */
.donorsList {
margin-left: 0;
margin-right: 0;
padding-left: 0;
padding-right: 0;
margin-top: 2rem;
margin-bottom: 2rem;
/*
display: flex;
flex-wrap: wrap;
*/
justify-content: center;
display: grid;
grid-row-gap: 1rem;
grid-column-gap: 1rem;
grid-auto-flow: row;
}
.donorsList li {
/*
flex-basis: var(--base-width);
flex-grow: 0;
display: flex;
align-items: center;
*/
overflow: hidden;
margin: 0;
text-align: center;
border-width: 0.25rem;
}
.donorsList li a {
display: flex;
flex-direction: column;
height: 100%;
width: 100%;
font-size: 0.9em;
}
.donorsList li a img {
width: 100%;
display: block;
}
.donorsList li a img,
.donorsList li a .name {
width: 100%;
}
.donorsList li a .name {
flex-grow: 1;
padding: 1rem 0;
text-align: center;
display: flex;
align-items: center;
}
.donorsList li a .name span {
padding: 0 1em;
flex-grow: 1;
}
@media screen and (min-width: 28.5rem) {
.donorsList li:nth-of-type(3n+1) {
grid-column: 1;
}
.donorsList li:nth-of-type(3n+2) {
grid-column: 2;
}
.donorsList li:nth-of-type(3n+3) {
grid-column: 3;
}
}
@media screen and (min-width: 42.25rem) {
.donorsList li:nth-of-type(5n+1) {
grid-column: 1;
}
.donorsList li:nth-of-type(5n+2) {
grid-column: 2;
}
.donorsList li:nth-of-type(5n+3) {
grid-column: 3;
}
.donorsList li:nth-of-type(5n+4) {
grid-column: 4;
}
.donorsList li:nth-of-type(5n+5) {
grid-column: 5;
}
}
@media screen and (min-width: 83.5rem) {
@media screen and (min-width: 42.25rem) {
.donorsList li:nth-of-type(7n+1) {
grid-column: 1;
}
.donorsList li:nth-of-type(7n+2) {
grid-column: 2;
}
.donorsList li:nth-of-type(7n+3) {
grid-column: 3;
}
.donorsList li:nth-of-type(7n+4) {
grid-column: 4;
}
.donorsList li:nth-of-type(7n+5) {
grid-column: 5;
}
.donorsList li:nth-of-type(7n+6) {
grid-column: 6;
}
.donorsList li:nth-of-type(7n+7) {
grid-column: 7;
}
}
}

511
css/layout-home.css Normal file
View File

@ -0,0 +1,511 @@
@import "cols.css";
body.home main h2 {
text-align: center;
margin-top: 3rem;
margin-bottom: 2rem;
font-size: 2rem;
}
/* ------------------------------------------ INVITATION ------------------------------------------ */
details#invite {
box-shadow: 0 0 1em hsla(0, 0%, 0%, 0.75);
overflow: auto;
margin-left: auto;
margin-right: auto;
margin-top: 3rem;
height: 10rem;
width: calc(10rem/114*229);
position: relative;
display: flex;
justify-content: center;
align-items: center;
background: hsl(60, 100%, 95.5%);
}
details#invite[open] em,
details#invite[open] time,
details#invite[open] strong,
details#invite[open] a {
font-style: inherit;
font-weight: normal;
text-decoration: underline;
color: inherit;
}
details#invite[open] {
width: calc(10rem/114*229);
height: auto;
font-style: italic;
}
details#invite[open] > * {
max-height: calc(3*10rem);
height: auto;
position: relative;
overflow: hidden;
width: 100%;
}
details#invite[open] > *:before,
details#invite[open] > *:after {
content: "";
width: 100%;
position: absolute;
top: 0;
border-bottom: 0.125rem solid hsla(60, 50%, 50%, 0.07);
}
details#invite[open] > *:before {
height: 33%;
}
details#invite[open] > *:after {
height: 66%;
}
details#invite[open] > * > * {
margin-left: 1rem;
margin-right: 1rem;
}
details#invite summary {
list-style: none;
display: flex;
justify-content: center;
flex-direction: column;
text-align: right;
padding-top: 1rem;
padding-right: 3rem;
height: 100%;
width: 100%;
box-sizing: border-box;
cursor: pointer;
}
details#invite summary time {
position: absolute;
top: 0;
right: 0;
padding-right: 1rem;
padding-top: 0.5rem;
}
details#invite[open] summary {
display: none;
}
/* ------------------------------------------ BLOCKS ------------------------------------------ */
#guides img,
#worlds img,
#benefits img
{
width: 100%;
}
#guides {
padding-left: 0;
}
#benefits,
#guides {
display: grid;
justify-content: center;
}
#benefits {
grid-row-gap: 0;
}
#guides {
list-style: none;
grid-row-gap: 2rem;
}
#benefits dd {
margin-bottom: 1rem;
}
#benefits dt {
margin-top: 1rem;
}
#benefits {
margin-top: 0;
}
#worlds,
#guides {
padding-top: 1rem;
}
#worlds {
padding-bottom: 1rem;
}
#worlds dd {
margin-bottom: 2rem;
margin-left: 0;
}
#worlds dd:last-of-type {
margin-bottom: 0;
}
#benefits dt,
#worlds dt,
#guides > li a dfn,
#guides > li a:visited dfn {
padding: 1rem;
text-align: center;
font-size: 1.25rem;
border-top-width: 0.25rem;
border-bottom-width: 0;
}
#benefits dd,
#worlds dd,
#guides > li a > span,
#guides > li a img {
border-top-width: 0;
border-bottom-width: 0.25rem;
margin-left: 0;
}
#guides > li a img {
border-top-width: 0;
border-bottom-width: 0;
}
#benefits dd img,
#worlds dd img {
display: block;
}
#benefits dd p,
#worlds dd p,
#worlds dd address {
margin: 1rem;
}
/* ------------------------------------------ MONDES ------------------------------------------ */
#worlds {
display: grid;
grid-row-gap: 0;
justify-content: center;
}
#worlds dt {
text-align: center;
}
/* ------------------------------------------ GUIDES ------------------------------------------ */
#guides > li {
margin: 0;
padding: 0;
}
#guides > li a,
#guides > li a:visited {
display: flex;
flex-direction: column;
height: 100%;
}
#guides > li a dfn { order: 1; }
#guides > li a img { order: 2; }
#guides > li a > span { order: 3; }
#guides > li a > span {
padding: 1rem;
width: calc(100% - 2 * 1rem);
}
/* ------------------------------------------ RESPONSIVE ------------------------------------------ */
#benefits,
#guides,
#worlds {
grid-column-gap: var(--col-gap);
grid-template-columns: calc(100% - 1rem);
}
#benefits dt,
#benefits dd,
#worlds dt,
#worlds dd
{
border-left-width: var(--box-border-width);
border-right-width: var(--box-border-width);
}
#guides > li a {
border-width: var(--box-border-width);
}
@media screen and (min-width: 56rem) {
/* BENEFITS */
#benefits > dt:nth-of-type(2n+1),
#benefits > dd:nth-of-type(2n+1) {
grid-column: 1;
}
#benefits > dt:nth-of-type(2n+2),
#benefits > dd:nth-of-type(2n+2) {
grid-column: 2;
}
#benefits dt:nth-of-type(n + 1) {
grid-row: 1;
}
#benefits dd:nth-of-type(n + 1) {
grid-row: 2;
}
#benefits dt:nth-of-type(n + 3) {
grid-row: 3;
}
#benefits dd:nth-of-type(n + 3) {
grid-row: 4;
}
#benefits dt:nth-of-type(n + 5) {
grid-row: 5;
}
#benefits dd:nth-of-type(n + 5) {
grid-row: 6;
}
/* GUIDES */
#guides > li:nth-of-type(2n+1) {
grid-column: 1;
}
#guides > li:nth-of-type(2n+2) {
grid-column: 2;
}
}
@media screen and (min-width: 83.5rem) {
/* BENEFITS */
#benefits > dt:nth-of-type(3n+1),
#benefits > dd:nth-of-type(3n+1) {
grid-column: 1;
}
#benefits > dt:nth-of-type(3n+2),
#benefits > dd:nth-of-type(3n+2) {
grid-column: 2;
}
#benefits > dt:nth-of-type(3n+3),
#benefits > dd:nth-of-type(3n+3) {
grid-column: 3;
}
#benefits dt:nth-of-type(n + 1) {
grid-row: 1;
}
#benefits dd:nth-of-type(n + 1) {
grid-row: 2;
}
#benefits dt:nth-of-type(n + 4) {
grid-row: 3;
}
#benefits dd:nth-of-type(n + 4) {
grid-row: 4;
}
/* WORLDS */
#worlds dd {
grid-row: 2;
margin-bottom: 0rem;
}
/* GUIDES */
#guides > li:nth-of-type(3n+1){
grid-column: 1;
}
#guides > li:nth-of-type(3n+2) {
grid-column: 2;
}
#guides > li:nth-of-type(3n+3) {
grid-column: 3;
}
}
@media screen and (min-width: 28.5rem) {
#benefits {
grid-template-columns:
repeat(
calc(var(--page-col-nb) / var(--benefits-col-nb)),
calc(
var(--benefits-col-nb) * var(--col-width) + (var(--benefits-col-nb) - 1) * var(--col-gap)
)
);
}
#guides {
grid-template-columns:
repeat(
calc(var(--page-col-nb) / var(--guides-col-nb)),
calc(
var(--guides-col-nb) * var(--col-width) + (var(--guides-col-nb) - 1) * var(--col-gap)
)
);
}
#worlds {
grid-template-columns:
repeat(
calc(var(--page-col-nb) / var(--worlds-col-nb)),
calc(
var(--worlds-col-nb) * var(--col-width) + (var(--worlds-col-nb) - 1) * var(--col-gap)
)
);
}
}
#video-presentation {
display: block;
margin-left: auto;
margin-right: auto;
margin-top: 3rem;
max-width: 100%;
}

632
css/layout.css Normal file
View File

@ -0,0 +1,632 @@
@import "cols.css";
body {
margin: 0 !important;
padding: 0 !important;
}
body > * {
position: relative;
z-index: 100;
}
/* ------------------------------------------ HEADER ------------------------------------------ */
body > header {
margin-top: 0;
padding-top: 0;
overflow: hidden;
}
body > header {
text-align: center;
margin-left: auto;
margin-right: auto;
}
body > header a .sitename {
display: none;
}
body > header {
z-index: 200;
}
body > header > :first-child {
z-index: 250;
}
body > header > * {
margin-left: auto;
margin-right: auto;
}
body > header > :first-child a:before {
display: block;
}
body > header > :first-child {
margin-top: 0;
margin-bottom: 0;
overflow: hidden;
line-height: 1rem;
}
body > header > :first-child > * {
display: block;
}
body > header a {
text-decoration: none;
}
body > header .sitedesc {
font-size: 1.5rem;
line-height: 2.5rem;
position: relative;
top: -0.5rem;
}
body > header nav {
margin-top: 1rem;
margin-bottom: 1rem;
margin-left: auto;
margin-right: auto;
overflow: hidden;
}
body > header nav button span {
display: none;
}
body > header nav ul {
list-style : none;
display: flex;
flex-flow: wrap;
justify-content: space-between;
padding: 0;
margin: 0;
}
body > header nav ul li {
margin-left: 0;
margin-right: 0;
}
body > header nav ul li a {
display: flex;
flex-direction: column;
justify-content: center;
height: 2rem;
}
body > header #banner {
width: 100%;
}
body > header > :first-child a:before {
content: url("banner-330w.png");
}
body > header img,
body > header nav {
width: 100%;
}
/* ------------------------------------------ FOOTER ------------------------------------------ */
footer {
text-align: center;
overflow: hidden;
padding-top: 10rem;
padding-bottom: 1rem;
}
footer nav {
display: none;
}
#serverlist {
margin-top: 4rem;
display: flex;
justify-content: center;
flex-wrap: wrap;
}
#serverlist > * {
margin-left: 1rem;
margin-right: 1rem;
}
/* ------------------------------------------ CONTENTS ------------------------------------------ */
main {
margin-top: 0;
margin-bottom: 2rem;
}
main h1 {
font-size: 2.5rem;
text-align: center;
}
main h2 {
font-size: 1.66rem;
}
main h3 {
font-size: 1.33rem;
margin-top: 0.75rem;
margin-bottom: 0.25rem;
}
article {
box-sizing: border-box;
border-top-width: 0.5rem;
border-bottom-width: 0.5rem;
margin-top: 3rem;
padding-left: 0;
padding-right: 0;
padding-top: 0;
padding-bottom: 2rem;
margin-left: auto;
margin-right: auto;
overflow: hidden;
}
article h1 {
overflow: hidden;
padding-top: 0.5rem;
padding-bottom: 1rem;
}
article > :first-child,
article > :first-child :first-child {
margin-top: 0;
}
article > :not(:first-child) {
margin-left: 1rem;
margin-right: 1rem;
}
body.install article section {
margin-top: 3rem;
margin-bottom: 3rem;
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
}
article img {
max-width: 100%;
height: auto;
}
/*
article table.keymapping tr > td:first-of-type {
text-align: right;
}
*/
article table {
margin-left: auto;
margin-right: auto;
}
article table td,
article table th {
border-width: 0.125rem;
padding: 0.5rem;
}
.adresse, .politesse {
text-align: center;
}
.signature {
text-align: right;
}
/* ------------------------------------------ GALLERIES ------------------------------------------ */
.gallery {
display: grid;
grid-column-gap: 1rem;
grid-row-gap: 1rem;
overflow: hidden;
}
.gallery > * {
margin: 0;
}
.gallery figcaption {
text-align: center;
font-style: italic;
}
@media (min-width: 56rem) {
.gallery_2_1 > :nth-child(2n + 1) {
grid-column: 1;
}
.gallery_2_1 > :nth-child(2n + 2) {
grid-column: 2;
}
}
@media (min-width: 42.25rem) {
.gallery_3_2_1 > :nth-child(2n + 1) {
grid-column: 1;
}
.gallery_3_2_1 > :nth-child(2n + 2) {
grid-column: 2;
}
}
@media (min-width: 56rem) {
.gallery_3_2_1 > :nth-child(3n + 1) {
grid-column: 1;
}
.gallery_3_2_1 > :nth-child(3n + 2) {
grid-column: 2;
}
.gallery_3_2_1 > :nth-child(3n + 3) {
grid-column: 3;
}
}
/* ------------------------------------------ SERVEURS ------------------------------------------ */
address.server {
padding-bottom: 0.125rem;
display: flex;
justify-content: center;
}
address.server > * {
border-width: 0.125rem;
padding-left: 0.25rem;
padding-right: 0.25rem;
}
address.server dfn {
border-width: 0.125rem;
border-top-left-radius: 0.25rem;
border-bottom-left-radius: 0.25rem;
}
address.server span:last-of-type {
border-top-right-radius: 0.25rem;
border-bottom-right-radius: 0.25rem;
border-left-width: 0.0627rem;
}
address.server span:last-of-type {
border-top-right-radius: 0.25rem;
border-bottom-right-radius: 0.25rem;
border-left-width: 0.0627rem;
}
address.server span:first-of-type {
border-right-width: 0.0627rem;
}
/*
address.server span:last-of-type:before {
content: " : ";
}
*/
/* ------------------------------------------ BOITES ------------------------------------------ */
.warn {
padding: 1rem;
border-radius: 0.25rem;
}
kdb, .mono {
border-width: 0.125rem;
border-radius: 0.25rem;
padding: 0.125rem 0.5rem;
}
.pubkey-and-copy-button {
display: flex;
}
.pubkey-and-copy-button input {
flex-grow: 1;
border-width: 0.125rem;
border-style: solid;
padding: 0.5rem;
}
.pubkey-and-copy-button button {
border: 0;
padding: 0.5rem;
}
/* ------------------------------------------ RESPONSIVE ------------------------------------------ */
body > header nav button {
display: none;
}
@media screen and (max-width: 35.374rem) {
body > header nav {
position: fixed;
top: 0;
left: 0;
z-index: 300;
margin: 0;
background-color: transparent;
transition-duration: 0.5s;
transition-property: background-color;
transition-timing-function: ease-out;
}
body > header nav button {
position: fixed;
top: 0;
left: 0;
z-index: 300;
width: 2rem;
height: 2rem;
display: block;
border: 0;
padding: 0;
margin: 1rem 0 0 1rem;
}
body > header nav button:after {
content: "";
display: block;
width: 100%;
height: 100%;
position: relative;
top: 0;
left: 0;
z-index: 300;
margin: 0;
border: 0;
}
body > header nav ul {
position: fixed;
top: 4rem;
left: 0;
z-index: 150;
height: 0;
opacity: 0;
display: block;
overflow: hidden;
transition-duration: 1s;
transition-property: opacity;
transition-timing-function: ease-out;
}
}
article {
border-left-width: 0;
border-right-width: 0;
}
@media screen and (min-width: 28.5rem) {
body > header > *,
article {
border-left-width: 0.5rem;
border-right-width: 0.5rem;
max-width: calc(4 * (var(--col-width) + var(--col-gap)));
}
}
@media screen and (min-width: 35.375rem) {
body > header > *,
article {
max-width: calc(5 * (var(--col-width) + var(--col-gap)));
}
body > header > :first-child a:before {
content: url("banner-550w.png");
}
}
@media screen and (min-width: 42.25rem) {
body > header > *,
article {
max-width: calc(6 * (var(--col-width) + var(--col-gap)));
}
}
@media screen and (min-width: 56rem) {
body > header > *,
article {
max-width: calc(8 * (var(--col-width) + var(--col-gap)));
}
body > header > :first-child a:before {
content: url("banner-660w.png");
}
body > header .sitedesc {
font-size: 1.75rem;
}
body > header nav {
max-width: calc(6 * (var(--col-width) + var(--col-gap)));
}
}
@media screen and (min-width: 83.5rem) {
body > header > *,
article {
max-width: calc(9 * (var(--col-width) + var(--col-gap)));
}
body > header > :first-child a:before {
content: url("banner-770w.png");
}
body > header .sitedesc {
font-size: 2rem;
}
body > header nav {
max-width: calc(7 * (var(--col-width) + var(--col-gap)));
}
}

98
css/slideshow.css Normal file
View File

@ -0,0 +1,98 @@
.slide-container {
box-sizing: border-box;
max-width: 100vw;
max-height: 100vh;
position: relative;
margin: auto;
}
.slide {
box-sizing: border-box;
display: none;
max-width: 100vw;
max-height: 100vh;
}
.slide img {
object-fit: cover;
display: block;
max-width: 100vw;
max-height: 100vh;
width: 100%;
height: auto;
}
.slide-prev, .slide-next {
cursor: pointer;
position: absolute;
top: 50%;
width: auto;
margin-top: -22px;
padding: 16px;
color: white;
font-weight: bold;
font-size: 18px;
transition: 0.6s ease;
border-radius: 0 3px 3px 0;
user-select: none;
}
.slide-next {
right: 0;
border-radius: 3px 0 0 3px;
}
.slide-prev:hover, .slide-next:hover {
background-color: rgba(0,0,0,0.8);
}
.slide-text {
box-sizing: border-box;
color: #f2f2f2;
font-size: 15px;
padding: 8px 12px;
position: absolute;
bottom: 8px;
width: 100%;
text-align: center;
}
.slide-number {
color: #f2f2f2;
font-size: 12px;
padding: 8px 12px;
position: absolute;
top: 0;
}
.slide-dot {
cursor: pointer;
height: 15px;
width: 15px;
margin: 0 2px;
background-color: #bbb;
border-radius: 50%;
display: inline-block;
transition: background-color 0.6s ease;
}
.slide-active, .slide-dot:hover {
background-color: #717171;
}
.slide-fade {
-webkit-animation-name: fade;
-webkit-animation-duration: 1.5s;
animation-name: fade;
animation-duration: 1.5s;
}
@-webkit-keyframes fade {
from {opacity: .4}
to {opacity: 1}
}
@keyframes fade {
from {opacity: .4}
to {opacity: 1}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

BIN
css/sprites/heart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

174
css/t-dawn-or-dusk.css Normal file
View File

@ -0,0 +1,174 @@
:root {
--soleil2: #fdff51;
--soleil3: #d77f0d;
--soleil4: #b93805;
}
body {
background-color: #d45a00;
background-image:
linear-gradient(#7d492d 0%, #7d492d 8rem,
#c63300 8rem, #c63300 10rem,
#d14907 10rem, hsl(25, 100%, 41.6%) calc(100% - 20rem),
black calc(100% - 5rem), black 100%);
color: #eee;
}
body main > h1,
body main > h2 {
text-shadow: 0 0 0.25em #333;
}
body > header {
background-image:
radial-gradient(circle closest-side,
#ffffff 0%, #ffffff 25%,
#fdff51 25%, #d77a0d 32%,
#b63908 50%, transparent 100%),
radial-gradient(ellipse farthest-side,
#c63300 0px, #c63300 50%,
#c63300 50%, transparent 100%)
;
}
body > header a,
body > header a:visited {
color: black;
}
@media screen and (max-width: 35.374rem) {
body > header nav {
text-align: left;
}
body > header nav ul li {
margin-left: 1rem;
}
body > header nav a,
body > header nav a:visited {
color: white;
}
}
@media screen and (min-width: 35.375rem) {
body > header nav {
position: relative;
z-index: 10000;
}
body > header nav a {
background-color: hsl(25, 100%, 41.6%, 1);
box-shadow: 0 0 2rem hsl(25, 100%, 41.6%);
z-index: 10000;
font-weight: bold;
border-bottom: 0.5rem solid black;
padding: 0.25rem 1rem;
transition-duration: 0.666s;
transition-property: color, background-color, border-bottom-color;
}
body > header nav a:hover {
border-bottom-color: white;
color: white;
background-color: #c63300;
}
}
body header:before,
body header:after,
body header > :first-child:before {
content: ".";
color: transparent;
position: absolute;
display: block;
overflow: visible;
}
body header:before {
z-index: 48;
left: 50vw;
width: 12.5rem;
margin-left: -6.25rem;
top: 10rem;
margin-top: -6.25rem;
height: 12.5rem;
background: var(--soleil3);
box-shadow: 0 -25px 50px var(--soleil4);
}
body header:after {
z-index: 49;
left: 50vw;
width: 9rem;
margin-left: -4.5rem;
top: 10rem;
margin-top: -4.5rem;
height: 9rem;
background: var(--soleil2);
}
body header > :first-child:before {
z-index: 50;
left: 50vw;
width: 6.25rem;
margin-left: -3.125rem;
top: 10rem;
margin-top: -3.125rem;
height: 6.25rem;
background: white;
}
body header > :first-child * {
position: relative;
z-index: 100;
}
footer {
color: white;
}
footer a, footer a:visited {
border-bottom: 0.067rem dotted;
text-decoration: none;
color: inherit;
font-weight: bold;
}

62
css/t-day.css Normal file
View File

@ -0,0 +1,62 @@
:root {
--nuage-1: hsl(60, 100%, 97.6%);
--nuage-2: hsl(48, 20%, 80.4%);
--bleu-ciel: hsl(215.3, 91.1%, 78%);
}
body {
background: var(--bleu-ciel);
background-image: url("sprites/default_water.png"); /* fallback */
background-image:
linear-gradient(var(--bleu-ciel) 0%, var(--bleu-ciel) 10rem, transparent 25rem),
url("sprites/default_water.png");
background-size:
auto,
192px;
}
body > header .sitedesc {
color: #2e2c36;
}
body > header nav a,
body > header nav a:visited {
color: #333;
background: var(--nuage-1);
padding: 0.5rem 2rem;
}
body > header nav li a {
border-bottom: 0.125rem solid var(--nuage-2);
}
@media (min-width: 34.375rem) {
body > header nav li:first-of-type a {
border-left: 0.125rem solid var(--nuage-2);
}
body > header nav li:last-of-type a {
border-right: 0.125rem solid var(--nuage-2);
}
}
main > h1,
main > h2 {
color: white;
text-shadow: 0 0 0.5rem hsla(0, 0%, 0%, 0.75);
}
body > footer {
background: linear-gradient(transparent 0%, white calc(100% - 2rem));
}

47
css/t-night.css Normal file
View File

@ -0,0 +1,47 @@
body {
background-color: rgb(0, 4, 9);
background-image: url("ciel-etoile.png");
background-repeat: repeat;
color: white;
}
body > header a,
body > header a:visited {
color: white;
}
@media screen and (max-width: 35.374rem) {
body > header nav {
text-align: left;
}
body > header nav ul li {
margin-left: 1rem;
}
}
@media screen and (min-width: 35.375rem) {
body > header nav a,
body > header nav a:visited {
background-color: white;
color: rgb(0, 4, 9);
border-radius: 50%;
padding: 0.5rem 1rem;
box-shadow: 0 0 0.5rem white;
}
body > header nav {
overflow: visible;
}
}

85
developper.php Normal file
View File

@ -0,0 +1,85 @@
<?php
require 'config.php';
$title = 'Contribuer au développement &#8211; Juneland';
include 'templates/header.php';
?><article>
<h1>Contribuer au développement de Juneland</h1>
<h2>Défis en cours</h2>
<table>
<thead>
<tr>
<th>Récompense</th>
<th>Défi</th>
</tr>
</thead>
<tbody>
<tr>
<td class="nombre">
50 DU<sub>Ğ1</sub>
</td>
<td>
Construire un aérodrome<br />
(quand un mod adéquat sera prêt)
</td>
</tr>
<tr>
<td class="nombre">
100 DU<sub>Ğ1</sub>
</td>
<td>
Importer un mini monde de 100×100
</td>
</tr>
</tbody>
</table>
<h2>Défis relevés</h2>
<table>
<thead>
<tr>
<th>Récompense</th>
<th>Défi</th>
<th>Réalisé</th>
</tr>
</thead>
<tbody>
<tr>
<td class="nombre">
50 DU<sub>Ğ1</sub>
</td>
<td>
Construire un métro
</td>
<td>
par tuxmain
</td>
</tr>
<tr>
<td class="nombre">
100 DU<sub>Ğ1</sub>
</td>
<td>
Exporter ses messages <a href="https://scuttlebutt.nz">Scuttlebutt</a> depuis Juneland
</td>
<td>
par Be1
</td>
</tr>
</tbody>
</table>
</article><?php
include 'templates/footer.php';

20
guide.php Normal file
View File

@ -0,0 +1,20 @@
<?php
require 'config.php';
$title = 'Guide &#8211; JuneLand &#8211; MineTest';
include 'templates/header.php';
?>
<h1>Guides Juneland / Minetest</h1>
<?php
include 'templates/guides-nav.php';
?>
<?php
include 'templates/footer.php';

View File

@ -0,0 +1,28 @@
<?php
$bodyClass = 'guide';
require '../config.php';
include '../templates/header.php';
?>
<article>
<h1>Les boites aux lettres dans Juneland</h1>
<h2>À quoi servent les boites aux lettres&#8239;?</h2>
<h2>Comment laisser un message dans une boites aux lettres&#8239;?</h2>
<p>
Il vous faudra un livre.
</p>
<p>
Pour obtenir un livre, cherchez <q>book</q> dans votre inventaire.
</p>
</article>
<?php
include '../templates/footer.php';

View File

@ -0,0 +1,38 @@
<?php
$bodyClass = 'guide';
require '../config.php';
include '../templates/header.php';
?><article>
<h1>Ouvrir une boutique G1 dans Juneland</h1>
<h2> construire sa boutique&#8239;?</h2>
<h2>Sécuriser sa boutique pour que personne ne puisse la détruire</h2>
<h2>Exemples de boutiques</h2>
<section class="gallery gallery_2_1">
<figure>
<?php echo image('boutique-attilax.png', 'Boutique d\'Attilax', $imgLayouts['gallery_2_1']); ?>
<figcaption>Boutique d'Attilax</figcaption>
</figure>
<figure>
<?php echo image('boutique-chant-des-fleurs-2.png', 'Boutique Le Chant des Fleurs', $imgLayouts['gallery_2_1']); ?>
<figcaption>Boutique Le Chant des Fleurs</figcaption>
</figure>
<figure>
<?php echo image('boutique-tuxmain.png', 'Boutique de Tuxmain', $imgLayouts['gallery_2_1']); ?>
<figcaption>Boutique de tuxmain</figcaption>
</figure>
</section>
</article><?php
include '../templates/footer.php';

View File

@ -0,0 +1,50 @@
<?php
$bodyClass = 'guide';
require '../config.php';
include '../templates/header.php';
?><article>
<h1>Constuire, casser, et gérer l'inventaire</h1>
<table class="keymapping">
<thead>
<tr>
<th>Action</th>
<th>Touche par défaut</th>
</tr>
</thead>
<tbody>
<tr>
<td>Détruire / Miner</td>
<td><kdb>Clic gauche</kdb></td>
</tr>
<tr>
<td>Afficher l'inventaire</td>
<td><kdb>I</kdb></td>
</tr>
<tr>
<td>Construire</td>
<td><kdb>Clic droit</kdb></td>
</tr>
</tbody>
</table>
<h2>Plan Local d'Urbanisme</h2>
<p>Construisez vous voulez, de préférence espacé des autres constructions.</p>
</article><?php
include '../templates/footer.php';

View File

@ -0,0 +1,23 @@
<?php
$bodyClass = 'guide';
require '../config.php';
include '../templates/header.php';
?>
<article>
<h1>Discuter avec d'autres joueurs grâce à Mumble</h1>
<p>Pour discuter en audio pendant que vous jouez, vous pouvez utiliser notre instance Mumble par l'un des deux moyens suivants&nbsp;:</p>
<ul>
<li>Sans rien installer, <a href="https://txmn.tk/mumble" target="_blank">utilisez Mumble dans votre navigateur</a>.</li>
<li><a href="https://www.mumble.info/downloads/" target="_blank">Téléchargez Mumble</a> et connectez-vous au serveur <span class="mono">juneland.fr</span> port <span class="mono">64738</span>.</li>
</ul>
</article>
<?php
include '../templates/footer.php';

View File

@ -0,0 +1,100 @@
<?php
$bodyClass = 'guide install';
require '../config.php';
include '../templates/header.php';
?><article>
<h1>Installer Minetest</h1>
<p>Minetest est disponible sur les plateformes suivantes&nbsp;:</p>
<ol>
<li><a href="#gnu-linux">GNU/Linux</a></li>
<li><a href="#android">Android</a></li>
<li><a href="#windows">Windows</a></li>
<li><a href="#macos">MacOS</a></li>
<li><a href="#bsd">FreeBSD, OpenBSD, DragonFly BSD</a></li>
</ol>
<p>
Le serveur JuneLand requiert au moins la <strong>version 5.2</strong>.
</p>
<section id="gnu-linux"><div>
<h2>Installer Minetest sous GNU/Linux</h2>
<p>
Choisissez la version correspondant à votre système sur <a href="https://www.minetest.net/downloads" target="_blank">le site officiel</a>.
</p>
<p>Le serveur JuneLand requiert au moins la <strong>version 5.2</strong>.</p>
<p>Sur certaines versions (ex: Debian/Ubuntu stable), la version du paquet Minetest peut être trop ancienne.</p>
<h3>Comment avoir la bonne version</h3>
<p>Vérifiez la version dans votre gestionnaire de paquets&nbsp;:</p>
<code>sudo apt list minetest</code>
<ul>
<li>Si la version proposée par votre distribution est supérieure à la 5.2, installez-la.</li>
<li>Sinon, deux choix s'offrent à vous&nbsp;:
<ul>
<li>Téléchargez une version récente depuis <a href="https://www.minetest.net/downloads" target="_blank">le site officiel</a>.</li>
<li>ou <a href="https://wiki.debian.org/Backports" target="_blank">activez les backports</a>
</ul>
</li>
</ul>
</div></section>
<section id="android"><div>
<h2>Installer Minetest sous Android</h2>
<p>
Vous trouverez Minetest dans <a href="https://play.google.com/store/apps/details?id=net.minetest.minetest">le Google Play Store</a>
ainsi que sur <a href="https://f-droid.org/en/packages/net.minetest.minetest/">F-Droid</a>.
</p>
</div></section>
<section id="windows"><div>
<h2>Installer Minetest sous Windows</h2>
<ol>
<li>Téléchargez le fichier ZIP sur <a href="https://www.minetest.net/downloads" target="_blank">le site officiel</a></li>
<li>Décompressez le fichier ZIP</li>
<li>Allez dans le dossier "bin"</li>
<li>Lancez l'exécutable qui finit par .exe</li>
</ol>
</div></section>
<section id="macos"><div>
<h2>Installer Minetest sous MacOS</h2>
<p>Vous pouvez installer Minetest via Homebrew&nbsp;:</p>
<code>brew install minetest</code>
</div></section>
<section id="bsd"><div>
<h2>Installer Minetest sous FreeBSD, OpenBSD, DragonFly BSD</h2>
</div></section>
</article><?php
include '../templates/footer.php';

View File

@ -0,0 +1,44 @@
<?php
$bodyClass = 'guide';
require '../config.php';
include '../templates/header.php';
?><article>
<h1>Comment utiliser la monnaie libre Ğ1 dans Juneland</h1>
<p>Pour échanger en Ğ1 dans JuneLand Survival, on utilise un jeton intermédiaire, le MineGeld (MG).</p>
<p>Vous pouvez voir les MG un peu comme les tickets boisson dans les festivals.</p>
<p>Les joueurs peuvent échanger dans Juneland en troquant des objets contre des MG. Il est aussi possible d'échanger directement les objets (troc).</p>
<h2>Utiliser ses Ğ1</h2>
<p>Pour obtenir acheter des MG, envoyez une transaction à <span class="mono">DFQ3eHm9GCRsvhtkZMup8sd4WcuQ3wsEr79JpqtyAfzy</span> avec pour commentaire <em>MG</em> suivi de votre pseudo sur MineTest.</p>
<p>Allez ensuite à la ĞBanque dans JuneLand Survival, vos MG seront apparues dans le coffre est inscrit votre pseudo. Nous faisons cette opération manuellement&#8239;; il faudra parfois attendre quelques jours.</p>
<h2>Gagner des Ğ1</h2>
<p>Si vous avez beaucoup de MG, vous pouvez les échanger contre des Ğ1.</p>
<p>Vous trouver les instructions pour faire cette opération directement dans Juneland Survival.</p>
<h2>Taux de conversion</h2>
<p>1 Ğ1 = 10 MG</p>
</article><?php
include '../templates/footer.php';

View File

@ -0,0 +1,65 @@
<?php
$bodyClass = 'guide';
require '../config.php';
include '../templates/header.php';
?><article>
<h1>Les panneaux dans Minetest</h1>
<p>
Les panneaux peuvent remplir plusieurs fonctions.
</p>
<p>
Vous pouvez par exemple les utiliser pour
signaler des choses aux autres joueurs,
poser une question, y répondre,
ou même créer un livre d'or en accolant plusieurs panneaux les uns à côtés des autres.
</p>
<p>
Sur Juneland Creative, vous trouverez des panneaux dans votre inventaire en tapant <q>sign</q> (ce qui veut dire <q>panneau</q> en anglais)
</p>
<table class="keymapping">
<thead>
<tr>
<th>Action</th>
<th>Touche par défaut</th>
</tr>
</thead>
<tbody>
<tr>
<td>Afficher l'inventaire</td>
<td><kdb>I</kdb></td>
</tr>
<tr>
<td>Poser un panneau</td>
<td><kdb>Clic droit</kdb> sur une surface</td>
</tr>
<tr>
<td>Écrire sur un panneau</td>
<td><kdb>Clic droit</kdb> sur le panneau</td>
</tr>
</tbody>
</table>
<h2>Formatter son texte</h2>
<p>
Vous pouvez changer la couleur du texte et la couleur du fond grâce à des codes à placer en début de ligne, de <q>#0</q> jusqu'à <q>#9</q>.
</p>
</article><?php
include '../templates/footer.php';

View File

@ -0,0 +1,67 @@
<?php
$bodyClass = 'guide';
require '../config.php';
include '../templates/header.php';
?><article>
<h1>Rejoindre un serveur Juneland</h1>
<p>
Pour rejoindre un monde Juneland, vous devez d'abord connaître l'adresse et le port auxquels vous devez vous connecter, en fonction du monde que vous avez choisi.
</p>
<h2>Liste des mondes disponibles pour l'instant</h2>
<table>
<thead>
<tr>
<th>Nom</th>
<th>Description</th>
<th>Adresse</th>
<th>Port</th>
</tr>
</thead>
<tbody>
<tr>
<th>JuneLand Creative</th>
<td>un monde créatif les ressources sont illimitées, on peut voler et se téléporter. On y construit ce qu'on veut sans limites.</td>
<td>juneland.fr</td>
<td>30000</td>
</tr>
<tr>
<th>JuneLand Survival</th>
<td>un monde survie il faut récolter, chasser, miner et bricoler pour vivre et pouvoir construire des machines. On peut y échanger des ressources en monnaie libre Ğ1.</td>
<td>juneland.fr</td>
<td>30001</td>
</tr>
</tbody>
</table>
<h2>Rejoindre un monde</h2>
<ol>
<li>Démarrez MineTest</li>
<li>Allez dans <em>rejoindre une partie</em></li>
<li>Choisissez un nom dutilisateur</li>
<li>Choisissez un mot de passe&#8239;; il n'a pas besoin d'être aussi fort que votre mot de passe Ğ1</li>
<li>dans <em>server</em>, tapez l'adresse du monde choisi (ex&nbsp;: <span class="mono">juneland.fr</span>)</li>
<li>dans <em>port</em> indiquez le port du monde choisi (30000 ou 30001).</li>
</ol>
<p class="warn">
Pour <strong>taper des chiffres</strong>, les touches du <strong>pavé numérique</strong> ne fonctionnent pas.
Utilisez plutôt les chiffres en haut du clavier. Le copier-coller fonctionne, mais parfois il faut essayer plusieurs fois.
</p>
</article><?php
include '../templates/footer.php';

View File

@ -0,0 +1,116 @@
<?php
$bodyClass = 'guide';
require '../config.php';
include '../templates/header.php';
?><article>
<h1>Se déplacer dans Juneland</h1>
<p>
Lorsque vous apparaissez dans JuneLand, vous pouvez réassigner les touches du clavier à votre goût
en appuyant sur <kdb>Échap</kdb> puis <strong>changer touches</strong>.
</p>
<table class="keymapping">
<thead>
<tr>
<th>Action</th>
<th>Touche par défaut</th>
</tr>
</thead>
<tbody>
<tr>
<td>Avancer</td>
<td><kdb>Z</kdb></td>
</tr>
<tr>
<td>Reculer</td>
<td><kdb>S</kdb></td>
</tr>
<tr>
<td>Gauche</td>
<td><kdb>Q</kdb></td>
</tr>
<tr>
<td>Droite</td>
<td><kdb>D</kdb></td>
</tr>
<tr>
<td>Sauter</td>
<td><kdb>Espace</kdb></td>
</tr>
<tr>
<td>Accélérer</td>
<td><kdb></kdb></td>
</tr>
<tr>
<td>Se téléporter</td>
<td>
<code>/teleport x y z</code>
<br />(le y est la hauteur)
</td>
</tr>
<tr>
<td>Afficher les coordonnées de la position actuelle (pour éventuellement s'y téléporter plus tard)</td>
<td>
<kdb>F5</kdb>
</td>
</tr>
<tr>
<td>Monter une échelle</td>
<td><kdb>Espace</kdb></td>
</tr>
<tr>
<td>Se baisser</td>
<td><kdb>Maj / Shift</kdb></td>
</tr>
<tr>
<td>Descendre</td>
<td><kdb>Maj / Shift</kdb></td>
</tr>
<tr>
<td>Activer (ouvrir une porte, par exemple)</td>
<td>Clic droit</td>
</tr>
<tr>
<td>Voler</td>
<td><kdb>K</kdb> ou double <kdb>Espace</kdb></td>
</tr>
<tr>
<td>Afficher la minicarte</td>
<td><kdb>F9</kdb></td>
</tr>
<tr>
<td>Chat / Console</td>
<td><kdb>T</kdb></td>
</tr>
<tr>
<td>Menu / Quitter</td>
<td><kdb>Échap</kdb></td>
</tr>
</tbody>
</table>
</article><?php
include '../templates/footer.php';

BIN
img/boite-aux-lettres.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 358 KiB

BIN
img/boutique-attilax.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
img/boutique-tuxmain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
img/boutiques.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 KiB

BIN
img/course-de-sieges.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 KiB

BIN
img/echanger-MG-G1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
img/ile-des-logiciels-libres.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 KiB

BIN
img/juneland-colline.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

BIN
img/juneland-creative.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
img/mumble.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
img/panneaux.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
img/ponts.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 KiB

BIN
img/pyramide.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 KiB

BIN
img/quai-des-rencontres.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

204
index.php Normal file
View File

@ -0,0 +1,204 @@
<?php
require 'config.php';
$title = 'JuneLand &#8211; Mondes MineTest dédiés à la monnaie libre Ğ1';
$bodyClass = 'home';
$isHome = true;
include 'templates/header.php';
?>
<!--
<details id="invite">
<summary>
<time datetime="2020-11-13 20:00">13 nov 2020</time>
Invitation Juneland
</summary>
<div>
<p class="adresse">Cher juniste, cher mineur,</p>
<p>
Le prochain rendez-vous Juneland aura lieu <time datetime="2020-11-13 20:00">vendredi 13 novembre 2020, à 20h00</time>.
</p>
<p>
Le monde sera Juneland Creative (juneland.fr:30000) et le point de rendez-vous est le <em>Quai des rencontres</em> (<kdb>/teleport 0, 0, 0</kdb>).
</p>
<p>
Au programme&nbsp;: chantier participatif de construction d'une statue géante de Stéphane Laborde.
</p>
<p class="politesse">
En espérant t'y voir,
</p>
<p class="signature">
<cite>tuxmain &amp; attilax</cite>
</p>
<p>
PS&nbsp;: Si tu veux qu'on te tienne au jus quand on fait un truc, <a href="#infolettre">demande</a>.
</p>
</div>
</details>
-->
<iframe id="video-presentation"
width="560"
height="315"
sandbox="allow-same-origin allow-scripts allow-popups"
src="https://tube.p2p.legal/videos/embed/87ffe1c8-f907-42ac-a4c5-105af4ee54f0"
frameborder="0"
allowfullscreen></iframe>
<h2>Six raisons de venir sur Juneland</h2>
<dl id="benefits">
<dt>
Faites les boutiques en 3D
</dt>
<dd>
<?php echo image('boutiques.png', 'Juneland, serveur Minetest français', $imgLayouts['col_3_2_1_bordered']); ?>
<p>
<dfn>Juneland Creative</dfn> permet de faire les magasins à l'ancienne. Promenez-vous dans les quartiers commerçants et visitez la boutique de chaque juniste pour découvrir qui produit quoi, et voir ce que vous pouvez acheter avec vos Ğ1. Faire du shopping n'a jamais été aussi sympa.
</p>
</dd>
<dt>Rencontrez d'autres junistes</dt>
<dd>
<?php echo image('quai-des-rencontres.png', 'Faire des rencontres sur Minetest / Minecraft', $imgLayouts['col_3_2_1_bordered']); ?>
<p>
La licence Ğ1 stipule que, pour certifier quelqu'un afin qu'il rentre dans la toile de confiance Ğ1,
il faut <q>bien le connaître</q>, et l'avoir rencontré dans la vraie vie.
</p>
<p>
Avant ça, pourquoi ne pas commencer à faire connaissance en ligne&#8239;?
Et quoi de plus convivial pour un premier contact qu'un jeu vidéo&#8239;?
</p>
<p>
Au choix, vous pouvez chatter dans Minetest, ou parler de vive voix grâce à
<a href="<?php echo ROOT_URL; ?>guide/discuter-minetest-mumble">notre serveur Mumble</a>.
</p>
<p>
Si on peut dire de nos parcs d'attractions qu'ils sont "virtuels", les rencontres qu'ils facilitent,
elles, sont bien réelles&#8239;!
</p>
</dd>
<dt>Gagnez des Ğ1</dt>
<dd>
<?php echo image('echanger-MG-G1.png', 'De la monnaie dans Minetest / Minecraft', $imgLayouts['col_3_2_1_bordered']); ?>
<p>
Dans <dfn>Juneland Survival</dfn>, vous pouvez échanger des objets en MG, des jetons de Ğ1.
</p>
<p>
Vous pouvez ensuite convertir ces MG en Ğ1 pour acheter des objets dans la "vraie vie", par exemple sur <a href="https://gchange.fr">gchange.fr</a>.
</p>
</dd>
<dt>Créez à plusieurs</dt>
<dd>
<?php echo image('ile-des-logiciels-libres.png', 'Collaboration sur Minetest / Minecraft', $imgLayouts['col_3_2_1_bordered']); ?>
<p>
<dfn>Juneland Creative</dfn>, c'est aussi, et avant tout, un espace de création artistique dédié au monde du libre en général.
</p>
<p>
Faites un tour sur <em>L'île du libre</em> pour y ajouter votre logiciel préféré.
</p>
</dd>
<dt>
Construisez votre boutique
</dt>
<dd>
<?php echo image('boutique-attilax.png', 'Boutique Minetest / Minecraft', $imgLayouts['col_3_2_1_bordered']); ?>
<p>
Quel meilleur moyen pour faire la promo de ce que vous vendez que d'avoir votre propre boutique&#8239;? Dans <dfn>Juneland Creative</dfn>, vous aurez pignon sur rue&#8239;!
</p>
</dd>
<dt>
Jouez
</dt>
<dd>
<?php echo image('course-de-sieges.png', 'Course de sièges dans Minetest / Minecraft', $imgLayouts['col_3_2_1_bordered']); ?>
<p>
MineTest est avant tout un jeu, et jouer est indispensable au bien-être d'un être humain.
</p>
<p>
<em>Juneland Survival</em> est un jeu en lui même&nbsp;: il faut survivre aux attaques des monstres.
</p>
<p>
<em>Juneland Creative</em> offre lui aussi son lot de jeux, comme la course de sièges.
</p>
</dd>
</dl>
<h2>Deux mondes, deux ambiances</h2>
<dl id="worlds">
<dt>JuneLand Creative</dt>
<dd>
<?php echo image('juneland-creative.png', 'Juneland Creative, serveur Minetest français', $imgLayouts['col_2_1_bordered']); ?>
<p>
<dfn>JuneLand Creative</dfn> est un monde dédié à la promotion des vendeurs de la Ğ1. On y fait les boutiques ou on construit la sienne.
On admire les oeuvres d'art créées par les autres junistes ou on crée la sienne.
Les ressources y sont illimitées. On peut voler et se téléporter. On y construit ce qu'on veut sans limites.
</p>
<address class="server">
<dfn>MineTest</dfn>
<span>juneland.fr</span>
<span>30000</span>
</address>
</dd>
<dt>JuneLand Survival</dt>
<dd>
<?php echo image('outils-pour-le-commerce.png', 'De la monnaie dans Minetest / Minecraft', $imgLayouts['col_2_1_bordered']); ?>
<p>
<dfn>JuneLand Survival</dfn> est un monde survie il faut récolter, chasser, miner et bricoler pour vivre et pouvoir construire des machines.
On peut gagner des Ğ1 en vendant des ressources, ou au contraire utiliser ses Ğ1 pour obtenir des ressources.
</p>
<address class="server">
<dfn>MineTest</dfn>
<span>juneland.fr</span>
<span>30001</span>
</address>
</dd>
</dl>
<h2>Comment venir visiter Juneland</h2>
<?php
include 'templates/guides-nav.php';
?>
<?php
include 'templates/footer.php';

41
js/menu.js Normal file
View File

@ -0,0 +1,41 @@
/**
* Open the menu, when click on the menu header button
*/
var menuOpened = false;
function toggleMenu() {
var nav = document.querySelector("header nav");
var menu = document.querySelector("header nav ul");
var maxHeight = (menu.childElementCount * 3.25 + 1) + "rem";
if (!menuOpened) {
menuOpened = true;
nav.style.height = "100vh";
nav.style.width = "100vw";
nav.style.backgroundColor = "hsla(0, 0%, 0%, 0.75)";
menu.style.opacity = "1";
menu.style.height = maxHeight;
} else {
menuOpened = false;
menu.style.opacity = "0";
menu.style.height = "0rem";
nav.style.backgroundColor = "transparent";
nav.style.height = "auto";
nav.style.width = "auto";
}
}
document.querySelector("header nav button").addEventListener("click", toggleMenu);

30
js/slideshow.js Normal file
View File

@ -0,0 +1,30 @@
// https://www.w3schools.com/howto/howto_js_slideshow.asp
var slideIndex = 1;
showSlides(slideIndex);
// Next/previous controls
function plusSlides(n) {
showSlides(slideIndex += n);
}
// Thumbnail image controls
function currentSlide(n) {
showSlides(slideIndex = n);
}
function showSlides(n) {
var i;
var slides = document.getElementsByClassName("slide");
var dots = document.getElementsByClassName("slide-dot");
if(n > slides.length) {slideIndex = 1}
if(n < 1) {slideIndex = slides.length}
for(i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
for(i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace(" slide-active", "");
}
slides[slideIndex-1].style.display = "block";
dots[slideIndex-1].className += " slide-active";
}

153
soutenir.php Normal file
View File

@ -0,0 +1,153 @@
<?php
require 'config.php';
$title = 'Soutenir le développement &#8211; Juneland';
include 'templates/header.php';
define('FUNDING_PUBKEY', 'ENA89PPrBHS8wxhxgGMZxUXd53nRw1BaXBDvCVmZ6Tip');
?><article>
<h1>Soutenir le développement de Juneland</h1>
<h2>Merci aux donateurs&#8239;!</h2>
<?php
require_once('vendor/crowdfunding2/Crowdfunding.class.php');
require_once('vendor/crowdfunding2/Chart.class.php');
require_once('vendor/crowdfunding2/Graph.class.php');
$CF = new Crowdfunding(FUNDING_PUBKEY,
'relative',
'2020-05-01');
$donors = $CF->getDonors();
if (empty($donors)) {
echo _('Pas encore de donateurs');
} else {
echo '<ul class="donorsList">';
foreach ($donors as $donor) {
$donorProfile = $CF->getDonorCesiumPlusProfile($donor);
echo '
<li>';
echo '
<a href="https://demo.cesium.app/#/app/wot/'. $donor .'/">';
$avatar = $donorProfile->getAvatar();
if (!empty($avatar)) {
echo '<img src="data:'. $avatar->getContentType(). ';base64, '. $avatar->getContent() .'" />';
} else {
echo '<img class="default" src="'. DEFAULT_AVATAR .'" />';
}
echo '
<span class="name">
<span>
'. $donorProfile->getName() .'
</span>
</span>
</a>
</li>';
}
echo '</ul>';
}
?>
<h2>Que soutenez-vous&#8239;?</h2>
<p>
En donnant à Juneland, vous nous aidez à financer les <a href="<?php echo ROOT_URL;?>developper">défis développeurs</a>&nbsp;:
on met les développeurs aux défi de coder une fonctionnalité pour enrichir Juneland. Celui qui l'accomplit remporte le prix.
</p>
<h2>Comment donner</h2>
<div class="CTA">
<p>
Copiez la clef de notre compte Ğ1 dans votre presse-papier&nbsp;:
</p>
<p class="pubkey-and-copy-button">
<input id="pubkey" type="text" value="<?php echo FUNDING_PUBKEY; ?>" readonly />
<button id="copy">
Copier la clef
</button>
</p>
<div id="successMsg">
<p>Et maintenant collez-la dans votre client Ğ1 (Cesium par exemple) afin de faire votre don 😉</p>
<p class="politesse">Merci pour votre générosité ❤️</p>
</div>
</div>
<h2>État actuel des finances</h2>
<p>Le projet est actuellement en bonne santé financière.</p>
<figure id="chart"></figure>
</article>
<?php
$CF->setTarget(1000);
$chart = new Chart($CF);
$amountCumulativeGraph = new Graph($chart->getAmountCollectedByDayCumulativePoints(), _('Montant total récolté'));
$amountCumulativeGraph->setStyle('type', 'line');
$amountCumulativeGraph->setStyle('borderColor', '#662b00');
$amountCumulativeGraph->setStyle('backgroundColor', 'green');
$amountCumulativeGraph->setStyle('lineTension', 0);
$amountCumulativeGraph->setStyle('pointRadius', 1);
$amountCumulativeGraph->setStyle('borderWidth', 2);
$amountCumulativeGraph->setStyle('steppedLine', true);
$chart->addGraph($amountCumulativeGraph);
$footerScripts = '';
$footerScripts .= $chart->getScripts('fr', '#chart', ROOT_URL . 'vendor/crowdfunding2/');
$footerScripts .= '
<script>
function copy() {
var copyText = document.querySelector("input#pubkey");
copyText.select();
document.execCommand("copy");
var successMsg = document.querySelector("#successMsg");
successMsg.style.opacity = "1";
/*successMsg.style.height = "3em";*/
var copyButton = document.querySelector("button#copy");
copyButton.style.animation = "none";
}
document.querySelector("button#copy").addEventListener("click", copy);
</script>';
include 'templates/footer.php';

41
templates/footer.php Normal file
View File

@ -0,0 +1,41 @@
</main>
<footer>
<nav>
<?php include('menu.php'); ?>
</nav>
<aside id="serverlist">
<address class="server">
<dfn>MineTest</dfn>
<span>juneland.fr</span>
<span>30000</span>
</address>
<address class="server">
<dfn>MineTest</dfn>
<span>juneland.fr</span>
<span>30001</span>
</address>
<address class="server">
<dfn>Mumble 🎧</dfn>
<span>juneland.fr</span>
<span>64738</span>
</address>
</aside>
<p role="contentinfo">
CopyLeft 2020 Pascal Engélibert, Boris Paing &#8211; Bannière&nbsp;: Attilax &#8211; Contenu sous <a href="https://creativecommons.org/licenses/by-sa/4.0">CC BY-SA 4.0</a>, <a href="juneland.tar.gz">code</a> sous <a href="https://www.gnu.org/licenses/licenses.html#AGPL">GNU AGPL v3</a>.
</p>
</footer>
<script src="<?php echo ROOT_URL; ?>js/menu.js"></script>
<?php
if (isset($footerScripts)) {
echo $footerScripts;
}
?>
</body>
</html>

95
templates/guides-nav.php Normal file
View File

@ -0,0 +1,95 @@
<ol id="guides">
<li>
<a href="<?php echo ROOT_URL; ?>guide/installer-minetest">
<dfn>Installer Minetest</dfn>
<span class="sr-only">&nbsp;: </span>
<span>Guides d'installation pour Windows, MacOS, GNU/Linux, Android, FreeBSD, OpenBSD, DragonFly BSD.</span>
<?php // echo image('name.png', 'alt', $imgLayouts['col_3_2_1']); ?>
</a>
</li>
<li>
<a href="<?php echo ROOT_URL; ?>guide/rejoindre-serveur-minetest">
<dfn>Rejoindre un serveur Juneland</dfn>
<span class="sr-only">&nbsp;: </span>
<span>Se connecter à Juneland Creative ou Juneland Survival, choisir son mot de passe, etc.</span>
<?php echo image('juneland-colline.png', 'Colline Minetest / Minecraft', $imgLayouts['col_3_2_1']); ?>
</a>
</li>
<li>
<a href="<?php echo ROOT_URL; ?>guide/se-deplacer-dans-minetest">
<dfn>Comment se déplacer efficacement</dfn>
<span class="sr-only">&nbsp;: </span>
<span>Accélérer, voler, se téléporter, etc...</span>
<?php echo image('ponts.png', 'Ponts dans Minetest / Minecraft', $imgLayouts['col_3_2_1']); ?>
</a>
</li>
<li>
<a href="<?php echo ROOT_URL; ?>guide/constuire-inventaire-minetest">
<dfn>Comment constuire, détruire, reconstuire</dfn>
<span class="sr-only">&nbsp;: </span>
<span>Les matériaux, les angles, etc...</span>
<?php echo image('pyramide.png', 'Pyramide dans Minetest / Minecraft', $imgLayouts['col_3_2_1']); ?>
</a>
</li>
<li>
<a href="<?php echo ROOT_URL; ?>guide/panneaux-minetest">
<dfn><span>Comment écrire sur un panneau&nbsp;?</span> <span>Et pour quoi faire&#8239;?</span></dfn>
<span class="sr-only">&nbsp;: </span>
<span>Petites annonces, mots doux... vous saurez tout.</span>
<?php echo image('panneaux.png', 'Panneaux signalétiques avec texte dans Minetest / Minecraft', $imgLayouts['col_3_2_1']); ?>
</a>
</li>
<li>
<a href="<?php echo ROOT_URL; ?>guide/boite-aux-lettres-minetest">
<dfn>Comment poster un message dans une boîte aux lettres</dfn>
<span class="sr-only">&nbsp;: </span>
<span>De l'art d'envoyer des missives aux autres joueurs.</span>
<?php echo image('boite-aux-lettres.png', 'Boîte aux lettre dans Minetest / Minecraft', $imgLayouts['col_3_2_1']); ?>
</a>
</li>
<li>
<a href="<?php echo ROOT_URL; ?>guide/discuter-minetest-mumble">
<dfn>Comment configurer Mumble pour parler aux joueurs à proximité</dfn>
<span class="sr-only">&nbsp;: </span>
<span>Parler de vive voix, c'est toujours plus sympa.</span>
<?php echo image('mumble.png', 'Mumble dans Minetest / Minecraft', $imgLayouts['col_3_2_1']); ?>
</a>
</li>
<li>
<a href="<?php echo ROOT_URL; ?>guide/boutique-g1-minetest">
<dfn><span>Comment construire sa boutique&#8239;?</span> <span>Et où&#8239;?</span></dfn>
<span>Permis de construire et Plan Local d'Urbanisme&nbsp;: le maire vous dit tout.</span>
<?php echo image('boutique-chant-des-fleurs.png', 'Boutique dans Minetest / Minecraft', $imgLayouts['col_3_2_1']); ?>
</a>
</li>
<li>
<a href="<?php echo ROOT_URL; ?>guide/monnaie-argent-minetest">
<dfn>Utiliser la Ğ1 dans Juneland</dfn>
<span class="sr-only">&nbsp;: </span>
<span>Gagner de la monnaie dans Minetest, et la dépenser dans la vraie vie, c'est possible&#8239;!</span>
<?php echo image('echanger-MG-G1.png', 'Utiliser de l\'argent dans Minetest / Minecraft', $imgLayouts['col_3_2_1']); ?>
</a>
</li>
</ol>

95
templates/header.php Normal file
View File

@ -0,0 +1,95 @@
<?php
if (!isset($title)) {
$title = DEFAULT_TITLE;
}
$bodyClass = isset($bodyClass) ? ' class="'. $bodyClass .'"' : '';
$h = localtime()[2];
if($h >= 9 and $h < 17) {
$sheet = 't-day';
} elseif($h < 6 or $h > 20) {
$sheet = 't-night';
} else {
$sheet = 't-dawn-or-dusk';
}
function changeEveryNSec ($n, $a) {
$nbElts = count($a);
$refresh = $n * $nbElts;
return $a[floor((time() % $refresh) / ($refresh / $nbElts))];
}
$taglines = [
'<span>terrains numériques constructibles</span> <span>pour junistes</span>',
'<span>mondes 3D</span> <span>pour rencontrer d\'autres junistes</span>',
'<span>pour empiler des cubes</span> <span>entre junistes</span>',
'<span>parc d\'attractions numériques</span> <span>pour la monnaie libre Ğ1&#8239;!</span>',
'<span>des lieux pour créer, jouer, gagner ou dépenser des Ğ1</span>',
'<span>espaces de convivialité numériques</span> <span>pour junistes</span>',
];
$siteDesc = changeEveryNSec(2, $taglines);
?>
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8"/>
<title><?php echo $title; ?></title>
<link rel="stylesheet" href="<?php echo ROOT_URL;?>css/layout.css"/>
<link rel="stylesheet" href="<?php echo ROOT_URL;?>css/layout-home.css"/>
<link rel="stylesheet" href="<?php echo ROOT_URL;?>css/layout-donors.css"/>
<link rel="stylesheet" href="<?php echo ROOT_URL;?>css/decoration.css"/>
<link rel="stylesheet" href="<?php echo ROOT_URL;?>css/decoration-home.css"/>
<link rel="stylesheet" href="<?php echo ROOT_URL;?>css/decoration-donors.css"/>
<link rel="icon" type="image/png" href="<?php echo ROOT_URL; ?>Minetest_logo-240px.png"/>
<link rel="stylesheet" href="<?php echo ROOT_URL . 'css/' . $sheet . '.css'; ?>"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
</head>
<body<?php echo $bodyClass; ?>>
<header>
<?php
$elt = isset($isHome) ? 'h1' : 'p';
?>
<<?php echo $elt; ?>>
<a href="<?php echo ROOT_URL; ?>">
<span class="sitename">Juneland</span>
<span class="sr-only"> : </span>
<span class="sitedesc"><?php echo $siteDesc; ?></span>
</a>
</<?php echo $elt; ?> >
<nav>
<button>
<span>Afficher le menu</span>
</button>
<?php include('menu.php'); ?>
</nav>
</header>
<main id="content">

6
templates/menu.php Normal file
View File

@ -0,0 +1,6 @@
<ul>
<li><a href="<?php echo ROOT_URL; ?>">Présentation</a></li>
<li><a href="<?php echo ROOT_URL; ?>guide">Guides</a></li>
<li><a href="<?php echo ROOT_URL; ?>developper">Développer</a></li>
<li><a href="<?php echo ROOT_URL; ?>soutenir" aria-label="Soutenir" title="Soutenir"></a></li>
</ul>

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

96
thumb.php Normal file
View File

@ -0,0 +1,96 @@
<?php
require_once('config.php');
if (!isset($_GET['thumbWidth']) or !in_array($_GET['thumbWidth'], $acceptedWidth)) {
die('Cette taille n\'est pas disponible.');
}
$jpegQuality = 75;
$imgFilename = $_GET['filename'];
$imgName = substr($imgFilename, 0, strrpos($imgFilename, '.'));
$origImgDir = 'img/';
$origImgPath = $origImgDir . $imgName;
if (file_exists($origImgPath . '.png')) {
$origImgExt = 'png';
} elseif (file_exists($origImgPath . '.jpg') or file_exists($origImgPath . '.jpeg')) {
$origImgExt = 'jpg';
} else {
die('L\'image source n\'a pas été trouvée.');
}
$origImgPath .= '.' . $origImgExt;
list($origImgWidth, $origImgHeight, $origImgType) = getimagesize($origImgPath);
switch ($origImgType) {
case 1:
$origImgType = 'GIF';
break;
case 2:
$origImgType = 'JPEG';
break;
case 3:
$origImgType = 'PNG';
break;
default:
die('Le type de l\'image originale n\'a pas été reconnu.');
}
$thumbWidth = intval($_GET['thumbWidth']);
$thumbHeight = round($thumbWidth / $origImgWidth * $origImgHeight);
$thumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
if ($origImgType == 'JPEG') {
$origImg = imagecreatefromjpeg($origImgPath);
} elseif ($origImgType == 'PNG') {
$origImg = imagecreatefrompng($origImgPath);
}
// Redimensionnement
imagecopyresampled(
$thumb,
$origImg,
0, 0,
0, 0,
$thumbWidth, $thumbHeight,
$origImgWidth, $origImgHeight
);
$thumbDir = 'thumbs/' . $thumbWidth . 'w/';
$thumbPath = $thumbDir . $imgName . $thumbExt;
if (!is_dir($thumbDir)) {
mkdir($thumbDir, 0777);
}
header('Content-Type: image/jpeg');
imagejpeg($thumb, $thumbPath, $jpegQuality);
imagejpeg($thumb);
imagedestroy($thumb, $origImg);

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
thumbs/400w/boutiques.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
thumbs/408w/mumble.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
thumbs/408w/panneaux.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
thumbs/408w/ponts.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
thumbs/408w/pyramide.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Some files were not shown because too many files have changed in this diff Show More