From e9fd00acf8b28cb4df31d43bb8a590d6811d5c38 Mon Sep 17 00:00:00 2001 From: Jakob Date: Mon, 25 Oct 2021 17:15:46 +0200 Subject: [PATCH 01/39] fix webp support for pillow --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index f060aa76e..b69c037ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM python:3.9-alpine3.12 #Install all dependencies. -RUN apk add --no-cache postgresql-libs gettext zlib libjpeg libxml2-dev libxslt-dev py-cryptography +RUN apk add --no-cache postgresql-libs gettext zlib libjpeg libwebp libxml2-dev libxslt-dev py-cryptography #Print all logs without buffering it. ENV PYTHONUNBUFFERED 1 @@ -15,7 +15,7 @@ WORKDIR /opt/recipes COPY requirements.txt ./ -RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libressl-dev libffi-dev cargo openssl-dev openldap-dev && \ +RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev libressl-dev libffi-dev cargo openssl-dev openldap-dev && \ python -m venv venv && \ /opt/recipes/venv/bin/python -m pip install --upgrade pip && \ venv/bin/pip install wheel==0.36.2 && \ @@ -25,4 +25,4 @@ RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-de #Copy project and execute it. COPY . ./ RUN chmod +x boot.sh -ENTRYPOINT ["/opt/recipes/boot.sh"] \ No newline at end of file +ENTRYPOINT ["/opt/recipes/boot.sh"] From 21229ca029ba269d2a77b879569ae2837f78c830 Mon Sep 17 00:00:00 2001 From: Jakob Date: Mon, 25 Oct 2021 17:29:12 +0200 Subject: [PATCH 02/39] Update Dockerfile From a7608de961a8dea06109781b61d450a68b4a2976 Mon Sep 17 00:00:00 2001 From: smilerz Date: Mon, 25 Oct 2021 11:59:30 -0500 Subject: [PATCH 03/39] fix 977 --- cookbook/serializer.py | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 4ca666d10..27104ce90 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -2,22 +2,21 @@ import random from datetime import timedelta from decimal import Decimal from gettext import gettext as _ + from django.contrib.auth.models import User from django.db.models import Avg, QuerySet, Sum from django.urls import reverse from django.utils import timezone -from drf_writable_nested import (UniqueFieldsMixin, - WritableNestedModelSerializer) +from drf_writable_nested import UniqueFieldsMixin, WritableNestedModelSerializer from rest_framework import serializers -from rest_framework.exceptions import ValidationError, NotFound +from rest_framework.exceptions import NotFound, ValidationError -from cookbook.models import (Comment, CookLog, Food, Ingredient, Keyword, - MealPlan, MealType, NutritionInformation, Recipe, - RecipeBook, RecipeBookEntry, RecipeImport, - ShareLink, ShoppingList, ShoppingListEntry, - ShoppingListRecipe, Step, Storage, Sync, SyncLog, - Unit, UserPreference, ViewLog, SupermarketCategory, Supermarket, - SupermarketCategoryRelation, ImportLog, BookmarkletImport, UserFile, Automation) +from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, Food, ImportLog, + Ingredient, Keyword, MealPlan, MealType, NutritionInformation, Recipe, + RecipeBook, RecipeBookEntry, RecipeImport, ShareLink, ShoppingList, + ShoppingListEntry, ShoppingListRecipe, Step, Storage, Supermarket, + SupermarketCategory, SupermarketCategoryRelation, Sync, SyncLog, Unit, + UserFile, UserPreference, ViewLog) from cookbook.templatetags.custom_tags import markdown @@ -34,12 +33,14 @@ class ExtendedRecipeMixin(serializers.ModelSerializer): except KeyError: api_serializer = None # extended values are computationally expensive and not needed in normal circumstances - if self.context.get('request', False) and bool(int(self.context['request'].query_params.get('extended', False))) and self.__class__ == api_serializer: - return fields - else: - del fields['image'] - del fields['numrecipe'] - return fields + try: + if bool(int(self.context['request'].query_params.get('extended', False))) and self.__class__ == api_serializer: + return fields + except AttributeError: + pass + del fields['image'] + del fields['numrecipe'] + return fields def get_image(self, obj): # TODO add caching @@ -158,7 +159,7 @@ class UserFileSerializer(serializers.ModelSerializer): current_file_size_mb = 0 if ((validated_data['file'].size / 1000 / 1000 + current_file_size_mb - 5) - > self.context['request'].space.max_file_storage_mb != 0): + > self.context['request'].space.max_file_storage_mb != 0): raise ValidationError(_('You have reached your file upload limit.')) def create(self, validated_data): From 9e3d8743227c5662bafd3728f4b1ca3f7161f97d Mon Sep 17 00:00:00 2001 From: tarek EL SOL Date: Sun, 24 Oct 2021 17:36:50 +0000 Subject: [PATCH 04/39] Translated using Weblate (French) Currently translated at 88.5% (439 of 496 strings) Translation: Tandoor/Recipes Backend Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/ --- cookbook/locale/fr/LC_MESSAGES/django.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cookbook/locale/fr/LC_MESSAGES/django.po b/cookbook/locale/fr/LC_MESSAGES/django.po index 1d9725850..7493a86e9 100644 --- a/cookbook/locale/fr/LC_MESSAGES/django.po +++ b/cookbook/locale/fr/LC_MESSAGES/django.po @@ -14,10 +14,10 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-09-13 22:40+0200\n" -"PO-Revision-Date: 2021-09-07 16:06+0000\n" -"Last-Translator: Afaren \n" -"Language-Team: French \n" +"PO-Revision-Date: 2021-10-26 10:06+0000\n" +"Last-Translator: tarek EL SOL \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -305,7 +305,7 @@ msgstr "" #: .\cookbook\forms.py:500 msgid "Partial Match" -msgstr "" +msgstr "correspondance partielle" #: .\cookbook\forms.py:501 msgid "Starts Wtih" From 8bf588fd342d575f294e84f3214f2115deb02856 Mon Sep 17 00:00:00 2001 From: Jesse Date: Mon, 25 Oct 2021 06:59:45 +0000 Subject: [PATCH 05/39] Translated using Weblate (Dutch) Currently translated at 100.0% (496 of 496 strings) Translation: Tandoor/Recipes Backend Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nl/ --- cookbook/locale/nl/LC_MESSAGES/django.po | 63 ++++++++++++------------ 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/cookbook/locale/nl/LC_MESSAGES/django.po b/cookbook/locale/nl/LC_MESSAGES/django.po index 984fb994d..81c7e42b0 100644 --- a/cookbook/locale/nl/LC_MESSAGES/django.po +++ b/cookbook/locale/nl/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-09-13 22:40+0200\n" -"PO-Revision-Date: 2021-10-02 12:25+0000\n" +"PO-Revision-Date: 2021-10-26 10:06+0000\n" "Last-Translator: Jesse \n" "Language-Team: Dutch \n" @@ -58,7 +58,7 @@ msgid "" "Users with whom newly created meal plan/shopping list entries should be " "shared by default." msgstr "" -"Gebruikers waarmee nieuwe maaltijdplannen/boodschappenlijstjes standaard " +"Gebruikers waarmee een nieuw maaltijdplan/boodschappenlijst standaard " "gedeeld moeten worden." #: .\cookbook\forms.py:59 @@ -71,7 +71,7 @@ msgstr "Aantal decimalen om ingrediënten op af te ronden." #: .\cookbook\forms.py:61 msgid "If you want to be able to create and see comments underneath recipes." -msgstr "Als je opmerkingen bij recepten wil kunnen maken en zien." +msgstr "Als je opmerkingen onder recepten wil kunnen maken en zien." #: .\cookbook\forms.py:63 msgid "" @@ -842,7 +842,7 @@ msgstr "Winkelen" #: .\cookbook\templates\base.html:113 msgid "Keyword" -msgstr "Etiket" +msgstr "Etiketten" #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 @@ -874,7 +874,7 @@ msgstr "Recept importeren" #: .\cookbook\templates\shopping_list.html:188 #: .\cookbook\templates\shopping_list.html:210 msgid "Create" -msgstr "Maak" +msgstr "Nieuw recept" #: .\cookbook\templates\base.html:207 .\cookbook\templates\space.html:7 #: .\cookbook\templates\space.html:19 @@ -1028,11 +1028,11 @@ msgid "" " " msgstr "" "\n" -" Het volgende formulier kan worden gebruikt wanneer per ongeluk twee " -"(of meer) eenheden of ingrediënten zijn gemaakt die eigenlijk hetzelfde " -"zijn.\n" -" Het voegt de twee eenheden of ingrediënten samen en past alle bijbehorende " -"recepten aan.\n" +" Het volgende formulier kan worden gebruikt wanneer per ongeluk twee (" +"of meer) eenheden of ingrediënten zijn gemaakt die eigenlijk\n" +" hetzelfde zijn\n" +" Het voegt de twee eenheden of ingrediënten samen en past alle " +"bijbehorende recepten aan.\n" " " #: .\cookbook\templates\forms\ingredients.html:26 @@ -1068,7 +1068,7 @@ msgstr "Origineel bestand verwijderen" #: .\cookbook\templates\generic\list_template.html:6 #: .\cookbook\templates\generic\list_template.html:21 msgid "List" -msgstr "Lijst" +msgstr " " #: .\cookbook\templates\generic\list_template.html:34 msgid "Filter" @@ -1201,13 +1201,14 @@ msgstr "" "\n" " Markdown is een lichtgewicht opmaak taal die gebruikt kan worden om " "tekst eenvoudig op te maken.\n" -" Deze site gebruikt de Python Markdown bibliotheek\n" -" om je tekst in mooi uitziende HTML om te zetten. De volledige documentatie " -"kan \n" -" hiergevonden worden.\n" -" Onvolledige, maar waarschijnlijk voldoende, informatie staat hieronder.\n" +" Deze site gebruikt de Python Markdown bibliotheek\n" +" om je tekst in mooi uitziende HTML om te zetten. De volledige " +"documentatie kan \n" +" hiergevonden worden.\n" +" Onvolledige, maar waarschijnlijk voldoende, informatie staat " +"hieronder.\n" " " #: .\cookbook\templates\markdown_info.html:25 @@ -1216,7 +1217,7 @@ msgstr "Koppen" #: .\cookbook\templates\markdown_info.html:54 msgid "Formatting" -msgstr "Formattering" +msgstr "Opmaak" #: .\cookbook\templates\markdown_info.html:56 #: .\cookbook\templates\markdown_info.html:72 @@ -1299,7 +1300,7 @@ msgstr "" #: .\cookbook\templates\markdown_info.html:132 #: .\cookbook\templates\markdown_info.html:145 msgid "This will become an image" -msgstr "Dit wordt een plaatje" +msgstr "Dit wordt een afbeelding" #: .\cookbook\templates\markdown_info.html:152 msgid "Tables" @@ -1372,7 +1373,7 @@ msgstr "Maak alleen een notitie" #: .\cookbook\templates\shopping_list.html:29 #: .\cookbook\templates\shopping_list.html:714 msgid "Shopping List" -msgstr "Boodschappenlijstje" +msgstr "Boodschappenlijst" #: .\cookbook\templates\meal_plan.html:172 msgid "Shopping list currently empty" @@ -1380,7 +1381,7 @@ msgstr "Boodschappenlijst is momenteel leeg" #: .\cookbook\templates\meal_plan.html:175 msgid "Open Shopping List" -msgstr "Open boodschappenlijstje" +msgstr "Open boodschappenlijst" #: .\cookbook\templates\meal_plan.html:189 msgid "Plan" @@ -1405,15 +1406,15 @@ msgstr "" #: .\cookbook\templates\meal_plan.html:217 #: .\cookbook\templates\meal_plan.html:294 msgid "Edit plan types" -msgstr "Bewerk plan soorten" +msgstr "Bewerk maaltijdplan types" #: .\cookbook\templates\meal_plan.html:219 msgid "Show help" -msgstr "Toon help" +msgstr "Help" #: .\cookbook\templates\meal_plan.html:220 msgid "Week iCal export" -msgstr "Week iCal export" +msgstr "Exporteer week als iCal" #: .\cookbook\templates\meal_plan.html:256 #: .\cookbook\templates\url_import.html:542 @@ -1433,7 +1434,7 @@ msgstr "Gedeeld met" #: .\cookbook\templates\meal_plan.html:280 msgid "Add to Shopping" -msgstr "Voeg toe aan Boodschappen" +msgstr "Voeg toe aan boodschappenlijst" #: .\cookbook\templates\meal_plan.html:323 msgid "New meal type" @@ -1556,7 +1557,7 @@ msgid "" "Recipes, foods, shopping lists and more are organized in spaces of one or " "more people." msgstr "" -"Recepten, ingrediënten, boodschappenlijstjes en meer zijn georganiseerd in " +"Recepten, ingrediënten, boodschappenlijsten en meer zijn georganiseerd in " "ruimtes van één of meer personen." #: .\cookbook\templates\no_space_info.html:18 @@ -1995,7 +1996,7 @@ msgstr "Maak Superuser acount" #: .\cookbook\templates\shopping_list.html:79 msgid "Shopping Recipes" -msgstr "Boodschappen recepten" +msgstr "Recepten op boodschappenlijst" #: .\cookbook\templates\shopping_list.html:83 msgid "No recipes selected" @@ -2007,7 +2008,7 @@ msgstr "Invoermodus" #: .\cookbook\templates\shopping_list.html:158 msgid "Add Entry" -msgstr "Zet op lijst" +msgstr "Voeg toe aan boodschappenlijst" #: .\cookbook\templates\shopping_list.html:174 msgid "Amount" @@ -2044,7 +2045,7 @@ msgstr "Afgerond" #: .\cookbook\templates\shopping_list.html:296 msgid "You are offline, shopping list might not syncronize." -msgstr "Je bent offline, boodschappenlijst synchroniseert mogelijk niet." +msgstr "Je bent offline, de boodschappenlijst synchroniseert mogelijk niet." #: .\cookbook\templates\shopping_list.html:361 msgid "Copy/Export" @@ -2721,7 +2722,7 @@ msgstr "Supermarkten" #: .\cookbook\views\lists.py:179 msgid "Shopping Categories" -msgstr "Boodschappen categorieën" +msgstr "Boodschappencategorieën" #: .\cookbook\views\new.py:122 msgid "Imported new recipe!" From 63d6bb7d5a5ce1f1af9ab845b25a658bf280ef0b Mon Sep 17 00:00:00 2001 From: Jesse Date: Mon, 25 Oct 2021 08:28:40 +0000 Subject: [PATCH 06/39] Translated using Weblate (Dutch) Currently translated at 100.0% (200 of 200 strings) Translation: Tandoor/Recipes Frontend Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nl/ --- vue/src/locales/nl.json | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/vue/src/locales/nl.json b/vue/src/locales/nl.json index 26b1340ca..653d22b3d 100644 --- a/vue/src/locales/nl.json +++ b/vue/src/locales/nl.json @@ -2,13 +2,13 @@ "import_running": "Er wordt geïmporteerd, even geduld!", "all_fields_optional": "Alle velden zijn optioneel en kunnen leeg gelaten worden.", "convert_internal": "Zet om naar intern recept", - "Log_Recipe_Cooking": "Log Bereiding", + "Log_Recipe_Cooking": "Bereiding loggen", "External_Recipe_Image": "Externe Afbeelding Recept", "Add_to_Book": "Voeg toe aan Boek", - "Add_to_Shopping": "Voeg toe aan Boodschappenlijst", + "Add_to_Shopping": "Voeg toe aan winkelen", "Add_to_Plan": "Voeg toe aan Plan", "Step_start_time": "Starttijd stap", - "Select_Book": "Selecteer Boek", + "Select_Book": "Selecteer boek", "Recipe_Image": "Afbeelding Recept", "Import_finished": "Importeren gereed", "View_Recipes": "Bekijk Recepten", @@ -75,8 +75,8 @@ "Delete": "Verwijder", "Ok": "Open", "Load_More": "Laad meer", - "Manage_Books": "Beheer Boeken", - "Create": "Maak", + "Manage_Books": "Beheer boeken", + "Create": "Voeg toe", "Failure": "Storing", "View": "Bekijk", "Recipes": "Recepten", @@ -116,8 +116,8 @@ "Add_Step": "Voeg Stap toe", "Note": "Notitie", "delete_confirmation": "Weet je zeker dat je {source} wil verwijderen?", - "Ignore_Shopping": "Negeer Boodschappen", - "Shopping_Category": "Boodschappen Categorie", + "Ignore_Shopping": "Negeer winkelen", + "Shopping_Category": "Boodschappencategorie", "Edit_Food": "Bewerk Eten", "Move_Food": "Verplaats Eten", "New_Food": "Nieuw Eten", @@ -137,7 +137,7 @@ "Keyword_Alias": "Etiket Alias", "Recipe_Book": "Kookboek", "New_Unit": "Nieuwe Eenheid", - "Create_New_Shopping Category": "Maak nieuwe Boodschappen Categorie", + "Create_New_Shopping Category": "Maak nieuwe boodschappencategorie", "delete_title": "Verwijder {type}", "create_title": "Nieuw {type}", "edit_title": "Bewerk {type}", @@ -165,8 +165,8 @@ "Table_of_Contents": "Inhoudsopgave", "Create_New_Meal_Type": "Voeg Nieuw Maaltijdtype toe", "Empty": "Leeg", - "Create_Meal_Plan_Entry": "Maak maaltijdplan regel", - "Edit_Meal_Plan_Entry": "Bewerk maaltijdplan regel", + "Create_Meal_Plan_Entry": "Maak maaltijdplan", + "Edit_Meal_Plan_Entry": "Bewerk maaltijdplan", "Title": "Titel", "Week": "Week", "Month": "Maand", @@ -189,5 +189,17 @@ "Select_File": "Selecteer Bestand", "Year": "Jaar", "Planner": "Planner", - "file_upload_disabled": "Het uploaden van bestanden is niet ingeschakeld voor uw ruimte." + "file_upload_disabled": "Het uploaden van bestanden is niet ingeschakeld voor uw ruimte.", + "Export_As_ICal": "Exporteer huidige periode naar iCal formaat", + "Week_Numbers": "Weeknummers", + "Show_Week_Numbers": "Toon weeknummers?", + "Export_To_ICal": "Exporteer .ics", + "Added_To_Shopping_List": "Toegevoegd aan boodschappenlijst", + "Shopping_List_Empty": "Je boodschappenlijst is op dit moment leeg, je kan artikelen via het context menu of een maaltijdplan (rechtermuisknop op de kaart of linkermuisknop op het menu icoon) toevoegen", + "Next_Period": "Volgende periode", + "Previous_Period": "Vorige periode", + "Current_Period": "Huidige periode", + "Next_Day": "Volgende dag", + "Previous_Day": "Vorige dag", + "Cannot_Add_Notes_To_Shopping": "Notities kunnen niet aan de boodschappenlijst toegevoegd worden" } From 11cd5d8c877593fabd511781eac1f04d3e5b25ee Mon Sep 17 00:00:00 2001 From: tarek EL SOL Date: Sun, 24 Oct 2021 17:42:11 +0000 Subject: [PATCH 07/39] Translated using Weblate (French) Currently translated at 65.5% (131 of 200 strings) Translation: Tandoor/Recipes Frontend Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/ --- vue/src/locales/fr.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/vue/src/locales/fr.json b/vue/src/locales/fr.json index a54b3fb36..1439e5842 100644 --- a/vue/src/locales/fr.json +++ b/vue/src/locales/fr.json @@ -119,5 +119,17 @@ "move_title": "Déplacer {type}", "del_confirmation_tree": "Êtes-vous sûr de vouloir supprimer {source} et tous ses enfants ?", "warning_feature_beta": "Cette fonctionnalité est actuellement en phase BETA (test). Veuillez vous attendre à des bugs et éventuellement à des changements avenir (éventuellement la perte de données liées aux fonctionnalités) lorsque vous utilisez cette fonctionnalité.", - "confirm_delete": "Voulez-vous vraiment supprimer {objet} ?" + "confirm_delete": "Voulez-vous vraiment supprimer {objet} ?", + "Note": "Noter", + "Add_Step": "Ajouter une étape", + "Step_Name": "Nom de l'étape", + "Parameter": "Paramètre", + "Automation": "Automatisation", + "Text": "Texte", + "Color": "Couleur", + "New_Meal_Type": "Nouveau type de repas", + "Select_File": "Choisir le fichier", + "Shopping_list": "Liste de courses", + "Save_and_View": "Sauvegarder et visualiser", + "step_time_minutes": "Temps passé en minute" } From 0091abd2c09d8727d5aeb1de9709e8014e991893 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 26 Oct 2021 14:40:27 +0200 Subject: [PATCH 08/39] fixed typo --- cookbook/templates/settings.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbook/templates/settings.html b/cookbook/templates/settings.html index eba8ad14b..1f1e605c6 100644 --- a/cookbook/templates/settings.html +++ b/cookbook/templates/settings.html @@ -178,7 +178,7 @@
-
{% trans 'Percise' %}
+
{% trans 'Precise' %}

{% trans 'Allows fine control over search results but might not return results if too many spelling mistakes are made.' %}

{% trans 'Perfect for large Databases' %}

From 2a682892c6358e79893cf190f991a8f128cd275b Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 26 Oct 2021 14:51:37 +0200 Subject: [PATCH 09/39] fixed importing of tags --- cookbook/views/data.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cookbook/views/data.py b/cookbook/views/data.py index 4ed41c403..6dd30b411 100644 --- a/cookbook/views/data.py +++ b/cookbook/views/data.py @@ -5,6 +5,7 @@ from io import BytesIO import requests from django.contrib import messages +from django.core.exceptions import ObjectDoesNotExist from django.core.files import File from django.db.transaction import atomic from django.http import HttpResponse, HttpResponseRedirect @@ -150,8 +151,15 @@ def import_url(request): recipe.steps.add(step) for kw in data['keywords']: - k, created = Keyword.objects.get_or_create(name=kw['text'], space=request.space) - recipe.keywords.add(k) + if data['all_keywords']: # do not remove this check :) https://github.com/vabene1111/recipes/issues/645 + k, created = Keyword.objects.get_or_create(name=kw['text'], space=request.space) + recipe.keywords.add(k) + else: + try: + k = Keyword.objects.get(name=kw['text'], space=request.space) + recipe.keywords.add(k) + except ObjectDoesNotExist: + pass ingredient_parser = IngredientParser(request, True) for ing in data['recipeIngredient']: From 78c48cc36be70be286563e83a3f27f8fb102ca5b Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 26 Oct 2021 14:52:48 +0200 Subject: [PATCH 10/39] compiled messages and added russian language to selector --- cookbook/locale/de/LC_MESSAGES/django.mo | Bin 42534 -> 43274 bytes cookbook/locale/fr/LC_MESSAGES/django.mo | Bin 47274 -> 47338 bytes cookbook/locale/hy/LC_MESSAGES/django.mo | Bin 47631 -> 47622 bytes cookbook/locale/nl/LC_MESSAGES/django.mo | Bin 60759 -> 60882 bytes cookbook/locale/pl/LC_MESSAGES/django.mo | Bin 37921 -> 37964 bytes cookbook/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 8713 bytes recipes/settings.py | 1 + 7 files changed, 1 insertion(+) create mode 100644 cookbook/locale/ru/LC_MESSAGES/django.mo diff --git a/cookbook/locale/de/LC_MESSAGES/django.mo b/cookbook/locale/de/LC_MESSAGES/django.mo index e0bb293655e6e91d72ce02abe2ba89cc2c4b742e..8dee8bac02c9dab78a29583545e1801c05e11c09 100644 GIT binary patch delta 9723 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 delta 8966 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 diff --git a/cookbook/locale/fr/LC_MESSAGES/django.mo b/cookbook/locale/fr/LC_MESSAGES/django.mo index 7456bf6c519126c56e3aa04c71858cb44883f4e3..963e5c42e0a9556c2aacd2e87e2dab5325760902 100644 GIT binary patch delta 9003 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 delta 8941 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 JP1YZc{y)LorP%-g diff --git a/cookbook/locale/hy/LC_MESSAGES/django.mo b/cookbook/locale/hy/LC_MESSAGES/django.mo index b9b8a32f9ef7d2accddef541fe1c280c04ce84fb..d66c7a0df9ee0f2e8f18ebf1e3d9a849dd3e3984 100644 GIT binary patch delta 2993 zcmXZedvwor9LMqZhLxGijLo%KLvx*38w;6Bv!vw+kz6+-x4C5&e%cVW7$U{oZ<|YF zlR4&c#Bm8Br^`tv#d4zLu+u4Z==t*b`seX^f4<+}=ks~LKcCOnmR0yKtne?IUd?yO z&um~nvm=3K&-FL!N?bmSK5RC^>@?0EX_kRKQ_U{;^KP118s@xhcA5TrEDlSObS4)7iwy=CisqGU$lFr5KGxs2^O%w)h|BVXJf&iDlRY zZ(;*{c8XazcEP4N6o+CKYNG2n4euaB+3=}mgYc`VKC@&RQ9O;uDX4|)#LjpQU&N=T zo887F?1(Wls1Ck^wJ;Ag(I(8t-Kb1^zw0V67&Xr%)cXhVX*}bjkwD`zYJh4p&9-4E zs&r-8LC;Z{Rn1^>Y>OIb1lGqXs0!p@Jnq7F_zOm2$SgC~WF1fo+k+a{S4N{TjSAER zwKFLvc0j%OCTgN_r~xy*coz;PE<-Im^gTCD1Zu*rSQk^VInKgHxDjG&0uaf8|HGe%&1W#9r7MgXX%*Bw!cf*Rc~WM{V&1 ztj+xPCyi)2{Anwr_NdHrQ43g$TJb5Yj#p3_U&j!ik-y(yo!WJc2V7ixfv#jZlx_>g!vYHM~Z zaTAxIDs&Z3;4Rbw3Uk~wK7lF3ez|VEzS`qpI)>1pl}$w5hUuOwP=}`od*WT}jIke@ zJ%j0}(l5hUKT3`|ybqSTg@!M46-&kl`iG*n+J{W=R%NJ9=Y7wAaU^l&)vokoJXc^M{YO!U`7zeQdSn-hEigjIJ&}ec z9`&TdY>{Un#?pTtpGRBcGKfRn} zeBKMW7)D&=#b>ZS@$aa;3i#9=wqOh*?uI&4DcBU#QHiWVZNXvBZ?P`%1Mhj&wH#PK z#zJ2`9voZe9X7negGZ=6zP#R*>Mn*8SJ~h)Xoia8Q4c=GE~-Rfo1F2e=L1lg4MSy=iSd|+s>o?nrLLkX_Y>-N z{Now6*(DH%s#wxyANxaNJRPb;Ix6$UsMEe3mC;4i-q{wHQ7|g*f;vnos6)+rDzVj_{?Kh^OX%<6qrm~Ti^y6mZ988=Uc8Bk#AA250Sa&w@f}RXlmhn+ z-;X1SCltEFcoB72YwU7c(*qk2k3)TD=A#zA5*MIvD-C7Xa<{9%TNq6|18d_pY>lO; zJub&)7_!Ig5+>jP4BYGfvl@Y_NZ@C#5)l|d+!`Y>1@-%>PM@uzkwV8&??Lq<_a%%) zZ9y_7U^;fjLa+Z8jwPyS^{%D+qV~Bsl8rb)cJ9NV_fOrC`LesD%Zt|X=M^*59WM`lJ z<0d}&s9Eukp%tB~#k6Y^6Wb)F{R?sJim&xc_N&w}&{jsYZCsqxfA-78XY-R9{SRjF B=_3FD delta 3001 zcmXZed2o$a7{~D^X_F!Z36VrJQlf+;B4Q~TR5grJhGNtbVjCsI8d5iw&?1(gs3n%B zQ%gc~)lwr$O$|k>wUptXsM1cUnyA*aoqm7Ln}0s%Iq$vaJyCayxmq(eM!TFhHbFk+avkQS{C$h}4uyDNDCFUPZG&@Fo zdXia9Gs~Z1wgU^X9wuj-HN+kmildO*S$4MhtUiOeOvK@8OvZB57b-Cc|HIXoIF(Id z1$M!oF&djrGmFJ^Y>FdsI4(xrs1m2+ePk)i%rP5+mvVe&84MD*+773qHnImh<9U1) ztIsg|6*I5{rp`2r$9J&~7NKsm3%6n!D$_o*Tm^=q?lTqj`J-43&-oa1WbgxOfm*Z8 zN-z>tx(aNs>!{2^=9r~mYt%xcF$$-nDo}{+uoPS4PuK+O=bEu6>xkOee$=|Y3I>fB z{E50jy}4#DVMo*l-$C7I5^BLbFD}KQ#1*KGN6vHWG(p|48`j6M*bL`k4DLkr$O&x7 z{p~!1R3`4BGLFeJYl$h?0*9kEu+)n;dY;0r%>RZgWQp(5fY=LLVd#8UnNHY+co25N zwWuTh7Q?u|{lOraiRT$BqqeBbSE4qs6}96tSPL(sGOomMypP&=K)&mZ2uvgHhhbQN z!MG8lu^1EZ3k>DEc87s7tit9Pw7@I^lW;e_jyjUxQ45AGbQ#2>HuwfAfoT|vJ1`$l zqK>TlBCkhKy;F!s@dWxbk-OMsz8AHjpaRYl3p}@>Hgp)3=|$9IcpIZIWQqHJJZb|z zRAq{>0s2uD`v!yYDmKAeOSqjD2v};yW~?FJ#A2i!Ebo0YlD5B43(Wn%Rj2@;5|^Ql zX7@68<3p$lUBy%Q3u*)Vmb=IJH1;KaZiQQKzzWi>%fxUdw6ko~(=f|(9jbZCu?IfH z&X`tc_9Et>O1}nE11LGFc^|KI8;x7#D%Kn0m>-Ec>IJBc7Wo*c*-B8QJ?MSlEXEVx zKy6H~zuNEu>al8o&$=G9;a;eckH_9P4;$mx*d6bpN}jOBHD6z>LF~(ApoJEr7T%5< z@DPr{zC~{5<)|~ij4}8R>amSl>q`74Rwo{dS}z;JaXB8rV$=qPtaFcN9uoU(Hv?sO z0hRG(RLP%WB6e7BHWwaTaRfL!M_)8~+iTVelsRy+qXK`lEVh zG}h$)w!r(qN^C$}?#1UYiueKQtg3zFnk^h_62FFOs<*Hy=AaVUfI5QXp4YKH@ni3L z$Y!%u0lW*)7s-W_TfAn&>s-)Jn9lgdHdm@A7)u;l>@r9~#p$RUjznc#fGOzr=I@}M zhLG*9ciLkX@kmsnr?*r8x(seIp)-Ae&G8AUM2&Yi(^1z)pfVee%4iX`!%e7)e21#k zEmY<1p`MPwozBLnBX|{6v3@&!y!RQ*U_zD1MP*)u>h}GpjIN=+SbdkvC>j;_L^ac3 zR3cMQ8^}jB@p9~jXE8j0N__0PKemKEW4@1%0S#=|kiFRCPsoZ7-p8)Q(>`?zl;ddP zDjb7@ce{7^G0Y^MxyLo*HB_@U*z1m_4@MK`px!fusEu#I0`!$KP==}dTm{BrGVy#2 z!!m4zCsAko0OK*HlyYNt9E9Oz?#F5(sv_b0T_qAQjyMgQ;9%7E=Q(}0gF#;=&UhCh z4!AdAXVek&$Bvkbozd^jKg0>dk)N5(#s&Bl{*6@Ij+eX2X8QT1BYuLn@$f-cxy_%e zV$^)lAr|MtdK`|m54(TCCgT+1@FVV@#)UYJ_z{NU(4(&DCSWk}OjL#PFah^?*RP-| zSc#nMvp=51XD>DL--@W}6wE OuasQb@2}XJ5%WK@rtJ6t diff --git a/cookbook/locale/nl/LC_MESSAGES/django.mo b/cookbook/locale/nl/LC_MESSAGES/django.mo index df897bf553f8e1b470d4e39a964e7e2b94eea393..19ec762183d135d65f2c04e720058ce5b385e5da 100644 GIT binary patch delta 4448 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 T?A1;d;c34%&Bv3}u`T%jOA$>D diff --git a/cookbook/locale/pl/LC_MESSAGES/django.mo b/cookbook/locale/pl/LC_MESSAGES/django.mo index e90dadc64f38b3bed4fe20f7e8e0cd2e9e545186..5d8a8c77263ad91924d801177588858f91fbc08a 100644 GIT binary patch delta 3024 zcmXZd4{*Q_mW0?K3`%TSuX7<}?+Lq3Yq_B*vT4KchU}Jt`EPgKYFAQ69 zCCcS$QF2>4hg^hfr%Oe3i74kd{c+{=Z?1a2e80Qx9-sH;`~CcTe?Fh@cC`e5+7i6q zA08+PHk(ppHmHkP>twT|W_GE>>?ZDf+H7`^S>sf*aJ>DDSpx3|O*g9`PMl#Df@^1* zozr{InuXDB=4`V{tiqo7E%v~lFaqyj2!@qe;O+}O%FMb`(I4Y56V=f;OvGYjjrTui{;WJ;b}t1_g)@P{7)d-F)!}%I!7>bD zg)1_a-X!Cz0K4HQ@uOz5EDumfBGR|BBtv7B~xtK#kKI)lUkBF}@Y3 zfD=$NdlJ=QH9m%QsD|xs{RKC^ian_R3wxr6gQE$@<4E+O`df&RxDM~ZmysK8A7Vfa zW69eHOv5sqi<;0m*GsN9TyLYUsrj8Ph{w@{8K?nkQ3I}b-HzJAy{OE!qR!euKlxXK zGgOShtGF4{Yn`n)isOlGk+TI8&`bCP?!qOg4&xU)hb{>fXJ8%Phf%l>bsLW1AiRv) znut2`uj>%U+iKV!)gTp>nLN~)7>`476Y6@Mz+QL_`(X#RW9$+qGgnaGkAG2_h*|1n zCKa`{52D5$6QH1h3Q+@>q9)=;9g?M}Yx5H7)Ne-}#yzNO_C9JQ$KB^=FopPgRKKD1 zW&<$>HIV|0#!09N1S%=?rci_0^EFtAO*j#ML>;oB&p8tqjavC+RJ(H2^JN%}ji`xk zK@IpiK9Bp|c*rv6dKMt<16D%e?uWsBP>VhqY(%Z>DCXj6jKk37P6m=t6HdcS%tmFf z9F_Wd?1x)XD{Vt%_OKft!)V?A_PYhM%cueVM0FI!Go>&Yb!~>BR#t-A!%9rVg{TZP zp$2#Z)z90g_fMcQbry9CuA}#VFFG zZa|%h-KYUtQT?1m)t`60jyXYQe_%iz``93*dKfnFU=%8~?JJ%7bEr)GfO`KHYNG$R zdK#R8VlavNbkyD#q7K_MH(rE!#H&%`9d982TFDtIl)7&)9xtLM@V9H{Rn8fSM17ij zqi%s0wFLt)1jnNKD@0|c7&VbOsP9ZYYTzxX1?^l#{yS6HPelkGa9=o#>fjU902fdz z??81FyxJKk237Axtvm%oa4hN&7h*cDz#X^`Q*qoHvxl%YK;dx;M_i-U@)aa5$6+{O z9VZ-DqdIIw)n7rrEf)WR^F`Z=gNcu$PXBM{#qjmcf6+mxg^tEhd<3UsU?K&rv=z0d zr!X16LJxMJ_Aq3FbEpzfhb;qZa13ffhp-BN$F5kq(P>|a+5$hS{|3};X?6_QZVI}; z2T&bfL#6OP?1mwYPRgQC*D4QVa0-sZY8-*BSb?{29!}jv_V6_FYjKrPA@volh8|? zhC!&GSNPMr)^;)agS-Kg(+g^5mHI2HtI|i6`e)^OvwT^Z>AtLVUye8P{#;*XnlIDm hYu;QG-!*H9*O!y)%Wi8cdN`%i$8C$-?kq`;`yXr`ug(Af delta 2983 zcmXZe4NR3)9LMoLH(mu4(eR3hkQdR!L}oTIL@j(bi85!JuK|KDnSyVrkEw{51%_#9 zI@~PDYN;%24Q-W`6-#F}Ov}+`F)IUYxNMqze?E^>KIeb#^PF@3|8vfj##-P0THoQ4 zNGHQ*_Eer(T9{eIlV&H(tbV##E0)eMD+n^nf5t2l8)up&@cj8%W<|v9bId|;);zOw znE$L<2j0spFe}C!?2Lyo20z1S{2oK_mjZL{KF~r(M>=j|Jcbv#1NFv4;s=m5+9cF~ zHJ(RN1D?e0c-Hez96}sA-z*HXa3JP*mSQIHTk{>W0F7okw1AKzvrgC*HDCb!I2?n> za4Mz{Pb0l9=wJj^d+x=2;)B=$qZhaf@M9`*5=P-z496)B4NW)`wbI476qln0zJi+Q zZ&b;`7Mk_IXw(G#P!$=BdTun{hfkv_w-#0UH*qe$kD4cD5sN{`Popc1p%{mcVKnBW z7Pbr{aU*J=O4Pz?a4H@`EzGyreLftciT$Vr_Q88`5C-EI)bkUO@f^!@8#WL1LJ2A( z2UYs*7>b9y{v+6t_;XaoXTA70Tt?iE-LU96cbped307k=)}j{l4Ms4(HPeWt<98g1 zw^12qFL7U-fXa9_s`SOE3^t<{ybZONyHIDT29>}U7==x!1TLfI`2#i1f7pTfE&h3T zpcK@~(oqAB#$23?da=gquk+#tjG_NDcE)B@rq^*4hH;QI-gxYUv#~cWL2kJ1Ku0gO z(HMa~>Q{)5pfY>cv)=Pl&qmZWZNe^i9dj_W#GP;=YQnjmOHmcrfT~;t>a10kP=BrP zZ92wa16E;hsk;@g;UwZF)E1;HcTep=+)tc~8t^*m(Ea1Zp)1T*5=UVymZ5IL>zIbe zP+N0(1@+f;xJHKtx`}$>4yrP-jG{9Uz`wL*OHh^2dm6X`mB}ve^8=VlT!$L> zBHoWzQCs4F!7Y7XRN_uHjjlAtp!R$QPR2rf9FL(6S;QK50r9BJ`=Q>;LVccxKAeYI zXaQ=%Qrv)LUL3yGy`FyLeaF&iD8n4@gYlS7JQtN&HD+QB#^Xg)1#X}gZ0q=Pfk;#Z zv#>knVoxkaWx54b*(xvIiE+CB`|dW(K15B>h#IH`Rli^-Tke_vEaIjF6e zgxzos>P)OcO;C;+XE&<<1JC0)G|22*bhM%nHb|w8!cBb89aY+W8{PhQP?e}hJ%0+d z(9@omP!nCnWb|!v6AEA)@nA2WfWwHV1Ro>aYcGbAM4uKrN^e7voo`+cD&2_x)_t7K}rUKMi$T=DRw! ziiYm*R@A@^s1lyTD7=6wSqth~#k}HX)E`F?KZ+x;9ED2!>io|E<{ymDc*x?a4N1xees<4 zKEHuU#I}QNko?)rKRs)8KgZP%t8U2iho@&G4a&&Oc(CrLys@c4rFE&RQ{w*zf7huC diff --git a/cookbook/locale/ru/LC_MESSAGES/django.mo b/cookbook/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6e90aacaa3bf539f6ecb93e6307e94d4c1a5ffa5 GIT binary patch literal 8713 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 Date: Tue, 26 Oct 2021 15:34:36 +0200 Subject: [PATCH 11/39] Fix typos in README.md an commons -> a commons payed -> paid trough -> through --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c7d2dfab8..dbd087502 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ While this application has been around for a while and is actively used by many **beta** software that has a lot of rough edges and unpolished parts. ## License -Beginning with version 0.10.0 the code in this repository is licensed under the [GNU AGPL v3](https://www.gnu.org/licenses/agpl-3.0.de.html) license with an +Beginning with version 0.10.0 the code in this repository is licensed under the [GNU AGPL v3](https://www.gnu.org/licenses/agpl-3.0.de.html) license with a [common clause](https://commonsclause.com/) selling exception. See [LICENSE.md](https://github.com/vabene1111/recipes/blob/develop/LICENSE.md) for details. > NOTE: There appears to be a whole range of legal issues with licensing anything else then the standard completely open licenses. @@ -68,8 +68,8 @@ Beginning with version 0.10.0 the code in this repository is licensed under the **This software and *all* its features are and will always be free for everyone to use and enjoy.** The reason for the selling exception is that a significant amount of time was spend over multiple years to develop this software. -A payed hosted version which will be identical in features and code base to the software offered in this repository will +A paid hosted version which will be identical in features and code base to the software offered in this repository will likely be released in the future (including all features needed to sell a hosted version as they might also be useful for personal use). -This will not only benefit me personally but also everyone who self-hosts this software as any profits made trough selling the hosted option +This will not only benefit me personally but also everyone who self-hosts this software as any profits made through selling the hosted option allow me to spend more time developing and improving the software for everyone. Selling exceptions are [approved by Richard Stallman](http://www.gnu.org/philosophy/selling-exceptions.en.html) and the common clause license is very permissive (see the [FAQ](https://commonsclause.com/)). From bb6c53bc82e0918b284533dc533f0cef7e0b2640 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 26 Oct 2021 15:45:38 +0200 Subject: [PATCH 12/39] testing with public path auto --- vue/vue.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vue/vue.config.js b/vue/vue.config.js index 689731a6d..a8156ae05 100644 --- a/vue/vue.config.js +++ b/vue/vue.config.js @@ -48,7 +48,7 @@ module.exports = { filenameHashing: false, productionSourceMap: false, publicPath: process.env.NODE_ENV === 'production' - ? '/static/vue' + ? 'auto' : 'http://localhost:8080/', outputDir: '../cookbook/static/vue/', runtimeCompiler: true, From 6a8003e90499491f6a68c0a2b780a3e8101ac16d Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 26 Oct 2021 16:03:17 +0200 Subject: [PATCH 13/39] trying relative path --- vue/vue.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vue/vue.config.js b/vue/vue.config.js index a8156ae05..8fa8a873a 100644 --- a/vue/vue.config.js +++ b/vue/vue.config.js @@ -48,7 +48,7 @@ module.exports = { filenameHashing: false, productionSourceMap: false, publicPath: process.env.NODE_ENV === 'production' - ? 'auto' + ? './static/vue' : 'http://localhost:8080/', outputDir: '../cookbook/static/vue/', runtimeCompiler: true, From 6c8843ca7497bc2f42f49ceb73d64eca9aa8f223 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 26 Oct 2021 16:24:37 +0200 Subject: [PATCH 14/39] reverted back to static public path --- vue/vue.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vue/vue.config.js b/vue/vue.config.js index 8fa8a873a..689731a6d 100644 --- a/vue/vue.config.js +++ b/vue/vue.config.js @@ -48,7 +48,7 @@ module.exports = { filenameHashing: false, productionSourceMap: false, publicPath: process.env.NODE_ENV === 'production' - ? './static/vue' + ? '/static/vue' : 'http://localhost:8080/', outputDir: '../cookbook/static/vue/', runtimeCompiler: true, From 6949e17a33a781a0b69fdb8fe5cca239c0f16fe8 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Fri, 29 Oct 2021 11:29:55 +0200 Subject: [PATCH 15/39] possibly fixed sub path hosting issues --- .env.template | 13 +++++++++---- cookbook/serializer.py | 2 ++ cookbook/templates/base.html | 1 + cookbook/templatetags/custom_tags.py | 4 +++- vue/src/apps/ChecklistView/main.js | 2 ++ vue/src/apps/CookbookView/main.js | 2 ++ vue/src/apps/ImportResponseView/main.js | 2 ++ vue/src/apps/MealPlanView/main.js | 2 ++ vue/src/apps/ModelListView/main.js | 2 ++ vue/src/apps/OfflineView/main.js | 2 ++ vue/src/apps/RecipeEditView/main.js | 2 ++ vue/src/apps/RecipeSearchView/main.js | 2 ++ vue/src/apps/RecipeView/main.js | 2 ++ vue/src/apps/SupermarketView/main.js | 2 ++ vue/vue.config.js | 2 +- 15 files changed, 36 insertions(+), 6 deletions(-) diff --git a/.env.template b/.env.template index 6fba0dd78..36c2357d5 100644 --- a/.env.template +++ b/.env.template @@ -41,10 +41,17 @@ SHOPPING_MIN_AUTOSYNC_INTERVAL=5 # Default for user setting sticky navbar # STICKY_NAV_PREF_DEFAULT=1 -# If staticfiles are stored at a different location uncomment and change accordingly +# If base URL is something other than just / (you are serving a subfolder in your proxy for instance http://recipe_app/recipes/) +# SCRIPT_NAME=/recipes + +# If staticfiles are stored at a different location uncomment and change accordingly, MUST END IN / +# this is not required if you are just using a subfolder +# This can either be a relative path from the applications base path or the url of an external host # STATIC_URL=/static/ -# If mediafiles are stored at a different location uncomment and change accordingly +# If mediafiles are stored at a different location uncomment and change accordingly, MUST END IN / +# this is not required if you are just using a subfolder +# This can either be a relative path from the applications base path or the url of an external host # MEDIA_URL=/media/ # Serve mediafiles directly using gunicorn. Basically everyone recommends not doing this. Please use any of the examples @@ -79,8 +86,6 @@ GUNICORN_MEDIA=0 # when unset: 0 (false) REVERSE_PROXY_AUTH=0 -# If base URL is something other than just / (you are serving a subfolder in your proxy for instance http://recipe_app/recipes/) -# SCRIPT_NAME=/recipes # Default settings for spaces, apply per space and can be changed in the admin view # SPACE_DEFAULT_MAX_RECIPES=0 # 0=unlimited recipes # SPACE_DEFAULT_MAX_USERS=0 # 0=unlimited users per space diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 27104ce90..dab9ebc02 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -38,6 +38,8 @@ class ExtendedRecipeMixin(serializers.ModelSerializer): return fields except AttributeError: pass + except KeyError: + pass del fields['image'] del fields['numrecipe'] return fields diff --git a/cookbook/templates/base.html b/cookbook/templates/base.html index 1976ef331..6d7b04132 100644 --- a/cookbook/templates/base.html +++ b/cookbook/templates/base.html @@ -344,6 +344,7 @@ - - - - - - {% endblock %} -{% block content %} -
- - -
-
- - - - - - - - - - - - - - -
- [[formatDateDayname(d)]]
[[formatDateDay(d)]]. - -
- [[ meal_plan[t.name].name]] - -
- - - -
-
-
- -
-
- {% trans 'New Entry' %} -
-
-
- -
-
-
-
- -
- -
-
-
-
- -
- - [[element.name]] - - [[element.servings]] -
-
-
-
-
-
-
- - - {% trans 'You can use markdown to format this field. See the docs here' %} -
-
- -
- -
- {% trans 'Create only note' %} -
-
-
- -
-
-
-
- -
-
-
-
-
- {% trans 'Shopping List' %} -
- -
- - -
-
-
-
-
-
- {% trans 'Plan' %} -
- -
-
-
- -
- -
-
-
- -
- -
- - - {% trans 'Edit plan types' %}
- {% trans 'Show help' %}
- {% trans 'Week iCal export' %} -
-
-
-
- -
-
- - - - - - - -
- - +{% block script %} + {% if debug %} + + {% else %} + + {% endif %} + + {% render_bundle 'meal_plan_view' %} {% endblock %} \ No newline at end of file diff --git a/cookbook/urls.py b/cookbook/urls.py index 80537c8d0..5ed5b825e 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -58,7 +58,6 @@ urlpatterns = [ path('search/v2/', views.search_v2, name='view_search_v2'), path('books/', views.books, name='view_books'), path('plan/', views.meal_plan, name='view_plan'), - path('plan_new/', views.meal_plan_new, name='view_plan_new'), path('plan/entry/', views.meal_plan_entry, name='view_plan_entry'), path('shopping/', views.shopping_list, name='view_shopping'), path('shopping/', views.shopping_list, name='view_shopping'), diff --git a/cookbook/views/views.py b/cookbook/views/views.py index 0ccd54612..6ef53bf6e 100644 --- a/cookbook/views/views.py +++ b/cookbook/views/views.py @@ -220,11 +220,6 @@ def meal_plan(request): return render(request, 'meal_plan.html', {}) -@group_required('user') -def meal_plan_new(request): - return render(request, 'meal_plan_new.html', {}) - - @group_required('user') def supermarket(request): return render(request, 'supermarket.html', {}) @@ -343,10 +338,13 @@ def user_settings(request): if fields_searched == 0: search_form.add_error(None, _('You must select at least one field to search!')) search_error = True - elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len(search_form.cleaned_data['fulltext']) == 0: - search_form.add_error('search', _('To use this search method you must select at least one full text search field!')) + elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len( + search_form.cleaned_data['fulltext']) == 0: + search_form.add_error('search', + _('To use this search method you must select at least one full text search field!')) search_error = True - elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len(search_form.cleaned_data['trigram']) > 0: + elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len( + search_form.cleaned_data['trigram']) > 0: search_form.add_error(None, _('Fuzzy search is not compatible with this search method!')) search_error = True else: @@ -385,7 +383,8 @@ def user_settings(request): else: preference_form = UserPreferenceForm() - fields_searched = len(sp.icontains.all()) + len(sp.istartswith.all()) + len(sp.trigram.all()) + len(sp.fulltext.all()) + fields_searched = len(sp.icontains.all()) + len(sp.istartswith.all()) + len(sp.trigram.all()) + len( + sp.fulltext.all()) if sp and not search_error and fields_searched > 0: search_form = SearchPreferenceForm(instance=sp) elif not search_error: @@ -395,7 +394,8 @@ def user_settings(request): api_token = Token.objects.create(user=request.user) # these fields require postgress - just disable them if postgress isn't available - if not settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']: + if not settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', + 'django.db.backends.postgresql']: search_form.fields['search'].disabled = True search_form.fields['lookup'].disabled = True search_form.fields['trigram'].disabled = True diff --git a/docs/index.md b/docs/index.md index 595a96a2c..6e3504ba3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,72 +1,79 @@


- +
Tandoor Recipes

-

This is my personal beta of vabene's excellent recipe app. It includes many of the new features I've developed and should be considered experimental.

-## Experimental Features -- Manual import recipes from URL & Source (HTML/JSON) -- Bookmarklet to import recipes from any website -- Full Text Search -- Hierarchical Keywords - -## Coming Next -- Heirarchical Ingredients -- Faceted Search -- Search filter by rating -- What Can I Make Now? -- Better ingredient/unit matching on import -- Custom word replacement on import (e.g. 'grams' automatically imported as 'g') -- improved ingredient parser (items in parens moved to notes) -- quick view ingredients -- quick view associated recipe -- favorite recipes -

The recipe manager that allows you to manage your ever growing collection of digital recipes.

- - - - - - + + + + + + +

-Installation • -Documentation • -Demo +Website • +Installation • +Docs • +Demo • +Discord

![Preview](preview.png) -!!! info "WIP" - The documentation is work in progress. New information will be added over time. - Feel free to open pull requests to enhance the documentation. +## Core Features +- 🥗 **Manage your recipes** - Manage your ever growing recipe collection +- 📆 **Plan** - multiple meals for each day +- 🛒 **Shopping lists** - via the meal plan or straight from recipes +- 📚 **Cookbooks** - collect recipes into books +- 👪 **Share and collaborate** on recipes with friends and family -## Features +## Made by and for power users -- 📦 **Sync** files with Dropbox and Nextcloud (more can easily be added) -- 🔍 Powerful **search** with Djangos [TrigramSimilarity](https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/search/#trigram-similarity) +- 🔍 Powerful & customizable **search** with fulltext support and [TrigramSimilarity](https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/search/#trigram-similarity) - 🏷️ Create and search for **tags**, assign them in batch to all files matching certain filters -- 📄 **Create recipes** locally within a nice, standardized web interface -- ⬇️ **Import recipes** from thousands of websites supporting [ld+json or microdata](https://schema.org/Recipe) -- 📱 Optimized for use on **mobile** devices like phones and tablets -- 🛒 Generate **shopping** lists from recipes -- 📆 Create a **Plan** on what to eat when -- 👪 **Share** recipes with friends and comment on them to suggest or remember changes you made -- ➗ automatically convert decimal units to **fractions** for those who like this -- 🐳 Easy setup with **Docker** and included examples for Kubernetes, Unraid and Synology +- ↔️ Quickly merge and rename ingredients, tags and units +- 📥️ **Import recipes** from thousands of websites supporting [ld+json or microdata](https://schema.org/Recipe) +- ➗ Support for **fractions** or decimals +- 🐳 Easy setup with **Docker** and included examples for **Kubernetes**, **Unraid** and **Synology** - 🎨 Customize your interface with **themes** -- ✉️ Export and import recipes from other users +- 📦 **Sync** files with Dropbox and Nextcloud + +## All the must haves + +- 📱Optimized for use on **mobile** devices - 🌍 localized in many languages thanks to the awesome community -- ➕ Many more like recipe scaling, image compression, cookbooks, printing views, ... +- 📥️ **Import your collection** from many other [recipe managers](https://docs.tandoor.dev/features/import_export/) +- ➕ Many more like recipe scaling, image compression, printing views and supermarkets +This application is meant for people with a collection of recipes they want to share with family and friends or simply +store them in a nicely organized way. A basic permission system exists but this application is not meant to be run as +a public page. +## Your Feedback + +Share some information on how you use Tandoor to help me improve the application [Google Survey](https://forms.gle/qNfLK2tWTeWHe9Qd7) + +## Get in touch + + + + + + + + + + + +
DiscordWe have a public Discord server that anyone can join. This is where all our developers and contributors hang out and where we make announcements
TwitterYou can follow our Twitter account to get updates on new features or releases
## Roadmap This application has been under rapid development over the last year. diff --git a/vue/src/apps/CookbookView/CookbookView.vue b/vue/src/apps/CookbookView/CookbookView.vue index 32284f604..30949d5e7 100644 --- a/vue/src/apps/CookbookView/CookbookView.vue +++ b/vue/src/apps/CookbookView/CookbookView.vue @@ -61,10 +61,10 @@ import Vue from 'vue' import {BootstrapVue} from 'bootstrap-vue' import 'bootstrap-vue/dist/bootstrap-vue.css' -import {ApiApiFactory} from "../../utils/openapi/api"; -import CookbookSlider from "../../components/CookbookSlider"; -import LoadingSpinner from "../../components/LoadingSpinner"; -import {StandardToasts} from "../../utils/utils"; +import {ApiApiFactory} from "@/utils/openapi/api"; +import CookbookSlider from "@/components/CookbookSlider"; +import LoadingSpinner from "@/components/LoadingSpinner"; +import {StandardToasts} from "@/utils/utils"; Vue.use(BootstrapVue) diff --git a/vue/src/apps/MealPlanView/MealPlanView.vue b/vue/src/apps/MealPlanView/MealPlanView.vue index e11dbb944..d436e3592 100644 --- a/vue/src/apps/MealPlanView/MealPlanView.vue +++ b/vue/src/apps/MealPlanView/MealPlanView.vue @@ -231,22 +231,24 @@