[[package]]
name = "clap"
-version = "4.5.23"
+version = "4.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84"
+checksum = "9560b07a799281c7e0958b9296854d6fafd4c5f31444a7e5bb1ad6dde5ccf1bd"
dependencies = [
"clap_builder",
"clap_derive",
[[package]]
name = "clap_builder"
-version = "4.5.23"
+version = "4.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838"
+checksum = "874e0dd3eb68bf99058751ac9712f622e61e6f393a94f7128fa26e3f02f5c7cd"
dependencies = [
"anstream",
"anstyle",
[[package]]
name = "clap_derive"
-version = "4.5.18"
+version = "4.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab"
+checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c"
dependencies = [
"heck",
"proc-macro2",
[[package]]
name = "event-listener"
-version = "5.3.1"
+version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
+checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
dependencies = [
"concurrent-queue",
"parking",
[[package]]
name = "linux-raw-sys"
-version = "0.4.14"
+version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
[[package]]
name = "litemap"
[[package]]
name = "rustix"
-version = "0.38.42"
+version = "0.38.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85"
+checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6"
dependencies = [
"bitflags",
"errno",
@use 'toast.scss';
@use 'modal-dialog.scss';
-@font-face {
- font-family: Fira Code;
- font-weight: 200;
- src: url(FiraCode-Light.woff2) format("woff2");
-}
-
-@font-face {
- font-family: Fira Code;
- font-weight: 400;
- src: url(FiraCode-Regular.woff2) format("woff2");
-}
+$color-1: #B29B89;
+$color-2: #89B29B;
+$color-3: #9B89B2;
-@font-face {
- font-family: Fira Code;
- font-weight: 600;
- src: url(FiraCode-SemiBold.woff2) format("woff2");
-}
-
-@font-face {
- font-family: Fira Code;
- font-weight: 700;
- src: url(FiraCode-Bold.woff2) format("woff2");
-}
-
-$primary: #182430;
-$background: darken($primary, 5%);
-$background-container: lighten($primary, 10%);
+$text-color: darken($color-1, 30%);
* {
margin: 5px;
padding: 0px;
}
-html {
- font-size: 80%
-}
-
a {
- color: lighten($primary, 40%);
+ color: darken($color-3, 25%);
text-decoration: none;
&:hover {
- color: lighten($primary, 60%);
+ color: lighten($color-3, 20%);
}
}
display: flex;
flex-direction: column;
- font-family: Fira Code, Helvetica Neue, Helvetica, Arial, sans-serif;
- text-shadow: 2px 2px 2px rgb(0, 0, 0);
- // line-height: 18px;
- color: lighten($primary, 60%);
- background-color: $background;
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+ color: $text-color;
+ background-color: $color-1;
margin: 0px;
- .recipe-item {
- padding: 4px;
- }
+ .header-container {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
- .recipe-item-current {
- padding: 3px;
- border: 1px solid lighten($primary, 30%);
- }
+ .title {
+ font-size: 180%;
+ font-style: italic;
- .header-container {
- align-self: center;
+ .logo {
+ width: 50px;
+ height: 50px;
+ vertical-align: bottom;
+ margin: 0px 10px 0px 0px;
+ }
+ }
+
+ .header-menu {
+ align-self: flex-end;
+
+ .create-recipe {
+ border: 0.1em solid $color-3;
+ padding: 2px 8px 2px 8px;
+ border-radius: 0.5em;
+ }
+ }
+
+ #select-website-language {
+ padding: 5px;
+ }
}
.footer-container {
align-self: center;
- font-size: 0.5em;
+ font-size: 0.7em;
}
.drag-handle {
width: 20px;
height: 20px;
- background-color: gray;
+ background-color: blue;
+ }
+
+ img {
+ border: 0px;
}
.main-container {
display: flex;
flex-direction: row;
- // #recipes-list {
- // text-align: left;
- // }
+ #recipes-list {
+ hr {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ height: 1px;
+ color: $color-3;
+ background: $color-3;
+ font-size: 0;
+ border: 0;
+ }
+
+
+ .recipe-item {
+ padding: 4px;
+ }
+
+ .recipe-item-current {
+ color: lighten($color-3, 30%);
+ padding: 4px;
+ background-color: $color-2;
+
+ border: 0.1em solid $color-3;
+ border-radius: 0.5em;
+ }
+ }
.content {
flex-grow: 1;
- background-color: $background-container;
- border: 0.1em solid lighten($primary, 50%);
- padding: 0.5em;
+ background-color: $color-2;
+ border: 0.1em solid $color-3;
+ border-radius: 1em;
+ padding: 0.8em;
h1 {
text-align: center;
}
.group {
- border: 0.1em solid lighten($primary, 30%);
+ border: 0.1em solid lighten($color-3, 30%);
}
.step {
- border: 0.1em solid lighten($primary, 30%);
+ border: 0.1em solid lighten($color-3, 30%);
}
.ingredient {
- border: 0.1em solid lighten($primary, 30%);
+ border: 0.1em solid lighten($color-3, 30%);
}
#hidden-templates {
input,
button {
- background-color: rgb(52, 40, 85);
+ // background-color: rgb(52, 40, 85);
border-width: 1px;
- border-color: white;
- color: white;
+ // border-color: white;
+ // color: white;
}
}
// }
}
-
- img {
- border: 0px;
- }
}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="91.29998mm"
+ height="91.29998mm"
+ viewBox="0 0 91.29998 91.29998"
+ version="1.1"
+ id="svg1"
+ sodipodi:docname="logo.svg"
+ inkscape:version="1.4 (86a8ad7, 2024-10-11)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="true"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ inkscape:zoom="1.4702524"
+ inkscape:cx="-36.728388"
+ inkscape:cy="196.22482"
+ inkscape:window-width="2560"
+ inkscape:window-height="1369"
+ inkscape:window-x="-8"
+ inkscape:window-y="611"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-55.871853,-92.876652)">
+ <circle
+ style="fill:#89b29b;fill-opacity:1;stroke:#9b89b2;stroke-width:6;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
+ id="path2"
+ cx="101.52184"
+ cy="138.52664"
+ r="42.64999" />
+ <path
+ id="rect1"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;paint-order:stroke fill markers"
+ d="m 119.22975,109.85084 c -3.51124,-0.73351 -5.56076,0.39364 -14.01995,8.04846 l -5.16541,5.16541 c -1.93864,1.93864 -1.93828,5.06001 3.7e-4,6.99865 l 2.8922,2.89221 -30.280963,28.22001 c 0.664338,4.5046 3.324184,5.56171 6.21705,6.21704 l 28.220063,-30.28091 2.89219,2.89218 c 1.93864,1.93864 5.06001,1.939 6.99865,3.8e-4 l 5.16539,-5.16541 0.003,-0.003 c 7.65187,-8.45615 8.77858,-10.50592 8.04518,-14.01665 l -11.03092,11.03092 -3.99975,-3.99975 c 0.78874,-0.87769 10.27976,-11.47732 9.39426,-12.36283 -0.88553,-0.8855 -11.48511,8.60553 -12.36283,9.39426 l -3.99977,-3.99975 z"
+ sodipodi:nodetypes="ccscccccccccccccccc" />
+ <path
+ id="rect1-14"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.2;stroke-linecap:square;stroke-linejoin:bevel;paint-order:stroke fill markers"
+ d="m 75.027245,108.31931 c -0.901448,12.2468 8.563163,26.6897 19.113376,38.13504 l 2.77564,-2.77564 0.89013,-0.89013 24.052589,25.9454 c 4.50458,-0.66434 5.56171,-3.32419 6.21704,-6.21704 l -25.9454,-24.0526 1.01291,-1.0129 0.50792,-0.50793 z"
+ sodipodi:nodetypes="cccccccccc" />
+ </g>
+</svg>
<div class="header-container">
{% include "title.html" %}
- {% match user %}
- {% when Some with (user) %}
- <a class="create-recipe" href="/recipe/new" >{{ tr.t(Sentence::CreateNewRecipe) }}</a>
- <span><a href="/user/edit">
- {% if user.name == "" %}
- {{ user.email }}
- {% else %}
- {{ user.name }}
- {% endif %}
- </a> / <a href="/signout" />{{ tr.t(Sentence::SignOut) }}</a></span>
- {% when None %}
- <span>
+ <span class="header-menu">
+ {% match user %}
+ {% when Some with (user) %}
+ <a class="create-recipe" href="/recipe/new" >{{ tr.t(Sentence::CreateNewRecipe) }}</a>
+ <a href="/user/edit">
+ {% if user.name == "" %}
+ {{ user.email }}
+ {% else %}
+ {{ user.name }}
+ {% endif %}
+ </a> / <a href="/signout" />{{ tr.t(Sentence::SignOut) }}</a>
+ {% when None %}
<a href="/signin" >{{ tr.t(Sentence::SignInMenu) }}</a>/<a href="/signup">{{ tr.t(Sentence::SignUpMenu) }}</a>/<a href="/ask_reset_password">{{ tr.t(Sentence::LostPassword) }}</a>
- </span>
- {% endmatch %}
+ {% endmatch %}
- <select id="select-website-language">
- {% for lang in translation::available_languages() %}
- <option value="{{ lang.0 }}"
- {%+ if tr.current_lang_code() == lang.0 %}
- selected
- {% endif %}
- >{{ lang.1 }}</option>
- {% endfor %}
- </select>
+ <select id="select-website-language">
+ {% for lang in translation::available_languages() %}
+ <option value="{{ lang.0 }}"
+ {%+ if tr.current_lang_code() == lang.0 %}
+ selected
+ {% endif %}
+ >{{ lang.1 }}</option>
+ {% endfor %}
+ </select>
+ </span>
</div>
<div class="main-container">
-<a class="title" href="/">{{ tr.t(Sentence::MainTitle) }}</a>
\ No newline at end of file
+<a class="title" href="/"><img class="logo" src="/static/logo.svg" alt="logo"/>{{ tr.t(Sentence::MainTitle) }}</a>
\ No newline at end of file
(SignUpMenu, "Sign up"),
(SignUpTitle, "Sign up"),
(SignUpButton, "Sign up"),
- (SignUpEmailSent, "An email has been sent), follow the link to validate your account"),
+ (SignUpEmailSent, "An email has been sent, follow the link to validate your account"),
(SignUpFollowEmailLink, "Follow this link to confirm your inscription, {}"),
- (SignUpEmailValidationSuccess, "Email validation successful), your account has been created"),
+ (SignUpEmailValidationSuccess, "Email validation successful, your account has been created"),
(SignUpValidationExpired, "The validation has expired. Try to sign up again"),
(SignUpValidationErrorTryAgain, "Validation error. Try to sign up again"),
(ChooseAPassword, "Choose a password (minimum {} characters)"),
(AskResetAlreadyLoggedInError, "Can't ask to reset password when already logged in"),
(AskResetEmailAlreadyResetError, "The password has already been reset for this email"),
(AskResetFollowEmailLink, "Follow this link to reset your password, {}"),
- (AskResetEmailSent, "An email has been sent), follow the link to reset your password"),
+ (AskResetEmailSent, "An email has been sent, follow the link to reset your password"),
(AskResetTokenMissing, "Reset token missing"),
- (AskResetTokenExpired, "Token expired), try to reset password again"),
+ (AskResetTokenExpired, "Token expired, try to reset password again"),
(PasswordReset, "Your password has been reset"),
(EmailUnknown, "Email unknown"),
(UnableToSendResetEmail, "Unable to send the reset password email"),
(ProfileEmail, "Email (need to be revalidated if changed)"),
(ProfileNewPassword, "New password (minimum {} characters)"),
(ProfileFollowEmailLink, "Follow this link to validate this email address, {}"),
- (ProfileEmailSent, "An email has been sent), follow the link to validate your new email"),
+ (ProfileEmailSent, "An email has been sent, follow the link to validate your new email"),
(ProfileSaved, "Profile saved"),
(RecipeNotAllowedToEdit, "Not allowed to edit this recipe"),
(SignUpMenu, "S'inscrire"),
(SignUpTitle, "Inscription"),
(SignUpButton, "Valider"),
- (SignUpEmailSent, "Un email a été envoyé), suivez le lien pour valider votre compte"),
+ (SignUpEmailSent, "Un email a été envoyé, suivez le lien pour valider votre compte"),
(SignUpFollowEmailLink, "Suivez ce lien pour valider votre inscription, {}"),
- (SignUpEmailValidationSuccess, "La validation de votre email s'est déroulée avec succès), votre compte a été créé"),
+ (SignUpEmailValidationSuccess, "La validation de votre email s'est déroulée avec succès, votre compte a été créé"),
(SignUpValidationExpired, "La validation a expiré. Essayez de vous inscrire à nouveau"),
(SignUpValidationErrorTryAgain, "Erreur de validation. Essayez de vous inscrire à nouveau"),
(ChooseAPassword, "Choisir un mot de passe (minimum {} caractères)"),
(AskResetAlreadyLoggedInError, "Impossible de demander une réinitialisation du mot de passe lorsque déjà connecté"),
(AskResetEmailAlreadyResetError, "Le mot de passe a déjà été réinitialisé pour cette adresse email"),
(AskResetFollowEmailLink, "Suivez ce lien pour réinitialiser votre mot de passe, {}"),
- (AskResetEmailSent, "Un email a été envoyé), suivez le lien pour réinitialiser votre mot de passe"),
+ (AskResetEmailSent, "Un email a été envoyé, suivez le lien pour réinitialiser votre mot de passe"),
(AskResetTokenMissing, "Jeton de réinitialisation manquant"),
- (AskResetTokenExpired, "Jeton expiré), essayez de réinitialiser votre mot de passe à nouveau"),
+ (AskResetTokenExpired, "Jeton expiré, essayez de réinitialiser votre mot de passe à nouveau"),
(PasswordReset, "Votre mot de passe a été réinitialisé"),
(EmailUnknown, "Email inconnu"),
(UnableToSendResetEmail, "Impossible d'envoyer l'email pour la réinitialisation du mot de passe"),
(ProfileEmail, "Email (doit être revalidé si changé)"),
(ProfileNewPassword, "Nouveau mot de passe (minimum {} caractères)"),
(ProfileFollowEmailLink, "Suivez ce lien pour valider l'adresse email, {}"),
- (ProfileEmailSent, "Un email a été envoyé), suivez le lien pour valider la nouvelle adresse email"),
+ (ProfileEmailSent, "Un email a été envoyé, suivez le lien pour valider la nouvelle adresse email"),
(ProfileSaved, "Profile sauvegardé"),
(RecipeNotAllowedToEdit, "Vous n'êtes pas autorisé à éditer cette recette"),