import improvements

This commit is contained in:
vabene1111
2025-03-20 18:26:28 +01:00
parent 73c376427c
commit 5f190bdc6c
33 changed files with 82 additions and 3 deletions

View File

@@ -1807,7 +1807,8 @@ class RecipeUrlImportView(APIView):
if scrape: if scrape:
response['recipe'] = helper.get_from_scraper(scrape, request) response['recipe'] = helper.get_from_scraper(scrape, request)
response['images'] = list(dict.fromkeys(get_images_from_soup(scrape.soup, url))) response['images'] = list(dict.fromkeys(get_images_from_soup(scrape.soup, url)))
response['duplicates'] = Recipe.objects.filter(space=request.space, source_url=url).values('id', 'name').all() if url and url.strip() != '':
response['duplicates'] = Recipe.objects.filter(space=request.space, source_url=url.strip()).values('id', 'name').all()
return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_200_OK) return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_200_OK)
else: else:

View File

@@ -324,6 +324,8 @@
"Size": "", "Size": "",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "", "Sort_by_new": "",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -317,6 +317,8 @@
"Size": "Размер", "Size": "Размер",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Сортиране по ново", "Sort_by_new": "Сортиране по ново",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -401,6 +401,8 @@
"Size": "", "Size": "",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Ordenar a partir del més nou", "Sort_by_new": "Ordenar a partir del més nou",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -397,6 +397,8 @@
"Size": "Velikost", "Size": "Velikost",
"Social_Authentication": "Přihlašování pomocí účtů sociálních sítí", "Social_Authentication": "Přihlašování pomocí účtů sociálních sítí",
"Sort_by_new": "Seřadit od nejnovějšího", "Sort_by_new": "Seřadit od nejnovějšího",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -376,6 +376,8 @@
"Size": "Størrelse", "Size": "Størrelse",
"Social_Authentication": "Social authenticering", "Social_Authentication": "Social authenticering",
"Sort_by_new": "Sorter efter nylige", "Sort_by_new": "Sorter efter nylige",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -405,6 +405,8 @@
"Size": "Größe", "Size": "Größe",
"Social_Authentication": "Login über Drittanbieter", "Social_Authentication": "Login über Drittanbieter",
"Sort_by_new": "Nach Neueste sortieren", "Sort_by_new": "Nach Neueste sortieren",
"SourceImportHelp": "Importiere JSON im schema.org/recipe format oder eine HTML Seite mit json+ld Rezept bzw. microdata.",
"SourceImportSubtitle": "Importiere JSON oder HTML manuell.",
"SpaceLimitExceeded": "Dein Space hat ein Limit überschritten, manche Funktionen wurden eingeschränkt.", "SpaceLimitExceeded": "Dein Space hat ein Limit überschritten, manche Funktionen wurden eingeschränkt.",
"SpaceLimitReached": "Dieser Space hat ein Limit erreicht. Es können keine neuen Objekte von diesem Typ angelegt werden.", "SpaceLimitReached": "Dieser Space hat ein Limit erreicht. Es können keine neuen Objekte von diesem Typ angelegt werden.",
"SpaceMemberHelp": "Füge Benutzer hinzu indem du Einladungen erstellst und Sie an die gewünschte Person sendest.", "SpaceMemberHelp": "Füge Benutzer hinzu indem du Einladungen erstellst und Sie an die gewünschte Person sendest.",

View File

@@ -368,6 +368,8 @@
"Size": "Μέγεθος", "Size": "Μέγεθος",
"Social_Authentication": "Ταυτοποίηση μέσω κοινωνικών δικτύων", "Social_Authentication": "Ταυτοποίηση μέσω κοινωνικών δικτύων",
"Sort_by_new": "Ταξινόμηση κατά νέο", "Sort_by_new": "Ταξινόμηση κατά νέο",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -403,6 +403,8 @@
"Size": "Size", "Size": "Size",
"Social_Authentication": "Social Authentication", "Social_Authentication": "Social Authentication",
"Sort_by_new": "Sort by new", "Sort_by_new": "Sort by new",
"SourceImportHelp": "Import JSON in schema.org/recipe format or html pages with json+ld recipe or microdata.",
"SourceImportSubtitle": "Import JSON or HTML manually.",
"SpaceLimitExceeded": "Your space has surpassed one of its limits, some functions might be restricted.", "SpaceLimitExceeded": "Your space has surpassed one of its limits, some functions might be restricted.",
"SpaceLimitReached": "This Space has reached a limit. No more objects of this type can be created.", "SpaceLimitReached": "This Space has reached a limit. No more objects of this type can be created.",
"SpaceMemberHelp": "Add users to your space by creating an Invite Link and sending it to the person you want to add.", "SpaceMemberHelp": "Add users to your space by creating an Invite Link and sending it to the person you want to add.",

View File

@@ -400,6 +400,8 @@
"Size": "Tamaño", "Size": "Tamaño",
"Social_Authentication": "Autenticación Social", "Social_Authentication": "Autenticación Social",
"Sort_by_new": "Ordenar por novedades", "Sort_by_new": "Ordenar por novedades",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -246,6 +246,8 @@
"Size": "Koko", "Size": "Koko",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Lajittele uusien mukaan", "Sort_by_new": "Lajittele uusien mukaan",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -401,6 +401,8 @@
"Size": "Taille", "Size": "Taille",
"Social_Authentication": "Authentification Sociale", "Social_Authentication": "Authentification Sociale",
"Sort_by_new": "Trier par nouveautés", "Sort_by_new": "Trier par nouveautés",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -402,6 +402,8 @@
"Size": "גודל", "Size": "גודל",
"Social_Authentication": "אימות חברתי", "Social_Authentication": "אימות חברתי",
"Sort_by_new": "סדר ע\"י חדש", "Sort_by_new": "סדר ע\"י חדש",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -370,6 +370,8 @@
"Size": "Méret", "Size": "Méret",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Rendezés legújabbak szerint", "Sort_by_new": "Rendezés legújabbak szerint",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -187,6 +187,8 @@
"Size": "", "Size": "",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Տեսակավորել ըստ նորերի", "Sort_by_new": "Տեսակավորել ըստ նորերի",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -346,6 +346,8 @@
"Size": "Ukuran", "Size": "Ukuran",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Urutkan berdasarkan baru", "Sort_by_new": "Urutkan berdasarkan baru",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -400,6 +400,8 @@
"Size": "", "Size": "",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "", "Sort_by_new": "",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -354,6 +354,8 @@
"Size": "Dimensione", "Size": "Dimensione",
"Social_Authentication": "Autenticazione social", "Social_Authentication": "Autenticazione social",
"Sort_by_new": "Prima i nuovi", "Sort_by_new": "Prima i nuovi",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -374,6 +374,8 @@
"Size": "", "Size": "",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Rūšiuoti pagal naujumą", "Sort_by_new": "Rūšiuoti pagal naujumą",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -366,6 +366,8 @@
"Size": "Størrelse", "Size": "Størrelse",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Sorter etter nyest", "Sort_by_new": "Sorter etter nyest",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -370,6 +370,8 @@
"Size": "Grootte", "Size": "Grootte",
"Social_Authentication": "Authenticeren met sociale media-account", "Social_Authentication": "Authenticeren met sociale media-account",
"Sort_by_new": "Sorteer op nieuw", "Sort_by_new": "Sorteer op nieuw",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -403,6 +403,8 @@
"Size": "Rozmiar", "Size": "Rozmiar",
"Social_Authentication": "Uwierzytelnianie społecznościowe", "Social_Authentication": "Uwierzytelnianie społecznościowe",
"Sort_by_new": "Sortuj według nowych", "Sort_by_new": "Sortuj według nowych",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -311,6 +311,8 @@
"Size": "Tamanho", "Size": "Tamanho",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Ordenar por mais recente", "Sort_by_new": "Ordenar por mais recente",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -388,6 +388,8 @@
"Size": "Tamanho", "Size": "Tamanho",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Ordenar por novos", "Sort_by_new": "Ordenar por novos",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -358,6 +358,8 @@
"Size": "Marime", "Size": "Marime",
"Social_Authentication": "Autentificare socială", "Social_Authentication": "Autentificare socială",
"Sort_by_new": "Sortare după nou", "Sort_by_new": "Sortare după nou",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -296,6 +296,8 @@
"Size": "Размер", "Size": "Размер",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Сортировка по новизне", "Sort_by_new": "Сортировка по новизне",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -286,6 +286,8 @@
"Size": "Velikost", "Size": "Velikost",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "Razvrsti po novih", "Sort_by_new": "Razvrsti po novih",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -403,6 +403,8 @@
"Size": "Storlek", "Size": "Storlek",
"Social_Authentication": "Social autentisering", "Social_Authentication": "Social autentisering",
"Sort_by_new": "Sortera efter ny", "Sort_by_new": "Sortera efter ny",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -402,6 +402,8 @@
"Size": "Boyut", "Size": "Boyut",
"Social_Authentication": "Sosyal Kimlik Doğrulama", "Social_Authentication": "Sosyal Kimlik Doğrulama",
"Sort_by_new": "Yeniye göre sırala", "Sort_by_new": "Yeniye göre sırala",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -332,6 +332,8 @@
"Size": "Розмір", "Size": "Розмір",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "", "Sort_by_new": "",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -396,6 +396,8 @@
"Size": "大小", "Size": "大小",
"Social_Authentication": "社交认证", "Social_Authentication": "社交认证",
"Sort_by_new": "按新旧排序", "Sort_by_new": "按新旧排序",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -157,6 +157,8 @@
"Size": "", "Size": "",
"Social_Authentication": "", "Social_Authentication": "",
"Sort_by_new": "按最新排序", "Sort_by_new": "按最新排序",
"SourceImportHelp": "",
"SourceImportSubtitle": "",
"SpaceLimitExceeded": "", "SpaceLimitExceeded": "",
"SpaceLimitReached": "", "SpaceLimitReached": "",
"SpaceMemberHelp": "", "SpaceMemberHelp": "",

View File

@@ -10,7 +10,7 @@
<v-stepper-item :title="$t('Type')" value="type" icon=" "></v-stepper-item> <v-stepper-item :title="$t('Type')" value="type" icon=" "></v-stepper-item>
<v-divider></v-divider> <v-divider></v-divider>
<template v-if="['url','ai'].includes(importType)"> <template v-if="['url','ai', 'source'].includes(importType)">
<v-stepper-item :title="$t('Import')" value="url" icon=" "></v-stepper-item> <v-stepper-item :title="$t('Import')" value="url" icon=" "></v-stepper-item>
<v-divider></v-divider> <v-divider></v-divider>
<template v-if="importResponse.duplicates && importResponse.duplicates.length > 0"> <template v-if="importResponse.duplicates && importResponse.duplicates.length > 0">
@@ -86,13 +86,24 @@
@click="importType = 'bookmarklet'"> @click="importType = 'bookmarklet'">
</v-card> </v-card>
</v-col> </v-col>
<v-col cols="12" md="6">
<v-card
title="JSON/HTML"
:subtitle="$t('SourceImportSubtitle')"
prepend-icon="fa-solid fa-code"
variant="outlined"
:color="(importType == 'source') ? 'primary' : ''"
elevation="1"
@click="importType = 'source'">
</v-card>
</v-col>
</v-row> </v-row>
<v-stepper-actions> <v-stepper-actions>
<template #prev> <template #prev>
<v-spacer></v-spacer> <v-spacer></v-spacer>
</template> </template>
<template #next> <template #next>
<v-btn @click="stepper = 'url'" v-if="['url','ai'].includes(importType)">{{ $t('Next') }}</v-btn> <v-btn @click="stepper = 'url'" v-if="['url','ai', 'source'].includes(importType)">{{ $t('Next') }}</v-btn>
<v-btn @click="stepper = 'app'" v-if="importType == 'app'">{{ $t('Next') }}</v-btn> <v-btn @click="stepper = 'app'" v-if="importType == 'app'">{{ $t('Next') }}</v-btn>
<v-btn @click="stepper = 'bookmarklet'" v-if="importType == 'bookmarklet'">{{ $t('Next') }}</v-btn> <v-btn @click="stepper = 'bookmarklet'" v-if="importType == 'bookmarklet'">{{ $t('Next') }}</v-btn>
</template> </template>
@@ -108,12 +119,15 @@
<v-file-input v-model="image" :label="$t('Image')" v-if="importType == 'ai'" :loading="loading"></v-file-input> <v-file-input v-model="image" :label="$t('Image')" v-if="importType == 'ai'" :loading="loading"></v-file-input>
<v-textarea v-model="sourceImportText" label="JSON/HTML" :loading="loading" v-if="importType == 'source'" :hint="$t('SourceImportHelp')" persistent-hint></v-textarea>
<v-stepper-actions> <v-stepper-actions>
<template #prev> <template #prev>
<v-btn @click="stepper = 'type'">{{ $t('Back') }}</v-btn> <v-btn @click="stepper = 'type'">{{ $t('Back') }}</v-btn>
</template> </template>
<template #next> <template #next>
<v-btn @click="loadRecipeFromUrl({url: importUrl})" v-if="importType == 'url'" :disabled="importUrl == ''" :loading="loading">{{ $t('Load') }}</v-btn> <v-btn @click="loadRecipeFromUrl({url: importUrl})" v-if="importType == 'url'" :disabled="importUrl == ''" :loading="loading">{{ $t('Load') }}</v-btn>
<v-btn @click="loadRecipeFromUrl({data: sourceImportText})" v-if="importType == 'source'" :disabled="sourceImportText == ''" :loading="loading">{{ $t('Load') }}</v-btn>
<v-btn @click="uploadAndConvertImage()" v-if="importType == 'ai'" :disabled="image == null" :loading="loading">{{ $t('Load') }}</v-btn> <v-btn @click="uploadAndConvertImage()" v-if="importType == 'ai'" :disabled="image == null" :loading="loading">{{ $t('Load') }}</v-btn>
</template> </template>
</v-stepper-actions> </v-stepper-actions>
@@ -445,8 +459,10 @@ const importApp = ref('DEFAULT')
const stepper = ref("type") const stepper = ref("type")
const dialog = ref(false) const dialog = ref(false)
const loading = ref(false) const loading = ref(false)
const importUrl = ref("") const importUrl = ref("")
const sourceImportText = ref("")
const appImportFiles = ref<File[]>([]) const appImportFiles = ref<File[]>([])
const appImportDuplicates = ref(false) const appImportDuplicates = ref(false)
const appImportLog = ref<null | ImportLog>(null) const appImportLog = ref<null | ImportLog>(null)