Compare commits

...

55 Commits

Author SHA1 Message Date
vabene1111
4e13fb3b8c Merge branch 'develop' 2022-11-09 14:30:02 +01:00
vabene1111
24f331c208 improved ingredient parser handling of amount unit without space 2022-11-09 14:24:12 +01:00
vabene1111
16d0fc38f9 improved paste ingredient function to retain order and add to correct step 2022-11-09 14:01:03 +01:00
vabene1111
5e4cac52d6 fixed recipe image size with nutrition information 2022-11-09 13:23:43 +01:00
vabene1111
b489a2d849 Merge pull request #2101 from Mikhail5555/patch-2
Allow 1/16th to be a fraction (small salt amounts)
2022-11-09 12:53:13 +01:00
vabene1111
7c5707e0c0 Merge pull request #2128 from rdangdev/develop
Fixed: ports are on the wrong service
2022-11-09 12:52:40 +01:00
vabene1111
946699a335 Merge pull request #2154 from mh166/feature-enable-search-plugin
Enable search plugin for docs
2022-11-09 12:52:14 +01:00
vabene1111
44b2c02034 updated cryptography 2022-11-09 12:49:23 +01:00
vabene1111
c150c7f84e fixed recipekeeper integration 2022-11-09 12:48:34 +01:00
vabene1111
97503a68d8 Merge pull request #2163 from TandoorRecipes/dependabot/npm_and_yarn/vue/loader-utils-1.4.1
Bump loader-utils from 1.4.0 to 1.4.1 in /vue
2022-11-09 12:17:21 +01:00
dependabot[bot]
126a2d870e Bump loader-utils from 1.4.0 to 1.4.1 in /vue
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.1/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-09 03:45:14 +00:00
Gorkem
02bad8cfb9 Translated using Weblate (Turkish)
Currently translated at 27.1% (125 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/tr/
2022-11-06 22:09:31 +00:00
Gorkem
d9465c7f9d Translated using Weblate (Turkish)
Currently translated at 2.2% (12 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/tr/
2022-11-06 22:09:31 +00:00
Gorkem
ead3168d80 Added translation using Weblate (Turkish) 2022-11-05 21:09:24 +00:00
mh166
a71bba307e Enable search plugin for docs
I think mkdocs-material's search function would be a great addition to make the documentation even more accessible. At least I was looking for some info just moments ago and would've liked a search bar.

From my own projects, I remembered that mkdocs-material does come with the search search plugin enabled by default. But it must be re-added to mkdocs.yml when other plugins are used. So I did. Hope this helps. :)
2022-11-01 11:44:56 +01:00
vabene1111
c2c08391cc fixed sharing pref saving 2022-10-31 19:51:06 +01:00
vabene1111
bc9d077b9d added used md spec to docs 2022-10-31 19:51:06 +01:00
vabene1111
fe0f739bd5 Merge pull request #2020 from ignis-draco/docuUpdate
Update Doku for manual Installation
2022-10-31 19:49:30 +01:00
vabene1111
e5b11a34f6 Update manual.md 2022-10-31 19:49:24 +01:00
vabene1111
1df7a4df91 Merge pull request #2121 from raj3000k/develop
Improved Overall Docs.
2022-10-31 19:47:29 +01:00
vabene1111
d401c143ec added faq for makrdown preview 2022-10-31 14:58:50 +01:00
vabene1111
00a59baa92 Merge pull request #2140 from TiagoRascazzi/develop
Added nextcloud export implementation
2022-10-31 14:34:16 +01:00
vabene1111
327c83ce32 improved share link tests 2022-10-31 14:30:39 +01:00
vabene1111
3371102e64 improved and added tests for share link creation 2022-10-31 14:24:41 +01:00
vabene1111
aec396e214 Merge pull request #2106 from swnf/fix-share-permissions
Fix share permission check
2022-10-31 14:16:01 +01:00
vabene1111
2b52b5c264 Merge pull request #2142 from TandoorRecipes/dependabot/pip/django-4.0.8
Bump django from 4.0.7 to 4.0.8
2022-10-31 09:03:24 +01:00
dependabot[bot]
19c24a85a1 Bump django from 4.0.7 to 4.0.8
Bumps [django](https://github.com/django/django) from 4.0.7 to 4.0.8.
- [Release notes](https://github.com/django/django/releases)
- [Commits](https://github.com/django/django/compare/4.0.7...4.0.8)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-31 08:02:46 +00:00
vabene1111
c147903f1e updated recipe scrapers and compiled translations 2022-10-31 09:02:14 +01:00
Tiago Rascazzi
9dedc5b8fa Added nextcloud export implementation 2022-10-29 14:08:12 -04:00
Tomasz Klimczak
d781cbe743 Translated using Weblate (Polish)
Currently translated at 100.0% (460 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-10-22 20:33:14 +00:00
rdang
37bd2017b0 ports are on the wrong service
the actual webserver is running on port 8080 and on the web_recipes service, as per all the documentation. 80 will not work, at least on the latest patch.
2022-10-21 19:13:18 +11:00
Oliver Cervera
2de8070156 Translated using Weblate (Italian)
Currently translated at 75.2% (346 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2022-10-19 22:33:13 +00:00
Sokratis Potamias
f70377c59b Translated using Weblate (Greek)
Currently translated at 0.5% (3 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/el/
2022-10-17 11:33:12 +00:00
Sokratis Potamias
6fc4151de5 Added translation using Weblate (Greek) 2022-10-16 11:01:56 +00:00
Shaxine
1fa001aad3 Translated using Weblate (Portuguese)
Currently translated at 28.4% (149 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt/
2022-10-14 17:19:28 +00:00
Raj Motwani
b84e03c58b Merge branch 'TandoorRecipes:develop' into develop 2022-10-14 22:26:12 +05:30
wella
e9dac25ff4 Translated using Weblate (Indonesian)
Currently translated at 11.4% (60 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/id/
2022-10-12 08:33:09 +00:00
Oliver Cervera
611787dbb6 Translated using Weblate (Italian)
Currently translated at 75.2% (346 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2022-10-10 17:33:11 +00:00
Oliver Cervera
bfbfb1d2a8 Translated using Weblate (Italian)
Currently translated at 83.3% (437 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2022-10-10 17:33:11 +00:00
Raj Motwani
d9662f7fa5 Update import_export.md
Fixed some typos and spellings.
2022-10-08 13:47:02 +05:30
Raj Motwani
9e44944b1d Update SECURITY.md 2022-10-08 13:38:52 +05:30
swnf
4de9a7ff89 Fix share permission check 2022-10-06 17:44:33 +02:00
vabene1111
32a663c5d7 Merge pull request #2104 from chiaramistro/feature/login-btn-reset-password
Remove yellow button to unify GUI of reset password in mobile/web viewports #2102
2022-10-05 16:42:42 +02:00
Chiara
3bee5ed35a Remove yellow button to unify GUI of reset password in mobile/web viewports #2102 2022-10-05 12:25:29 +02:00
Mikhail Epifanov
bee5d6b7eb Allow 1/16th to be a fraction (small salt amounts) 2022-10-03 12:37:09 +02:00
wella
00ed9b07b6 Translated using Weblate (Indonesian)
Currently translated at 8.3% (44 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/id/
2022-10-02 17:33:10 +00:00
wella
2279bba838 Translated using Weblate (Indonesian)
Currently translated at 31.5% (145 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/id/
2022-10-02 17:33:10 +00:00
Andrea
57f5343c77 Translated using Weblate (Spanish)
Currently translated at 75.2% (346 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2022-10-02 17:33:10 +00:00
vabene1111
89a5f92ace Merge branch 'develop' 2022-09-30 15:43:51 +02:00
vabene1111
33e5bb7d0a Merge branch 'develop' 2022-09-27 14:18:29 +02:00
vabene1111
16c0189b80 Merge branch 'develop' 2022-09-23 17:00:11 +02:00
vabene1111
fd325c1797 Merge branch 'develop' 2022-09-21 20:17:08 +02:00
vabene1111
2902262503 Merge branch 'develop' 2022-09-21 17:05:17 +02:00
Arne Hüffmeier
12ad6af8c3 fix path 2022-09-01 13:45:49 +02:00
Arne Hüffmeier
cf24e1014a add two infos 2022-09-01 13:38:47 +02:00
36 changed files with 3456 additions and 189 deletions

View File

@@ -6,5 +6,4 @@ Since this software is still considered beta/WIP support is always only given fo
## Reporting a Vulnerability
Please open a normal public issue if you have any security related concerns. If you feel like the issue should not be discussed in
public just open a generic issue and we will discuss further communication there (since GitHub does not allow everyone to create a security advisory :/).
Please open a normal public issue if you have any security related concerns. If you feel like the issue should not be discussed in public just open a generic issue and we will discuss further communication there (since GitHub does not allow everyone to create a security advisory :/).

View File

@@ -235,6 +235,10 @@ class IngredientParser:
# leading spaces before commas result in extra tokens, clean them out
ingredient = ingredient.replace(' ,', ',')
# if amount and unit are connected add space in between
if re.match('([0-9])+([A-z])+\s', ingredient):
ingredient = re.sub(r'(?<=([a-z])|\d)(?=(?(1)\d|[a-z]))', ' ', ingredient)
tokens = ingredient.split() # split at each space into tokens
if len(tokens) == 1:
# there only is one argument, that must be the food

View File

@@ -1,7 +1,8 @@
import json
import re
from io import BytesIO
from io import BytesIO, StringIO
from zipfile import ZipFile
from PIL import Image
from cookbook.helper.image_processing import get_filetype
from cookbook.helper.ingredient_parser import IngredientParser
@@ -96,5 +97,92 @@ class NextcloudCookbook(Integration):
return recipe
def formatTime(self, min):
h = min//60
m = min % 60
return f'PT{h}H{m}M0S'
def get_file_from_recipe(self, recipe):
raise NotImplementedError('Method not implemented in storage integration')
export = {}
export['name'] = recipe.name
export['description'] = recipe.description
export['url'] = recipe.source_url
export['prepTime'] = self.formatTime(recipe.working_time)
export['cookTime'] = self.formatTime(recipe.waiting_time)
export['totalTime'] = self.formatTime(recipe.working_time+recipe.waiting_time)
export['recipeYield'] = recipe.servings
export['image'] = f'/Recipes/{recipe.name}/full.jpg'
export['imageUrl'] = f'/Recipes/{recipe.name}/full.jpg'
recipeKeyword = []
for k in recipe.keywords.all():
recipeKeyword.append(k.name)
export['keywords'] = recipeKeyword
recipeInstructions = []
recipeIngredient = []
for s in recipe.steps.all():
recipeInstructions.append(s.instruction)
for i in s.ingredients.all():
recipeIngredient.append(f'{float(i.amount)} {i.unit} {i.food}')
export['recipeIngredient'] = recipeIngredient
export['recipeInstructions'] = recipeInstructions
return "recipe.json", json.dumps(export)
def get_files_from_recipes(self, recipes, el, cookie):
export_zip_stream = BytesIO()
export_zip_obj = ZipFile(export_zip_stream, 'w')
for recipe in recipes:
if recipe.internal and recipe.space == self.request.space:
recipe_stream = StringIO()
filename, data = self.get_file_from_recipe(recipe)
recipe_stream.write(data)
export_zip_obj.writestr(f'{recipe.name}/{filename}', recipe_stream.getvalue())
recipe_stream.close()
try:
imageByte = recipe.image.file.read()
export_zip_obj.writestr(f'{recipe.name}/full.jpg', self.getJPEG(imageByte))
export_zip_obj.writestr(f'{recipe.name}/thumb.jpg', self.getThumb(171, imageByte))
export_zip_obj.writestr(f'{recipe.name}/thumb16.jpg', self.getThumb(16, imageByte))
except ValueError:
pass
el.exported_recipes += 1
el.msg += self.get_recipe_processed_msg(recipe)
el.save()
export_zip_obj.close()
return [[ self.get_export_file_name(), export_zip_stream.getvalue() ]]
def getJPEG(self, imageByte):
image = Image.open(BytesIO(imageByte))
image = image.convert('RGB')
bytes = BytesIO()
image.save(bytes, "JPEG")
return bytes.getvalue()
def getThumb(self, size, imageByte):
image = Image.open(BytesIO(imageByte))
w, h = image.size
m = min(w, h)
image = image.crop(((w-m)//2, (h-m)//2, (w+m)//2, (h+m)//2))
image = image.resize([size, size], Image.Resampling.LANCZOS)
image = image.convert('RGB')
bytes = BytesIO()
image.save(bytes, "JPEG")
return bytes.getvalue()

View File

@@ -58,6 +58,13 @@ class RecipeKeeper(Integration):
if s.text == "":
continue
step.instruction += s.text + ' \n'
step.save()
for s in file.find("div", {"itemprop": "recipeNotes"}).find_all("p"):
if s.text == "":
continue
step.instruction += s.text + ' \n'
step.save()
if file.find("span", {"itemprop": "recipeSource"}).text != '':
step.instruction += "\n\n" + _("Imported from") + ": " + file.find("span", {"itemprop": "recipeSource"}).text

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-12 19:20+0200\n"
"PO-Revision-Date: 2022-10-01 16:38+0000\n"
"PO-Revision-Date: 2022-10-12 08:33+0000\n"
"Last-Translator: wella <wella.design@gmail.com>\n"
"Language-Team: Indonesian <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/id/>\n"
@@ -155,154 +155,180 @@ msgstr "Kecualikan bahan-bahan yang ada."
#: .\cookbook\forms.py:90
msgid "Will optimize the UI for use with your left hand."
msgstr ""
msgstr "Akan mengoptimalkan UI untuk digunakan dengan tangan kiri Anda."
#: .\cookbook\forms.py:107
msgid ""
"Both fields are optional. If none are given the username will be displayed "
"instead"
msgstr ""
"Kedua bidang ini opsional. Jika tidak ada yang diberikan nama pengguna akan "
"ditampilkan sebagai gantinya"
#: .\cookbook\forms.py:128 .\cookbook\forms.py:301
msgid "Name"
msgstr ""
msgstr "Nama"
#: .\cookbook\forms.py:129 .\cookbook\forms.py:302
#: .\cookbook\templates\stats.html:24 .\cookbook\views\lists.py:88
msgid "Keywords"
msgstr ""
msgstr "Kata Kunci"
#: .\cookbook\forms.py:130
msgid "Preparation time in minutes"
msgstr ""
msgstr "Waktu persiapan dalam hitungan menit"
#: .\cookbook\forms.py:131
msgid "Waiting time (cooking/baking) in minutes"
msgstr ""
msgstr "Waktu tunggu (memasak/memanggang) dalam hitungan menit"
#: .\cookbook\forms.py:132 .\cookbook\forms.py:270 .\cookbook\forms.py:303
msgid "Path"
msgstr ""
msgstr "Jalur"
#: .\cookbook\forms.py:133
msgid "Storage UID"
msgstr ""
msgstr "UID penyimpanan"
#: .\cookbook\forms.py:165
msgid "Default"
msgstr ""
msgstr "Bawaan"
#: .\cookbook\forms.py:177
msgid ""
"To prevent duplicates recipes with the same name as existing ones are "
"ignored. Check this box to import everything."
msgstr ""
"Untuk mencegah duplikat resep dengan nama yang sama dengan yang sudah ada "
"diabaikan. Centang kotak ini untuk mengimpor semuanya."
#: .\cookbook\forms.py:200
msgid "Add your comment: "
msgstr ""
msgstr "Tambahkan komentar Anda: "
#: .\cookbook\forms.py:215
msgid "Leave empty for dropbox and enter app password for nextcloud."
msgstr ""
"Biarkan kosong untuk dropbox dan masukkan kata sandi aplikasi untuk "
"nextcloud."
#: .\cookbook\forms.py:222
msgid "Leave empty for nextcloud and enter api token for dropbox."
msgstr ""
msgstr "Biarkan kosong untuk nextcloud dan masukkan token api untuk dropbox."
#: .\cookbook\forms.py:231
msgid ""
"Leave empty for dropbox and enter only base url for nextcloud (<code>/remote."
"php/webdav/</code> is added automatically)"
msgstr ""
"Biarkan kosong untuk dropbox dan masukkan hanya url dasar untuk cloud "
"berikutnya (<code>/remote.php/webdav/</code> ditambahkan secara otomatis)"
#: .\cookbook\forms.py:269 .\cookbook\views\edit.py:157
msgid "Storage"
msgstr ""
msgstr "Penyimpanan"
#: .\cookbook\forms.py:271
msgid "Active"
msgstr ""
msgstr "Aktif"
#: .\cookbook\forms.py:277
msgid "Search String"
msgstr ""
msgstr "Cari String"
#: .\cookbook\forms.py:304
msgid "File ID"
msgstr ""
msgstr "ID Berkas"
#: .\cookbook\forms.py:326
msgid "You must provide at least a recipe or a title."
msgstr ""
msgstr "Anda harus memberikan setidaknya resep atau judul."
#: .\cookbook\forms.py:339
msgid "You can list default users to share recipes with in the settings."
msgstr ""
"Anda dapat membuat daftar pengguna default untuk berbagi resep di pengaturan."
#: .\cookbook\forms.py:340
msgid ""
"You can use markdown to format this field. See the <a href=\"/docs/markdown/"
"\">docs here</a>"
msgstr ""
"Anda dapat menggunakan penurunan harga untuk memformat bidang ini. Lihat <a "
"href=\"/docs/markdown/\">dokumen di sini</a>"
#: .\cookbook\forms.py:366
msgid "Maximum number of users for this space reached."
msgstr ""
msgstr "Jumlah maksimum pengguna untuk ruang ini tercapai."
#: .\cookbook\forms.py:372
msgid "Email address already taken!"
msgstr ""
msgstr "Alamat email sudah terpakai!"
#: .\cookbook\forms.py:380
msgid ""
"An email address is not required but if present the invite link will be sent "
"to the user."
msgstr ""
"Alamat email tidak diperlukan tetapi jika ada, tautan undangan akan dikirim "
"ke pengguna."
#: .\cookbook\forms.py:395
msgid "Name already taken."
msgstr ""
msgstr "Nama sudah terpakai."
#: .\cookbook\forms.py:406
msgid "Accept Terms and Privacy"
msgstr ""
msgstr "Terima Persyaratan dan Privasi"
#: .\cookbook\forms.py:438
msgid ""
"Determines how fuzzy a search is if it uses trigram similarity matching (e."
"g. low values mean more typos are ignored)."
msgstr ""
"Menentukan seberapa kabur pencarian jika menggunakan pencocokan kesamaan "
"trigram (misalnya nilai rendah berarti lebih banyak kesalahan ketik yang "
"diabaikan)."
#: .\cookbook\forms.py:448
msgid ""
"Select type method of search. Click <a href=\"/docs/search/\">here</a> for "
"full description of choices."
msgstr ""
"Pilih jenis metode pencarian. Klik <a href=\"/docs/search/\">di sini</a> "
"untuk deskripsi lengkap pilihan."
#: .\cookbook\forms.py:449
msgid ""
"Use fuzzy matching on units, keywords and ingredients when editing and "
"importing recipes."
msgstr ""
"Gunakan fuzzy pencocokan pada unit, kata kunci, dan bahan saat mengedit dan "
"mengimpor resep."
#: .\cookbook\forms.py:451
msgid ""
"Fields to search ignoring accents. Selecting this option can improve or "
"degrade search quality depending on language"
msgstr ""
"Bidang untuk mencari mengabaikan aksen. Memilih opsi ini dapat meningkatkan "
"atau menurunkan kualitas pencarian tergantung pada bahasa"
#: .\cookbook\forms.py:453
msgid ""
"Fields to search for partial matches. (e.g. searching for 'Pie' will return "
"'pie' and 'piece' and 'soapie')"
msgstr ""
"Bidang untuk mencari kecocokan sebagian. (mis. mencari 'Pie' akan "
"mengembalikan 'pie' dan 'piece' dan 'soapie')"
#: .\cookbook\forms.py:455
msgid ""
"Fields to search for beginning of word matches. (e.g. searching for 'sa' "
"will return 'salad' and 'sandwich')"
msgstr ""
"Bidang untuk mencari awal kata yang cocok. (misalnya mencari 'sa' akan "
"mengembalikan 'salad' dan 'sandwich')"
#: .\cookbook\forms.py:457
msgid ""

View File

@@ -12,7 +12,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-12 19:20+0200\n"
"PO-Revision-Date: 2022-09-25 12:33+0000\n"
"PO-Revision-Date: 2022-10-10 17:33+0000\n"
"Last-Translator: Oliver Cervera <olivercervera@yahoo.it>\n"
"Language-Team: Italian <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/it/>\n"
@@ -350,6 +350,9 @@ msgid ""
"Fields to 'fuzzy' search. (e.g. searching for 'recpie' will find 'recipe'.) "
"Note: this option will conflict with 'web' and 'raw' methods of search."
msgstr ""
"Campi in cui usare la ricerca 'vaga'. (ad esempio cercando per 'riceta' "
"verrà mostrato 'ricetta'). Nota: questa opzione non è compatibile con la "
"ricerca 'web' o 'raw'."
#: .\cookbook\forms.py:459
msgid ""
@@ -1750,7 +1753,7 @@ msgstr ""
#: .\cookbook\templates\openid\login.html:27
#: .\cookbook\templates\socialaccount\authentication_error.html:27
msgid "Back"
msgstr ""
msgstr "Indietro"
#: .\cookbook\templates\recipe_view.html:26
msgid "by"
@@ -2151,26 +2154,27 @@ msgstr "Iscriviti"
#: .\cookbook\templates\socialaccount\login.html:9
#, python-format
msgid "Connect %(provider)s"
msgstr ""
msgstr "Collega %(provider)s"
#: .\cookbook\templates\socialaccount\login.html:11
#, python-format
msgid "You are about to connect a new third party account from %(provider)s."
msgstr ""
msgstr "Stai per collegare un nuovo account di terze parti da %(provider)s."
#: .\cookbook\templates\socialaccount\login.html:13
#, python-format
msgid "Sign In Via %(provider)s"
msgstr ""
msgstr "Accedi tramite %(provider)s"
#: .\cookbook\templates\socialaccount\login.html:15
#, python-format
msgid "You are about to sign in using a third party account from %(provider)s."
msgstr ""
"Stai per fare l'accesso usando un account di terze parti da %(provider)s."
#: .\cookbook\templates\socialaccount\login.html:20
msgid "Continue"
msgstr ""
msgstr "Continua"
#: .\cookbook\templates\socialaccount\signup.html:10
#, python-format
@@ -2227,7 +2231,7 @@ msgstr "Puoi essere invitato in una istanza già esistente o crearne una nuova."
#: .\cookbook\templates\space_overview.html:45
msgid "Owner"
msgstr ""
msgstr "Proprietario"
#: .\cookbook\templates\space_overview.html:49
#, fuzzy
@@ -2475,20 +2479,22 @@ msgstr "{child.name} è stato spostato con successo al primario {parent.name}"
#: .\cookbook\views\api.py:542
msgid "{obj.name} was removed from the shopping list."
msgstr ""
msgstr "{obj.name} è stato rimosso dalla lista della spesa."
#: .\cookbook\views\api.py:547 .\cookbook\views\api.py:879
#: .\cookbook\views\api.py:892
msgid "{obj.name} was added to the shopping list."
msgstr ""
msgstr "{obj.name} è stato aggiunto alla lista della spesa."
#: .\cookbook\views\api.py:674
msgid "ID of recipe a step is part of. For multiple repeat parameter."
msgstr ""
"ID di una ricetta di cui uno step ne fa parte. Usato per parametri di "
"ripetizione multipla."
#: .\cookbook\views\api.py:676
msgid "Query string matched (fuzzy) against object name."
msgstr ""
msgstr "Stringa di ricerca abbinata (vaga) al nome dell'oggetto."
#: .\cookbook\views\api.py:720
msgid ""

View File

@@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-12 19:20+0200\n"
"PO-Revision-Date: 2021-11-12 20:06+0000\n"
"Last-Translator: Henrique Silva <hds@mailbox.org>\n"
"PO-Revision-Date: 2022-10-14 17:19+0000\n"
"Last-Translator: Shaxine <shaxine@protonmail.com>\n"
"Language-Team: Portuguese <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/pt/>\n"
"Language: pt\n"
@@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 4.8\n"
"X-Generator: Weblate 4.10.1\n"
#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34
#: .\cookbook\templates\stats.html:28
@@ -83,7 +83,7 @@ msgstr "Comentários"
#: .\cookbook\forms.py:66
msgid "Left-handed mode"
msgstr ""
msgstr "Modo canhoto"
#: .\cookbook\forms.py:70
msgid ""
@@ -109,18 +109,14 @@ msgstr ""
"Mostrar quantidades de energia nutricional em joules em vez de calorias"
#: .\cookbook\forms.py:77
#, fuzzy
#| msgid ""
#| "Users with whom newly created meal plan/shopping list entries should be "
#| "shared by default."
msgid "Users with whom newly created meal plans should be shared by default."
msgstr ""
"Utilizadores com os quais novos planos de refeições/listas de compras devem "
"ser partilhados por defeito."
"Utilizadores com os quais novos planos de refeições devem ser partilhados "
"por defeito."
#: .\cookbook\forms.py:78
msgid "Users with whom to share shopping lists."
msgstr ""
msgstr "Utilizadores com os quais novas listas de compras serão partilhadas."
#: .\cookbook\forms.py:80
msgid "Show recently viewed recipes on search page."

View File

@@ -6,21 +6,21 @@
# Translators:
# Emre S, 2020
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-12 19:20+0200\n"
"PO-Revision-Date: 2020-06-02 19:28+0000\n"
"Last-Translator: Emre S, 2020\n"
"Language-Team: Turkish (https://www.transifex.com/django-recipes/"
"teams/110507/tr/)\n"
"PO-Revision-Date: 2022-11-06 22:09+0000\n"
"Last-Translator: Gorkem <g.kalipcilar@gmail.com>\n"
"Language-Team: Turkish <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/tr/>\n"
"Language: tr\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"
"X-Generator: Weblate 4.14.1\n"
#: .\cookbook\filters.py:23 .\cookbook\templates\forms\ingredients.html:34
#: .\cookbook\templates\stats.html:28
@@ -29,7 +29,7 @@ msgstr "Malzemeler"
#: .\cookbook\forms.py:53
msgid "Default unit"
msgstr ""
msgstr "Varsayılan birim"
#: .\cookbook\forms.py:54
msgid "Use fractions"
@@ -82,7 +82,7 @@ msgstr ""
#: .\cookbook\forms.py:65 .\cookbook\templates\recipe_view.html:21
#: .\cookbook\templates\stats.html:47
msgid "Comments"
msgstr ""
msgstr "Yorumlar"
#: .\cookbook\forms.py:66
msgid "Left-handed mode"
@@ -192,7 +192,7 @@ msgstr ""
#: .\cookbook\forms.py:165
msgid "Default"
msgstr ""
msgstr "Varsayılan"
#: .\cookbook\forms.py:177
msgid ""
@@ -224,7 +224,7 @@ msgstr ""
#: .\cookbook\forms.py:271
msgid "Active"
msgstr ""
msgstr "Aktif"
#: .\cookbook\forms.py:277
msgid "Search String"

View File

@@ -35,9 +35,7 @@
{% endif %}
{% if EMAIL_ENABLED %}
<a class="btn btn-warning float-right d-none d-xl-block d-lg-block"
href="{% url 'account_reset_password' %}">{% trans "Reset My Password" %}</a>
<p class="d-xl-none d-lg-none">{% trans 'Lost your password?' %} <a
<p>{% trans 'Lost your password?' %} <a
href="{% url 'account_reset_password' %}">{% trans "Reset My Password" %}</a></p>
{% endif %}
</form>

View File

@@ -0,0 +1,22 @@
import json
from django.urls import reverse
from django_scopes import scopes_disabled
from cookbook.helper.permission_helper import share_link_valid
from cookbook.models import Recipe
def test_get_share_link(recipe_1_s1, u1_s1, u1_s2, g1_s1, a_u, space_1):
assert u1_s1.get(reverse('api_share_link', args=[recipe_1_s1.pk])).status_code == 200
assert u1_s2.get(reverse('api_share_link', args=[recipe_1_s1.pk])).status_code == 404
assert g1_s1.get(reverse('api_share_link', args=[recipe_1_s1.pk])).status_code == 403
assert a_u.get(reverse('api_share_link', args=[recipe_1_s1.pk])).status_code == 403
with scopes_disabled():
sl = json.loads(u1_s1.get(reverse('api_share_link', args=[recipe_1_s1.pk])).content)
assert share_link_valid(Recipe.objects.filter(pk=sl['pk']).get(), sl['share'])
space_1.allow_sharing = False
space_1.save()
assert u1_s1.get(reverse('api_share_link', args=[recipe_1_s1.pk])).status_code == 403

View File

@@ -54,7 +54,7 @@ def test_ingredient_parser():
"3,5 l Wasser": (3.5, "l", "Wasser", ""),
"3.5 l Wasser": (3.5, "l", "Wasser", ""),
"400 g Karotte(n)": (400, "g", "Karotte(n)", ""),
"400g unsalted butter": (400, "g", "butter", "unsalted"),
"400g unsalted butter": (400, "g", "unsalted butter", ""),
"2L Wasser": (2, "L", "Wasser", ""),
"1 (16 ounce) package dry lentils, rinsed": (1, "package", "dry lentils, rinsed", "16 ounce"),
"2-3 c Water": (2, "c", "Water", "2-3"),

View File

@@ -1382,13 +1382,16 @@ def sync_all(request):
def share_link(request, pk):
if request.space.allow_sharing and has_group_permission(request.user, 'user'):
recipe = get_object_or_404(Recipe, pk=pk, space=request.space)
link = ShareLink.objects.create(recipe=recipe, created_by=request.user, space=request.space)
return JsonResponse({'pk': pk, 'share': link.uuid,
'link': request.build_absolute_uri(reverse('view_recipe', args=[pk, link.uuid]))})
else:
return JsonResponse({'error': 'sharing_disabled'}, status=403)
if request.user.is_authenticated:
if request.space.allow_sharing and has_group_permission(request.user, ('user',)):
recipe = get_object_or_404(Recipe, pk=pk, space=request.space)
link = ShareLink.objects.create(recipe=recipe, created_by=request.user, space=request.space)
return JsonResponse({'pk': pk, 'share': link.uuid,
'link': request.build_absolute_uri(reverse('view_recipe', args=[pk, link.uuid]))})
else:
return JsonResponse({'error': 'sharing_disabled'}, status=403)
return JsonResponse({'error': 'not_authenticated'}, status=403)
@group_required('user')

View File

@@ -438,7 +438,7 @@ def test(request):
parser = IngredientParser(request, False)
data = {
'original': '1 Porreestange(n) , ca. 200 g'
'original': '90g golden syrup'
}
data['parsed'] = parser.parse(data['original'])

View File

@@ -48,6 +48,15 @@ The other common issue is that the recommended nginx container is removed from t
If removed, the nginx webserver needs to be replaced by something else that servers the /mediafiles/ directory or
`GUNICORN_MEDIA` needs to be enabled to allow media serving by the application container itself.
## Why does the Text/Markdown preview look different than the final recipe ?
Tandoor has always rendered the recipe instructions markdown on the server. This also allows tandoor to implement things like ingredient templating and scaling in text.
To make editing easier a markdown editor was added to the frontend with integrated preview as a temporary solution. Since the markdown editor uses a different
specification than the server the preview is different to the final result. It is planned to improve this in the future.
The markdown renderer follows this markdown specification https://daringfireball.net/projects/markdown/
## Why is Tandoor not working on my Raspberry Pi?
Please refer to [here](install/docker.md#setup-issues-on-raspberry-pi).

View File

@@ -1,7 +1,7 @@
This application features a very versatile import and export feature in order
to offer the best experience possible and allow you to freely choose where your data goes.
!!! warning "WIP"
!!! WARNING "WIP"
The Module is relatively new. There is a known issue with [Timeouts](https://github.com/vabene1111/recipes/issues/417) on large exports.
A fix is being developed and will likely be released with the next version.
@@ -13,7 +13,7 @@ if your favorite one is missing.
!!! info "Export"
I strongly believe in everyone's right to use their data as they please and therefore want to give you
the most possible flexibility with your recipes.
the best possible flexibility with your recipes.
That said for most of the people getting this application running with their recipes is the biggest priority.
Because of this importing as many formats as possible is prioritized over exporting.
Exporter for the different formats will follow over time.
@@ -75,7 +75,7 @@ Follow these steps to import your recipes
You will get a `Recipes.zip` file. Simply upload the file and choose the Nextcloud Cookbook type.
!!! warning "Folder Structure"
!!! WARNING "Folder Structure"
Importing only works if the folder structure is correct. If you do not use the standard path or create the
zip file in any other way make sure the structure is as follows
```
@@ -94,9 +94,9 @@ Mealie provides structured data similar to nextcloud.
To migrate your recipes
1. Go to your Mealie settings and create a new Backup
2. Download the backup by clicking on it and pressing download (this wasn't working for me, so I had to manually pull it from the server)
3. Upload the entire `.zip` file to the importer page and import everything
1. Go to your Mealie settings and create a new Backup.
2. Download the backup by clicking on it and pressing download (this wasn't working for me, so I had to manually pull it from the server).
3. Upload the entire `.zip` file to the importer page and import everything.
## Chowdown
Chowdown stores all your recipes in plain text markdown files in a directory called `_recipes`.
@@ -158,7 +158,7 @@ As ChefTap cannot import these files anyway there won't be an exporter implement
Meal master can be imported by uploading one or more meal master files.
The files should either be `.txt`, `.MMF` or `.MM` files.
The MealMaster spec allow for many variations. Currently, only the one column format for ingredients is supported.
The MealMaster spec allows for many variations. Currently, only the one column format for ingredients is supported.
Second line notes to ingredients are currently also not imported as a note but simply put into the instructions.
If you have MealMaster recipes that cannot be imported feel free to raise an issue.
@@ -248,4 +248,4 @@ For that to work it downloads a chromium binary of about 140 MB to your server a
Since that is something some server administrators might not want there the PDF exporter is disabled by default and can be enabled with `ENABLE_PDF_EXPORT=1` in `.env`.
See [this issue](https://github.com/TandoorRecipes/recipes/pull/1211) for more discussion on this and
[this issue](https://github.com/TandoorRecipes/recipes/issues/781) for the future plans to support server side rendering.
[this issue](https://github.com/TandoorRecipes/recipes/issues/781) for the future plans to support server side rendering.

View File

@@ -13,6 +13,8 @@ services:
image: vabene1111/recipes
env_file:
- ./.env
ports:
- 80:8080
volumes:
- staticfiles:/opt/recipes/staticfiles
- nginx_config:/opt/recipes/nginx/conf.d
@@ -24,7 +26,6 @@ services:
image: nginx:mainline-alpine
restart: always
ports:
- 80:80
env_file:
- ./.env
depends_on:

View File

@@ -210,9 +210,12 @@ cd /var/www/recipes
git pull
# load envirtonment variables
export $(cat /var/www/recipes/.env |grep "^[^#]" | xargs)
#install project requirements
bin/pip3 install -r requirements.txt
# migrate database
bin/python3 manage.py migrate
# collect static files
# if the output is not "0 static files copied" you might want to run the commands again to make sure everythig is collected
bin/python3 manage.py collectstatic --no-input
bin/python3 manage.py collectstatic_js_reverse
# change to frontend directory

View File

@@ -23,6 +23,7 @@ markdown_extensions:
plugins:
- include-markdown
- search
nav:
- Home: 'index.md'

View File

@@ -1,5 +1,5 @@
Django==4.0.7
cryptography==38.0.1
Django==4.0.8
cryptography==38.0.3
django-annoying==0.10.6
django-autocomplete-light==3.9.4
django-cleanup==6.0.0
@@ -30,7 +30,7 @@ Jinja2==3.1.2
django-webpack-loader==1.6.0
git+https://github.com/ierror/django-js-reverse@7cab78c4531780ab4b32033d5104ccd5be1a246a
django-allauth==0.51.0
recipe-scrapers==14.14.1
recipe-scrapers==14.23.0
django-scopes==1.2.0.post1
pytest==7.1.3
pytest-django==4.5.2

View File

@@ -8,6 +8,7 @@
<select class="form-control" v-model="recipe_app">
<option value="DEFAULT">Default</option>
<option value="SAFFRON">Saffron</option>
<option value="NEXTCLOUD">Nextcloud Cookbook</option>
<option value="RECIPESAGE">Recipe Sage</option>
<option value="PDF">PDF (experimental)</option>
</select>

View File

@@ -308,7 +308,7 @@
size="sm"
class="ml-1 mb-1 mb-md-0"
@click="
paste_step = step.id
paste_step = step
$bvModal.show('id_modal_paste_ingredients')
"
>
@@ -581,12 +581,14 @@
<i class="fas fa-copy"></i>
{{ $t("Copy") }}
</button>
<button type="button" class="dropdown-item" v-if="index > 0"
<button type="button" class="dropdown-item"
v-if="index > 0"
@click="moveIngredient(step, ingredient, index-1)">
<i class="fas fa-arrow-up"></i>
{{ $t("Up") }}
</button>
<button type="button" class="dropdown-item" v-if="index !== step.ingredients.length - 1"
<button type="button" class="dropdown-item"
v-if="index !== step.ingredients.length - 1"
@click="moveIngredient(step, ingredient, index+1)">
<i class="fas fa-arrow-down"></i>
{{ $t("Down") }}
@@ -721,7 +723,7 @@
<b-modal
id="id_modal_paste_ingredients"
v-bind:title="$t('ingredient_list')"
@ok="appendIngredients"
@ok="appendIngredients(paste_step)"
@cancel="paste_ingredients = paste_step = undefined"
@close="paste_ingredients = paste_step = undefined"
>
@@ -1210,29 +1212,33 @@ export default {
energy: function () {
return energyHeading()
},
appendIngredients: function () {
appendIngredients: function (step) {
let ing_list = this.paste_ingredients.split(/\r?\n/)
let step = this.recipe.steps.findIndex((x) => x.id == this.paste_step)
let order = Math.max(...this.recipe.steps[step].ingredients.map((x) => x.order), -1) + 1
this.recipe.steps[step].ingredients_visible = true
step.ingredients_visible = true
let parsed_ing_list = []
let promises = []
ing_list.forEach((ing) => {
if (ing.trim() !== "") {
this.genericPostAPI("api_ingredient_from_string", {text: ing}).then((result) => {
promises.push(this.genericPostAPI("api_ingredient_from_string", {text: ing}).then((result) => {
let unit = null
if (result.data.unit !== "" && result.data.unit !== null) {
unit = {name: result.data.unit}
}
this.recipe.steps[step].ingredients.splice(order, 0, {
parsed_ing_list.push({
amount: result.data.amount,
unit: unit,
food: {name: result.data.food},
note: result.data.note,
original_text: ing,
})
})
order++
}))
}
})
Promise.allSettled(promises).then(() => {
ing_list.forEach(ing => {
step.ingredients.push(parsed_ing_list.find(x => x.original_text === ing))
})
})
},
duplicateIngredient: function (step, ingredient, new_index) {
delete ingredient.id

View File

@@ -75,7 +75,8 @@
</div>
<div class="col col-md-2 col-2 mt-2 mt-md-0 text-right">
<recipe-context-menu v-bind:recipe="recipe" :servings="servings" :disabled_options="{print:false}"></recipe-context-menu>
<recipe-context-menu v-bind:recipe="recipe" :servings="servings"
:disabled_options="{print:false}"></recipe-context-menu>
</div>
</div>
<hr/>
@@ -103,13 +104,6 @@
:style="{ 'max-height': ingredient_height }"/>
</div>
</div>
<div class="row" style="margin-top: 2vh; margin-bottom: 2vh">
<div class="col-12">
<Nutrition-component :recipe="recipe" id="nutrition_container"
:ingredient_factor="ingredient_factor"></Nutrition-component>
</div>
</div>
</div>
</div>
@@ -137,10 +131,19 @@
<div v-if="recipe.source_url !== null">
<h6 class="d-print-none"><i class="fas fa-file-import"></i> {{ $t("Imported_From") }}</h6>
<span class="text-muted mt-1"><a style="overflow-wrap: break-word;" :href="recipe.source_url">{{ recipe.source_url }}</a></span>
<span class="text-muted mt-1"><a style="overflow-wrap: break-word;"
:href="recipe.source_url">{{ recipe.source_url }}</a></span>
</div>
<div class="row" style="margin-top: 2vh; ">
<div class="col-lg-6 offset-lg-3 col-12">
<Nutrition-component :recipe="recipe" id="nutrition_container"
:ingredient_factor="ingredient_factor"></Nutrition-component>
</div>
</div>
</div>
<add-recipe-to-book :recipe="recipe"></add-recipe-to-book>
<div class="row text-center d-print-none" style="margin-top: 3vh; margin-bottom: 3vh"
@@ -206,10 +209,12 @@ export default {
ingredient_count() {
return this.recipe?.steps.map((x) => x.ingredients).flat().length
},
working_time: function() {
return calculateHourMinuteSplit(this.recipe.working_time)},
waiting_time: function() {
return calculateHourMinuteSplit(this.recipe.waiting_time)},
working_time: function () {
return calculateHourMinuteSplit(this.recipe.working_time)
},
waiting_time: function () {
return calculateHourMinuteSplit(this.recipe.waiting_time)
},
},
data() {
return {

View File

@@ -3,7 +3,7 @@
<b-form-group :label="$t('Share')" :description="$t('plan_share_desc')">
<generic-multiselect
@change="updateSettings(false)"
@change="user_preferences.plan_share = $event.val;updateSettings(false)"
:model="Models.USER"
:initial_selection="user_preferences.plan_share"
label="display_name"
@@ -57,7 +57,7 @@ export default {
let apiFactory = new ApiApiFactory()
apiFactory.partialUpdateUserPreference(this.user_id.toString(), this.user_preferences).then(result => {
StandardToasts.makeStandardToast(this, StandardToasts.SUCCESS_UPDATE)
if (reload !== undefined) {
if (reload) {
location.reload()
}
}).catch(err => {

View File

@@ -2,7 +2,7 @@
<div v-if="user_preferences !== undefined">
<b-form-group :label="$t('shopping_share')" :description="$t('shopping_share_desc')">
<generic-multiselect
@change="updateSettings(false)"
@change="user_preferences.shopping_share = $event.val; updateSettings(false)"
:model="Models.USER"
:initial_selection="user_preferences.shopping_share"
label="display_name"

View File

@@ -1,19 +1,19 @@
{
"warning_feature_beta": "Esta función está en fase BETA de pruebas. Podrían aparecer fallos y cambios importantes en un futuro(pudiendo perder la información) cuando uses esta función.",
"err_fetching_resource": "¡Ha habido un error al obtener el recurso!",
"err_creating_resource": "¡Ha habido un error al crear el recurso!",
"err_updating_resource": "¡Ha habido un error al actualizar el recurso!",
"err_deleting_resource": "¡Ha habido un error al eliminar el recurso!",
"warning_feature_beta": "Esta función está en fase BETA de pruebas. Podrían aparecer fallos y cambios importantes en un futuro (pudiendo perder la información) cuando uses esta función.",
"err_fetching_resource": "¡Hubo un error al obtener el recurso!",
"err_creating_resource": "¡Hubo un error al crear el recurso!",
"err_updating_resource": "¡Hubo un error al actualizar el recurso!",
"err_deleting_resource": "¡Hubo un error al eliminar el recurso!",
"err_deleting_protected_resource": "El objeto a eliminar sigue en uso y no puede ser eliminado.",
"err_moving_resource": "¡Ha habido un error moviendo el recurso!",
"err_merging_resource": "¡Ha habido un error uniendo el recurso!",
"success_fetching_resource": "¡Se ha obtenido con éxito un recurso!",
"success_creating_resource": "¡Se ha creado con éxito un recurso!",
"success_updating_resource": "¡Se ha actualizado con éxito un recurso!",
"success_deleting_resource": "¡Se ha eliminado con éxito un recurso!",
"success_moving_resource": "¡Se ha movido con éxito un recurso!",
"success_merging_resource": "¡Se ha unido con éxito un recurso!",
"file_upload_disabled": "La subida de archivos no está habilitada para tu espacio.",
"err_moving_resource": "¡Hubo un error moviendo el recurso!",
"err_merging_resource": "¡Hubo un error al fusionar un recurso!",
"success_fetching_resource": "¡Se ha obtenido un recurso con éxito!",
"success_creating_resource": "¡Se ha creado un recurso con éxito!",
"success_updating_resource": "¡Se ha actualizado un recurso con éxito !",
"success_deleting_resource": "¡Se ha eliminado un recurso con éxito!",
"success_moving_resource": "¡Se ha movido un recurso con éxito!",
"success_merging_resource": "¡Se ha fusionado con éxito un recurso!",
"file_upload_disabled": "La carga de archivos no está habilitada para su espacio.",
"step_time_minutes": "Tiempo del paso en minutos",
"confirm_delete": "¿Estás seguro de eliminar este {object}?",
"import_running": "Importación realizándose, ¡Espere!",
@@ -259,7 +259,7 @@
"Coming_Soon": "Próximamente",
"Auto_Planner": "Planificador Automático",
"New_Cookbook": "Nuevo libro de recetas",
"Hide_Keyword": "Ocultar etiquetas",
"Hide_Keyword": "Esconder Palabras Clave",
"Clear": "Limpiar",
"err_move_self": "No puedes mover un elemento a sí mismo",
"nothing": "Nada que hacer",
@@ -298,27 +298,27 @@
"shopping_category_help": "",
"food_recipe_help": "",
"Foods": "Comida",
"enable_expert": "",
"expert_mode": "",
"simple_mode": "",
"advanced": "",
"fields": "",
"show_keywords": "",
"enable_expert": "Habilitar Modo Experto",
"expert_mode": "Modo Experto",
"simple_mode": "Modo Simple",
"advanced": "Avanzado",
"fields": "Campos",
"show_keywords": "Mostrar palabras clave",
"show_foods": "",
"show_books": "",
"show_books": "Mostrar Libros",
"show_rating": "",
"show_units": "",
"show_filters": "",
"show_units": "Mostrar Unidades",
"show_filters": "Mostrar Filtros",
"not": "",
"save_filter": "",
"filter_name": "",
"left_handed": "",
"left_handed_help": "",
"save_filter": "Guardar Filtros",
"filter_name": "Nombre de Filtro",
"left_handed": "Modo Zurdo",
"left_handed_help": "Optimizará la interfaz de usuario para su uso con la mano izquierda.",
"Custom Filter": "",
"shared_with": "",
"sort_by": "",
"shared_with": "Compartido con",
"sort_by": "Ordenar por",
"asc": "ascendente",
"desc": "",
"desc": "Descendiente",
"date_viewed": "",
"last_cooked": "",
"times_cooked": "",
@@ -336,7 +336,7 @@
"paste_ingredients": "",
"ingredient_list": "",
"explain": "",
"filter": "",
"filter": "Filtro",
"Website": "",
"App": "",
"Bookmarklet": "",
@@ -412,7 +412,7 @@
"New_Supermarket": "Crear nuevo supermercado",
"New_Supermarket_Category": "",
"Are_You_Sure": "",
"warning_space_delete": "Puedes borrar tu espacio incluyendo todas las recetas, listas de la compra, regímenes de comidas y cualquier otra cosa creada. ¡Esto no puede deshacerse! ¿Estás seguro de que quieres hacerlo?",
"warning_space_delete": "Puedes eliminar tu espacio, incluyendo todas las recetas, listas de la compra, regímenes de comidas y cualquier otra cosa creada. ¡Esto no se puede deshacer! ¿Estás seguro de que quieres hacerlo?",
"Private_Recipe": "Receta Privada",
"Private_Recipe_Help": "La receta solo podrás verla tu y la gente con la que esta compartida.",
"reusable_help_text": "El link de invitación podrá ser usado por mas de un usuario",
@@ -422,5 +422,19 @@
"facet_count_info": "Mostrar contadores de receta en los filtros de búsqueda.",
"Copy Link": "Copiar Enlace",
"Copy Token": "Copiar Token",
"Create_New_Shopping_Category": "Añadir nueva Categoría de Compras"
"Create_New_Shopping_Category": "Añadir nueva Categoría de Compras",
"Use_Fractions": "Use fracciones",
"Theme": "Tema",
"Hours": "Horas",
"Day": "Día",
"Days": "Días",
"Second": "Segundo",
"Seconds": "Segundos",
"Account": "Cuenta",
"API": "API",
"Decimals": "Decimales",
"Default_Unit": "Unidad Predeterminada",
"Language": "Lenguaje",
"Hour": "Hora",
"Username": "Nombre de Usuario"
}

View File

@@ -104,46 +104,46 @@
"min": "min",
"Servings": "Porsi",
"Waiting": "Menunggu",
"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": "",
"Copy Link": "",
"Copy Token": "",
"delete_confirmation": "",
"move_confirmation": "",
"merge_confirmation": "",
"create_rule": "",
"move_selection": "",
"merge_selection": "",
"Root": "",
"Ignore_Shopping": "",
"Shopping_Category": "",
"Shopping_Categories": "",
"Edit_Food": "",
"Preparation": "Persiapan",
"External": "Luar",
"Size": "Ukuran",
"Files": "File",
"File": "Berkas",
"Edit": "Sunting",
"Image": "Gambar",
"Delete": "Menghapus",
"Open": "Membuka",
"Ok": "Membuka",
"Save": "Menyimpan",
"Step": "Melangkah",
"Search": "Mencari",
"Import": "Impor",
"Print": "Mencetak",
"Settings": "Pengaturan",
"or": "atau",
"and": "dan",
"Information": "Informasi",
"Download": "Unduh",
"Create": "Membuat",
"Search Settings": "Pengaturan Pencarian",
"View": "Melihat",
"Recipes": "Resep",
"Move": "Bergerak",
"Merge": "Menggabungkan",
"Parent": "Induk",
"Copy Link": "Salin Tautan",
"Copy Token": "Salin Token",
"delete_confirmation": "Yakin ingin menghapus {source}?",
"move_confirmation": "Pindahkan <i>{child}</i> ke induk<i>{parent}</i>",
"merge_confirmation": "Ganti <i>{source}</i> dengan <i>{target}</i>",
"create_rule": "dan buat otomatisasi",
"move_selection": "Pilih {type} induk untuk memindahkan {source}.",
"merge_selection": "Ganti semua kemunculan {source} dengan {type} yang dipilih.",
"Root": "Akar",
"Ignore_Shopping": "Abaikan Belanja",
"Shopping_Category": "Kategori Belanja",
"Shopping_Categories": "Kategori Belanja",
"Edit_Food": "Sunting Makanan",
"Move_Food": "",
"New_Food": "",
"Hide_Food": "",

View File

@@ -304,7 +304,7 @@
"tree_select": "Usa selezione ad albero",
"sql_debug": "Debug SQL",
"remember_search": "Ricorda ricerca",
"facet_count_info": "Mostra il conteggio delle ricette nei filtri di ricerca",
"facet_count_info": "Mostra il conteggio delle ricette nei filtri di ricerca.",
"warning_space_delete": "Stai per eliminare la tua istanza che include tutte le ricette, liste della spesa, piani alimentari e tutto ciò che hai creato. Questa azione non può essere annullata! Sei sicuro di voler procedere?",
"food_inherit_info": "Campi di alimenti che devono essere ereditati per impostazione predefinita.",
"enable_expert": "Abilita modalità esperto",
@@ -328,7 +328,7 @@
"select_unit": "Seleziona unità di misura",
"Ingredient Editor": "Editor Ingredienti",
"Private_Recipe": "Ricetta privata",
"Private_Recipe_Help": "La ricetta viene mostrata solo a te e chi l'hai condivisa.",
"Private_Recipe_Help": "La ricetta viene mostrata solo a te e a chi l'hai condivisa.",
"Protected": "Protetto",
"Copy Link": "Copia link",
"Create_New_Shopping_Category": "Aggiungi nuova categoria di spesa",
@@ -345,5 +345,6 @@
"shopping_recent_days_desc": "Giorni di visualizzazione delle voci recenti della lista della spesa.",
"csv_delim_help": "Delimitatore usato per le esportazioni CSV.",
"csv_prefix_label": "Prefisso lista",
"not": "not"
"not": "not",
"Keyword": "Parola chiave"
}

View File

@@ -439,7 +439,7 @@
"Day": "Dzień",
"Days": "Dni",
"Second": "Sekunda",
"Cosmetic": "Kosmetyk",
"Cosmetic": "Kosmetyczne",
"API": "API",
"Sticky_Nav_Help": "Zawsze pokazuj menu nawigacyjne u góry ekranu.",
"Nav_Color": "Kolor nawigacji",

462
vue/src/locales/tr.json Normal file
View File

@@ -0,0 +1,462 @@
{
"warning_feature_beta": "",
"err_fetching_resource": "Kaynak alınırken bir hata oluştu!",
"err_creating_resource": "Kaynak oluşturulurken bir hata oluştu!",
"err_updating_resource": "Kaynak güncellenirken bir hata oluştu!",
"err_deleting_resource": "Kaynak silinirken bir hata oluştu!",
"err_deleting_protected_resource": "",
"err_moving_resource": "",
"err_merging_resource": "",
"success_fetching_resource": "Kaynak başarıyla getirildi!",
"success_creating_resource": "Kaynak başarıyla oluşturuldu!",
"success_updating_resource": "",
"success_deleting_resource": "Kaynak başarıyla silindi!",
"success_moving_resource": "Kaynak başarıyla taşındı!",
"success_merging_resource": "Kaynak başarıyla birleştirildi!",
"file_upload_disabled": "Alanınız için dosya yükleme aktif değil.",
"warning_space_delete": "Tüm tarifler, alışveriş listeleri, yemek planları ve oluşturduğunuz her şey dahil olmak üzere silinecektir. Bu geri alınamaz! Bunu yapmak istediğinizden emin misiniz?",
"food_inherit_info": "",
"facet_count_info": "",
"step_time_minutes": "Dakika olarak adım süresi",
"confirm_delete": "",
"import_running": "",
"all_fields_optional": "",
"convert_internal": "Dahili tarif'e dönüştür",
"show_only_internal": "Sadece dahili tarifler",
"show_split_screen": "Bölünmüş Görünüm",
"Log_Recipe_Cooking": "",
"External_Recipe_Image": "",
"Add_to_Shopping": "Alışverişe Ekle",
"Add_to_Plan": "",
"Step_start_time": "",
"Sort_by_new": "Yeniye göre sırala",
"Table_of_Contents": "İçindekiler Tablosu",
"Recipes_per_page": "Sayfa Başına Tarif",
"Show_as_header": "Başlığı Göster",
"Hide_as_header": "Başlığı gizle",
"Add_nutrition_recipe": "",
"Remove_nutrition_recipe": "",
"Copy_template_reference": "",
"Save_and_View": "Kaydet & Görüntüle",
"Manage_Books": "Kitapları Yönet",
"Meal_Plan": "Yemek Planı",
"Select_Book": "Kitap Seç",
"Select_File": "Dosya Seç",
"Recipe_Image": "Tarif Resmi",
"Import_finished": "İçeriye Aktarma Bitti",
"View_Recipes": "Tarifleri Görüntüle",
"Log_Cooking": "",
"New_Recipe": "Yeni Tarif",
"Url_Import": "Url İçeri Aktar",
"Reset_Search": "Aramayı Sıfırla",
"Recently_Viewed": "Son Görüntülenen",
"Load_More": "Daha Fazla",
"New_Keyword": "Yeni Anahtar Kelime",
"Delete_Keyword": "Anahtar Kelimeyi Sil",
"Edit_Keyword": "Anahtar Kelimeyi Düzenle",
"Edit_Recipe": "Tarifi Düzenle",
"Move_Keyword": "Anahtar Kelimeyi Taşı",
"Merge_Keyword": "Anahtar Kelimeyi Birleştir",
"Hide_Keywords": "Anahtar Kelimeyi Gizle",
"Hide_Recipes": "Tarifi Gizle",
"Move_Up": "Yukarı Taşı",
"Move_Down": "Aşağıya Taşı",
"Step_Name": "Adım Adı",
"Step_Type": "Adım Tipi",
"Make_Header": "",
"Make_Ingredient": "",
"Enable_Amount": "Tutarı Etkinleştir",
"Disable_Amount": "Tutarı Devre Dışı Bırak",
"Ingredient Editor": "",
"Private_Recipe": "Özel Tarif",
"Private_Recipe_Help": "",
"reusable_help_text": "",
"Add_Step": "",
"Keywords": "Anahtar Kelimeler",
"Books": "Kitaplar",
"Proteins": "Proteinler",
"Fats": "Yağlar",
"Carbohydrates": "Karbonhidratlar",
"Calories": "Kaloriler",
"Energy": "Enerji",
"Nutrition": "Besin",
"Date": "Tarih",
"Share": "Paylaş",
"Automation": "Otomasyon",
"Parameter": "Parametre",
"Export": "Dışa Aktar",
"Copy": "Kopyala",
"Rating": "Puanlama",
"Close": "Kapat",
"Cancel": "İptal",
"Link": "Bağlantı",
"Add": "Ekle",
"New": "Yeni",
"Note": "Not",
"Success": "Başarılı",
"Failure": "Hata",
"Protected": "Korumalı",
"Ingredients": "Mazemeler",
"Supermarket": "Market",
"Categories": "Kategoriler",
"Category": "Kategori",
"Selected": "Seçilen",
"min": "",
"Servings": "",
"Waiting": "",
"Preparation": "",
"External": "",
"Size": "Boyut",
"Files": "Dosyalar",
"File": "Dosya",
"Edit": "Düzenle",
"Image": "Resim",
"Delete": "Sil",
"Open": "Aç",
"Ok": "Aç",
"Save": "Kaydet",
"Step": "Adım",
"Search": "Ara",
"Import": "İçeriye Aktar",
"Print": "Yazdır",
"Settings": "Ayarlar",
"or": "veya",
"and": "ve",
"Information": "bilgi",
"Download": "İndir",
"Create": "Oluştur",
"Search Settings": "Arama Ayarları",
"View": "Görüntüle",
"Recipes": "Tarifler",
"Move": "Taşı",
"Merge": "Birleştir",
"Parent": "",
"Copy Link": "",
"Copy Token": "",
"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": "",
"Decimals": "",
"Default_Unit": "",
"No_Results": "",
"New_Unit": "",
"Create_New_Shopping Category": "",
"Create_New_Food": "",
"Create_New_Keyword": "",
"Create_New_Unit": "",
"Create_New_Meal_Type": "",
"Create_New_Shopping_Category": "",
"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": "",
"New_Entry": "",
"Clone": "",
"Drag_Here_To_Delete": "",
"Meal_Type_Required": "",
"Title_or_Recipe_Required": "",
"Color": "",
"New_Meal_Type": "",
"Use_Fractions": "",
"Use_Fractions_Help": "",
"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": "",
"Language": "",
"Theme": "",
"SupermarketCategoriesOnly": "",
"MoveCategory": "",
"CountMore": "",
"IgnoreThis": "",
"DelayFor": "",
"Warning": "",
"NoCategory": "",
"InheritWarning": "",
"ShowDelayed": "",
"Completed": "",
"OfflineAlert": "",
"shopping_share": "",
"shopping_auto_sync": "",
"one_url_per_line": "",
"mealplan_autoadd_shopping": "",
"mealplan_autoexclude_onhand": "",
"mealplan_autoinclude_related": "",
"default_delay": "",
"plan_share_desc": "",
"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": "",
"Hour": "",
"Hours": "",
"Day": "",
"Days": "",
"Second": "",
"Seconds": "",
"Clear": "",
"Users": "",
"Invites": "",
"err_move_self": "",
"nothing": "",
"err_merge_self": "",
"show_sql": "",
"filter_to_supermarket_desc": "",
"CategoryName": "",
"SupermarketName": "",
"CategoryInstruction": "",
"shopping_recent_days_desc": "",
"shopping_recent_days": "",
"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": "",
"Account": "",
"Cosmetic": "",
"API": "",
"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": "Tarif Filtresi",
"book_filter_help": "",
"review_shopping": "",
"view_recipe": "Tarif Görüntüle",
"copy_to_new": "Yeni Tarif'e Kopyala",
"recipe_name": "Tarif Adı",
"paste_ingredients_placeholder": "",
"paste_ingredients": "",
"ingredient_list": "",
"explain": "",
"filter": "",
"Website": "",
"App": "",
"Message": "",
"Bookmarklet": "",
"Sticky_Nav": "",
"Sticky_Nav_Help": "",
"Nav_Color": "",
"Nav_Color_Help": "",
"Use_Kj": "",
"Comments_setting": "",
"click_image_import": "",
"no_more_images_found": "",
"import_duplicates": "",
"paste_json": "",
"Click_To_Edit": "",
"search_no_recipes": "",
"search_import_help_text": "",
"search_create_help_text": "",
"warning_duplicate_filter": "",
"reset_children": "",
"reset_children_help": "",
"reset_food_inheritance": "",
"reset_food_inheritance_info": "",
"substitute_help": "",
"substitute_siblings_help": "",
"substitute_children_help": "",
"substitute_siblings": "",
"substitute_children": "",
"SubstituteOnHand": "",
"ChildInheritFields": "",
"ChildInheritFields_help": "",
"InheritFields_help": "",
"show_ingredient_overview": "",
"Ingredient Overview": "",
"last_viewed": "",
"created_on": "",
"updatedon": "",
"Imported_From": "",
"advanced_search_settings": "",
"nothing_planned_today": "",
"no_pinned_recipes": "",
"Planned": "Planlanan",
"Pinned": "",
"Imported": "",
"Quick actions": "Hızlı işlemler",
"Ratings": "",
"Internal": "",
"Units": "Birimler",
"Manage_Emails": "",
"Change_Password": "",
"Social_Authentication": "",
"Random Recipes": "Rasgele Tarifler",
"parameter_count": "",
"select_keyword": "",
"add_keyword": "",
"select_file": "Dosya Seç",
"select_recipe": "Tarif Seç",
"select_unit": "Birim Seç",
"select_food": "",
"remove_selection": "",
"empty_list": "",
"Select": "Seç",
"Supermarkets": "Marketler",
"User": "",
"Username": "",
"First_name": "İsim",
"Last_name": "Soyisim",
"Keyword": "",
"Advanced": "",
"Page": "Sayfa",
"Single": "",
"Multiple": "",
"Reset": "",
"Disabled": "",
"Disable": "",
"Options": "",
"Create Food": "",
"create_food_desc": "",
"additional_options": "",
"Importer_Help": "",
"Documentation": "",
"Select_App_To_Import": "",
"Import_Supported": "",
"Export_Supported": "",
"Import_Not_Yet_Supported": "",
"Export_Not_Yet_Supported": "",
"Import_Result_Info": "",
"Recipes_In_Import": "",
"Toggle": "Değiştir",
"Import_Error": "İçeri aktarma sırasında bir hata oluştu. Görüntülemek için lütfen sayfanın altındaki Ayrıntıları genişletin.",
"Warning_Delete_Supermarket_Category": "Bir market kategorisinin silinmesi, gıdalarla olan tüm ilişkileri de silecektir. Emin misiniz?",
"New_Supermarket": "Yeni Market",
"New_Supermarket_Category": "Yeni Market Kategorisi",
"Are_You_Sure": "Emin misin?",
"Valid Until": "Geçerlilik Tarihi"
}

View File

@@ -280,7 +280,7 @@ export function getUserPreference(pref = undefined) {
export function calculateAmount(amount, factor) {
if (getUserPreference("use_fractions")) {
let return_string = ""
let fraction = frac(amount * factor, 10, true)
let fraction = frac(amount * factor, 16, true)
if (fraction[0] === 0 && fraction[1] === 0 && fraction[2] === 1) {
return roundDecimals(amount * factor)

View File

@@ -7297,9 +7297,9 @@ loader-runner@^4.1.0, loader-runner@^4.2.0:
integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
version "1.4.1"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.1.tgz#278ad7006660bccc4d2c0c1578e17c5c78d5c0e0"
integrity sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==
dependencies:
big.js "^5.2.2"
emojis-list "^3.0.0"
@@ -7745,7 +7745,12 @@ minimatch@^5.0.1:
dependencies:
brace-expansion "^2.0.1"
minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
minimist@^1.2.0:
version "1.2.7"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
minimist@^1.2.5, minimist@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==