Recipe editor improvements

This commit is contained in:
vabene1111
2025-05-14 06:49:29 +02:00
parent 086272f103
commit 1d9de9bae2
37 changed files with 62 additions and 29 deletions

View File

@@ -7,24 +7,28 @@
<v-closable-card-title :title="$t('Move')" v-model="dialog" <v-closable-card-title :title="$t('Move')" v-model="dialog"
:sub-title="ingredientToString(step.ingredients[editingIngredientIndex])"></v-closable-card-title> :sub-title="ingredientToString(step.ingredients[editingIngredientIndex])"></v-closable-card-title>
<v-card-text> <v-card-text>
<v-btn block :disabled="editingIngredientIndex== 0" @click="moveIngredient(editingIngredientIndex, props.stepIndex, 0)">{{ $t('First') }}</v-btn> <template v-if="step.ingredients.length > 1">
<v-btn block :disabled="editingIngredientIndex == 0" class="mt-1" @click="moveIngredient(editingIngredientIndex, props.stepIndex, editingIngredientIndex - 1)">{{ <v-btn block :disabled="editingIngredientIndex== 0" @click="moveIngredient(editingIngredientIndex, props.stepIndex, 0)">{{ $t('First') }}</v-btn>
$t('Up') <v-btn block :disabled="editingIngredientIndex == 0" class="mt-1" @click="moveIngredient(editingIngredientIndex, props.stepIndex, editingIngredientIndex - 1)">
}} {{
</v-btn> $t('Up')
<v-btn block :disabled="editingIngredientIndex + 1 == step.ingredients.length" class="mt-1" }}
@click="moveIngredient(editingIngredientIndex, props.stepIndex, editingIngredientIndex + 1)"> {{ $t('Down') }} </v-btn>
</v-btn> <v-btn block :disabled="editingIngredientIndex + 1 == step.ingredients.length" class="mt-1"
<v-btn block :disabled="editingIngredientIndex + 1 == step.ingredients.length" class="mt-1" @click="moveIngredient(editingIngredientIndex, props.stepIndex, editingIngredientIndex + 1)"> {{ $t('Down') }}
@click="moveIngredient(editingIngredientIndex, props.stepIndex, step.ingredients.length - 1)">{{ $t('Last') }} </v-btn>
</v-btn> <v-btn block :disabled="editingIngredientIndex + 1 == step.ingredients.length" class="mt-1"
@click="moveIngredient(editingIngredientIndex, props.stepIndex, step.ingredients.length - 1)">{{ $t('Last') }}
</v-btn>
</template>
{{ $t('Step') }} {{ $t('Step') }}
<v-btn block v-for="(s,i) in recipe.steps" :disabled="i == props.stepIndex" class="mt-1" <v-btn block v-for="(s,i) in recipe.steps" :disabled="i == props.stepIndex" class="mt-1"
@click="moveIngredient(editingIngredientIndex, i, recipe.steps[i].ingredients.length)">{{ i + 1 }} <span v-if="'name' in s">{{ s.name }}</span> @click="moveIngredient(editingIngredientIndex, i, recipe.steps[i].ingredients.length)">{{ i + 1 }} <span v-if="'name' in s">{{ s.name }}</span>
</v-btn> </v-btn>
</v-card-text> </v-card-text>
<v-card-actions> <v-card-actions>
<v-btn @click="dialog = false">{{$t('Close')}}</v-btn> <v-btn @click="dialog = false">{{ $t('Close') }}</v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@@ -39,8 +43,8 @@ import {ref, watch} from "vue";
import {useDisplay} from "vuetify/framework"; import {useDisplay} from "vuetify/framework";
const dialog = defineModel<Boolean>({required: true, default: false}) const dialog = defineModel<Boolean>({required: true, default: false})
const step = defineModel<Step|SourceImportStep>('step', {required: true}) const step = defineModel<Step | SourceImportStep>('step', {required: true})
const recipe = defineModel<Recipe|SourceImportRecipe>('recipe', {required: true}) const recipe = defineModel<Recipe | SourceImportRecipe>('recipe', {required: true})
const props = defineProps({ const props = defineProps({
stepIndex: {type: Number, required: true}, stepIndex: {type: Number, required: true},
ingredientIndex: {type: Number, required: true}, ingredientIndex: {type: Number, required: true},

View File

@@ -91,7 +91,10 @@
$t('Move') $t('Move')
}} }}
</v-list-item> </v-list-item>
<v-list-item v-if="ingredient.originalText" prepend-icon="$import">
<v-list-item-title>{{$t('Original_Text')}}</v-list-item-title>
<v-list-item-subtitle>{{ ingredient.originalText}}</v-list-item-subtitle>
</v-list-item>
</v-list> </v-list>
</v-menu> </v-menu>
</v-btn> </v-btn>
@@ -178,6 +181,7 @@
<v-closable-card-title :title="$t('Ingredient Editor')" v-model="dialogIngredientEditor"></v-closable-card-title> <v-closable-card-title :title="$t('Ingredient Editor')" v-model="dialogIngredientEditor"></v-closable-card-title>
<v-card-text> <v-card-text>
<v-form> <v-form>
<v-text-field :label="$t('Original_Text')" readonly v-model="step.ingredients[editingIngredientIndex].originalText" v-if="step.ingredients[editingIngredientIndex].originalText"></v-text-field>
<v-number-input v-model="step.ingredients[editingIngredientIndex].amount" inset control-variant="stacked" autofocus :label="$t('Amount')" <v-number-input v-model="step.ingredients[editingIngredientIndex].amount" inset control-variant="stacked" autofocus :label="$t('Amount')"
:min="0" :precision="2" v-if="!step.ingredients[editingIngredientIndex].isHeader"></v-number-input> :min="0" :precision="2" v-if="!step.ingredients[editingIngredientIndex].isHeader"></v-number-input>
<model-select model="Unit" v-model="step.ingredients[editingIngredientIndex].unit" :label="$t('Unit')" v-if="!step.ingredients[editingIngredientIndex].isHeader" <model-select model="Unit" v-model="step.ingredients[editingIngredientIndex].unit" :label="$t('Unit')" v-if="!step.ingredients[editingIngredientIndex].isHeader"

View File

@@ -1,8 +1,8 @@
<template> <template>
<v-card :loading="loading"> <v-card :loading="loading">
<v-closable-card-title <v-closable-card-title
:title="$t(modelClass.model.localizationKey) + ((isChanged) ? '*' : '')" :sub-title="$t(modelClass.model.localizationKey) + ((isChanged) ? ` (${$t('unsaved')})` : '')"
:sub-title="objectName" :title="objectName"
:icon="modelClass.model.icon" :icon="modelClass.model.icon"
@close="closeDialog()" @close="closeDialog()"
:hide-close="!dialog" :hide-close="!dialog"

View File

@@ -15,7 +15,7 @@
<v-tab value="recipe">{{ $t('Recipe') }}</v-tab> <v-tab value="recipe">{{ $t('Recipe') }}</v-tab>
<v-tab value="steps">{{ $t('Steps') }}</v-tab> <v-tab value="steps">{{ $t('Steps') }}</v-tab>
<v-tab value="properties">{{ $t('Properties') }}</v-tab> <v-tab value="properties">{{ $t('Properties') }}</v-tab>
<v-tab value="settings">{{ $t('Settings') }}</v-tab> <v-tab value="settings">{{ $t('Miscellaneous') }}</v-tab>
</v-tabs> </v-tabs>
</v-card-text> </v-card-text>
<v-card-text v-if="!isSpaceAtRecipeLimit(useUserPreferenceStore().activeSpace)"> <v-card-text v-if="!isSpaceAtRecipeLimit(useUserPreferenceStore().activeSpace)">
@@ -24,7 +24,7 @@
<v-form :disabled="loading || fileApiLoading"> <v-form :disabled="loading || fileApiLoading">
<v-text-field :label="$t('Name')" v-model="editingObj.name"></v-text-field> <v-text-field :label="$t('Name')" v-model="editingObj.name"></v-text-field>
<v-textarea :label="$t('Description')" v-model="editingObj.description" clearable counter="512" rows="2"></v-textarea> <v-textarea :label="$t('Description')" v-model="editingObj.description" clearable counter="512" rows="2" auto-grow></v-textarea>
<v-row> <v-row>
<v-col cols="12" md="6"> <v-col cols="12" md="6">
@@ -99,9 +99,9 @@
v-model="editingObj.showIngredientOverview"></v-checkbox> v-model="editingObj.showIngredientOverview"></v-checkbox>
<v-text-field :label="$t('Imported_From')" v-model="editingObj.sourceUrl"></v-text-field> <v-text-field :label="$t('Imported_From')" v-model="editingObj.sourceUrl"></v-text-field>
<v-checkbox :label="$t('Private_Recipe')" :hint="$t('Private_Recipe_Help')" persistent-hint v-model="editingObj._private"></v-checkbox> <v-checkbox :label="$t('Private_Recipe')" persistent-hint v-model="editingObj._private"></v-checkbox>
<model-select mode="tags" model="User" :label="$t('Private_Recipe')" :hint="$t('Private_Recipe_Help')" persistent-hint v-model="editingObj.shared" <model-select mode="tags" model="User" :label="$t('Private_Recipe')" :hint="$t('Private_Recipe_Help')" persistent-hint v-model="editingObj.shared"
append-to-body></model-select> append-to-body v-if="editingObj._private"></model-select>
</v-form> </v-form>
</v-tabs-window-item> </v-tabs-window-item>

View File

@@ -153,9 +153,8 @@ export function useModelEditorFunctions<T>(modelName: EditorSupportedModels, emi
let name = '' let name = ''
if (editingObj.value.id) { if (editingObj.value.id) {
name = modelClass.value.getLabel(editingObj.value, useUserPreferenceStore().serverSettings.debug) name = modelClass.value.getLabel(editingObj.value)
} }
if (name == '') { if (name == '') {

View File

@@ -578,6 +578,7 @@
"today_recipes": "", "today_recipes": "",
"tree_root": "", "tree_root": "",
"tree_select": "", "tree_select": "",
"unsaved": "",
"updatedon": "", "updatedon": "",
"view_recipe": "", "view_recipe": "",
"warning_duplicate_filter": "", "warning_duplicate_filter": "",

View File

@@ -565,6 +565,7 @@
"today_recipes": "Днешните рецепти", "today_recipes": "Днешните рецепти",
"tree_root": "Корен на дървото", "tree_root": "Корен на дървото",
"tree_select": "Използвайте Избор на дърво", "tree_select": "Използвайте Избор на дърво",
"unsaved": "",
"updatedon": "Актуализирано на", "updatedon": "Актуализирано на",
"view_recipe": "Вижте рецепта", "view_recipe": "Вижте рецепта",
"warning_duplicate_filter": "Предупреждение: Поради технически ограничения наличието на множество филтри от една и съща комбинация (и/или/не) може да доведе до неочаквани резултати.", "warning_duplicate_filter": "Предупреждение: Поради технически ограничения наличието на множество филтри от една и съща комбинация (и/или/не) може да доведе до неочаквани резултати.",

View File

@@ -708,6 +708,7 @@
"tree_root": "", "tree_root": "",
"tree_select": "", "tree_select": "",
"tsp": "", "tsp": "",
"unsaved": "",
"updatedon": "", "updatedon": "",
"view_recipe": "", "view_recipe": "",
"warning_duplicate_filter": "", "warning_duplicate_filter": "",

View File

@@ -701,6 +701,7 @@
"tree_root": "Kořen stromu", "tree_root": "Kořen stromu",
"tree_select": "Použít stromový výběr", "tree_select": "Použít stromový výběr",
"tsp": "lžička [tsp] (US, objem)", "tsp": "lžička [tsp] (US, objem)",
"unsaved": "",
"updatedon": "Upraveno", "updatedon": "Upraveno",
"view_recipe": "Zobrazit recept", "view_recipe": "Zobrazit recept",
"warning_duplicate_filter": "Varování: Kvůli technickým omezení může použití několika filtrů se stejnou kombinací (a/nebo/ne) přinést neočekávaný výsledek.", "warning_duplicate_filter": "Varování: Kvůli technickým omezení může použití několika filtrů se stejnou kombinací (a/nebo/ne) přinést neočekávaný výsledek.",

View File

@@ -679,6 +679,7 @@
"tree_root": "Roden af træet", "tree_root": "Roden af træet",
"tree_select": "Benyt træ vælger", "tree_select": "Benyt træ vælger",
"tsp": "teaspoon [tsp] (US, volumen)", "tsp": "teaspoon [tsp] (US, volumen)",
"unsaved": "",
"updatedon": "Opdateret den", "updatedon": "Opdateret den",
"view_recipe": "Vis opskrift", "view_recipe": "Vis opskrift",
"warning_duplicate_filter": "Advarsel: På grund af tekniske begrænsninger, kan det give uforventede resultater at have flere filtre med den samme kombination af (og/eller/not).", "warning_duplicate_filter": "Advarsel: På grund af tekniske begrænsninger, kan det give uforventede resultater at have flere filtre med den samme kombination af (og/eller/not).",

View File

@@ -714,6 +714,7 @@
"tree_root": "Ursprung des Baums", "tree_root": "Ursprung des Baums",
"tree_select": "Baum-Auswahl verwenden", "tree_select": "Baum-Auswahl verwenden",
"tsp": "Teelöffel [tsp] (US, Volumen)", "tsp": "Teelöffel [tsp] (US, Volumen)",
"unsaved": "nicht gespeichert",
"updatedon": "Geändert am", "updatedon": "Geändert am",
"view_recipe": "Rezept anschauen", "view_recipe": "Rezept anschauen",
"warning_duplicate_filter": "Warnung: Wegen technischen Limitierungen können mehrere Filter der selben Kombination (und/oder/nicht) zu unerwarteten Ergebnissen führen.", "warning_duplicate_filter": "Warnung: Wegen technischen Limitierungen können mehrere Filter der selben Kombination (und/oder/nicht) zu unerwarteten Ergebnissen führen.",

View File

@@ -662,6 +662,7 @@
"tree_root": "Ρίζα του δέντρου", "tree_root": "Ρίζα του δέντρου",
"tree_select": "Χρήση επιλογής δέντρου", "tree_select": "Χρήση επιλογής δέντρου",
"tsp": "κουτάλι του γλυκού [tsp] (ΗΠΑ, όγκος)", "tsp": "κουτάλι του γλυκού [tsp] (ΗΠΑ, όγκος)",
"unsaved": "",
"updatedon": "Ενημερώθηκε στις", "updatedon": "Ενημερώθηκε στις",
"view_recipe": "Εμφάνιση συνταγής", "view_recipe": "Εμφάνιση συνταγής",
"warning_duplicate_filter": "Προειδοποίηση: Λόγω τεχνικών περιορισμών η ύπαρξη πολλαπλών φίλτρων με τους ίδιους συνδυασμούς (και/ή/όχι) μπορεί να οδηγήσει σε απρόσμενα αποτελέσματα.", "warning_duplicate_filter": "Προειδοποίηση: Λόγω τεχνικών περιορισμών η ύπαρξη πολλαπλών φίλτρων με τους ίδιους συνδυασμούς (και/ή/όχι) μπορεί να οδηγήσει σε απρόσμενα αποτελέσματα.",

View File

@@ -711,6 +711,7 @@
"tree_root": "Root of Tree", "tree_root": "Root of Tree",
"tree_select": "Use Tree Selection", "tree_select": "Use Tree Selection",
"tsp": "teaspoon [tsp] (US, volume)", "tsp": "teaspoon [tsp] (US, volume)",
"unsaved": "unsaved",
"updatedon": "Updated On", "updatedon": "Updated On",
"view_recipe": "View Recipe", "view_recipe": "View Recipe",
"warning_duplicate_filter": "Warning: Due to technical limitations having multiple filters of the same combination (and/or/not) might yield unexpected results.", "warning_duplicate_filter": "Warning: Due to technical limitations having multiple filters of the same combination (and/or/not) might yield unexpected results.",

View File

@@ -708,6 +708,7 @@
"tree_root": "Raíz del Árbol", "tree_root": "Raíz del Árbol",
"tree_select": "Usar Selección en Árbol", "tree_select": "Usar Selección en Árbol",
"tsp": "cucharadita [tsp] (US, volumen)", "tsp": "cucharadita [tsp] (US, volumen)",
"unsaved": "",
"updatedon": "Actualizado En", "updatedon": "Actualizado En",
"view_recipe": "Ver Receta", "view_recipe": "Ver Receta",
"warning_duplicate_filter": "Aviso: Debido a limitaciones técnicas tener multiples filtros de la misma combinación (y/o/no - and/or/not) puede causar resultados inesperados.", "warning_duplicate_filter": "Aviso: Debido a limitaciones técnicas tener multiples filtros de la misma combinación (y/o/no - and/or/not) puede causar resultados inesperados.",

View File

@@ -371,5 +371,6 @@
"to_navigate": "", "to_navigate": "",
"to_select": "", "to_select": "",
"tree_root": "Root of Tree", "tree_root": "Root of Tree",
"unsaved": "",
"warning_feature_beta": "Tämä ominaisuus on BETA (testaus) vaiheessa. Bugeja ja hajottavia muutoksia saattaa ilmaantua tulevaisuudessa tätä ominaisuutta (mahdollisesti menettää ominaisuuksiin liittyvää tietoa) käytettäessä." "warning_feature_beta": "Tämä ominaisuus on BETA (testaus) vaiheessa. Bugeja ja hajottavia muutoksia saattaa ilmaantua tulevaisuudessa tätä ominaisuutta (mahdollisesti menettää ominaisuuksiin liittyvää tietoa) käytettäessä."
} }

View File

@@ -694,6 +694,7 @@
"total": "total", "total": "total",
"tree_root": "Racine de larbre", "tree_root": "Racine de larbre",
"tree_select": "Utiliser l'arbre de sélection", "tree_select": "Utiliser l'arbre de sélection",
"unsaved": "",
"updatedon": "Mis à jour le", "updatedon": "Mis à jour le",
"view_recipe": "Voir la recette", "view_recipe": "Voir la recette",
"warning_duplicate_filter": "Attention : en raison de limitations techniques, l'emploi de multiples filtres (and/or/not) peut mener à des résultats inattendus.", "warning_duplicate_filter": "Attention : en raison de limitations techniques, l'emploi de multiples filtres (and/or/not) peut mener à des résultats inattendus.",

View File

@@ -709,6 +709,7 @@
"tree_root": "מקור העץ", "tree_root": "מקור העץ",
"tree_select": "השתמש בבחירת עץ", "tree_select": "השתמש בבחירת עץ",
"tsp": "כפית", "tsp": "כפית",
"unsaved": "",
"updatedon": "עודכן ב", "updatedon": "עודכן ב",
"view_recipe": "הצג מתכון", "view_recipe": "הצג מתכון",
"warning_duplicate_filter": "אזהרה: בשל אתגרים טכנולוגיים, השימוש במספר מסננים בעל אותו צירוף עלול לגרום לתוצאות בלתי צפויות.", "warning_duplicate_filter": "אזהרה: בשל אתגרים טכנולוגיים, השימוש במספר מסננים בעל אותו צירוף עלול לגרום לתוצאות בלתי צפויות.",

View File

@@ -667,6 +667,7 @@
"tree_root": "", "tree_root": "",
"tree_select": "", "tree_select": "",
"tsp": "teáskanál [tsp] (USA, térfogat)", "tsp": "teáskanál [tsp] (USA, térfogat)",
"unsaved": "",
"updatedon": "Frissítve", "updatedon": "Frissítve",
"view_recipe": "Recept megtekintése", "view_recipe": "Recept megtekintése",
"warning_duplicate_filter": "Figyelem! A technikai megkötések miatt több azonos kombinációjú szűrő (és/vagy nem) használata nem várt eredményt adhat.", "warning_duplicate_filter": "Figyelem! A technikai megkötések miatt több azonos kombinációjú szűrő (és/vagy nem) használata nem várt eredményt adhat.",

View File

@@ -281,5 +281,6 @@
"to_close": "", "to_close": "",
"to_navigate": "", "to_navigate": "",
"to_select": "", "to_select": "",
"unsaved": "",
"warning_feature_beta": "Այս հատկությունը ԲԵՏԱ տարբերակում է։ Ակնկալեք սխալներ և անգամ խափանող թարմացումներ ապագայում։" "warning_feature_beta": "Այս հատկությունը ԲԵՏԱ տարբերակում է։ Ակնկալեք սխալներ և անգամ խափանող թարմացումներ ապագայում։"
} }

View File

@@ -603,6 +603,7 @@
"today_recipes": "", "today_recipes": "",
"tree_root": "", "tree_root": "",
"tree_select": "", "tree_select": "",
"unsaved": "",
"updatedon": "", "updatedon": "",
"view_recipe": "", "view_recipe": "",
"warning_duplicate_filter": "", "warning_duplicate_filter": "",

View File

@@ -707,6 +707,7 @@
"tree_root": "", "tree_root": "",
"tree_select": "", "tree_select": "",
"tsp": "", "tsp": "",
"unsaved": "",
"updatedon": "", "updatedon": "",
"view_recipe": "", "view_recipe": "",
"warning_duplicate_filter": "", "warning_duplicate_filter": "",

View File

@@ -619,6 +619,7 @@
"today_recipes": "Ricette di oggi", "today_recipes": "Ricette di oggi",
"tree_root": "Radice dell'albero", "tree_root": "Radice dell'albero",
"tree_select": "Usa selezione ad albero", "tree_select": "Usa selezione ad albero",
"unsaved": "",
"updatedon": "Aggiornato il", "updatedon": "Aggiornato il",
"view_recipe": "Mostra ricetta", "view_recipe": "Mostra ricetta",
"warning_duplicate_filter": "Avviso: a causa di limitazioni tecniche, usare più filtri di ricerca della stessa combinazione (and/or/not) potrebbe portare a risultati inaspettati.", "warning_duplicate_filter": "Avviso: a causa di limitazioni tecniche, usare più filtri di ricerca della stessa combinazione (and/or/not) potrebbe portare a risultati inaspettati.",

View File

@@ -677,6 +677,7 @@
"tree_root": "", "tree_root": "",
"tree_select": "", "tree_select": "",
"tsp": "", "tsp": "",
"unsaved": "",
"updatedon": "", "updatedon": "",
"view_recipe": "", "view_recipe": "",
"warning_duplicate_filter": "", "warning_duplicate_filter": "",

View File

@@ -642,6 +642,7 @@
"today_recipes": "", "today_recipes": "",
"tree_root": "Rot av tre", "tree_root": "Rot av tre",
"tree_select": "", "tree_select": "",
"unsaved": "",
"updatedon": "", "updatedon": "",
"view_recipe": "", "view_recipe": "",
"warning_duplicate_filter": "", "warning_duplicate_filter": "",

View File

@@ -666,6 +666,7 @@
"tree_root": "Hoogste niveau", "tree_root": "Hoogste niveau",
"tree_select": "Gebruik boomselectie", "tree_select": "Gebruik boomselectie",
"tsp": "theelepel [tsp] (VS, volume)", "tsp": "theelepel [tsp] (VS, volume)",
"unsaved": "",
"updatedon": "Geüpdatet op", "updatedon": "Geüpdatet op",
"view_recipe": "Bekijk recept", "view_recipe": "Bekijk recept",
"warning_duplicate_filter": "Waarschuwing: door technische beperkingen kan het hebben van meerdere filters of dezelfde combinatie (en/of/niet) tot onverwachte resultaten leiden.", "warning_duplicate_filter": "Waarschuwing: door technische beperkingen kan het hebben van meerdere filters of dezelfde combinatie (en/of/niet) tot onverwachte resultaten leiden.",

View File

@@ -711,6 +711,7 @@
"tree_root": "Poziom główny drzewa", "tree_root": "Poziom główny drzewa",
"tree_select": "Użyj drzewa wyboru", "tree_select": "Użyj drzewa wyboru",
"tsp": "łyżeczka [tsp] (USA, objętość)", "tsp": "łyżeczka [tsp] (USA, objętość)",
"unsaved": "",
"updatedon": "Zaktualizowano dnia", "updatedon": "Zaktualizowano dnia",
"view_recipe": "Zobacz przepis", "view_recipe": "Zobacz przepis",
"warning_duplicate_filter": "Ostrzeżenie: Ze względu na ograniczenia techniczne posiadanie wielu filtrów o tej samej kombinacji (i/lub/nie) może dać nieoczekiwane wyniki.", "warning_duplicate_filter": "Ostrzeżenie: Ze względu na ograniczenia techniczne posiadanie wielu filtrów o tej samej kombinacji (i/lub/nie) może dać nieoczekiwane wyniki.",

View File

@@ -558,6 +558,7 @@
"today_recipes": "", "today_recipes": "",
"tree_root": "Raiz da árvore", "tree_root": "Raiz da árvore",
"tree_select": "", "tree_select": "",
"unsaved": "",
"updatedon": "Atualizado em", "updatedon": "Atualizado em",
"view_recipe": "", "view_recipe": "",
"warning_duplicate_filter": "", "warning_duplicate_filter": "",

View File

@@ -670,6 +670,7 @@
"total": "total", "total": "total",
"tree_root": "Raiz", "tree_root": "Raiz",
"tree_select": "Usar Árvore de Seleção", "tree_select": "Usar Árvore de Seleção",
"unsaved": "",
"updatedon": "Atualizado Em", "updatedon": "Atualizado Em",
"view_recipe": "Visualizar receita", "view_recipe": "Visualizar receita",
"warning_duplicate_filter": "Aviso: Por limitações técnicas, ter múltiplos filtros de uma mesma combinação (e, ou, não) pode ocasionar resultados inesperados.", "warning_duplicate_filter": "Aviso: Por limitações técnicas, ter múltiplos filtros de uma mesma combinação (e, ou, não) pode ocasionar resultados inesperados.",

View File

@@ -624,6 +624,7 @@
"today_recipes": "Rețete de astăzi", "today_recipes": "Rețete de astăzi",
"tree_root": "Rădăcina copacului", "tree_root": "Rădăcina copacului",
"tree_select": "Utilizarea selecției arborilor", "tree_select": "Utilizarea selecției arborilor",
"unsaved": "",
"updatedon": "Actualizat la data de", "updatedon": "Actualizat la data de",
"view_recipe": "Vizionează rețeta", "view_recipe": "Vizionează rețeta",
"warning_duplicate_filter": "Atenționare: Din cauza limitărilor tehnice care au mai multe filtre de aceeași combinație (și/sau/nu) ar putea da rezultate neașteptate.", "warning_duplicate_filter": "Atenționare: Din cauza limitărilor tehnice care au mai multe filtre de aceeași combinație (și/sau/nu) ar putea da rezultate neașteptate.",

View File

@@ -494,6 +494,7 @@
"to_select": "", "to_select": "",
"tree_root": "Главный элемент", "tree_root": "Главный элемент",
"tree_select": "Выбор дерева для использования", "tree_select": "Выбор дерева для использования",
"unsaved": "",
"updatedon": "Обновлено", "updatedon": "Обновлено",
"view_recipe": "Посмотреть рецепт", "view_recipe": "Посмотреть рецепт",
"warning_feature_beta": "Данный функционал находится в стадии BETA (тестируется). Возможны баги и серьезные изменения функционала в будущем.", "warning_feature_beta": "Данный функционал находится в стадии BETA (тестируется). Возможны баги и серьезные изменения функционала в будущем.",

View File

@@ -465,6 +465,7 @@
"today_recipes": "Današnji recepti", "today_recipes": "Današnji recepti",
"tree_root": "", "tree_root": "",
"tree_select": "Uporabi drevesno označbo", "tree_select": "Uporabi drevesno označbo",
"unsaved": "",
"warning_feature_beta": "Ta funkcija je trenutno v stanju BETA (testiranje). Pri uporabi te funkcije pričakujte napake in morebitne prelomne spremembe v prihodnosti (morda izgubite podatke, povezane s to funkcijo).", "warning_feature_beta": "Ta funkcija je trenutno v stanju BETA (testiranje). Pri uporabi te funkcije pričakujte napake in morebitne prelomne spremembe v prihodnosti (morda izgubite podatke, povezane s to funkcijo).",
"warning_space_delete": "Izbrišete lahko svoj prostor, vključno z vsemi recepti, nakupovalnimi seznami, načrti obrokov in vsem drugim, kar ste ustvarili. Tega ni mogoče preklicati! Ste prepričani, da želite to storiti?" "warning_space_delete": "Izbrišete lahko svoj prostor, vključno z vsemi recepti, nakupovalnimi seznami, načrti obrokov in vsem drugim, kar ste ustvarili. Tega ni mogoče preklicati! Ste prepričani, da želite to storiti?"
} }

View File

@@ -711,6 +711,7 @@
"tree_root": "Roten av trädet", "tree_root": "Roten av trädet",
"tree_select": "Använd trädval", "tree_select": "Använd trädval",
"tsp": "tesked [tsp] (US, volym)", "tsp": "tesked [tsp] (US, volym)",
"unsaved": "",
"updatedon": "Uppdaterad den", "updatedon": "Uppdaterad den",
"view_recipe": "Visa recept", "view_recipe": "Visa recept",
"warning_duplicate_filter": "Varning: På grund av tekniska begränsningar kan flera filter av samma kombination (och/eller/inte) ge oväntade resultat.", "warning_duplicate_filter": "Varning: På grund av tekniska begränsningar kan flera filter av samma kombination (och/eller/inte) ge oväntade resultat.",

View File

@@ -709,6 +709,7 @@
"tree_root": "Ağaç Kökü", "tree_root": "Ağaç Kökü",
"tree_select": "Ağaç Seçimini Kullan", "tree_select": "Ağaç Seçimini Kullan",
"tsp": "çay kaşığı [tsp] (ABD, hacim)", "tsp": "çay kaşığı [tsp] (ABD, hacim)",
"unsaved": "",
"updatedon": "Güncelleme Zamanı", "updatedon": "Güncelleme Zamanı",
"view_recipe": "Tarif Görüntüle", "view_recipe": "Tarif Görüntüle",
"warning_duplicate_filter": "Uyarı: Teknik sınırlamalar nedeniyle aynı kombinasyona sahip (ve/veya/değil) birden fazla filtreye sahip olmak beklenmedik sonuçlara yol açabilir.", "warning_duplicate_filter": "Uyarı: Teknik sınırlamalar nedeniyle aynı kombinasyona sahip (ve/veya/değil) birden fazla filtreye sahip olmak beklenmedik sonuçlara yol açabilir.",

View File

@@ -584,6 +584,7 @@
"today_recipes": "", "today_recipes": "",
"tree_root": "Корінь Дерева", "tree_root": "Корінь Дерева",
"tree_select": "", "tree_select": "",
"unsaved": "",
"updatedon": "", "updatedon": "",
"view_recipe": "", "view_recipe": "",
"warning_duplicate_filter": "", "warning_duplicate_filter": "",

View File

@@ -701,6 +701,7 @@
"tree_root": "树根", "tree_root": "树根",
"tree_select": "使用树形选择", "tree_select": "使用树形选择",
"tsp": "茶匙【tsp】美制体积", "tsp": "茶匙【tsp】美制体积",
"unsaved": "",
"updatedon": "更新时间", "updatedon": "更新时间",
"view_recipe": "查看食谱", "view_recipe": "查看食谱",
"warning_duplicate_filter": "警告:由于技术限制,使用相同组合(和/或/不)的多个筛选器可能会产生意想不到的结果。", "warning_duplicate_filter": "警告:由于技术限制,使用相同组合(和/或/不)的多个筛选器可能会产生意想不到的结果。",

View File

@@ -258,6 +258,7 @@
"to_close": "", "to_close": "",
"to_navigate": "", "to_navigate": "",
"to_select": "", "to_select": "",
"unsaved": "",
"warning_feature_beta": "此功能目前處於測試階段 (BETA)。使用此功能時,請預期可能會有漏洞和破壞性變更,未來可能會丟失與功能相關的數據。", "warning_feature_beta": "此功能目前處於測試階段 (BETA)。使用此功能時,請預期可能會有漏洞和破壞性變更,未來可能會丟失與功能相關的數據。",
"warning_space_delete": "您可以刪除您的空間,包括所有食譜、購物清單、餐飲計畫以及其他您創建的內容。此操作無法撤銷!您確定要這樣做嗎?" "warning_space_delete": "您可以刪除您的空間,包括所有食譜、購物清單、餐飲計畫以及其他您創建的內容。此操作無法撤銷!您確定要這樣做嗎?"
} }

View File

@@ -735,16 +735,11 @@ export class GenericModel {
/** /**
* gets a label for a specific object instance using the model toStringKeys property * gets a label for a specific object instance using the model toStringKeys property
* @param obj obj to get label for * @param obj obj to get label for
* @param includeId debug function to include the ID as part of the object label
*/ */
getLabel(obj: EditorSupportedTypes, includeId?: boolean) { getLabel(obj: EditorSupportedTypes) {
let name = '' let name = ''
if (obj) { if (obj) {
if (includeId) {
name += '#' + obj.id
}
this.model.toStringKeys.forEach(key => { this.model.toStringKeys.forEach(key => {
let value = getNestedProperty(obj, key) let value = getNestedProperty(obj, key)
name += ' ' + ((value != null) ? value : '') name += ' ' + ((value != null) ? value : '')