Compare commits

...

34 Commits
1.1.2 ... 1.1.4

Author SHA1 Message Date
vabene1111
0c841ec686 another improvement to shopping list item 2022-03-16 09:21:09 +01:00
ivo
f875942e79 Translated using Weblate (Portuguese)
Currently translated at 1.0% (4 of 378 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt/
2022-03-15 19:31:47 +00:00
vabene1111
4cf8b72e3f removed OT from sle 2022-03-15 12:50:41 +01:00
vabene1111
4dd3ba29b6 improved shopping v2 layout a little bit 2022-03-15 12:35:13 +01:00
vabene1111
96bd66f9e6 fixed telegram bot 2022-03-15 11:48:12 +01:00
vabene1111
70716bf99f Merge pull request #1643 from MaxJa4/patch-1
Updated dependencies of manual setup
2022-03-15 11:35:33 +01:00
vabene1111
16449cd078 Merge pull request #1644 from gloriousDan/develop
Update bind mounts in docker run command to use absolute paths
2022-03-15 11:34:40 +01:00
vabene1111
5459e293d1 Merge pull request #1645 from smilerz/fix_sql_debug
fix sql debug button in search
2022-03-15 11:33:23 +01:00
vabene1111
749713d698 Merge pull request #1646 from bradpoulton/develop
Updates Docker installation docs
2022-03-15 11:32:24 +01:00
ivo
4a5af48f33 Added translation using Weblate (Portuguese) 2022-03-14 18:51:14 +00:00
brad
5cf58a32dc Updates formating 2022-03-11 18:19:48 -07:00
brad
a956888355 Fixes wording 2022-03-11 18:18:09 -07:00
brad
cb835b033c Updates Docker installation docs
Adds warning that the jwilder nginx-proxy reduces file size upload to 1 MB.
2022-03-11 18:16:32 -07:00
smilerz
b9289e2685 fix sql debug button in search 2022-03-11 07:27:42 -06:00
Daniel
c0bd0d49ae Update bind mounts to use absolute paths
Docker bind mounts have to use absolute paths, so the docker run command fails when using the relative mounts ./staticfiles and ./mediafiles.
This may be supported again (https://github.com/docker/cli/issues/1203)
2022-03-11 13:40:59 +01:00
MaxJa4
36fbbed1b0 Added link to docs of nodejs installation 2022-03-11 10:21:50 +01:00
MaxJa4
34f70e4ba7 Fixed formatting 2022-03-11 10:18:51 +01:00
MaxJa4
8bc361ee7c Updated dependencies of manual setup
- apt install of nodejs installs an unsupported (V10.X) version
- dependencies for python-ldap were missing
2022-03-11 10:16:55 +01:00
vabene1111
091fab154a improved openid and social auth pages 2022-03-10 15:24:13 +01:00
vabene1111
c6e11f6ef2 Merge pull request #1640 from CameronJGrant/develop
Fixed typos and grammatical issues.
2022-03-10 14:43:16 +01:00
vabene1111
16b5cd75b1 Merge pull request #1641 from m42e/feature/markdown-img-tag
Allow img tag (including width/height attribute)
2022-03-10 14:41:31 +01:00
Matthias Bilger
f040b491d4 Allow img tag (including width/height attribute)
Allow using img tag in markdown and additionally allowing to specify
width and height attribute for elements.
2022-03-10 11:38:08 +01:00
karawedi
8174da31e8 Translated using Weblate (German)
Currently translated at 95.1% (535 of 562 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2022-03-09 18:31:44 +00:00
Cameron Grant
53518f4c47 Fixed typos and grammatical issues. 2022-03-08 12:12:20 -08:00
Felipe Castro
693d829946 Translated using Weblate (Portuguese (Brazil))
Currently translated at 3.0% (17 of 562 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2022-03-08 01:31:43 +00:00
Felipe Castro
5ab11eb1bc Translated using Weblate (Portuguese (Brazil))
Currently translated at 0.5% (2 of 378 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2022-03-08 01:31:43 +00:00
Felipe Castro
332f518774 Added translation using Weblate (Portuguese (Brazil)) 2022-03-07 01:00:09 +00:00
Felipe Castro
ed33114947 Added translation using Weblate (Portuguese (Brazil)) 2022-03-07 00:56:04 +00:00
Kaibu
aeb38cd2e9 Merge branch 'develop-weblate' into develop
# Conflicts:
#	cookbook/locale/de/LC_MESSAGES/django.po
#	cookbook/locale/hu_HU/LC_MESSAGES/django.po
#	vue/src/locales/de.json
2022-03-06 20:45:35 +01:00
Adrian M
17cf5f48a1 Translated using Weblate (Hungarian)
Currently translated at 2.9% (17 of 568 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hu/
2022-03-06 19:35:42 +00:00
A. L
a522f9879f Translated using Weblate (German)
Currently translated at 100.0% (298 of 298 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2022-02-12 21:31:35 +00:00
Dirk
4ee32b3263 Translated using Weblate (German)
Currently translated at 100.0% (298 of 298 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2022-02-12 21:31:35 +00:00
Ghostfighter
c339b4fef8 Translated using Weblate (German)
Currently translated at 99.6% (566 of 568 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2022-02-12 21:31:35 +00:00
Dirk
9ff981f34f Translated using Weblate (German)
Currently translated at 99.6% (566 of 568 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2022-02-12 21:31:35 +00:00
32 changed files with 3871 additions and 170 deletions

View File

@@ -39,7 +39,7 @@ def render_instructions(step): # TODO deduplicate markdown cleanup code
instructions = step.instruction
tags = markdown_tags + [
'pre', 'table', 'td', 'tr', 'th', 'tbody', 'style', 'thead'
'pre', 'table', 'td', 'tr', 'th', 'tbody', 'style', 'thead', 'img'
]
parsed_md = md.markdown(
instructions,
@@ -48,7 +48,7 @@ def render_instructions(step): # TODO deduplicate markdown cleanup code
UrlizeExtension(), MarkdownFormatExtension()
]
)
markdown_attrs['*'] = markdown_attrs['*'] + ['class']
markdown_attrs['*'] = markdown_attrs['*'] + ['class', 'width', 'height']
instructions = bleach.clean(parsed_md, tags, markdown_attrs)

View File

@@ -2991,7 +2991,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:126

View File

@@ -15,10 +15,10 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-02-11 08:52+0100\n"
"PO-Revision-Date: 2022-02-06 21:31+0000\n"
"Last-Translator: David Laukamp <dlkmp@live.de>\n"
"Language-Team: German <http://translate.tandoor.dev/projects/tandoor/recipes-"
"backend/de/>\n"
"PO-Revision-Date: 2022-03-09 18:31+0000\n"
"Last-Translator: karawedi <wedi.nick@gmail.com>\n"
"Language-Team: German <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/de/>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -293,16 +293,12 @@ msgstr ""
"A. führen niedrigere Werte zum ignorieren von mehr Tippfehlern)."
#: .\cookbook\forms.py:445
#, fuzzy
#| msgid ""
#| "Select type method of search. Click <a href=\"/docs/search/\">here</a> "
#| "for full desciption of choices."
msgid ""
"Select type method of search. Click <a href=\"/docs/search/\">here</a> for "
"full description of choices."
msgstr ""
"Suchmethode auswählen. Klicke <a href=\"/docs/search/\">hier</a> für eine "
"Auflistung der Optionen."
"vollständige Erklärung der Optionen."
#: .\cookbook\forms.py:446
msgid ""
@@ -538,10 +534,8 @@ msgid "One of queryset or hash_key must be provided"
msgstr "Es muss die Abfrage oder der Hash_Key angeben werden"
#: .\cookbook\helper\shopping_helper.py:148
#, fuzzy
#| msgid "You must supply a created_by"
msgid "You must supply a servings size"
msgstr "Die Angabe der Verfassers ist notwendig"
msgstr "Sie müssen eine Portionsgröße angeben"
#: .\cookbook\helper\template_helper.py:61
#: .\cookbook\helper\template_helper.py:63
@@ -735,11 +729,16 @@ msgid ""
"List of ingredient IDs from the recipe to add, if not provided all "
"ingredients will be added."
msgstr ""
"Liste der Zutaten-IDs aus dem Rezept, wenn keine Angabe erfolgt, werden alle "
"Zutaten hinzugefügt."
#: .\cookbook\serializer.py:980
#, fuzzy
msgid ""
"Providing a list_recipe ID and servings of 0 will delete that shopping list."
msgstr ""
"Wenn Sie eine \"list_recipe\"-ID, sowie 0 Portionen angeben, wird diese "
"Einkaufsliste gelöscht."
#: .\cookbook\serializer.py:988
msgid "Amount of food to add to the shopping list"
@@ -751,8 +750,11 @@ msgid "ID of unit to use for the shopping list"
msgstr "ID der Einheit, die für die Einkaufsliste verwendet werden soll"
#: .\cookbook\serializer.py:990
#, fuzzy
msgid "When set to true will delete all food from active shopping lists."
msgstr ""
"Wenn diese Option auf wahr gesetzt ist, werden alle Lebensmittel aus den "
"aktiven Einkaufslisten gelöscht."
#: .\cookbook\tables.py:35 .\cookbook\templates\generic\edit_template.html:6
#: .\cookbook\templates\generic\edit_template.html:14
@@ -3107,7 +3109,7 @@ msgstr ""
"paar Stunden."
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
"Email konnte an den Benutzer nicht gesendet werden. Bitte teile den Link "
"manuell."

View File

@@ -2724,7 +2724,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:126

View File

@@ -3042,7 +3042,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:126

View File

@@ -2435,7 +2435,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:225
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:127

View File

@@ -3155,7 +3155,7 @@ msgstr ""
"quelques heures."
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
"Impossible denvoyer le mail à lutilisateur, veuillez partager le lien "
"manuellement."

View File

@@ -6,21 +6,21 @@
# Translators:
# igazka <igazka100@gmail.com>, 2020
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-02-11 08:52+0100\n"
"PO-Revision-Date: 2020-06-02 19:28+0000\n"
"Last-Translator: igazka <igazka100@gmail.com>, 2020\n"
"Language-Team: Hungarian (Hungary) (https://www.transifex.com/django-recipes/"
"teams/110507/hu_HU/)\n"
"POT-Creation-Date: 2022-01-18 14:52+0100\n"
"PO-Revision-Date: 2022-03-06 19:35+0000\n"
"Last-Translator: Adrian M <adriankoooo@gmail.com>\n"
"Language-Team: Hungarian <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/hu/>\n"
"Language: hu_HU\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.10.1\n"
#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34
#: .\cookbook\templates\space.html:50 .\cookbook\templates\stats.html:28
@@ -30,7 +30,7 @@ msgstr "Hozzávalók"
#: .\cookbook\forms.py:56
msgid "Default unit"
msgstr ""
msgstr "Alapértelmezett mértékegység"
#: .\cookbook\forms.py:57
msgid "Use fractions"
@@ -271,7 +271,7 @@ msgstr ""
#: .\cookbook\forms.py:445
msgid ""
"Select type method of search. Click <a href=\"/docs/search/\">here</a> for "
"full description of choices."
"full desciption of choices."
msgstr ""
#: .\cookbook\forms.py:446
@@ -327,7 +327,7 @@ msgid "Partial Match"
msgstr ""
#: .\cookbook\forms.py:464
msgid "Starts With"
msgid "Starts Wtih"
msgstr ""
#: .\cookbook\forms.py:465
@@ -471,12 +471,16 @@ msgstr ""
msgid "You cannot interact with this object as it is not owned by you!"
msgstr ""
#: .\cookbook\helper\recipe_search.py:486
#: .\cookbook\helper\recipe_search.py:473
msgid "One of queryset or hash_key must be provided"
msgstr ""
#: .\cookbook\helper\shopping_helper.py:148
msgid "You must supply a servings size"
#: .\cookbook\helper\shopping_helper.py:54
msgid "You must supply a recipe or mealplan"
msgstr ""
#: .\cookbook\helper\shopping_helper.py:58
msgid "You must supply a created_by"
msgstr ""
#: .\cookbook\helper\template_helper.py:61
@@ -484,23 +488,23 @@ msgstr ""
msgid "Could not parse template code."
msgstr ""
#: .\cookbook\integration\integration.py:213
#: .\cookbook\integration\integration.py:200
msgid ""
"Importer expected a .zip file. Did you choose the correct importer type for "
"your data ?"
msgstr ""
#: .\cookbook\integration\integration.py:216
#: .\cookbook\integration\integration.py:203
msgid ""
"An unexpected error occurred during the import. Please make sure you have "
"uploaded a valid file."
msgstr ""
#: .\cookbook\integration\integration.py:221
#: .\cookbook\integration\integration.py:208
msgid "The following recipes were ignored because they already existed:"
msgstr ""
#: .\cookbook\integration\integration.py:225
#: .\cookbook\integration\integration.py:212
#, python-format
msgid "Imported %s recipes."
msgstr ""
@@ -518,6 +522,7 @@ msgid "Source"
msgstr ""
#: .\cookbook\integration\saffron.py:23
#: .\cookbook\templates\include\log_cooking.html:18
#: .\cookbook\templates\url_import.html:231
#: .\cookbook\templates\url_import.html:462
msgid "Servings"
@@ -546,7 +551,7 @@ msgid "Rebuilds full text search index on Recipe"
msgstr ""
#: .\cookbook\management\commands\rebuildindex.py:18
msgid "Only Postgresql databases use full text search, no index to rebuild"
msgid "Only Postgress databases use full text search, no index to rebuild"
msgstr ""
#: .\cookbook\management\commands\rebuildindex.py:29
@@ -608,78 +613,99 @@ msgstr ""
msgid "New"
msgstr ""
#: .\cookbook\models.py:513
#: .\cookbook\models.py:512
msgid " is part of a recipe step and cannot be deleted"
msgstr ""
#: .\cookbook\models.py:1065 .\cookbook\templates\search_info.html:28
#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:44
msgid "Text"
msgstr "Szöveg"
#: .\cookbook\models.py:586
msgid "Time"
msgstr ""
#: .\cookbook\models.py:586 .\cookbook\templates\url_import.html:46
#, fuzzy
#| msgid "File ID"
msgid "File"
msgstr "Fájl ID:"
#: .\cookbook\models.py:586
#: .\cookbook\templates\include\recipe_open_modal.html:7
#: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260
#: .\cookbook\views\new.py:53
msgid "Recipe"
msgstr ""
#: .\cookbook\models.py:1041 .\cookbook\templates\search_info.html:28
msgid "Simple"
msgstr ""
#: .\cookbook\models.py:1066 .\cookbook\templates\search_info.html:33
#: .\cookbook\models.py:1042 .\cookbook\templates\search_info.html:33
msgid "Phrase"
msgstr ""
#: .\cookbook\models.py:1067 .\cookbook\templates\search_info.html:38
#: .\cookbook\models.py:1043 .\cookbook\templates\search_info.html:38
msgid "Web"
msgstr ""
#: .\cookbook\models.py:1068 .\cookbook\templates\search_info.html:47
#: .\cookbook\models.py:1044 .\cookbook\templates\search_info.html:47
msgid "Raw"
msgstr ""
#: .\cookbook\models.py:1106
#: .\cookbook\models.py:1082
#, fuzzy
#| msgid "New Food"
msgid "Food Alias"
msgstr "Új Étel"
#: .\cookbook\models.py:1106
#: .\cookbook\models.py:1082
msgid "Unit Alias"
msgstr ""
#: .\cookbook\models.py:1106
#: .\cookbook\models.py:1082
#, fuzzy
#| msgid "Keywords"
msgid "Keyword Alias"
msgstr "Kulcsszavak"
#: .\cookbook\serializer.py:180
#: .\cookbook\serializer.py:175
msgid "A user is required"
msgstr ""
#: .\cookbook\serializer.py:200
#: .\cookbook\serializer.py:195
msgid "File uploads are not enabled for this Space."
msgstr ""
#: .\cookbook\serializer.py:211
#: .\cookbook\serializer.py:206
msgid "You have reached your file upload limit."
msgstr ""
#: .\cookbook\serializer.py:977
#: .\cookbook\serializer.py:962
msgid "Existing shopping list to update"
msgstr ""
#: .\cookbook\serializer.py:979
#: .\cookbook\serializer.py:964
msgid ""
"List of ingredient IDs from the recipe to add, if not provided all "
"ingredients will be added."
msgstr ""
#: .\cookbook\serializer.py:980
#: .\cookbook\serializer.py:965
msgid ""
"Providing a list_recipe ID and servings of 0 will delete that shopping list."
msgstr ""
#: .\cookbook\serializer.py:988
#: .\cookbook\serializer.py:973
msgid "Amount of food to add to the shopping list"
msgstr ""
#: .\cookbook\serializer.py:989
#: .\cookbook\serializer.py:974
msgid "ID of unit to use for the shopping list"
msgstr ""
#: .\cookbook\serializer.py:990
#: .\cookbook\serializer.py:975
msgid "When set to true will delete all food from active shopping lists."
msgstr ""
@@ -1028,8 +1054,8 @@ msgstr ""
msgid "History"
msgstr ""
#: .\cookbook\templates\base.html:228
#: .\cookbook\templates\export_response.html:7
#: .\cookbook\templates\base.html:228 .\cookbook\templates\export.html:14
#: .\cookbook\templates\export.html:20
#: .\cookbook\templates\shopping_list.html:310
#: .\cookbook\templates\test2.html:14 .\cookbook\templates\test2.html:20
msgid "Export"
@@ -1118,6 +1144,7 @@ msgstr ""
#: .\cookbook\templates\forms\edit_import_recipe.html:14
#: .\cookbook\templates\generic\edit_template.html:23
#: .\cookbook\templates\generic\new_template.html:23
#: .\cookbook\templates\include\log_cooking.html:30
#: .\cookbook\templates\settings.html:70 .\cookbook\templates\settings.html:112
#: .\cookbook\templates\settings.html:130
#: .\cookbook\templates\settings.html:202
@@ -1158,7 +1185,7 @@ msgstr ""
msgid "Recipe Books"
msgstr ""
#: .\cookbook\templates\export.html:8 .\cookbook\templates\test2.html:6
#: .\cookbook\templates\export.html:6 .\cookbook\templates\test2.html:6
msgid "Export Recipes"
msgstr ""
@@ -1276,12 +1303,19 @@ msgstr ""
msgid "Import"
msgstr ""
#: .\cookbook\templates\include\recipe_open_modal.html:7
#: .\cookbook\views\delete.py:39 .\cookbook\views\edit.py:260
#: .\cookbook\views\new.py:53
msgid "Recipe"
#: .\cookbook\templates\include\log_cooking.html:9
msgid "Log Recipe Cooking"
msgstr ""
#: .\cookbook\templates\include\log_cooking.html:15
msgid "All fields are optional and can be left empty."
msgstr ""
#: .\cookbook\templates\include\log_cooking.html:21
msgid "Rating"
msgstr ""
#: .\cookbook\templates\include\log_cooking.html:29
#: .\cookbook\templates\include\recipe_open_modal.html:18
msgid "Close"
msgstr ""
@@ -1372,7 +1406,7 @@ msgstr ""
#: .\cookbook\templates\markdown_info.html:57
#: .\cookbook\templates\markdown_info.html:73
msgid "or by leaving a blank line in between."
msgid "or by leaving a blank line inbetween."
msgstr ""
#: .\cookbook\templates\markdown_info.html:59
@@ -1396,7 +1430,7 @@ msgstr ""
#: .\cookbook\templates\markdown_info.html:85
msgid ""
"Lists can ordered or unordered. It is <b>important to leave a blank line "
"Lists can ordered or unorderd. It is <b>important to leave a blank line "
"before the list!</b>"
msgstr ""
@@ -1658,7 +1692,7 @@ msgstr ""
msgid ""
" \n"
" Simple searches ignore punctuation and common words such as "
"'the', 'a', 'and'. And will treat separate words as required.\n"
"'the', 'a', 'and'. And will treat seperate words as required.\n"
" Searching for 'apple or flour' will return any recipe that "
"includes both 'apple' and 'flour' anywhere in the fields that have been "
"selected for a full text search.\n"
@@ -1683,7 +1717,7 @@ msgid ""
"sites supporting special syntax.\n"
" Placing quotes around several words will convert those words "
"into a phrase.\n"
" 'or' is recognized as searching for the word (or phrase) "
" 'or' is recongized as searching for the word (or phrase) "
"immediately before 'or' OR the word (or phrase) directly after.\n"
" '-' is recognized as searching for recipes that do not include "
"the word (or phrase) that comes immediately after. \n"
@@ -1713,7 +1747,7 @@ msgid ""
"'ppl', 'ple' and will create a score of how closely words match the "
"generated trigrams.\n"
" One benefit of searching trigams is that a search for 'sandwich' "
"will find misspelled words such as 'sandwhich' that would be missed by other "
"will find mispelled words such as 'sandwhich' that would be missed by other "
"methods.\n"
" "
msgstr ""
@@ -1972,7 +2006,7 @@ msgid "Finished"
msgstr ""
#: .\cookbook\templates\shopping_list.html:267
msgid "You are offline, shopping list might not synchronize."
msgid "You are offline, shopping list might not syncronize."
msgstr ""
#: .\cookbook\templates\shopping_list.html:318
@@ -2230,16 +2264,6 @@ msgstr ""
msgid "App"
msgstr ""
#: .\cookbook\templates\url_import.html:44
msgid "Text"
msgstr "Szöveg"
#: .\cookbook\templates\url_import.html:46
#, fuzzy
#| msgid "File ID"
msgid "File"
msgstr "Fájl ID:"
#: .\cookbook\templates\url_import.html:64
msgid "Enter website URL"
msgstr ""
@@ -2404,203 +2428,202 @@ msgstr ""
msgid "Recipe Markup Specification"
msgstr ""
#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:174
#: .\cookbook\views\api.py:88 .\cookbook\views\api.py:170
msgid "Parameter updated_at incorrectly formatted"
msgstr ""
#: .\cookbook\views\api.py:194 .\cookbook\views\api.py:295
#: .\cookbook\views\api.py:190 .\cookbook\views\api.py:291
#, python-brace-format
msgid "No {self.basename} with id {pk} exists"
msgstr ""
#: .\cookbook\views\api.py:198
#: .\cookbook\views\api.py:194
msgid "Cannot merge with the same object!"
msgstr ""
#: .\cookbook\views\api.py:205
#: .\cookbook\views\api.py:201
#, python-brace-format
msgid "No {self.basename} with id {target} exists"
msgstr ""
#: .\cookbook\views\api.py:210
#: .\cookbook\views\api.py:206
msgid "Cannot merge with child object!"
msgstr ""
#: .\cookbook\views\api.py:243
#: .\cookbook\views\api.py:239
#, python-brace-format
msgid "{source.name} was merged successfully with {target.name}"
msgstr ""
#: .\cookbook\views\api.py:248
#: .\cookbook\views\api.py:244
#, python-brace-format
msgid "An error occurred attempting to merge {source.name} with {target.name}"
msgstr ""
#: .\cookbook\views\api.py:304
#: .\cookbook\views\api.py:300
#, python-brace-format
msgid "{child.name} was moved successfully to the root."
msgstr ""
#: .\cookbook\views\api.py:307 .\cookbook\views\api.py:325
#: .\cookbook\views\api.py:303 .\cookbook\views\api.py:321
msgid "An error occurred attempting to move "
msgstr ""
#: .\cookbook\views\api.py:310
#: .\cookbook\views\api.py:306
msgid "Cannot move an object to itself!"
msgstr ""
#: .\cookbook\views\api.py:316
#: .\cookbook\views\api.py:312
#, python-brace-format
msgid "No {self.basename} with id {parent} exists"
msgstr ""
#: .\cookbook\views\api.py:322
#: .\cookbook\views\api.py:318
#, python-brace-format
msgid "{child.name} was moved successfully to parent {parent.name}"
msgstr ""
#: .\cookbook\views\api.py:474
#: .\cookbook\views\api.py:470
#, python-brace-format
msgid "{obj.name} was removed from the shopping list."
msgstr ""
#: .\cookbook\views\api.py:479 .\cookbook\views\api.py:729
#: .\cookbook\views\api.py:742
#: .\cookbook\views\api.py:475 .\cookbook\views\api.py:726
#, python-brace-format
msgid "{obj.name} was added to the shopping list."
msgstr ""
#: .\cookbook\views\api.py:591
#: .\cookbook\views\api.py:587
msgid "ID of recipe a step is part of. For multiple repeat parameter."
msgstr ""
#: .\cookbook\views\api.py:592
#: .\cookbook\views\api.py:588
msgid "Query string matched (fuzzy) against object name."
msgstr ""
#: .\cookbook\views\api.py:635
#: .\cookbook\views\api.py:631
msgid ""
"Query string matched (fuzzy) against recipe name. In the future also "
"fulltext search."
msgstr ""
#: .\cookbook\views\api.py:636
#: .\cookbook\views\api.py:632
msgid "ID of keyword a recipe should have. For multiple repeat parameter."
msgstr ""
#: .\cookbook\views\api.py:637
#: .\cookbook\views\api.py:633
msgid "ID of food a recipe should have. For multiple repeat parameter."
msgstr ""
#: .\cookbook\views\api.py:638
#: .\cookbook\views\api.py:634
msgid "ID of unit a recipe should have."
msgstr ""
#: .\cookbook\views\api.py:639
#: .\cookbook\views\api.py:635
msgid "Rating a recipe should have. [0 - 5]"
msgstr ""
#: .\cookbook\views\api.py:640
#: .\cookbook\views\api.py:636
msgid "ID of book a recipe should be in. For multiple repeat parameter."
msgstr ""
#: .\cookbook\views\api.py:641
#: .\cookbook\views\api.py:637
msgid ""
"If recipe should have all (AND=false) or any (OR=<b>true</b>) of the "
"provided keywords."
msgstr ""
#: .\cookbook\views\api.py:642
#: .\cookbook\views\api.py:638
msgid ""
"If recipe should have all (AND=false) or any (OR=<b>true</b>) of the "
"provided foods."
msgstr ""
#: .\cookbook\views\api.py:643
#: .\cookbook\views\api.py:639
msgid ""
"If recipe should be in all (AND=false) or any (OR=<b>true</b>) of the "
"provided books."
msgstr ""
#: .\cookbook\views\api.py:644
#: .\cookbook\views\api.py:640
msgid "If only internal recipes should be returned. [true/<b>false</b>]"
msgstr ""
#: .\cookbook\views\api.py:645
#: .\cookbook\views\api.py:641
msgid "Returns the results in randomized order. [true/<b>false</b>]"
msgstr ""
#: .\cookbook\views\api.py:646
#: .\cookbook\views\api.py:642
msgid "Returns new results first in search results. [true/<b>false</b>]"
msgstr ""
#: .\cookbook\views\api.py:784
#: .\cookbook\views\api.py:768
msgid ""
"Returns the shopping list entry with a primary key of id. Multiple values "
"allowed."
msgstr ""
#: .\cookbook\views\api.py:787
#: .\cookbook\views\api.py:771
msgid ""
"Filter shopping list entries on checked. [true, false, both, <b>recent</"
"b>]<br> - recent includes unchecked items and recently completed items."
msgstr ""
#: .\cookbook\views\api.py:789
#: .\cookbook\views\api.py:773
msgid "Returns the shopping list entries sorted by supermarket category order."
msgstr ""
#: .\cookbook\views\api.py:949 .\cookbook\views\data.py:42
#: .\cookbook\views\api.py:922 .\cookbook\views\data.py:42
#: .\cookbook\views\edit.py:129 .\cookbook\views\new.py:95
msgid "This feature is not yet available in the hosted version of tandoor!"
msgstr ""
#: .\cookbook\views\api.py:971
#: .\cookbook\views\api.py:944
msgid "Sync successful!"
msgstr ""
#: .\cookbook\views\api.py:976
#: .\cookbook\views\api.py:949
msgid "Error synchronizing with Storage"
msgstr ""
#: .\cookbook\views\api.py:1055
#: .\cookbook\views\api.py:1028
msgid "Nothing to do."
msgstr ""
#: .\cookbook\views\api.py:1070
#: .\cookbook\views\api.py:1043
msgid "The requested site provided malformed data and cannot be read."
msgstr ""
#: .\cookbook\views\api.py:1077
#: .\cookbook\views\api.py:1050
msgid "The requested page could not be found."
msgstr ""
#: .\cookbook\views\api.py:1095
#: .\cookbook\views\api.py:1068
msgid ""
"The requested site does not provide any recognized data format to import the "
"recipe from."
msgstr ""
#: .\cookbook\views\api.py:1109
#: .\cookbook\views\api.py:1082
msgid "Connection Refused."
msgstr ""
#: .\cookbook\views\api.py:1118
msgid "No usable data could be found."
#: .\cookbook\views\api.py:1091
msgid "No useable data could be found."
msgstr ""
#: .\cookbook\views\api.py:1134
#: .\cookbook\views\api.py:1107
msgid "I couldn't find anything to do."
msgstr ""
#: .\cookbook\views\data.py:34 .\cookbook\views\data.py:129
#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:81
#: .\cookbook\views\edit.py:49 .\cookbook\views\import_export.py:80
#: .\cookbook\views\new.py:33
msgid "You have reached the maximum number of recipes for your space."
msgstr ""
#: .\cookbook\views\data.py:38 .\cookbook\views\data.py:133
#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:85
#: .\cookbook\views\edit.py:53 .\cookbook\views\import_export.py:84
#: .\cookbook\views\new.py:37
msgid "You have more users than allowed in your space."
msgstr ""
@@ -2658,16 +2681,20 @@ msgstr ""
msgid "Error saving changes!"
msgstr ""
#: .\cookbook\views\import_export.py:107 .\cookbook\views\import_export.py:143
#: .\cookbook\views\import_export.py:106
msgid "Importing is not implemented for this provider"
msgstr ""
#: .\cookbook\views\import_export.py:130
#: .\cookbook\views\import_export.py:127
msgid ""
"The PDF Exporter is not enabled on this instance as it is still in an "
"experimental state."
msgstr ""
#: .\cookbook\views\import_export.py:132
msgid "Exporting is not implemented for this provider"
msgstr ""
#: .\cookbook\views\lists.py:25
msgid "Import Log"
msgstr ""
@@ -2749,7 +2776,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:126
@@ -2784,44 +2811,44 @@ msgstr ""
msgid "Fuzzy search is not compatible with this search method!"
msgstr ""
#: .\cookbook\views\views.py:473
#: .\cookbook\views\views.py:470
msgid ""
"The setup page can only be used to create the first user! If you have "
"forgotten your superuser credentials please consult the django documentation "
"on how to reset passwords."
msgstr ""
#: .\cookbook\views\views.py:480
#: .\cookbook\views\views.py:477
msgid "Passwords dont match!"
msgstr ""
#: .\cookbook\views\views.py:496
#: .\cookbook\views\views.py:493
msgid "User has been created, please login!"
msgstr ""
#: .\cookbook\views\views.py:512
#: .\cookbook\views\views.py:509
msgid "Malformed Invite Link supplied!"
msgstr ""
#: .\cookbook\views\views.py:519
#: .\cookbook\views\views.py:516
msgid "You are already member of a space and therefore cannot join this one."
msgstr ""
#: .\cookbook\views\views.py:530
#: .\cookbook\views\views.py:527
msgid "Successfully joined space."
msgstr ""
#: .\cookbook\views\views.py:536
#: .\cookbook\views\views.py:533
msgid "Invite Link not valid or already used!"
msgstr ""
#: .\cookbook\views\views.py:617
#: .\cookbook\views\views.py:614
msgid ""
"Reporting share links is not enabled for this instance. Please notify the "
"page administrator to report problems."
msgstr ""
#: .\cookbook\views\views.py:623
#: .\cookbook\views\views.py:620
msgid ""
"Recipe sharing link has been disabled! For additional information please "
"contact the page administrator."

View File

@@ -2952,7 +2952,7 @@ msgstr ""
"ora."
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
"Non è stato possibile inviare l'email all'utente, condividi il link "
"manualmente."

View File

@@ -2987,7 +2987,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:126

View File

@@ -3104,7 +3104,7 @@ msgstr ""
"uren."
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
"E-mail aan gebruiker kon niet verzonden worden, deel de link handmatig."

View File

@@ -2888,7 +2888,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:126

File diff suppressed because it is too large Load Diff

View File

@@ -2724,7 +2724,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:126

View File

@@ -2493,7 +2493,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:229
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:127

View File

@@ -2501,7 +2501,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:245
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:128

View File

@@ -2530,7 +2530,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:229
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:127

View File

@@ -2741,7 +2741,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:126

View File

@@ -2855,7 +2855,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:232
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:126

View File

@@ -2254,7 +2254,7 @@ msgid ""
msgstr ""
#: .\cookbook\views\new.py:246
msgid "Email to user could not be send, please share link manually."
msgid "Email could not be sent to user. Please share the link manually."
msgstr ""
#: .\cookbook\views\views.py:125

View File

@@ -0,0 +1,39 @@
{% extends "base.html" %}
{% load crispy_forms_filters %}
{% load i18n %}
{% load static %}
{% load account socialaccount %}
{% block title %}OpenID {% trans 'Login' %}{% endblock %}
{% block content %}
<div class="row">
<div class="col-12" style="text-align: center">
<h3>{% trans "Sign In" %}</h3>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-lg-6 col-md-6 offset-lg-3 offset-md-3">
<hr>
<form id="openid_login_form" class="openid_login" method="post" action="{% url 'openid_login' %}">
{% csrf_token %}
{{ form | crispy }}
<button class="btn btn-success" type="submit">{% trans "Sign In" %}</button>
<a class="btn btn-secondary" href="{% url 'account_login' %}">{% trans "Back" %}</a>
</form>
</div>
</div>
<script>
$('#id_openid').focus()
</script>
{% endblock %}

View File

@@ -0,0 +1,33 @@
{% extends "base.html" %}
{% load i18n %}
{% load static %}
{% load account socialaccount %}
{% block head_title %}{% trans "Social Network Login Failure" %}{% endblock %}
{% block content %}
<div class="row">
<div class="col-12" style="text-align: center">
<h3>{% trans "Sign In" %}</h3>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-lg-6 col-md-6 offset-lg-3 offset-md-3">
<hr>
<h6>{% trans "Social Network Login Failure" %}</h6>
<p>{% trans "An error occurred while attempting to login via your social network account." %}</p>
<a class="btn btn-secondary" href="{% url 'account_login' %}">{% trans "Back" %}</a>
</div>
</div>
{% endblock %}

View File

@@ -105,7 +105,7 @@
<br/>
<h4>Debug</h4>
<textarea class="form-control" rows="20">
Gunicoren Media: {{ gunicorn_media }}
Gunicorn Media: {{ gunicorn_media }}
Sqlite: {{ postgres }}
Debug: {{ debug }}

View File

@@ -227,7 +227,7 @@ class InviteLinkCreate(GroupRequiredMixin, CreateView):
messages.add_message(self.request, messages.ERROR,
_('You have send to many emails, please share the link manually or wait a few hours.'))
except (SMTPException, BadHeaderError, TimeoutError):
messages.add_message(self.request, messages.ERROR, _('Email to user could not be send, please share link manually.'))
messages.add_message(self.request, messages.ERROR, _('Email could not be sent to user. Please share the link manually.'))
return HttpResponseRedirect(reverse('view_space'))

View File

@@ -1,4 +1,5 @@
import json
import traceback
import requests
from django.db.models import Q
@@ -52,10 +53,10 @@ def hook(request, token):
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
ShoppingListEntry.objects.create(food=f, unit=u, amount=amount, original_text=ingredient, created_by=request.user, space=request.space)
ShoppingListEntry.objects.create(food=f, unit=u, amount=amount, created_by=request.user, space=request.space)
return JsonResponse({'data': data['message']['text']})
except Exception:
pass
traceback.print_exc()
return JsonResponse({})

View File

@@ -14,8 +14,8 @@ It can be run and accessed on port 80 using:
```shell
docker run -d \
-v ./staticfiles:/opt/recipes/staticfiles \
-v ./mediafiles:/opt/recipes/mediafiles \
-v "$(pwd)"/staticfiles:/opt/recipes/staticfiles \
-v "$(pwd)"/mediafiles:/opt/recipes/mediafiles \
-p 80:8080 \
-e SECRET_KEY=YOUR_SECRET_KEY \
-e DB_ENGINE=django.db.backends.postgresql \
@@ -109,6 +109,9 @@ in combination with [jrcs's letsencrypt companion](https://hub.docker.com/r/jrcs
Please refer to the appropriate documentation on how to setup the reverse proxy and networks.
!!!!!!warning "Adjust client_max_body_size"
By using jwilder's Nginx-proxy, uploads will be restricted to 1 MB file size. This can be resolved by adjusting the ```client_max_body_size``` variable in the jwilder nginx configuration.
Remember to add the appropriate environment variables to the `.env` file:
```

View File

@@ -19,19 +19,44 @@ Give the user permissions: `chown -R recipes:www-data /var/www/recipes`
Create virtual env: `python3.9 -m venv /var/www/recipes`
Install Javascript Tools
Install Javascript Tools (nodejs >= 12 required)
```shell
### Just use one of these possibilites!
# Using Ubuntu
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
apt-get install -y nodejs
# Using a RPM based distro
## ... as root
curl -fsSL https://rpm.nodesource.com/setup_lts.x | bash -
## ... no root privileges
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
```
```shell
sudo apt install nodejs
sudo npm install --global yarn
```
!!! info "NodeJS installation issues"
If you run into problems with the NodeJS installation, please refer to the [official documentation](https://github.com/nodesource/distributions/blob/master/README.md).
### Install postgresql requirements
```shell
sudo apt install libpq-dev postgresql
```
###Install project requirements
### Install LDAP requirements
```shell
sudo apt install libsasl2-dev python-dev libldap2-dev libssl-dev
```
### Install project requirements
!!! warning "Update"
Dependencies change with most updates so the following steps need to be re-run with every update or else the application might stop working.

View File

@@ -1148,7 +1148,10 @@ export default {
},
showSQL: function () {
let params = this.buildParams()
this.genericAPI(this.Models.RECIPE, this.Actions.LIST, params).then((result) => {})
params.options.query.debug = true
this.genericAPI(this.Models.RECIPE, this.Actions.LIST, params).then((result) => {
console.log(result.data)
})
},
// TODO refactor to combine with load KeywordChildren
loadFoodChildren({ action, parentNode, callback }) {

View File

@@ -105,7 +105,7 @@
class="btn dropdown-toggle btn-link text-decoration-none text-dark pr-2 dropdown-toggle-no-caret"
@click.stop="openContextMenu($event, s, true)"
>
<i class="fas fa-ellipsis-v fa-lg"></i>
<i class="fas fa-ellipsis-v"></i>
</button>
<b-button
@@ -116,16 +116,16 @@
:aria-expanded="'true' ? x == 'false' : 'true'"
>
<i class="fa fa-chevron-right rotate" />
<span class="h5 ml-2 text-secondary">{{ i }}</span>
<span class="h6 ml-2 text-secondary">{{ i }}</span>
</b-button>
</div>
<div class="collapse" :id="'section-' + sectionID(x, i)" visible role="tabpanel" :class="{ show: x == 'false' }">
<!-- passing an array of values to the table grouped by Food -->
<transition-group name="slide-fade">
<div class="mx-4" v-for="(entries, x) in Object.entries(s)" :key="x">
<div class="ml-4 mr-0" v-for="(entries, x) in Object.entries(s)" :key="x">
<transition name="slide-fade" mode="out-in">
<ShoppingLineItem
<shopping-line-item
:entries="entries[1]"
:groupby="group_by"
:settings="settings"

View File

@@ -1,41 +1,41 @@
<template>
<div id="shopping_line_item">
<b-row align-h="start">
<b-col cols="3" md="2" class="justify-content-start align-items-center d-flex d-md-none pr-0" v-if="settings.left_handed">
<b-col cols="2" md="2" class="justify-content-start align-items-center d-flex d-md-none pr-0" v-if="settings.left_handed">
<input type="checkbox" class="form-control form-control-sm checkbox-control-mobile" :checked="formatChecked" @change="updateChecked" :key="entries[0].id" />
<b-button size="sm" @click="showDetails = !showDetails" class="d-inline-block d-md-none p-0" variant="link">
<div class="text-nowrap"><i class="fa fa-chevron-right rotate" :class="showDetails ? 'rotated' : ''"></i></div>
</b-button>
</b-col>
<b-col cols="2" md="1" class="align-items-center d-flex">
<b-col cols="1" class="align-items-center d-flex">
<div class="dropdown b-dropdown position-static inline-block" data-html2canvas-ignore="true" @click.stop="$emit('open-context-menu', $event, entries)">
<button
aria-haspopup="true"
aria-expanded="false"
type="button"
:class="settings.left_handed ? 'dropdown-spacing' : ''"
class="btn dropdown-toggle btn-link text-decoration-none text-body pr-1 dropdown-toggle-no-caret"
class="btn dropdown-toggle btn-link text-decoration-none text-body pr-0 pl-1 dropdown-toggle-no-caret"
>
<i class="fas fa-ellipsis-v fa-lg"></i>
<i class="fas fa-ellipsis-v"></i>
</button>
</div>
</b-col>
<b-col cols="1" class="px-1 justify-content-center align-items-center d-none d-md-flex">
<input type="checkbox" class="form-control form-control-sm checkbox-control" :checked="formatChecked" @change="updateChecked" :key="entries[0].id" />
</b-col>
<b-col cols="7" md="9">
<b-col cols="8" >
<b-row class="d-flex h-100">
<b-col cols="5" md="3" class="d-flex align-items-center" v-if="Object.entries(formatAmount).length == 1">
<b-col cols="6" md="3" class="d-flex align-items-center" v-if="Object.entries(formatAmount).length == 1">
<strong class="mr-1">{{ Object.entries(formatAmount)[0][1] }}</strong> {{ Object.entries(formatAmount)[0][0] }}
</b-col>
<b-col cols="5" md="3" class="d-flex flex-column" v-if="Object.entries(formatAmount).length != 1">
<b-col cols="6" md="3" class="d-flex flex-column" v-if="Object.entries(formatAmount).length != 1">
<div class="small" v-for="(x, i) in Object.entries(formatAmount)" :key="i">
{{ x[1] }} &ensp;
{{ x[0] }}
</div>
</b-col>
<b-col cols="7" md="6" class="align-items-center d-flex pl-0 pr-0 pl-md-2 pr-md-2">
<b-col cols="6" md="6" class="align-items-center d-flex pl-0 pr-0 pl-md-2 pr-md-2">
{{ formatFood }}
</b-col>
<b-col cols="3" data-html2canvas-ignore="true" class="align-items-center d-none d-md-flex justify-content-end">
@@ -47,7 +47,7 @@
</b-col>
</b-row>
</b-col>
<b-col cols="3" md="2" class="justify-content-start align-items-center d-flex d-md-none" v-if="!settings.left_handed">
<b-col cols="2" class="justify-content-start align-items-center d-flex d-md-none pl-0 pr-0" v-if="!settings.left_handed">
<b-button size="sm" @click="showDetails = !showDetails" class="d-inline-block d-md-none p-0" variant="link">
<div class="text-nowrap"><i class="fa fa-chevron-right rotate" :class="showDetails ? 'rotated' : ''"></i></div>
</b-button>
@@ -179,7 +179,7 @@ export default {
formatAmount: function () {
let amount = {}
this.entries.forEach((entry) => {
let unit = entry?.unit?.name ?? "----"
let unit = entry?.unit?.name ?? "---"
if (entry.amount) {
if (amount[unit]) {
amount[unit] += entry.amount

380
vue/src/locales/pt.json Normal file
View File

@@ -0,0 +1,380 @@
{
"warning_feature_beta": "",
"err_fetching_resource": "",
"err_creating_resource": "",
"err_updating_resource": "",
"err_deleting_resource": "",
"err_moving_resource": "",
"err_merging_resource": "",
"success_fetching_resource": "",
"success_creating_resource": "",
"success_updating_resource": "",
"success_deleting_resource": "",
"success_moving_resource": "",
"success_merging_resource": "",
"file_upload_disabled": "",
"step_time_minutes": "",
"confirm_delete": "",
"import_running": "",
"all_fields_optional": "",
"convert_internal": "",
"show_only_internal": "",
"show_split_screen": "",
"Log_Recipe_Cooking": "",
"External_Recipe_Image": "",
"Add_to_Shopping": "",
"Add_to_Plan": "",
"Step_start_time": "",
"Sort_by_new": "",
"Table_of_Contents": "",
"Recipes_per_page": "",
"Show_as_header": "",
"Hide_as_header": "",
"Add_nutrition_recipe": "",
"Remove_nutrition_recipe": "",
"Copy_template_reference": "",
"Save_and_View": "",
"Manage_Books": "",
"Meal_Plan": "",
"Select_Book": "",
"Select_File": "",
"Recipe_Image": "",
"Import_finished": "",
"View_Recipes": "",
"Log_Cooking": "",
"New_Recipe": "",
"Url_Import": "",
"Reset_Search": "",
"Recently_Viewed": "",
"Load_More": "",
"New_Keyword": "",
"Delete_Keyword": "",
"Edit_Keyword": "",
"Edit_Recipe": "",
"Move_Keyword": "",
"Merge_Keyword": "",
"Hide_Keywords": "",
"Hide_Recipes": "",
"Move_Up": "",
"Move_Down": "",
"Step_Name": "",
"Step_Type": "",
"Make_Header": "",
"Make_Ingredient": "",
"Enable_Amount": "",
"Disable_Amount": "",
"Add_Step": "",
"Keywords": "",
"Books": "",
"Proteins": "",
"Fats": "",
"Carbohydrates": "",
"Calories": "",
"Energy": "",
"Nutrition": "",
"Date": "",
"Share": "",
"Automation": "",
"Parameter": "",
"Export": "",
"Copy": "",
"Rating": "",
"Close": "",
"Cancel": "",
"Link": "",
"Add": "",
"New": "",
"Note": "",
"Success": "",
"Failure": "",
"Ingredients": "",
"Supermarket": "",
"Categories": "",
"Category": "",
"Selected": "",
"min": "",
"Servings": "",
"Waiting": "",
"Preparation": "",
"External": "",
"Size": "",
"Files": "",
"File": "",
"Edit": "",
"Image": "",
"Delete": "",
"Open": "",
"Ok": "",
"Save": "",
"Step": "",
"Search": "",
"Import": "",
"Print": "",
"Settings": "",
"or": "",
"and": "",
"Information": "",
"Download": "",
"Create": "",
"Search Settings": "",
"View": "",
"Recipes": "",
"Move": "",
"Merge": "",
"Parent": "",
"delete_confirmation": "",
"move_confirmation": "",
"merge_confirmation": "",
"create_rule": "",
"move_selection": "",
"merge_selection": "",
"Root": "",
"Ignore_Shopping": "",
"Shopping_Category": "",
"Shopping_Categories": "",
"Edit_Food": "",
"Move_Food": "",
"New_Food": "",
"Hide_Food": "",
"Food_Alias": "",
"Unit_Alias": "",
"Keyword_Alias": "",
"Delete_Food": "",
"No_ID": "",
"Meal_Plan_Days": "",
"merge_title": "",
"move_title": "",
"Food": "",
"Recipe_Book": "",
"del_confirmation_tree": "",
"delete_title": "",
"create_title": "",
"edit_title": "",
"Name": "",
"Type": "",
"Description": "",
"Recipe": "",
"tree_root": "",
"Icon": "",
"Unit": "",
"No_Results": "",
"New_Unit": "",
"Create_New_Shopping Category": "",
"Create_New_Food": "",
"Create_New_Keyword": "",
"Create_New_Unit": "",
"Create_New_Meal_Type": "",
"and_up": "",
"and_down": "",
"Instructions": "",
"Unrated": "",
"Automate": "",
"Empty": "",
"Key_Ctrl": "",
"Key_Shift": "",
"Time": "",
"Text": "",
"Shopping_list": "",
"Added_by": "",
"Added_on": "",
"AddToShopping": "",
"IngredientInShopping": "",
"NotInShopping": "",
"OnHand": "",
"FoodOnHand": "",
"FoodNotOnHand": "",
"Undefined": "",
"Create_Meal_Plan_Entry": "",
"Edit_Meal_Plan_Entry": "",
"Title": "",
"Week": "",
"Month": "",
"Year": "",
"Planner": "",
"Planner_Settings": "",
"Period": "",
"Plan_Period_To_Show": "",
"Periods": "",
"Plan_Show_How_Many_Periods": "",
"Starting_Day": "",
"Meal_Types": "",
"Meal_Type": "",
"Clone": "",
"Drag_Here_To_Delete": "",
"Meal_Type_Required": "",
"Title_or_Recipe_Required": "",
"Color": "",
"New_Meal_Type": "",
"AddFoodToShopping": "",
"RemoveFoodFromShopping": "",
"DeleteShoppingConfirm": "",
"IgnoredFood": "",
"Add_Servings_to_Shopping": "",
"Week_Numbers": "",
"Show_Week_Numbers": "",
"Export_As_ICal": "",
"Export_To_ICal": "",
"Cannot_Add_Notes_To_Shopping": "",
"Added_To_Shopping_List": "",
"Shopping_List_Empty": "",
"Next_Period": "",
"Previous_Period": "",
"Current_Period": "",
"Next_Day": "",
"Previous_Day": "",
"Inherit": "",
"InheritFields": "",
"FoodInherit": "",
"ShowUncategorizedFood": "",
"GroupBy": "",
"SupermarketCategoriesOnly": "",
"MoveCategory": "",
"CountMore": "",
"IgnoreThis": "",
"DelayFor": "",
"Warning": "",
"NoCategory": "",
"InheritWarning": "",
"ShowDelayed": "",
"Completed": "",
"OfflineAlert": "",
"shopping_share": "",
"shopping_auto_sync": "",
"mealplan_autoadd_shopping": "",
"mealplan_autoexclude_onhand": "",
"mealplan_autoinclude_related": "",
"default_delay": "",
"shopping_share_desc": "",
"shopping_auto_sync_desc": "",
"mealplan_autoadd_shopping_desc": "",
"mealplan_autoexclude_onhand_desc": "",
"mealplan_autoinclude_related_desc": "",
"default_delay_desc": "",
"filter_to_supermarket": "",
"Coming_Soon": "",
"Auto_Planner": "",
"New_Cookbook": "",
"Hide_Keyword": "",
"Clear": "",
"err_move_self": "",
"nothing": "",
"err_merge_self": "",
"show_sql": "",
"filter_to_supermarket_desc": "",
"CategoryName": "",
"SupermarketName": "",
"CategoryInstruction": "",
"shopping_recent_days_desc": "",
"shopping_recent_days": "",
"create_shopping_new": "",
"download_pdf": "",
"download_csv": "",
"csv_delim_help": "",
"csv_delim_label": "",
"SuccessClipboard": "",
"copy_to_clipboard": "",
"csv_prefix_help": "",
"csv_prefix_label": "",
"copy_markdown_table": "",
"in_shopping": "",
"DelayUntil": "",
"Pin": "",
"mark_complete": "",
"QuickEntry": "",
"shopping_add_onhand_desc": "",
"shopping_add_onhand": "",
"related_recipes": "",
"today_recipes": "",
"sql_debug": "",
"remember_search": "",
"remember_hours": "",
"tree_select": "",
"OnHand_help": "",
"ignore_shopping_help": "",
"shopping_category_help": "",
"food_recipe_help": "",
"Foods": "",
"enable_expert": "",
"expert_mode": "",
"simple_mode": "",
"advanced": "",
"fields": "",
"show_keywords": "",
"show_foods": "",
"show_books": "",
"show_rating": "",
"show_units": "",
"show_filters": "",
"not": "",
"save_filter": "",
"filter_name": "",
"left_handed": "",
"left_handed_help": "",
"Custom Filter": "",
"shared_with": "",
"sort_by": "",
"asc": "",
"desc": "",
"date_viewed": "",
"last_cooked": "",
"times_cooked": "",
"date_created": "",
"show_sortby": "",
"search_rank": "",
"make_now": "",
"recipe_filter": "",
"book_filter_help": "",
"review_shopping": "",
"view_recipe": "",
"copy_to_new": "",
"recipe_name": "",
"paste_ingredients_placeholder": "",
"paste_ingredients": "",
"ingredient_list": "",
"explain": "",
"filter": "",
"search_no_recipes": "",
"search_import_help_text": "",
"search_create_help_text": "",
"warning_duplicate_filter": "",
"reset_children": "",
"reset_children_help": "",
"substitute_help": "",
"substitute_siblings_help": "",
"substitute_children_help": "",
"substitute_siblings": "",
"substitute_children": "",
"SubstituteOnHand": "",
"ChildInheritFields": "",
"ChildInheritFields_help": "",
"InheritFields_help": "",
"last_viewed": "",
"created_on": "Criado em",
"updatedon": "Atualizado em",
"advanced_search_settings": "",
"nothing_planned_today": "",
"no_pinned_recipes": "",
"Planned": "",
"Pinned": "",
"Quick actions": "",
"Ratings": "",
"Internal": "Interno",
"Units": "",
"Random Recipes": "",
"parameter_count": "",
"select_keyword": "",
"add_keyword": "",
"select_file": "",
"select_recipe": "",
"select_unit": "",
"select_food": "",
"remove_selection": "",
"empty_list": "",
"Select": "",
"Supermarkets": "",
"User": "Utilizador",
"Keyword": "",
"Advanced": "",
"Page": "",
"Reset": ""
}

380
vue/src/locales/pt_BR.json Normal file
View File

@@ -0,0 +1,380 @@
{
"warning_feature_beta": "",
"err_fetching_resource": "",
"err_creating_resource": "",
"err_updating_resource": "",
"err_deleting_resource": "",
"err_moving_resource": "",
"err_merging_resource": "",
"success_fetching_resource": "",
"success_creating_resource": "",
"success_updating_resource": "",
"success_deleting_resource": "",
"success_moving_resource": "",
"success_merging_resource": "",
"file_upload_disabled": "",
"step_time_minutes": "Tempo do processo (minutos)",
"confirm_delete": "Tem certeza que deseja deletar esse {object}?",
"import_running": "",
"all_fields_optional": "",
"convert_internal": "",
"show_only_internal": "",
"show_split_screen": "",
"Log_Recipe_Cooking": "",
"External_Recipe_Image": "",
"Add_to_Shopping": "",
"Add_to_Plan": "",
"Step_start_time": "",
"Sort_by_new": "",
"Table_of_Contents": "",
"Recipes_per_page": "",
"Show_as_header": "",
"Hide_as_header": "",
"Add_nutrition_recipe": "",
"Remove_nutrition_recipe": "",
"Copy_template_reference": "",
"Save_and_View": "",
"Manage_Books": "",
"Meal_Plan": "",
"Select_Book": "",
"Select_File": "",
"Recipe_Image": "",
"Import_finished": "",
"View_Recipes": "",
"Log_Cooking": "",
"New_Recipe": "",
"Url_Import": "",
"Reset_Search": "",
"Recently_Viewed": "",
"Load_More": "",
"New_Keyword": "",
"Delete_Keyword": "",
"Edit_Keyword": "",
"Edit_Recipe": "",
"Move_Keyword": "",
"Merge_Keyword": "",
"Hide_Keywords": "",
"Hide_Recipes": "",
"Move_Up": "",
"Move_Down": "",
"Step_Name": "",
"Step_Type": "",
"Make_Header": "",
"Make_Ingredient": "",
"Enable_Amount": "",
"Disable_Amount": "",
"Add_Step": "",
"Keywords": "",
"Books": "",
"Proteins": "",
"Fats": "",
"Carbohydrates": "",
"Calories": "",
"Energy": "",
"Nutrition": "",
"Date": "",
"Share": "",
"Automation": "",
"Parameter": "",
"Export": "",
"Copy": "",
"Rating": "",
"Close": "",
"Cancel": "",
"Link": "",
"Add": "",
"New": "",
"Note": "",
"Success": "",
"Failure": "",
"Ingredients": "",
"Supermarket": "",
"Categories": "",
"Category": "",
"Selected": "",
"min": "",
"Servings": "",
"Waiting": "",
"Preparation": "",
"External": "",
"Size": "",
"Files": "",
"File": "",
"Edit": "",
"Image": "",
"Delete": "",
"Open": "",
"Ok": "",
"Save": "",
"Step": "",
"Search": "",
"Import": "",
"Print": "",
"Settings": "",
"or": "",
"and": "",
"Information": "",
"Download": "",
"Create": "",
"Search Settings": "",
"View": "",
"Recipes": "",
"Move": "",
"Merge": "",
"Parent": "",
"delete_confirmation": "",
"move_confirmation": "",
"merge_confirmation": "",
"create_rule": "",
"move_selection": "",
"merge_selection": "",
"Root": "",
"Ignore_Shopping": "",
"Shopping_Category": "",
"Shopping_Categories": "",
"Edit_Food": "",
"Move_Food": "",
"New_Food": "",
"Hide_Food": "",
"Food_Alias": "",
"Unit_Alias": "",
"Keyword_Alias": "",
"Delete_Food": "",
"No_ID": "",
"Meal_Plan_Days": "",
"merge_title": "",
"move_title": "",
"Food": "",
"Recipe_Book": "",
"del_confirmation_tree": "",
"delete_title": "",
"create_title": "",
"edit_title": "",
"Name": "",
"Type": "",
"Description": "",
"Recipe": "",
"tree_root": "",
"Icon": "",
"Unit": "",
"No_Results": "",
"New_Unit": "",
"Create_New_Shopping Category": "",
"Create_New_Food": "",
"Create_New_Keyword": "",
"Create_New_Unit": "",
"Create_New_Meal_Type": "",
"and_up": "",
"and_down": "",
"Instructions": "",
"Unrated": "",
"Automate": "",
"Empty": "",
"Key_Ctrl": "",
"Key_Shift": "",
"Time": "",
"Text": "",
"Shopping_list": "",
"Added_by": "",
"Added_on": "",
"AddToShopping": "",
"IngredientInShopping": "",
"NotInShopping": "",
"OnHand": "",
"FoodOnHand": "",
"FoodNotOnHand": "",
"Undefined": "",
"Create_Meal_Plan_Entry": "",
"Edit_Meal_Plan_Entry": "",
"Title": "",
"Week": "",
"Month": "",
"Year": "",
"Planner": "",
"Planner_Settings": "",
"Period": "",
"Plan_Period_To_Show": "",
"Periods": "",
"Plan_Show_How_Many_Periods": "",
"Starting_Day": "",
"Meal_Types": "",
"Meal_Type": "",
"Clone": "",
"Drag_Here_To_Delete": "",
"Meal_Type_Required": "",
"Title_or_Recipe_Required": "",
"Color": "",
"New_Meal_Type": "",
"AddFoodToShopping": "",
"RemoveFoodFromShopping": "",
"DeleteShoppingConfirm": "",
"IgnoredFood": "",
"Add_Servings_to_Shopping": "",
"Week_Numbers": "",
"Show_Week_Numbers": "",
"Export_As_ICal": "",
"Export_To_ICal": "",
"Cannot_Add_Notes_To_Shopping": "",
"Added_To_Shopping_List": "",
"Shopping_List_Empty": "",
"Next_Period": "",
"Previous_Period": "",
"Current_Period": "",
"Next_Day": "",
"Previous_Day": "",
"Inherit": "",
"InheritFields": "",
"FoodInherit": "",
"ShowUncategorizedFood": "",
"GroupBy": "",
"SupermarketCategoriesOnly": "",
"MoveCategory": "",
"CountMore": "",
"IgnoreThis": "",
"DelayFor": "",
"Warning": "",
"NoCategory": "",
"InheritWarning": "",
"ShowDelayed": "",
"Completed": "",
"OfflineAlert": "",
"shopping_share": "",
"shopping_auto_sync": "",
"mealplan_autoadd_shopping": "",
"mealplan_autoexclude_onhand": "",
"mealplan_autoinclude_related": "",
"default_delay": "",
"shopping_share_desc": "",
"shopping_auto_sync_desc": "",
"mealplan_autoadd_shopping_desc": "",
"mealplan_autoexclude_onhand_desc": "",
"mealplan_autoinclude_related_desc": "",
"default_delay_desc": "",
"filter_to_supermarket": "",
"Coming_Soon": "",
"Auto_Planner": "",
"New_Cookbook": "",
"Hide_Keyword": "",
"Clear": "",
"err_move_self": "",
"nothing": "",
"err_merge_self": "",
"show_sql": "",
"filter_to_supermarket_desc": "",
"CategoryName": "",
"SupermarketName": "",
"CategoryInstruction": "",
"shopping_recent_days_desc": "",
"shopping_recent_days": "",
"create_shopping_new": "",
"download_pdf": "",
"download_csv": "",
"csv_delim_help": "",
"csv_delim_label": "",
"SuccessClipboard": "",
"copy_to_clipboard": "",
"csv_prefix_help": "",
"csv_prefix_label": "",
"copy_markdown_table": "",
"in_shopping": "",
"DelayUntil": "",
"Pin": "",
"mark_complete": "",
"QuickEntry": "",
"shopping_add_onhand_desc": "",
"shopping_add_onhand": "",
"related_recipes": "",
"today_recipes": "",
"sql_debug": "",
"remember_search": "",
"remember_hours": "",
"tree_select": "",
"OnHand_help": "",
"ignore_shopping_help": "",
"shopping_category_help": "",
"food_recipe_help": "",
"Foods": "",
"enable_expert": "",
"expert_mode": "",
"simple_mode": "",
"advanced": "",
"fields": "",
"show_keywords": "",
"show_foods": "",
"show_books": "",
"show_rating": "",
"show_units": "",
"show_filters": "",
"not": "",
"save_filter": "",
"filter_name": "",
"left_handed": "",
"left_handed_help": "",
"Custom Filter": "",
"shared_with": "",
"sort_by": "",
"asc": "",
"desc": "",
"date_viewed": "",
"last_cooked": "",
"times_cooked": "",
"date_created": "",
"show_sortby": "",
"search_rank": "",
"make_now": "",
"recipe_filter": "",
"book_filter_help": "",
"review_shopping": "",
"view_recipe": "",
"copy_to_new": "",
"recipe_name": "",
"paste_ingredients_placeholder": "",
"paste_ingredients": "",
"ingredient_list": "",
"explain": "",
"filter": "",
"search_no_recipes": "",
"search_import_help_text": "",
"search_create_help_text": "",
"warning_duplicate_filter": "",
"reset_children": "",
"reset_children_help": "",
"substitute_help": "",
"substitute_siblings_help": "",
"substitute_children_help": "",
"substitute_siblings": "",
"substitute_children": "",
"SubstituteOnHand": "",
"ChildInheritFields": "",
"ChildInheritFields_help": "",
"InheritFields_help": "",
"last_viewed": "",
"created_on": "",
"updatedon": "",
"advanced_search_settings": "",
"nothing_planned_today": "",
"no_pinned_recipes": "",
"Planned": "",
"Pinned": "",
"Quick actions": "",
"Ratings": "",
"Internal": "",
"Units": "",
"Random Recipes": "",
"parameter_count": "",
"select_keyword": "",
"add_keyword": "",
"select_file": "",
"select_recipe": "",
"select_unit": "",
"select_food": "",
"remove_selection": "",
"empty_list": "",
"Select": "",
"Supermarkets": "",
"User": "",
"Keyword": "",
"Advanced": "",
"Page": "",
"Reset": ""
}