feat: Update stuff

This commit is contained in:
Samuel Ortion 2023-07-29 18:21:40 +02:00
parent 0c47fd2338
commit 305ffc3ba9
44 changed files with 1919 additions and 67 deletions

0
.dockerignore Normal file → Executable file
View File

0
.gitignore vendored Normal file → Executable file
View File

0
LICENSE Normal file → Executable file
View File

2
README.md Normal file → Executable file
View File

@ -11,7 +11,7 @@ A web application to play with bird sound identification with data from eBird an
## Installation
```bash
git clone https://forge.chapril.org/UncleSamulus/soundbirder
git clone https://forge.chapril.org/sortion/soundbirder
cd soundbirder
npm install
```

0
app.js Normal file → Executable file
View File

0
controllers/api.js Normal file → Executable file
View File

0
controllers/auth.js Normal file → Executable file
View File

0
controllers/cache.js Normal file → Executable file
View File

0
controllers/index.js Normal file → Executable file
View File

0
controllers/quizz.js Normal file → Executable file
View File

0
controllers/region.js Normal file → Executable file
View File

0
docker-compose.yml Normal file → Executable file
View File

0
docker/express/Dockerfile Normal file → Executable file
View File

0
locales/de.json Normal file → Executable file
View File

0
locales/en.json Normal file → Executable file
View File

0
locales/es.json Normal file → Executable file
View File

0
locales/fr.json Normal file → Executable file
View File

1269
package-lock.json generated Normal file → Executable file

File diff suppressed because it is too large Load Diff

7
package.json Normal file → Executable file
View File

@ -3,11 +3,13 @@
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
"start": "node ./bin/www",
"build:css": "postcss ./public/stylesheets/tailwind.css -o public/stylesheets/style.css"
},
"dependencies": {
"@unclesamulus/ebird-api": "^0.0.0",
"@unclesamulus/xeno-canto-api": "^0.0.0",
"autoprefixer": "^10.4.8",
"axios": "^0.27.2",
"connect-redis": "^6.1.3",
"cookie-parser": "~1.4.4",
@ -23,6 +25,7 @@
"lodash": "^4.17.21",
"morgan": "~1.9.1",
"pug": "^3.0.2",
"redis": "^4.3.0"
"redis": "^4.3.0",
"tailwindcss": "^3.1.8"
}
}

9
postcss.config.js Executable file
View File

@ -0,0 +1,9 @@
module.exports = {
plugins: [
// ...
require('tailwindcss'),
require('autoprefixer'),
// ...
]
}

0
public/favicon.ico Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

0
public/images/black-bird.svg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

0
public/images/logo.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

0
public/images/logo.svg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

0
public/javascripts/api-client.js Normal file → Executable file
View File

0
public/javascripts/app.js Normal file → Executable file
View File

1
public/javascripts/game.js Normal file → Executable file
View File

@ -40,6 +40,7 @@ function displayQuizz(quizz) {
proposal.classList.add('proposal');
let button = document.createElement('button');
button.classList.add('proposal-button');
button.classList.add('button');
button.value = sp.speciesCode;
button.innerText = sp.comName;
proposal.appendChild(button);

0
public/javascripts/map.js Normal file → Executable file
View File

0
public/javascripts/utils.js Normal file → Executable file
View File

49
public/stylesheets/game.css Executable file
View File

@ -0,0 +1,49 @@
.link {
position: relative;
display: inline-block;
padding: 5px 0;
text-decoration: none;
color: #fff;
}
.link:after {
content: '';
height: 1px;
display: block;
border-bottom: 2px dotted darkblue;
width: 0;
-webkit-transition: width 0.2s;
transition: width 0.2s;
}
.link:hover:after {
width: 100%;
}
.author a {
text-decoration: none;
cursor: pointer;
}
footer .link:after {
border-bottom: 2px dotted white;
}
#map {
height: 50vh;
}
.species span {
margin-left: 1em;
}
.species .sci {
font-style: italic;
}
.none {
display: none;
}

583
public/stylesheets/style.css Normal file → Executable file
View File

@ -1,79 +1,570 @@
* {
box-sizing: border-box;
/*
! tailwindcss v3.1.8 | MIT License | https://tailwindcss.com
*//*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/
*,
::before,
::after {
box-sizing: border-box; /* 1 */
border-width: 0; /* 2 */
border-style: solid; /* 2 */
border-color: #e5e7eb; /* 2 */
}
::before,
::after {
--tw-content: '';
}
/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
*/
html {
line-height: 1.5; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
-moz-tab-size: 4; /* 3 */
-o-tab-size: 4;
tab-size: 4; /* 3 */
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */
}
/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/
body {
padding: 0;
margin: 0; /* 1 */
line-height: inherit; /* 2 */
}
/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/
hr {
height: 0; /* 1 */
color: inherit; /* 2 */
border-top-width: 1px; /* 3 */
}
/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
/*
Remove the default font size and weight for headings.
*/
h1,
h2,
h3,
h4,
h5,
h6 {
font-size: inherit;
font-weight: inherit;
}
/*
Reset links to optimize for opt-in styling instead of opt-out.
*/
a {
color: inherit;
text-decoration: inherit;
}
/*
Add the correct font weight in Edge and Safari.
*/
b,
strong {
font-weight: bolder;
}
/*
1. Use the user's configured `mono` font family by default.
2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */
font-size: 1em; /* 2 */
}
/*
Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/
table {
text-indent: 0; /* 1 */
border-color: inherit; /* 2 */
border-collapse: collapse; /* 3 */
}
/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
font-weight: inherit; /* 1 */
line-height: inherit; /* 1 */
color: inherit; /* 1 */
margin: 0; /* 2 */
padding: 0; /* 3 */
}
/*
Remove the inheritance of text transform in Edge and Firefox.
*/
button,
select {
text-transform: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button; /* 1 */
background-color: transparent; /* 2 */
background-image: none; /* 2 */
}
/*
Use the modern Firefox focus style for all focusable elements.
*/
:-moz-focusring {
outline: auto;
}
/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/
:-moz-ui-invalid {
box-shadow: none;
}
/*
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
vertical-align: baseline;
}
/*
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
height: auto;
}
/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/*
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/*
Add the correct display in Chrome and Safari.
*/
summary {
display: list-item;
}
/*
Removes the default spacing and border for appropriate elements.
*/
blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
margin: 0;
}
body>* {
padding: 1em;
fieldset {
margin: 0;
padding: 0;
}
.link {
position: relative;
display: inline-block;
padding: 5px 0;
text-decoration: none;
color: #fff;
legend {
padding: 0;
}
.link:after {
content: '';
height: 1px;
display: block;
border-bottom: 2px dotted darkblue;
width: 0;
-webkit-transition: width 0.2s;
transition: width 0.2s;
ol,
ul,
menu {
list-style: none;
margin: 0;
padding: 0;
}
.link:hover:after {
width: 100%;
/*
Prevent resizing textareas horizontally by default.
*/
textarea {
resize: vertical;
}
.author a {
text-decoration: none;
/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/
input::-moz-placeholder, textarea::-moz-placeholder {
opacity: 1; /* 1 */
color: #9ca3af; /* 2 */
}
input::placeholder,
textarea::placeholder {
opacity: 1; /* 1 */
color: #9ca3af; /* 2 */
}
/*
Set the default cursor for buttons.
*/
button,
[role="button"] {
cursor: pointer;
}
footer {
color: white;
background-color: black;
text-align: center;
width: 100vw;
padding: 2rem;
/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
cursor: default;
}
footer .link:after {
border-bottom: 2px dotted white;
/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
This can trigger a poorly considered lint error in some tools but is included by design.
*/
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
display: block; /* 1 */
vertical-align: middle; /* 2 */
}
main {
min-height: calc(100vh - 15em);
/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/
img,
video {
max-width: 100%;
height: auto;
}
#map {
height: 50vh;
*, ::before, ::after {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
nav {}
nav li {
list-style: none;
::-webkit-backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
nav ul {
::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-rotate: 0;
--tw-skew-x: 0;
--tw-skew-y: 0;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-pan-x: ;
--tw-pan-y: ;
--tw-pinch-zoom: ;
--tw-scroll-snap-strictness: proximity;
--tw-ordinal: ;
--tw-slashed-zero: ;
--tw-numeric-figure: ;
--tw-numeric-spacing: ;
--tw-numeric-fraction: ;
--tw-ring-inset: ;
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-color: rgb(59 130 246 / 0.5);
--tw-ring-offset-shadow: 0 0 #0000;
--tw-ring-shadow: 0 0 #0000;
--tw-shadow: 0 0 #0000;
--tw-shadow-colored: 0 0 #0000;
--tw-blur: ;
--tw-brightness: ;
--tw-contrast: ;
--tw-grayscale: ;
--tw-hue-rotate: ;
--tw-invert: ;
--tw-saturate: ;
--tw-sepia: ;
--tw-drop-shadow: ;
--tw-backdrop-blur: ;
--tw-backdrop-brightness: ;
--tw-backdrop-contrast: ;
--tw-backdrop-grayscale: ;
--tw-backdrop-hue-rotate: ;
--tw-backdrop-invert: ;
--tw-backdrop-opacity: ;
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
h1 {
font-size: 2.25rem;
line-height: 2.5rem;
font-weight: 700;
color: var(--tw-main-color);
}
.button {
border-radius: 0.25rem;
--tw-bg-opacity: 1;
background-color: rgb(34 197 94 / var(--tw-bg-opacity));
padding-top: 0.5rem;
padding-bottom: 0.5rem;
padding-left: 1rem;
padding-right: 1rem;
font-weight: 700;
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity));
}
.button:hover {
--tw-bg-opacity: 1;
background-color: rgb(21 128 61 / var(--tw-bg-opacity));
}
.block {
display: block;
}
.flex {
display: flex;
}
.min-h-screen {
min-height: 100vh;
}
.w-full {
width: 100%;
}
.flex-1 {
flex: 1 1 0%;
}
.flex-row {
flex-direction: row;
}
.flex-col {
flex-direction: column;
}
.justify-evenly {
justify-content: space-evenly;
}
.none {
display: none;
.bg-black {
--tw-bg-opacity: 1;
background-color: rgb(0 0 0 / var(--tw-bg-opacity));
}
.species span {
margin-left: 1em;
.p-5 {
padding: 1.25rem;
}
.text-center {
text-align: center;
}
.text-white {
--tw-text-opacity: 1;
color: rgb(255 255 255 / var(--tw-text-opacity));
}

18
public/stylesheets/tailwind.css Executable file
View File

@ -0,0 +1,18 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.btn-primary {
@apply py-2 px-4 bg-blue-500 text-white font-semibold rounded-lg shadow-md hover: bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75;
}
h1 {
@apply text-4xl font-bold;
color: var(--tw-main-color);
}
.button {
@apply text-white font-bold py-2 px-4 rounded bg-green-500 hover:bg-green-700;
}
}

0
redis.js Normal file → Executable file
View File

0
routes/api.js Normal file → Executable file
View File

0
routes/auth.js Normal file → Executable file
View File

0
routes/index.js Normal file → Executable file
View File

11
tailwind.config.js Executable file
View File

@ -0,0 +1,11 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./views/**/*.pug',
'/views/*.pug'
],
theme: {
extend: {},
},
plugins: [],
}

0
utils/choices.js Normal file → Executable file
View File

0
views/about.pug Normal file → Executable file
View File

0
views/api.pug Normal file → Executable file
View File

0
views/error.pug Normal file → Executable file
View File

2
views/game.pug Normal file → Executable file
View File

@ -1,6 +1,6 @@
.game
.game-map-step
#map
#map.h-100
button.button.geolocation-button
i(data-feather="map-pin")
button.button.start-button

0
views/index.pug Normal file → Executable file
View File

35
views/layout.pug Normal file → Executable file
View File

@ -4,24 +4,27 @@ html
title= title
meta(name="viewport" content="width=device-width, initial-scale=1.0")
link(rel="stylesheet" href="/stylesheets/style.css")
link(rel="stylesheet" href="/stylesheets/game.css")
if csrf_token
meta(name="csrf-token" content=csrf_token)
body
header
h1= title
nav
- var i18n_prefix = locale ? '/' + locale : ''
ul
li
a(href=`${i18n_prefix}/`) #{ __("Game") }
li
a(href=`${i18n_prefix}/about`) #{ __("About") }
main
block content
footer
.description
.copyright Copyright © 2022 -
span.author
a(href="https://samuel.ortion.fr" class="link") Samuel ORTION
.flex.flex-col.min-h-screen
.flex-1.p-5
nav
- var i18n_prefix = locale ? '/' + locale : ''
ul.flex.flex-row.text-center.justify-evenly
li
a(href=`${i18n_prefix}/`) #{ __("Game") }
li
a(href=`${i18n_prefix}/about`) #{ __("About") }
header
h1= title
main
block content
footer.w-full.bg-black.text-white.text-center.p-5
.description
.copyright Copyright © 2022 -
span.author
a(href="https://samuel.ortion.fr" class="link") Samuel ORTION
script(src="/javascripts/app.js" type="module")
script(src="/dist/feather/feather.min.js")