diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b936b79 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +guide.html diff --git a/Dockerfile b/Dockerfile index 77adc9b..38e5b29 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM docker.io/nginx:1.29-alpine -COPY index.html poster.html /usr/share/nginx/html +COPY index.html poster.html guide.html contact.html /usr/share/nginx/html COPY assets /usr/share/nginx/html/assets COPY css /usr/share/nginx/html/css COPY js /usr/share/nginx/html/js diff --git a/README.md b/README.md index 2a7dfc8..9bd2043 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,28 @@ # Interhack Camp Website 2026 -## Build the Docker image +## How to deploy : + +### generate statuses PDF + +Statuses are stored in [this online pad](https://md.interhacker.space/u2VNUSO6S36xx5Ensc3FCw). + +PDF can be generated thanks to `pandoc` and the good old `curl` this way: + +```sh +curl -s https://md.interhacker.space/u2VNUSO6S36xx5Ensc3FCw/download | pandoc -V geometry:margin=3cm -o assets/Camp-Interhack_Statuts.pdf +``` + +### Generation de la page Guide. + +La page Guide est générée depuis un Hedgedocs, en markdown, via le fichier update-guide.sh qui utilise le fichier guide.template.html. Le contenu de la page est donc un HTML basique in fine. + +```sh +bash update-guide.sh +``` + +### Build the Docker image + +Please generate We use Docker for deploying on the Interhack infra. Until we have a proper CI, we need to build manually. @@ -28,13 +50,3 @@ docker push git.interhacker.space/interhack/camp-website-2026:latest The pull process is triggered every five minutes. So you may wait at least this amount of time before the website is up-to-date! (and Ctrl + Shift + R is useful to nuke cache) - -## generate statuses PDF - -Statuses are stored in [this online pad](https://md.interhacker.space/u2VNUSO6S36xx5Ensc3FCw). - -PDF can be generated thanks to `pandoc` and the good old `curl` this way: - -```sh -curl -s https://md.interhacker.space/u2VNUSO6S36xx5Ensc3FCw/download | pandoc -V geometry:margin=3cm -o assets/Camp-Interhack_Statuts.pdf -``` diff --git a/assets/Banquise-Regular.woff b/assets/Banquise-Regular.woff deleted file mode 100644 index 9454177..0000000 Binary files a/assets/Banquise-Regular.woff and /dev/null differ diff --git a/assets/Dymo.ttf b/assets/Dymo.ttf deleted file mode 100644 index 4ae075c..0000000 Binary files a/assets/Dymo.ttf and /dev/null differ diff --git a/assets/Erika-Type.ttf b/assets/Erika-Type.ttf deleted file mode 100644 index c581164..0000000 Binary files a/assets/Erika-Type.ttf and /dev/null differ diff --git a/assets/Thunometre-participanxes.pdf b/assets/Thunometre-participanxes.pdf new file mode 100755 index 0000000..2ff81bc Binary files /dev/null and b/assets/Thunometre-participanxes.pdf differ diff --git a/assets/background.jpg b/assets/background.jpg deleted file mode 100644 index 88531b7..0000000 Binary files a/assets/background.jpg and /dev/null differ diff --git a/assets/camp-interhack.ics b/assets/camp-interhack.ics new file mode 100644 index 0000000..d995765 --- /dev/null +++ b/assets/camp-interhack.ics @@ -0,0 +1,39 @@ +BEGIN:VCALENDAR +X-LOTUS-CHARSET:UTF-8 +VERSION:2.0 +PRODID:ZMS-Berlin +BEGIN:VTIMEZONE +TZID:Europe/Berlin +X-LIC-LOCATION:Europe/Berlin +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +TZOFFSETTO:+0200 +TZNAME:CEST +DTSTART:19700329T020000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +TZOFFSETTO:+0100 +TZNAME:CET +DTSTART:19701025T030000 +RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10 +END:STANDARD +END:VTIMEZONE +METHOD:REQUEST +BEGIN:VEVENT +UID:ics.terminsysteme.de1769434840 +DTSTAMP:20260126T144040 +CLASS:PUBLIC +DTSTART;TZID=Europe/Berlin:20260702T100000 +DTEND;TZID=Europe/Berlin:20260705T230000 +LOCATION:15 route de Saint Dolay 44530 Sévérac | 47.5437595, -2.0916116 +SUMMARY:Camp Interhack +DESCRIPTION: Le Camp Interhack 2026 est un événement festif de hacking ! Le hack c’est le détournement des machines, des pratiques et des systèmes (au sens large) qui nous entourent. De la musique à la couture en passant par l’informatique et l’éléctronique mais aussi les structure sociales, les institutions et les organisations politiques, venez hacker le monde avec nous. https://camp.interhacker.space \n\n +BEGIN:VALARM +ACTION:DISPLAY +TRIGGER:-PT1440M +DESCRIPTION:Erinnerung +END:VALARM +END:VEVENT +END:VCALENDAR diff --git a/assets/fonts/MonTrappist-Black.woff b/assets/fonts/MonTrappist-Black.woff new file mode 100644 index 0000000..544ab36 Binary files /dev/null and b/assets/fonts/MonTrappist-Black.woff differ diff --git a/assets/fonts/segoesc.ttf b/assets/fonts/segoesc.ttf new file mode 100644 index 0000000..63b33de Binary files /dev/null and b/assets/fonts/segoesc.ttf differ diff --git a/assets/logos/datapaulette.jpg b/assets/logos/datapaulette.jpg new file mode 100644 index 0000000..24f7f5e Binary files /dev/null and b/assets/logos/datapaulette.jpg differ diff --git a/assets/logos/fdn.png b/assets/logos/fdn.png new file mode 100644 index 0000000..a1df2c2 Binary files /dev/null and b/assets/logos/fdn.png differ diff --git a/assets/logos/fuz.png b/assets/logos/fuz.png new file mode 100644 index 0000000..2a9db37 Binary files /dev/null and b/assets/logos/fuz.png differ diff --git a/assets/logos/hackstub.svg b/assets/logos/hackstub.svg new file mode 100644 index 0000000..9a6a1af --- /dev/null +++ b/assets/logos/hackstub.svg @@ -0,0 +1,16 @@ + + \ No newline at end of file diff --git a/assets/logos/lebib.png b/assets/logos/lebib.png new file mode 100644 index 0000000..a8e71d8 Binary files /dev/null and b/assets/logos/lebib.png differ diff --git a/assets/logos/lol_logo_txt.png b/assets/logos/lol_logo_txt.png new file mode 100644 index 0000000..d283556 Binary files /dev/null and b/assets/logos/lol_logo_txt.png differ diff --git a/assets/logos/lqdn.png b/assets/logos/lqdn.png new file mode 100644 index 0000000..4e3bedd Binary files /dev/null and b/assets/logos/lqdn.png differ diff --git a/assets/notebook.jpg b/assets/notebook.jpg deleted file mode 100644 index 9414892..0000000 Binary files a/assets/notebook.jpg and /dev/null differ diff --git a/assets/paper.avif b/assets/paper.avif deleted file mode 100644 index 3aef4ec..0000000 Binary files a/assets/paper.avif and /dev/null differ diff --git a/assets/stickers/arbre-hetre.webp b/assets/stickers/arbre-hetre.webp deleted file mode 100644 index 25fc852..0000000 Binary files a/assets/stickers/arbre-hetre.webp and /dev/null differ diff --git a/assets/stickers/bac-e2.webp b/assets/stickers/bac-e2.webp deleted file mode 100644 index 5dc3f98..0000000 Binary files a/assets/stickers/bac-e2.webp and /dev/null differ diff --git a/assets/stickers/clavier.webp b/assets/stickers/clavier.webp deleted file mode 100644 index cdb50d6..0000000 Binary files a/assets/stickers/clavier.webp and /dev/null differ diff --git a/assets/stickers/clef.webp b/assets/stickers/clef.webp deleted file mode 100644 index e84b8bd..0000000 Binary files a/assets/stickers/clef.webp and /dev/null differ diff --git a/assets/stickers/ecran.png b/assets/stickers/ecran.png new file mode 100644 index 0000000..ec77d74 Binary files /dev/null and b/assets/stickers/ecran.png differ diff --git a/assets/stickers/ecran.webp b/assets/stickers/ecran.webp deleted file mode 100644 index 01abf76..0000000 Binary files a/assets/stickers/ecran.webp and /dev/null differ diff --git a/assets/stickers/ferasouder.png b/assets/stickers/ferasouder.png new file mode 100644 index 0000000..45ebedd Binary files /dev/null and b/assets/stickers/ferasouder.png differ diff --git a/assets/stickers/foin.webp b/assets/stickers/foin.webp deleted file mode 100644 index 5a25c86..0000000 Binary files a/assets/stickers/foin.webp and /dev/null differ diff --git a/assets/stickers/machineacoudre.png b/assets/stickers/machineacoudre.png new file mode 100644 index 0000000..7889ed9 Binary files /dev/null and b/assets/stickers/machineacoudre.png differ diff --git a/assets/stickers/machineacoudre.webp b/assets/stickers/machineacoudre.webp deleted file mode 100644 index efe4814..0000000 Binary files a/assets/stickers/machineacoudre.webp and /dev/null differ diff --git a/assets/stickers/tracteur.png b/assets/stickers/tracteur.png new file mode 100644 index 0000000..f7e9e11 Binary files /dev/null and b/assets/stickers/tracteur.png differ diff --git a/assets/stickers/tracteur.webp b/assets/stickers/tracteur.webp deleted file mode 100644 index 8cb2127..0000000 Binary files a/assets/stickers/tracteur.webp and /dev/null differ diff --git a/contact.html b/contact.html new file mode 100644 index 0000000..b016c39 --- /dev/null +++ b/contact.html @@ -0,0 +1,64 @@ + + + + + + + + + + + + Camp Interhack 2026 – Contact + + + + + +
+ + + + +

+ camp +
+ interhack + contact +

+

+

+
+
+

Mail :

+ orga@camp.interhacker.space +
+
+

Matrix :

+ #interhack:matrix.interhacker.space +
+
+
+ + + + \ No newline at end of file diff --git a/css/base.css b/css/base.css index bd4db14..add29bc 100644 --- a/css/base.css +++ b/css/base.css @@ -1,62 +1,143 @@ + +/* Primary Font */ @font-face { - font-family: Banquise; - src: url(../assets/Banquise-Regular.woff); + font-family: MonTrappist; + src: url(../assets/fonts/MonTrappist-Black.woff); } +/* Secondary Font */ @font-face { - font-family: Dymo; - src: url(../assets/Dymo.ttf); + font-family: Segoesc; + src: url(../assets/fonts/segoesc.ttf); } -@font-face { - font-family: Erika; - src: url(../assets/Erika-Type.ttf); +:root { + --primary-bg-color: black; /* global scope */ + --accent-violet: #8800FF; + --accent-yellow: #ffbf3e; + --accent-orange: #FF4E00 ; + --accent-minor-blue: #33D8D8; + --text-color-primary: #FFFFFF; } html, body { - height: 100%; margin: 0; + font-family: "Verdana", "Helvetica", "Arial", sans-serif; + color: var(--text-color-primary); + background: var(--primary-bg-color); + overflow-x: hidden; /* empêche les stickers de déborder horizontalement */ +} + +img { + max-width: 100%; } a { - text-decoration: none; + color: inherit; +} + +nav a, footer a { color: black; + text-decoration: none; } -main { - /* background-color: #413f43;*/ - background: #058C9E; - background: radial-gradient(at left top, #058C9E, #BC5180); - /* background-repeat: no-repeat; - background-size: cover; */ -} - - main h1, main h2, main h3 { - font-family: Banquise; + font-family: MonTrappist; color: white; - z-index: 2; + z-index: 20; +} + +main h1 span, main h2 span, main h3 { + background-color: #000000b8; + padding: auto; } main h1 { - font-size: 8em; + position: relative; + text-align: center; + margin: auto; + width: 50%; + font-size: clamp(4em, 14vw, 8em); + margin-top: 5%; + max-width: 1400px; +} + +main h2 { + position: relative; + margin: 12% auto 5% auto; + text-align: center; + font-size: clamp(1.5em, 12vw, 4em); + font-family: segoesc; +} + +main h2:first-of-type { + font-size: clamp(1.5em, 5vw, 5em); + margin: 1em auto 0.5em auto; +} + +main h3 { + position: relative; + margin: auto; + width: 100%; + font-size: clamp(1.8em, 3vw, 4em); + margin-top: 5%; + margin-bottom: 2%; + font-weight: lighter; + text-align: center; +} + +main section h3 { + text-align: center; +} + +main h4 { + margin: 0.8em 0; +} + +main p { + margin: 0 0 min(1em, 2%) 1%; + display: inline-block; + z-index: 3; +} + +main p:last-child { + margin-bottom: 0; +} + +section { + position: relative; + max-width: 900px; + font-size: 1.5em; + line-height: 1.3em; + margin: auto; + margin-bottom: 100px; + padding: 2%; + padding-left: min(1em, 2%); + z-index: 1000; + box-shadow: -5px 5px 0px var(--accent-yellow), -10px 10px 0px var(--accent-orange), -15px 15px 0px var(--accent-violet); + background-color: #000000b8; +} + +section :is(h1, h2, h3, h4, h5, h6) { + line-height: 1em; } nav, footer, aside { - background: #d7d7d7; - background: url(../assets/paper.avif); + background: var(--accent-violet); padding: 5px; - font-family: Erika; + font-family: MonTrappist; z-index: 10000; position: relative; - opacity: 0.95; - box-shadow: 0px 0px 10px #00000070; +} + +nav { + padding-left: 10%; } nav a, footer a, aside a { - font-family: Dymo; font-size: 3em; display: inline-block; + margin: 0.1em 0.3em; } nav a.current { @@ -67,17 +148,95 @@ footer a:hover, nav a:hover { transform: rotate(-2deg); } - - footer { display: block; text-align: center; display: flex; justify-content: space-evenly; + align-items: end; } @media (max-width: 600px) { footer { flex-direction: column; + align-items: center; } -} \ No newline at end of file +} + +main > img { + object-fit: scale-down; +} + +figcaption { + font-size: 0.6em; + line-height: initial; +} + +.btn-nice { + color: #FFFFFF; + text-shadow: -2px 2px 0px var(--accent-orange), -4px 4px 0px var(--accent-violet); + color: var(--accent-yellow); + font-size: 1.2em; + text-align: center; + margin: auto; + position: relative; + display: block; + font-weight: bold; +} + +#camp { + font-family: segoesc; + float: left; + margin-left: 10%; +} + +#interhack { + text-shadow: -5px 5px 0px var(--accent-orange), -10px 10px 0px var(--accent-violet); + color: var(--accent-yellow); + margin-right: 10%; +} + +#progress { + display: block; + text-align: center; +} + +#gauge-bar { + float: left; +} + +#fundraising-bar { + float: left; +} + +code { + background: #ffffff1f; + padding: 0.2em 0.4em; + border-radius: 0.2em; + margin-right: 0.5ex; +} + +.btn-nice code { + background: none; + padding: 0; + margin-right: 0; +} + +div#maj-guide { + text-align: center; + margin: 2em 1em; +} + +.center { + display: flex; + justify-content: center; + align-items: center; +} + + +@media (max-width: 500px) { + /* Hide stickers on mobile */ + .randomStart { + display: none; + } +} diff --git a/css/contact.css b/css/contact.css new file mode 100644 index 0000000..f6c09b8 --- /dev/null +++ b/css/contact.css @@ -0,0 +1,15 @@ +#contact { + display: flex; + align-items: last baseline; + gap: 2em; + justify-content: space-between; +} + +h1 span:nth-of-type(n+3) { + position: relative; + text-align: center; + font-size: clamp(1.5rem, 5vw, 5rem); + font-family: segoesc; + display: block; + margin: 1em auto 0.5em auto; +} \ No newline at end of file diff --git a/css/drag.css b/css/drag.css index b3b3804..766e9a1 100644 --- a/css/drag.css +++ b/css/drag.css @@ -1,10 +1,10 @@ main img.draggable { - max-width: 150px; - max-height: 150px; + max-width: 200px; + max-height: 200px; position: absolute; - filter: saturate(2); + z-index: 1; } diff --git a/css/home.css b/css/home.css index eb9d863..6aa60c5 100644 --- a/css/home.css +++ b/css/home.css @@ -1,43 +1,109 @@ -main { - display: block; - color: black; - overflow: hidden; - width: 100%; - min-height: 1000px; -} -main h1 { +.logo { + width: 100%; + height: 100%; + max-width: 7em ; + padding: 0.2em; + box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; + margin: 1em; + z-index: 2; position: relative; - text-align: center; - margin: auto; - width: 100%; - font-size: clamp(4em, 14vw, 8em); - margin-top: 5%; } -main h2 { - margin: 4% auto; - text-align: center; - font-size: clamp(2.5em, 5vw, 4em); +.participants { + display: flex; + justify-content: center; + align-items: center; + height: 200px; } -main p { - margin: 1%; - padding: 1%; - background: white; - background: url(../assets/notebook.jpg); - /* border: solid 1px; */ - opacity: 0.92; - display: inline-block; +/* Section des dons */ + +#don > div { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-evenly; } -section { - max-width: 1400px; - font-size: 1.5em; - text-align: center; - font-family: Erika; - margin: auto; - margin-bottom: 100px; - columns: 560px; - padding: 2%; +#don button { + flex-grow: 1; + width: 3em; + color: white; + font-size: 2em; + border: none; + font-family: MonTrappist; + margin: 0.2em; + padding: 0.3em; + background: var(--primary-bg-color); + background: linear-gradient(0deg,rgba(136, 0, 255, 1) 0%, rgba(255, 191, 62, 1) 50%, rgba(255, 78, 0, 1) 100%); + box-shadow: -5px 5px 0px var(--accent-yellow), -10px 10px 0px var(--accent-orange), -15px 15px 0px var(--accent-violet); + cursor: pointer; +} + +#don > hr { + margin-top: 1em; +} + +#don p { + text-align: justify; + text-align: center; +} + +@keyframes bang { + from { + transform: translate3d(0,0,0); + opacity: 1; + } +} + +.btn-pop i { + /* position: ; */ + display:run-in; + left: 0px; + top: 0px; + width: 1px; + height: 1px; + background: red; + opacity: 0; +} + +/* Barre de progression */ + +.progression { +animation: 3s loadbar; +width:auto; +background-color: white; +display: inline-block; +padding: 0.7em 0.5em 0.5em 0.5em; +text-wrap: nowrap; +} + +@keyframes loadbar { + 0% { width:0%; } +} + +.bar { +width : 50%; +margin : auto; +border : 2px solid white; +display: inline-block; +} +.progression > span { + +display: inline-block; +width: 100%; +font-family: MonTrappist; +font-size : 1.5em; +} + +.lessthanhalf span { + padding-left: 100%; + color: white; + padding-left: calc(100% + 1em); +} + +.morethanhalf { + text-align : end; + background: linear-gradient(90deg,rgba(136, 0, 255, 1) 0%, rgba(255, 78, 0, 1) 42%, rgba(255, 191, 62, 1) 100%); } diff --git a/css/poster.css b/css/poster.css index 940d911..64701ee 100644 --- a/css/poster.css +++ b/css/poster.css @@ -4,7 +4,6 @@ body { } aside { - background: url(../assets/notebook.jpg); width: fit-content; margin-top: 10px; } @@ -16,6 +15,7 @@ main { box-shadow: 5px 5px 5px #00000085; margin: 50px auto; position: relative; + background: var(--primary-bg-color); } @page { diff --git a/guide.template.html b/guide.template.html new file mode 100644 index 0000000..47c3c44 --- /dev/null +++ b/guide.template.html @@ -0,0 +1,80 @@ + + + + + + + + + + + + + Guide Interhack Camp 2026 + + + + +
+ + + + + + + + + + + + + + + +

+ camp +
+ interhack +

+ +

+ Informations pratiques +

+ +
+ + +
+ +
+ Dernière mise à jour du guide: +
+
+ + + diff --git a/index.html b/index.html index d3b628e..2735643 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,5 @@ - + + @@ -7,37 +8,35 @@ - Camp Interhack 2026 + + + + Camp Interhack
- - - - - - - - - - - - - - - - + + + + + + + + +

- Camp - Interhack - 2026 + camp +
+ interhack

@@ -83,7 +82,107 @@ collective.
Seule exigence, respecter toutes les marginalités, originalités, bizarreries et normaleries de chacun·es.

+ +

+

+ S'inscrire +

+

+ +

+ 📅 Ajouter l'évènement à son calendrier (.ics) +

+ + + +
+

+ Où en est-on ? +

+

Il y a

+ +
+ + + ?/200 + + +
+ +

places déjà réservées.

+
+

Et nous avons reçu

+
+ + + ? % + + +
+

des dons dont nous avons besoin.

+ + + + +
+

+ Faire un don +

+

Nous avons besoin de sous avant le débût du Camp pour financer l'achat de fournitures, payer la réservation du lieu et monter la logistique.

+
+ + + + + + + + + + + + + +
+
+
+

Si vous préférez faire un virement, demandez-nous l'IBAN sur orga [arobase] camp.interhacker.space. Nous payons autour de ~2% de frais lors des payements par carte bancaire.

+
+
+
+

Nous estimons avoir un budget de 10 000 ~ 15 000€ et être autour de 200 personnes, et aurons donc besoin d'au moins autant pour que le camp soit à l'équilibre.

+ Voir le détail des comptes +
+
+
+

Si tu ne sais pas quel prix libre donner, et/ou que tu veux de l'aide pour définir un prix libre juste et éclairé pour ta participation au camp, voici un thunomètre rapide qui peut répondre au besoin.

+ Thunomètre +
+
+ + + +

+ Iels y participent +

+ +
+ + + + + + + +
+ +
+ + + + +
+ diff --git a/js/drag.js b/js/drag.js index 55d68e5..cfb1b5d 100644 --- a/js/drag.js +++ b/js/drag.js @@ -1,5 +1,6 @@ -const stepSize = 100; +const stepSize = 1; const main = document.querySelector('main'); + const draggables = document.querySelectorAll(".draggable"); const randomStarts = document.querySelectorAll(".randomStart"); @@ -8,8 +9,8 @@ var zIndex = 2; activateDraggables(); /** - * - * @param {number} n + * + * @param {number} n * @returns {number} */ function stepedSize(n) { @@ -19,8 +20,6 @@ function stepedSize(n) { function move(e) { e.preventDefault(); let target = e.target; - target.style['z-index'] = zIndex; - zIndex++; target.moving = true; @@ -63,13 +62,14 @@ function activateDraggables() { } function randomizeDragables() { - maxX = main.offsetWidth - 150; + maxX = main.offsetWidth - 250; maxY = main.offsetHeight - 150; for (var randomStart of randomStarts) { randX = Math.floor(Math.random() * maxX); randY = Math.floor(Math.random() * maxY); randomStart.style.left = randX + "px"; randomStart.style.top = randY + "px"; + randomStart.style.rotate = Math.floor(Math.random() * 61) - 30 + "deg"; } } diff --git a/js/pop.js b/js/pop.js new file mode 100644 index 0000000..345b250 --- /dev/null +++ b/js/pop.js @@ -0,0 +1,31 @@ +document.querySelectorAll('button').forEach(function(button) { + button.addEventListener('mouseenter', function() { + function random(max) { + return Math.random() * (max - 0) + 0; + } + + var c = document.createDocumentFragment(); + for (var i = 0; i < 100; i++) { + var styles = 'position: absolute;' + + 'left: ' + (random(100)) + '30%;' + // Limit the position to within the button + 'top: ' + (random(60)) + '30%;' + // Limit the position to within the button + 'width: 3px; height: 6px; ' + // Increase size + 'transform: translate(-50%, -50%) rotate(' + random(360) + 'deg);' + + 'background: hsla(' + random(360) + ', 100%, 50%, 1);' + + 'animation: bang 2000ms ease-out forwards;' + + 'opacity: 0;' + + 'z-index: 10;'; // Set a high z-index + + var e = document.createElement("i"); + e.style.cssText = styles; + c.appendChild(e); + } + button.appendChild(c); + setTimeout(() => { + // Create an array of the elements to remove + let childrenToRemove = Array.from(button.querySelectorAll('i')); + // Remove each element + childrenToRemove.forEach(child => button.removeChild(child)); + }, 3000); + }); +}); diff --git a/js/progress.js b/js/progress.js new file mode 100644 index 0000000..9cefb6a --- /dev/null +++ b/js/progress.js @@ -0,0 +1,91 @@ +const gauge_url = "https://api.camp.interhacker.space/api/gauge" +const fundraising_url = "https://api.camp.interhacker.space/api/fundraising" +const gaugeMax = 200; +const fundraisingTotalMax = 20000; + +async function getGauge() { + // // REMOVE WHEN SIGNUP FORM IS OPEN + // return 0; + + try { + const response = await fetch(gauge_url); + if (!response.ok) { + throw new Error(`Response status: ${response.status}`); + } + + const result = await response.json(); + + return result.gauge + } catch (error) { + console.error(error.message); + + return null; + } +} + +async function getFundraisingTotal() { + try { + const response = await fetch(fundraising_url); + if (!response.ok) { + throw new Error(`Response status: ${response.status}`); + } + + const result = await response.json(); + + return result.total + } catch (error) { + console.error(error.message); + + return null; + } +} + +function percentRatio(ratio) { + return Math.floor(ratio * 100); +} + +function setAboveHalf(ratio, element) { + if (ratio > 0.5) { + element.classList.remove("lessthanhalf"); + element.classList.add("morethanhalf"); + } +} + +async function setGauge() { + const gauge = await getGauge(); + + if (gauge !== null) { + const gaugeBar = document.getElementById("gauge-bar"); + const gaugeText = document.getElementById("gauge-text"); + + const gaugeRatio = gauge / gaugeMax; + + gaugeBar.style.setProperty("width", percentRatio(gaugeRatio) + "%"); + gaugeText.innerText = gauge + " / " + gaugeMax; + + setAboveHalf(gaugeRatio, gaugeBar); + } +} + +async function setFundraisingTotal() { + const fundraising_total = await getFundraisingTotal(); + + if (fundraising_total !== null) { + const fundraisingBar = document.getElementById("fundraising-bar"); + const fundraisingText = document.getElementById("fundraising-text"); + + const fundraisingRatio = fundraising_total / fundraisingTotalMax; + + fundraisingBar.style.setProperty("width", percentRatio(fundraisingRatio) + "%"); + fundraisingText.innerText = percentRatio(fundraisingRatio) + " %"; + + setAboveHalf(fundraisingRatio, fundraisingBar); + } +} + +async function setProgress() { + setGauge(); + setFundraisingTotal(); +} + +document.addEventListener("DOMContentLoaded", setProgress); diff --git a/poster.html b/poster.html index 7b7b1f1..b6c5875 100644 --- a/poster.html +++ b/poster.html @@ -1,4 +1,5 @@ - + + @@ -7,34 +8,56 @@ + Camp Interhack 2026 – Poster + + + +
- - - - - - - - + + + + +

Camp Interhack + 2 au 5 Juillet 2026

+

+ à l'Antenne + 15 route de Saint Dolay 44530 Sévérac +

+ +

+ camp.interhacker.space +

+ +
+ + diff --git a/update-guide.sh b/update-guide.sh new file mode 100755 index 0000000..f1c4990 --- /dev/null +++ b/update-guide.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +GUIDE_EDGEDOC_URL="https://md.lqdn.fr/H0gKhjbKTfeM41L9bG9zUA" + +DATE_CMD="date --utc '+%d/%m/%Y %H:%I UTC'" + +echo "Mise a jour du guide dans guide.html a partir du edgedoc" +echo "$GUIDE_EDGEDOC_URL" + +set -e +curl --silent --fail-with-body "$GUIDE_EDGEDOC_URL/download" > guide.tmp.md +pandoc --from markdown --to html guide.tmp.md > guide.tmp.html +cat guide.template.html \ + | sed '/EDGEDOC/{ + s///; + r guide.tmp.html + }' \ + | sed -e "/DATE/{ + s///; + n; + e $DATE_CMD + }" \ + > guide.html + +rm guide.tmp.md guide.tmp.html \ No newline at end of file