mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-30 05:31:02 -05:00
Compare commits
81 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d26faf14b1 | ||
|
|
d5d5c2c52b | ||
|
|
7ffabfe711 | ||
|
|
49e0b5b962 | ||
|
|
a05f1ece24 | ||
|
|
748b91bb8a | ||
|
|
bd2e9cc3d9 | ||
|
|
c40bb20a7a | ||
|
|
b377d2cd35 | ||
|
|
dc0e91d0f9 | ||
|
|
5f12907544 | ||
|
|
889ddac7dc | ||
|
|
b369e2618a | ||
|
|
5a4e0204c9 | ||
|
|
bfc2e96b54 | ||
|
|
f065ef80aa | ||
|
|
61c14b8b05 | ||
|
|
35d5d64809 | ||
|
|
63c711d18c | ||
|
|
59e3ea70d1 | ||
|
|
6771662a9f | ||
|
|
9b792a1393 | ||
|
|
862957c121 | ||
|
|
bdcbafd52f | ||
|
|
5e454a5212 | ||
|
|
20bea63997 | ||
|
|
8a265772c0 | ||
|
|
6febb4e3e8 | ||
|
|
04f9167fd8 | ||
|
|
8f29e01daf | ||
|
|
e810363b22 | ||
|
|
b5a2120bdf | ||
|
|
643fcbad9b | ||
|
|
4a3b834463 | ||
|
|
003149133a | ||
|
|
a43de0ca4d | ||
|
|
e05aaed75c | ||
|
|
4984e3e31b | ||
|
|
11dce4c6ad | ||
|
|
8d0d338ea2 | ||
|
|
d7b26d1b29 | ||
|
|
e292b72e34 | ||
|
|
4e795ecf55 | ||
|
|
e3c2a66723 | ||
|
|
eec3e97f97 | ||
|
|
3f481d6922 | ||
|
|
0810ab7210 | ||
|
|
abd621145c | ||
|
|
7d218aa93d | ||
|
|
1b41bd9115 | ||
|
|
d456fcf0f2 | ||
|
|
d4f654554b | ||
|
|
c8115545b8 | ||
|
|
6dbf0871ec | ||
|
|
f1c5c8bc43 | ||
|
|
22e0108992 | ||
|
|
e2e05c8d1d | ||
|
|
b02b36812d | ||
|
|
7f6025c99c | ||
|
|
b97e04ead8 | ||
|
|
fc236c97b4 | ||
|
|
5653aca056 | ||
|
|
fdb05c5a9e | ||
|
|
2dffde4091 | ||
|
|
cdd700d2e6 | ||
|
|
ad6fe5fa4d | ||
|
|
ac31c112f3 | ||
|
|
0104b600cc | ||
|
|
7baad85112 | ||
|
|
4b0bfa9a85 | ||
|
|
5e7c75ef68 | ||
|
|
954a35bea2 | ||
|
|
88347d44c8 | ||
|
|
2c13e76fbb | ||
|
|
362f634828 | ||
|
|
2fb968cfd3 | ||
|
|
4d3dab6edd | ||
|
|
8f1b593ad1 | ||
|
|
1002f0d61f | ||
|
|
20cb218688 | ||
|
|
bba44b0c1e |
2
.github/workflows/build-docker.yml
vendored
2
.github/workflows/build-docker.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Build Vue 3 frontend
|
# Build Vue 3 frontend
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '22'
|
node-version: '22'
|
||||||
cache: yarn
|
cache: yarn
|
||||||
|
|||||||
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@@ -13,14 +13,14 @@ jobs:
|
|||||||
node-version: ["22"]
|
node-version: ["22"]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- uses: awalsh128/cache-apt-pkgs-action@v1.5.3
|
- uses: awalsh128/cache-apt-pkgs-action@v1.6.0
|
||||||
with:
|
with:
|
||||||
packages: libsasl2-dev python3-dev libxml2-dev libxmlsec1-dev libxslt-dev libxmlsec1-openssl libxslt-dev libldap2-dev libssl-dev gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev xmlsec-dev xmlsec build-base g++ curl
|
packages: libsasl2-dev python3-dev libxml2-dev libxmlsec1-dev libxslt-dev libxmlsec1-openssl libxslt-dev libldap2-dev libssl-dev gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev xmlsec-dev xmlsec build-base g++ curl
|
||||||
version: 1.0
|
version: 1.0
|
||||||
|
|
||||||
# Setup python & dependencies
|
# Setup python & dependencies
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
cache: "pip"
|
cache: "pip"
|
||||||
@@ -43,7 +43,7 @@ jobs:
|
|||||||
# Build Vue frontend & Dependencies
|
# Build Vue frontend & Dependencies
|
||||||
- name: Set up Node ${{ matrix.node-version }}
|
- name: Set up Node ${{ matrix.node-version }}
|
||||||
if: steps.django_cache.outputs.cache-hit != 'true'
|
if: steps.django_cache.outputs.cache-hit != 'true'
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: "yarn"
|
cache: "yarn"
|
||||||
|
|||||||
4
.github/workflows/codeql-analysis.yml
vendored
4
.github/workflows/codeql-analysis.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
|||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3
|
uses: github/codeql-action/init@v4
|
||||||
# Override language selection by uncommenting this and choosing your languages
|
# Override language selection by uncommenting this and choosing your languages
|
||||||
with:
|
with:
|
||||||
languages: python, javascript
|
languages: python, javascript
|
||||||
@@ -47,6 +47,6 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v3
|
uses: github/codeql-action/analyze@v4
|
||||||
with:
|
with:
|
||||||
languages: javascript, python
|
languages: javascript, python
|
||||||
|
|||||||
2
.github/workflows/docs.yml
vendored
2
.github/workflows/docs.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: 3.x
|
python-version: 3.x
|
||||||
- run: pip install mkdocs-material mkdocs-include-markdown-plugin
|
- run: pip install mkdocs-material mkdocs-include-markdown-plugin
|
||||||
|
|||||||
@@ -69,16 +69,8 @@ def get_from_scraper(scrape, request):
|
|||||||
recipe_json['description'] = parse_description(description)
|
recipe_json['description'] = parse_description(description)
|
||||||
recipe_json['description'] = automation_engine.apply_regex_replace_automation(recipe_json['description'], Automation.DESCRIPTION_REPLACE)
|
recipe_json['description'] = automation_engine.apply_regex_replace_automation(recipe_json['description'], Automation.DESCRIPTION_REPLACE)
|
||||||
|
|
||||||
# assign servings attributes
|
recipe_json['servings'] = parse_servings(scrape.schema.data.get('recipeYield'))
|
||||||
try:
|
recipe_json['servings_text'] = parse_servings_text(scrape.schema.data.get('recipeYield'))
|
||||||
# dont use scrape.yields() as this will always return "x servings" or "x items", should be improved in scrapers directly
|
|
||||||
# max(x,1) to prevent 0 servings which breaks scaling
|
|
||||||
servings = max(scrape.schema.data.get('recipeYield') or 1, 1)
|
|
||||||
except Exception:
|
|
||||||
servings = 1
|
|
||||||
|
|
||||||
recipe_json['servings'] = parse_servings(servings)
|
|
||||||
recipe_json['servings_text'] = parse_servings_text(servings)
|
|
||||||
|
|
||||||
# assign time attributes
|
# assign time attributes
|
||||||
try:
|
try:
|
||||||
@@ -407,7 +399,7 @@ def parse_servings(servings):
|
|||||||
def parse_servings_text(servings):
|
def parse_servings_text(servings):
|
||||||
if isinstance(servings, str):
|
if isinstance(servings, str):
|
||||||
try:
|
try:
|
||||||
servings = re.sub("\\d+", '', servings).strip()
|
servings = re.sub("\\d+", '', servings, 1).strip()
|
||||||
except Exception:
|
except Exception:
|
||||||
servings = ''
|
servings = ''
|
||||||
if isinstance(servings, list):
|
if isinstance(servings, list):
|
||||||
|
|||||||
2453
cookbook/locale/ko/LC_MESSAGES/django.po
Normal file
2453
cookbook/locale/ko/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -2562,6 +2562,13 @@ class AiImportView(APIView):
|
|||||||
'msg': "Error parsing AI results. Response Text:\n\n" + response_text
|
'msg': "Error parsing AI results. Response Text:\n\n" + response_text
|
||||||
}
|
}
|
||||||
return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_400_BAD_REQUEST)
|
return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
response = {
|
||||||
|
'error': True,
|
||||||
|
'msg': "Error processing AI results. Response Text:\n\n" + response_text + "\n\n" + traceback.format_exc()
|
||||||
|
}
|
||||||
|
return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_400_BAD_REQUEST)
|
||||||
else:
|
else:
|
||||||
response = {
|
response = {
|
||||||
'error': True,
|
'error': True,
|
||||||
|
|||||||
@@ -33,4 +33,4 @@ Convert pictures of recipes to a structure that can be imported to Tandoor with
|
|||||||
|
|
||||||
Maintained by [smilerz](https://github.com/smilerz/tandoor-menu-generator)
|
Maintained by [smilerz](https://github.com/smilerz/tandoor-menu-generator)
|
||||||
|
|
||||||
Generate a mealplan tbased on complex criteria and optionally insert it into an SVG menu template.
|
Generate a meal plan based on complex criteria and optionally insert it into an SVG menu template.
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ then make sure you have set [all required headers](install/docker.md#required-he
|
|||||||
If that doesn't fix it, you can also refer to the appropriate sub section in the [reverse proxy documentation](install/docker.md#reverse-proxy) and verify your general webserver configuration.
|
If that doesn't fix it, you can also refer to the appropriate sub section in the [reverse proxy documentation](install/docker.md#reverse-proxy) and verify your general webserver configuration.
|
||||||
|
|
||||||
### Required Headers
|
### Required Headers
|
||||||
Navigate to `/system` and review the headers listed in the DEBUG section. At a minimum, if you are using a reverse proxy the headers must match the below conditions.
|
Navigate to `/system/` and review the headers listed in the DEBUG section. At a minimum, if you are using a reverse proxy the headers must match the below conditions.
|
||||||
|
|
||||||
| Header | Requirement |
|
| Header | Requirement |
|
||||||
| :--- | :---- |
|
| :--- | :---- |
|
||||||
|
|||||||
@@ -69,8 +69,6 @@ wget https://raw.githubusercontent.com/vabene1111/recipes/develop/docs/install/d
|
|||||||
|
|
||||||
Most deployments will likely use a reverse proxy.
|
Most deployments will likely use a reverse proxy.
|
||||||
|
|
||||||
If your reverse proxy is not listed below, please refer to chapter [Others](#others).
|
|
||||||
|
|
||||||
#### **Traefik**
|
#### **Traefik**
|
||||||
|
|
||||||
If you use Traefik, this configuration is the one for you.
|
If you use Traefik, this configuration is the one for you.
|
||||||
@@ -115,6 +113,17 @@ wget https://raw.githubusercontent.com/vabene1111/recipes/develop/docs/install/d
|
|||||||
{% include "./docker/nginx-proxy/docker-compose.yml" %}
|
{% include "./docker/nginx-proxy/docker-compose.yml" %}
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
|
||||||
|
#### **Apache proxy**
|
||||||
|
|
||||||
|
If you use Apache as a reverse proxy, this configuration is the one for you.
|
||||||
|
|
||||||
|
~~~yaml
|
||||||
|
{% include "./docker/apache-proxy/docker-compose.yml" %}
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Keep in mind, that the port configured for the service `web_recipes` should be the same as in chapter [Required Headers: Apache](#apache).
|
||||||
|
|
||||||
## **DockSTARTer**
|
## **DockSTARTer**
|
||||||
|
|
||||||
The main goal of [DockSTARTer](https://dockstarter.com/) is to make it quick and easy to get up and running with Docker.
|
The main goal of [DockSTARTer](https://dockstarter.com/) is to make it quick and easy to get up and running with Docker.
|
||||||
@@ -139,7 +148,8 @@ if you manually change it/bind the folder as a volume.
|
|||||||
|
|
||||||
Please be sure to supply all required headers in your nginx/Apache/Caddy/... configuration!
|
Please be sure to supply all required headers in your nginx/Apache/Caddy/... configuration!
|
||||||
|
|
||||||
nginx:
|
#### **nginx**
|
||||||
|
|
||||||
```nginx
|
```nginx
|
||||||
location / {
|
location / {
|
||||||
proxy_set_header Host $http_host; # try $host instead if this doesn't work
|
proxy_set_header Host $http_host; # try $host instead if this doesn't work
|
||||||
@@ -149,7 +159,8 @@ location / {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Apache:
|
#### **Apache**
|
||||||
|
|
||||||
```apache
|
```apache
|
||||||
RequestHeader set X-Forwarded-Proto "https"
|
RequestHeader set X-Forwarded-Proto "https"
|
||||||
Header always set Access-Control-Allow-Origin "*"
|
Header always set Access-Control-Allow-Origin "*"
|
||||||
|
|||||||
24
docs/install/docker/apache-proxy/docker-compose.yml
Normal file
24
docs/install/docker/apache-proxy/docker-compose.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
services:
|
||||||
|
db_recipes:
|
||||||
|
restart: always
|
||||||
|
image: postgres:16-alpine
|
||||||
|
volumes:
|
||||||
|
- ./postgresql:/var/lib/postgresql/data
|
||||||
|
env_file:
|
||||||
|
- ./.env
|
||||||
|
|
||||||
|
web_recipes:
|
||||||
|
restart: always
|
||||||
|
image: vabene1111/recipes
|
||||||
|
ports:
|
||||||
|
- 127.0.0.1:8080:80 # replace port
|
||||||
|
env_file:
|
||||||
|
- ./.env
|
||||||
|
volumes:
|
||||||
|
- staticfiles:/opt/recipes/staticfiles
|
||||||
|
- ./mediafiles:/opt/recipes/mediafiles
|
||||||
|
depends_on:
|
||||||
|
- db_recipes
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
staticfiles:
|
||||||
@@ -77,10 +77,10 @@ Using binaries from the virtual env:
|
|||||||
/var/www/recipes/bin/pip3 install -r requirements.txt
|
/var/www/recipes/bin/pip3 install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
You will also need to install front end requirements and build them. For this navigate to the `./vue` folder and run
|
You will also need to install front end requirements and build them. For this navigate to the `./vue3` folder and run
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
cd ./vue
|
cd ./vue3
|
||||||
yarn install
|
yarn install
|
||||||
yarn build
|
yarn build
|
||||||
```
|
```
|
||||||
@@ -224,7 +224,7 @@ bin/python3 manage.py migrate
|
|||||||
bin/python3 manage.py collectstatic --no-input
|
bin/python3 manage.py collectstatic --no-input
|
||||||
bin/python3 manage.py collectstatic_js_reverse
|
bin/python3 manage.py collectstatic_js_reverse
|
||||||
# change to frontend directory
|
# change to frontend directory
|
||||||
cd vue
|
cd vue3
|
||||||
# install and build frontend
|
# install and build frontend
|
||||||
yarn install
|
yarn install
|
||||||
yarn build
|
yarn build
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ urlpatterns = [
|
|||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG and settings.DEBUG_TOOLBAR:
|
||||||
urlpatterns += path('__debug__/', include('debug_toolbar.urls')),
|
urlpatterns += path('__debug__/', include('debug_toolbar.urls')),
|
||||||
|
|
||||||
if settings.ENABLE_METRICS:
|
if settings.ENABLE_METRICS:
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
Django==5.2.7
|
Django==5.2.8
|
||||||
cryptography===45.0.5
|
cryptography===45.0.5
|
||||||
django-annoying==0.10.6
|
django-annoying==0.10.6
|
||||||
django-cleanup==9.0.0
|
django-cleanup==9.0.0
|
||||||
django-crispy-forms==2.4
|
django-crispy-forms==2.4
|
||||||
crispy-bootstrap4==2025.6
|
crispy-bootstrap4==2025.6
|
||||||
djangorestframework==3.16.1
|
djangorestframework==3.16.1
|
||||||
drf-spectacular==0.27.1
|
drf-spectacular==0.28.0
|
||||||
drf-spectacular-sidecar==2025.8.1
|
drf-spectacular-sidecar==2025.8.1
|
||||||
drf-writable-nested==0.7.2
|
drf-writable-nested==0.7.2
|
||||||
django-oauth-toolkit==2.4.0
|
django-oauth-toolkit==2.4.0
|
||||||
django-debug-toolbar==4.3.0
|
django-debug-toolbar==6.0.0
|
||||||
bleach==6.2.0
|
bleach==6.2.0
|
||||||
gunicorn==23.0.0
|
gunicorn==23.0.0
|
||||||
lxml==5.3.1
|
lxml==6.0.2
|
||||||
Markdown==3.7
|
Markdown==3.7
|
||||||
Pillow==11.3.0
|
Pillow==11.3.0
|
||||||
psycopg2-binary==2.9.10
|
psycopg2-binary==2.9.10
|
||||||
@@ -22,14 +22,14 @@ six==1.17.0
|
|||||||
webdavclient3==3.14.6
|
webdavclient3==3.14.6
|
||||||
whitenoise==6.8.2
|
whitenoise==6.8.2
|
||||||
icalendar==6.3.1
|
icalendar==6.3.1
|
||||||
pyyaml==6.0.2
|
pyyaml==6.0.3
|
||||||
uritemplate==4.1.1
|
uritemplate==4.1.1
|
||||||
beautifulsoup4==4.12.3
|
beautifulsoup4==4.12.3
|
||||||
microdata==0.8.0
|
microdata==0.8.0
|
||||||
mock==5.2.0
|
mock==5.2.0
|
||||||
Jinja2==3.1.6
|
Jinja2==3.1.6
|
||||||
django-allauth[mfa,socialaccount]==65.9.0
|
django-allauth[mfa,socialaccount]==65.9.0
|
||||||
recipe-scrapers==15.8.0
|
recipe-scrapers==15.9.0
|
||||||
django-scopes==2.0.0
|
django-scopes==2.0.0
|
||||||
django-treebeard==4.7.1
|
django-treebeard==4.7.1
|
||||||
django-cors-headers==4.6.0
|
django-cors-headers==4.6.0
|
||||||
@@ -53,7 +53,7 @@ django-vite==3.1.0
|
|||||||
litellm==1.64.1
|
litellm==1.64.1
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
pytest==8.4.1
|
pytest==8.4.2
|
||||||
pytest-django==4.11.0
|
pytest-django==4.11.0
|
||||||
pytest-cov===6.2.1
|
pytest-cov===6.2.1
|
||||||
pytest-factoryboy==2.8.1
|
pytest-factoryboy==2.8.1
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
"@types/sortablejs": "^1.15.8",
|
"@types/sortablejs": "^1.15.8",
|
||||||
"@vueform/multiselect": "^2.6.11",
|
"@vueform/multiselect": "^2.6.11",
|
||||||
"@vueuse/core": "^13.6.0",
|
"@vueuse/core": "^13.6.0",
|
||||||
"@vueuse/router": "^13.6.0",
|
"@vueuse/router": "^13.9.0",
|
||||||
"luxon": "^3.7.1",
|
"luxon": "^3.7.1",
|
||||||
"mavon-editor": "^3.0.1",
|
"mavon-editor": "^3.0.1",
|
||||||
"pinia": "^3.0.2",
|
"pinia": "^3.0.2",
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"vue-router": "^4.5.0",
|
"vue-router": "^4.5.0",
|
||||||
"vue-simple-calendar": "7.1.0",
|
"vue-simple-calendar": "7.1.0",
|
||||||
"vuedraggable": "^4.1.0",
|
"vuedraggable": "^4.1.0",
|
||||||
"vuetify": "^3.9.7"
|
"vuetify": "^3.10.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@fortawesome/fontawesome-free": "^6.7.2",
|
"@fortawesome/fontawesome-free": "^6.7.2",
|
||||||
@@ -31,11 +31,11 @@
|
|||||||
"@types/jsdom": "^21.1.7",
|
"@types/jsdom": "^21.1.7",
|
||||||
"@types/node": "^24.0.8",
|
"@types/node": "^24.0.8",
|
||||||
"@vitejs/plugin-vue": "^6.0.0",
|
"@vitejs/plugin-vue": "^6.0.0",
|
||||||
"@vue/tsconfig": "^0.7.0",
|
"@vue/tsconfig": "^0.8.1",
|
||||||
"esbuild-register": "^3.6.0",
|
"esbuild-register": "^3.6.0",
|
||||||
"jsdom": "^26.1.0",
|
"jsdom": "^26.1.0",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"vite": "7.1.5",
|
"vite": "7.1.11",
|
||||||
"vite-plugin-pwa": "^1.0.3",
|
"vite-plugin-pwa": "^1.0.3",
|
||||||
"vite-plugin-vuetify": "^2.1.1",
|
"vite-plugin-vuetify": "^2.1.1",
|
||||||
"vue-tsc": "^3.0.6",
|
"vue-tsc": "^3.0.6",
|
||||||
|
|||||||
@@ -131,7 +131,7 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import GlobalSearchDialog from "@/components/inputs/GlobalSearchDialog.vue"
|
import GlobalSearchDialog from "@/components/inputs/GlobalSearchDialog.vue"
|
||||||
|
|
||||||
import {useDisplay} from "vuetify"
|
import {useDisplay, useLocale} from "vuetify"
|
||||||
import VSnackbarQueued from "@/components/display/VSnackbarQueued.vue";
|
import VSnackbarQueued from "@/components/display/VSnackbarQueued.vue";
|
||||||
import MessageListDialog from "@/components/dialogs/MessageListDialog.vue";
|
import MessageListDialog from "@/components/dialogs/MessageListDialog.vue";
|
||||||
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
|
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
|
||||||
@@ -152,6 +152,7 @@ const {t} = useI18n()
|
|||||||
|
|
||||||
const title = useTitle()
|
const title = useTitle()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
const i18n = useI18n()
|
||||||
|
|
||||||
const isPrintMode = useMediaQuery('print')
|
const isPrintMode = useMediaQuery('print')
|
||||||
|
|
||||||
@@ -161,13 +162,20 @@ onMounted(() => {
|
|||||||
router.push({name: 'WelcomePage'})
|
router.push({name: 'WelcomePage'})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const {current} = useLocale()
|
||||||
|
let locale = document.querySelector('html')!.getAttribute('lang')
|
||||||
|
if (locale != null) {
|
||||||
|
current.value = locale
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* global title update handler, might be overridden by page specific handlers
|
* global title update handler, might be overridden by page specific handlers
|
||||||
*/
|
*/
|
||||||
router.afterEach((to, from) => {
|
router.afterEach((to, from) => {
|
||||||
if(to.name == 'StartPage' && useUserPreferenceStore().initCompleted && !useUserPreferenceStore().activeSpace.spaceSetupCompleted != undefined &&!useUserPreferenceStore().activeSpace.spaceSetupCompleted && useUserPreferenceStore().activeSpace.createdBy.id! == useUserPreferenceStore().userSettings.user.id!){
|
if (to.name == 'StartPage' && useUserPreferenceStore().initCompleted && !useUserPreferenceStore().activeSpace.spaceSetupCompleted != undefined && !useUserPreferenceStore().activeSpace.spaceSetupCompleted && useUserPreferenceStore().activeSpace.createdBy.id! == useUserPreferenceStore().userSettings.user.id!) {
|
||||||
router.push({name: 'WelcomePage'})
|
router.push({name: 'WelcomePage'})
|
||||||
}
|
}
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-btn @click="useMessageStore().deleteAllMessages()" color="error">{{$t('Delete_All')}}</v-btn>
|
<v-btn @click="useMessageStore().deleteAllMessages()" color="error">{{$t('Delete_All')}}</v-btn>
|
||||||
<v-btn @click="addTestMessage()" color="warning">{{$t('Add')}}</v-btn>
|
<!-- <v-btn @click="addTestMessage()" color="warning">{{$t('Add')}}</v-btn>-->
|
||||||
<v-btn @click="isActive.value = false">{{ $t('Close')}}</v-btn>
|
<v-btn @click="isActive.value = false">{{ $t('Close')}}</v-btn>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
</v-card>
|
</v-card>
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ function dropCalendarItemOnDate(undefinedItem: IMealPlanNormalizedCalendarItem,
|
|||||||
let new_entry = Object.assign({}, mealPlan)
|
let new_entry = Object.assign({}, mealPlan)
|
||||||
new_entry.fromDate = targetDate
|
new_entry.fromDate = targetDate
|
||||||
new_entry.toDate = DateTime.fromJSDate(targetDate).plus(fromToDiff).toJSDate()
|
new_entry.toDate = DateTime.fromJSDate(targetDate).plus(fromToDiff).toJSDate()
|
||||||
|
new_entry.addshopping = mealPlan.shopping
|
||||||
useMealPlanStore().createObject(new_entry)
|
useMealPlanStore().createObject(new_entry)
|
||||||
} else {
|
} else {
|
||||||
mealPlan.fromDate = targetDate
|
mealPlan.fromDate = targetDate
|
||||||
|
|||||||
@@ -29,7 +29,11 @@
|
|||||||
<v-checkbox v-model="useUserPreferenceStore().deviceSettings.start_showMealPlan" :label="$t('ShowMealPlanOnStartPage')"></v-checkbox>
|
<v-checkbox v-model="useUserPreferenceStore().deviceSettings.start_showMealPlan" :label="$t('ShowMealPlanOnStartPage')"></v-checkbox>
|
||||||
|
|
||||||
<v-btn @click="useUserPreferenceStore().resetDeviceSettings()" color="warning">{{ $t('Reset') }}</v-btn> <br/>
|
<v-btn @click="useUserPreferenceStore().resetDeviceSettings()" color="warning">{{ $t('Reset') }}</v-btn> <br/>
|
||||||
<v-btn @click="useUserPreferenceStore().deviceSettings.general_closedHelpAlerts = []" color="warning" class="mt-1">{{ $t('ResetHelp') }}</v-btn>
|
<v-btn @click="useUserPreferenceStore().deviceSettings.general_closedHelpAlerts = []" color="warning" class="mt-1">{{ $t('ResetHelp') }}</v-btn> <br/>
|
||||||
|
<v-btn color="info" class="mt-1">
|
||||||
|
<message-list-dialog></message-list-dialog>
|
||||||
|
{{ $t('Messages') }}
|
||||||
|
</v-btn>
|
||||||
|
|
||||||
</v-form>
|
</v-form>
|
||||||
</template>
|
</template>
|
||||||
@@ -43,6 +47,7 @@ import {ErrorMessageType, PreparedMessage, useMessageStore} from "@/stores/Messa
|
|||||||
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
|
import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
|
||||||
import {useDjangoUrls} from "@/composables/useDjangoUrls";
|
import {useDjangoUrls} from "@/composables/useDjangoUrls";
|
||||||
import ThankYouNote from "@/components/display/ThankYouNote.vue";
|
import ThankYouNote from "@/components/display/ThankYouNote.vue";
|
||||||
|
import MessageListDialog from "@/components/dialogs/MessageListDialog.vue";
|
||||||
|
|
||||||
const {getDjangoUrl} = useDjangoUrls()
|
const {getDjangoUrl} = useDjangoUrls()
|
||||||
|
|
||||||
|
|||||||
866
vue3/src/locales/ko.json
Normal file
866
vue3/src/locales/ko.json
Normal file
@@ -0,0 +1,866 @@
|
|||||||
|
{
|
||||||
|
"AI": "",
|
||||||
|
"AIImportSubtitle": "",
|
||||||
|
"AISettingsHostedHelp": "",
|
||||||
|
"API": "",
|
||||||
|
"APIKey": "",
|
||||||
|
"API_Browser": "",
|
||||||
|
"API_Documentation": "",
|
||||||
|
"AccessTokenHelp": "",
|
||||||
|
"Access_Token": "",
|
||||||
|
"Account": "",
|
||||||
|
"Actions": "",
|
||||||
|
"Active": "",
|
||||||
|
"Activity": "",
|
||||||
|
"Add": "",
|
||||||
|
"AddAll": "",
|
||||||
|
"AddChild": "",
|
||||||
|
"AddFilter": "",
|
||||||
|
"AddFoodToShopping": "",
|
||||||
|
"AddMany": "",
|
||||||
|
"AddToShopping": "",
|
||||||
|
"Add_Servings_to_Shopping": "",
|
||||||
|
"Add_Step": "",
|
||||||
|
"Add_nutrition_recipe": "",
|
||||||
|
"Add_to_Plan": "",
|
||||||
|
"Add_to_Shopping": "",
|
||||||
|
"Added_To_Shopping_List": "",
|
||||||
|
"Added_by": "",
|
||||||
|
"Added_on": "",
|
||||||
|
"Admin": "",
|
||||||
|
"Advanced": "",
|
||||||
|
"AiCreditsBalance": "",
|
||||||
|
"AiLog": "",
|
||||||
|
"AiLogHelp": "",
|
||||||
|
"AiModelHelp": "",
|
||||||
|
"AiProvider": "",
|
||||||
|
"AiProviderHelp": "",
|
||||||
|
"Alignment": "",
|
||||||
|
"AllRecipes": "",
|
||||||
|
"Amount": "",
|
||||||
|
"App": "",
|
||||||
|
"AppImportSubtitle": "",
|
||||||
|
"Apply": "",
|
||||||
|
"Are_You_Sure": "",
|
||||||
|
"Auto_Planner": "",
|
||||||
|
"Auto_Sort": "",
|
||||||
|
"Auto_Sort_Help": "",
|
||||||
|
"Automate": "",
|
||||||
|
"Automation": "",
|
||||||
|
"AutomationHelp": "",
|
||||||
|
"Available": "",
|
||||||
|
"AvailableCategories": "",
|
||||||
|
"Back": "",
|
||||||
|
"BaseUnit": "",
|
||||||
|
"BaseUnitHelp": "",
|
||||||
|
"Basics": "",
|
||||||
|
"BatchDeleteConfirm": "",
|
||||||
|
"BatchDeleteHelp": "",
|
||||||
|
"BatchEdit": "",
|
||||||
|
"BatchEditUpdatingItemsCount": "",
|
||||||
|
"Blocking": "",
|
||||||
|
"BlockingHelp": "",
|
||||||
|
"Book": "",
|
||||||
|
"Bookmarklet": "",
|
||||||
|
"BookmarkletHelp1": "",
|
||||||
|
"BookmarkletHelp2": "",
|
||||||
|
"BookmarkletHelp3": "",
|
||||||
|
"BookmarkletImportSubtitle": "",
|
||||||
|
"Books": "",
|
||||||
|
"CREATE_ERROR": "",
|
||||||
|
"Calculator": "",
|
||||||
|
"Calories": "",
|
||||||
|
"Cancel": "",
|
||||||
|
"Cannot_Add_Notes_To_Shopping": "",
|
||||||
|
"Carbohydrates": "",
|
||||||
|
"Cards": "",
|
||||||
|
"Cascading": "",
|
||||||
|
"CascadingHelp": "",
|
||||||
|
"Categories": "",
|
||||||
|
"Category": "",
|
||||||
|
"CategoryInstruction": "",
|
||||||
|
"CategoryName": "",
|
||||||
|
"Change_Password": "",
|
||||||
|
"Changing": "",
|
||||||
|
"ChildInheritFields": "",
|
||||||
|
"ChildInheritFields_help": "",
|
||||||
|
"Choose_Category": "",
|
||||||
|
"Clear": "",
|
||||||
|
"Click_To_Edit": "",
|
||||||
|
"Clone": "",
|
||||||
|
"Close": "",
|
||||||
|
"Color": "",
|
||||||
|
"Combine_All_Steps": "",
|
||||||
|
"Coming_Soon": "",
|
||||||
|
"Comment": "",
|
||||||
|
"Comments_setting": "",
|
||||||
|
"Completed": "",
|
||||||
|
"Confirm": "",
|
||||||
|
"ConnectorConfig": "",
|
||||||
|
"ConnectorConfigHelp": "",
|
||||||
|
"Continue": "",
|
||||||
|
"Conversion": "",
|
||||||
|
"ConversionsHelp": "",
|
||||||
|
"ConvertUsingAI": "",
|
||||||
|
"CookLog": "",
|
||||||
|
"CookLogHelp": "",
|
||||||
|
"Cooked": "",
|
||||||
|
"Copied": "",
|
||||||
|
"Copy": "",
|
||||||
|
"Copy Link": "",
|
||||||
|
"Copy Token": "",
|
||||||
|
"Copy_template_reference": "",
|
||||||
|
"Cosmetic": "",
|
||||||
|
"CountMore": "",
|
||||||
|
"Create": "",
|
||||||
|
"Create Food": "",
|
||||||
|
"Create Recipe": "",
|
||||||
|
"CreateFirstRecipe": "",
|
||||||
|
"CreateInvitation": "",
|
||||||
|
"Create_Meal_Plan_Entry": "",
|
||||||
|
"Create_New_Food": "",
|
||||||
|
"Create_New_Keyword": "",
|
||||||
|
"Create_New_Meal_Type": "",
|
||||||
|
"Create_New_Shopping Category": "",
|
||||||
|
"Create_New_Shopping_Category": "",
|
||||||
|
"Create_New_Unit": "",
|
||||||
|
"Created": "",
|
||||||
|
"CreatedBy": "",
|
||||||
|
"Credits": "",
|
||||||
|
"Ctrl+K": "",
|
||||||
|
"Current_Period": "",
|
||||||
|
"Custom Filter": "",
|
||||||
|
"CustomImageHelp": "",
|
||||||
|
"CustomLogoHelp": "",
|
||||||
|
"CustomLogos": "",
|
||||||
|
"CustomNavLogoHelp": "",
|
||||||
|
"CustomTheme": "",
|
||||||
|
"CustomThemeHelp": "",
|
||||||
|
"DELETE_ERROR": "",
|
||||||
|
"Data_Import_Info": "",
|
||||||
|
"Database": "",
|
||||||
|
"DatabaseHelp": "",
|
||||||
|
"Datatype": "",
|
||||||
|
"Date": "",
|
||||||
|
"Day": "",
|
||||||
|
"Days": "",
|
||||||
|
"Decimals": "",
|
||||||
|
"Default": "",
|
||||||
|
"DefaultPage": "",
|
||||||
|
"Default_Unit": "",
|
||||||
|
"DelayFor": "",
|
||||||
|
"DelayUntil": "",
|
||||||
|
"Delete": "",
|
||||||
|
"DeleteConfirmQuestion": "",
|
||||||
|
"DeleteShoppingConfirm": "",
|
||||||
|
"DeleteSomething": "",
|
||||||
|
"Delete_All": "",
|
||||||
|
"Delete_Food": "",
|
||||||
|
"Delete_Keyword": "",
|
||||||
|
"Deleted": "",
|
||||||
|
"Description": "",
|
||||||
|
"Description_Replace": "",
|
||||||
|
"DeviceSettings": "",
|
||||||
|
"DeviceSettingsHelp": "",
|
||||||
|
"Disable": "",
|
||||||
|
"Disable_Amount": "",
|
||||||
|
"Disabled": "",
|
||||||
|
"Documentation": "",
|
||||||
|
"DontChange": "",
|
||||||
|
"Down": "",
|
||||||
|
"Download": "",
|
||||||
|
"DragToUpload": "",
|
||||||
|
"Drag_Here_To_Delete": "",
|
||||||
|
"Duplicate": "",
|
||||||
|
"DuplicateFoundInfo": "",
|
||||||
|
"Edit": "",
|
||||||
|
"Edit_Food": "",
|
||||||
|
"Edit_Keyword": "",
|
||||||
|
"Edit_Meal_Plan_Entry": "",
|
||||||
|
"Edit_Recipe": "",
|
||||||
|
"Email": "",
|
||||||
|
"Empty": "",
|
||||||
|
"Enable": "",
|
||||||
|
"Enable_Amount": "",
|
||||||
|
"Enabled": "",
|
||||||
|
"EndDate": "",
|
||||||
|
"Energy": "",
|
||||||
|
"Entries": "",
|
||||||
|
"Error": "",
|
||||||
|
"ErrorUrlListImport": "",
|
||||||
|
"Events": "",
|
||||||
|
"Export": "",
|
||||||
|
"Export_As_ICal": "",
|
||||||
|
"Export_Not_Yet_Supported": "",
|
||||||
|
"Export_Supported": "",
|
||||||
|
"Export_To_ICal": "",
|
||||||
|
"External": "",
|
||||||
|
"ExternalRecipe": "",
|
||||||
|
"ExternalRecipeImport": "",
|
||||||
|
"ExternalRecipeImportHelp": "",
|
||||||
|
"ExternalStorage": "",
|
||||||
|
"External_Recipe_Image": "",
|
||||||
|
"FDC_ID": "",
|
||||||
|
"FDC_ID_help": "",
|
||||||
|
"FDC_Search": "",
|
||||||
|
"FETCH_ERROR": "",
|
||||||
|
"Failure": "",
|
||||||
|
"Fats": "",
|
||||||
|
"File": "",
|
||||||
|
"Files": "",
|
||||||
|
"FinishedAt": "",
|
||||||
|
"First": "",
|
||||||
|
"First_name": "",
|
||||||
|
"Food": "",
|
||||||
|
"FoodHelp": "",
|
||||||
|
"FoodInherit": "",
|
||||||
|
"FoodNotOnHand": "",
|
||||||
|
"FoodOnHand": "",
|
||||||
|
"Food_Alias": "",
|
||||||
|
"Food_Replace": "",
|
||||||
|
"Foods": "",
|
||||||
|
"Friday": "",
|
||||||
|
"FromBalance": "",
|
||||||
|
"Fulltext": "",
|
||||||
|
"FulltextHelp": "",
|
||||||
|
"Fuzzy": "",
|
||||||
|
"FuzzySearchHelp": "",
|
||||||
|
"GettingStarted": "",
|
||||||
|
"Global": "",
|
||||||
|
"GlobalHelp": "",
|
||||||
|
"Group": "",
|
||||||
|
"GroupBy": "",
|
||||||
|
"HeaderWarning": "",
|
||||||
|
"Headline": "",
|
||||||
|
"Help": "",
|
||||||
|
"Hide_External": "",
|
||||||
|
"Hide_Food": "",
|
||||||
|
"Hide_Keyword": "",
|
||||||
|
"Hide_Keywords": "",
|
||||||
|
"Hide_Recipes": "",
|
||||||
|
"Hide_as_header": "",
|
||||||
|
"Hierarchy": "",
|
||||||
|
"History": "",
|
||||||
|
"HostedFreeVersion": "",
|
||||||
|
"Hour": "",
|
||||||
|
"Hours": "",
|
||||||
|
"Icon": "",
|
||||||
|
"IgnoreAccents": "",
|
||||||
|
"IgnoreAccentsHelp": "",
|
||||||
|
"IgnoreThis": "",
|
||||||
|
"Ignore_Shopping": "",
|
||||||
|
"IgnoredFood": "",
|
||||||
|
"Image": "",
|
||||||
|
"Import": "",
|
||||||
|
"Import Recipe": "",
|
||||||
|
"ImportAll": "",
|
||||||
|
"ImportFirstRecipe": "",
|
||||||
|
"ImportIntoTandoor": "",
|
||||||
|
"ImportMealPlans": "",
|
||||||
|
"ImportShoppingList": "",
|
||||||
|
"Import_Error": "",
|
||||||
|
"Import_Not_Yet_Supported": "",
|
||||||
|
"Import_Result_Info": "",
|
||||||
|
"Import_Supported": "",
|
||||||
|
"Import_finished": "",
|
||||||
|
"Imported": "",
|
||||||
|
"Imported_From": "",
|
||||||
|
"Importer_Help": "",
|
||||||
|
"Information": "",
|
||||||
|
"Ingredient": "",
|
||||||
|
"Ingredient Editor": "",
|
||||||
|
"Ingredient Overview": "",
|
||||||
|
"IngredientEditorHelp": "",
|
||||||
|
"IngredientHelp": "",
|
||||||
|
"IngredientInShopping": "",
|
||||||
|
"Ingredients": "",
|
||||||
|
"Inherit": "",
|
||||||
|
"InheritFields": "",
|
||||||
|
"InheritFields_help": "",
|
||||||
|
"InheritWarning": "",
|
||||||
|
"Input": "",
|
||||||
|
"Instruction_Replace": "",
|
||||||
|
"Instructions": "",
|
||||||
|
"InstructionsEditHelp": "",
|
||||||
|
"Internal": "",
|
||||||
|
"InviteLinkHelp": "",
|
||||||
|
"Invite_Link": "",
|
||||||
|
"Invites": "",
|
||||||
|
"Key_Ctrl": "",
|
||||||
|
"Key_Shift": "",
|
||||||
|
"Keyword": "",
|
||||||
|
"KeywordHelp": "",
|
||||||
|
"Keyword_Alias": "",
|
||||||
|
"Keywords": "",
|
||||||
|
"Language": "",
|
||||||
|
"Last": "",
|
||||||
|
"Last_name": "",
|
||||||
|
"Learn_More": "",
|
||||||
|
"LeaveSpace": "",
|
||||||
|
"Link": "",
|
||||||
|
"Load": "",
|
||||||
|
"Load_More": "",
|
||||||
|
"LogCredits": "",
|
||||||
|
"LogCreditsHelp": "",
|
||||||
|
"Log_Cooking": "",
|
||||||
|
"Log_Recipe_Cooking": "",
|
||||||
|
"Logo": "",
|
||||||
|
"Logout": "",
|
||||||
|
"Make_Header": "",
|
||||||
|
"Make_Ingredient": "",
|
||||||
|
"ManageSubscription": "",
|
||||||
|
"Manage_Books": "",
|
||||||
|
"Manage_Emails": "",
|
||||||
|
"MealPlanHelp": "",
|
||||||
|
"MealPlanShoppingHelp": "",
|
||||||
|
"MealTypeHelp": "",
|
||||||
|
"Meal_Plan": "",
|
||||||
|
"Meal_Plan_Days": "",
|
||||||
|
"Meal_Type": "",
|
||||||
|
"Meal_Type_Required": "",
|
||||||
|
"Meal_Types": "",
|
||||||
|
"Merge": "",
|
||||||
|
"MergeAutomateHelp": "",
|
||||||
|
"MergeInsteadOfDelete": "",
|
||||||
|
"Merge_Keyword": "",
|
||||||
|
"Message": "",
|
||||||
|
"Messages": "",
|
||||||
|
"Miscellaneous": "",
|
||||||
|
"MissingConversion": "",
|
||||||
|
"MissingProperties": "",
|
||||||
|
"Model": "",
|
||||||
|
"ModelSelectResultsHelp": "",
|
||||||
|
"Monday": "",
|
||||||
|
"Month": "",
|
||||||
|
"MonthlyCredits": "",
|
||||||
|
"MonthlyCreditsUsed": "",
|
||||||
|
"More": "",
|
||||||
|
"Move": "",
|
||||||
|
"MoveCategory": "",
|
||||||
|
"MoveToStep": "",
|
||||||
|
"Move_Down": "",
|
||||||
|
"Move_Food": "",
|
||||||
|
"Move_Keyword": "",
|
||||||
|
"Move_Up": "",
|
||||||
|
"Multiple": "",
|
||||||
|
"Name": "",
|
||||||
|
"Name_Replace": "",
|
||||||
|
"Nav_Color": "",
|
||||||
|
"Nav_Color_Help": "",
|
||||||
|
"Nav_Text_Mode": "",
|
||||||
|
"Nav_Text_Mode_Help": "",
|
||||||
|
"Never_Unit": "",
|
||||||
|
"New": "",
|
||||||
|
"New_Cookbook": "",
|
||||||
|
"New_Entry": "",
|
||||||
|
"New_Food": "",
|
||||||
|
"New_Keyword": "",
|
||||||
|
"New_Meal_Type": "",
|
||||||
|
"New_Recipe": "",
|
||||||
|
"New_Supermarket": "",
|
||||||
|
"New_Supermarket_Category": "",
|
||||||
|
"New_Unit": "",
|
||||||
|
"Next": "",
|
||||||
|
"Next_Day": "",
|
||||||
|
"Next_Period": "",
|
||||||
|
"No": "",
|
||||||
|
"NoCategory": "",
|
||||||
|
"NoMoreUndo": "",
|
||||||
|
"NoUnit": "",
|
||||||
|
"No_ID": "",
|
||||||
|
"No_Results": "",
|
||||||
|
"NotFound": "",
|
||||||
|
"NotFoundHelp": "",
|
||||||
|
"NotInShopping": "",
|
||||||
|
"Note": "",
|
||||||
|
"NullingHelp": "",
|
||||||
|
"Number of Objects": "",
|
||||||
|
"Nutrition": "",
|
||||||
|
"NutritionsPerServing": "",
|
||||||
|
"NutritionsPerServingHelp": "",
|
||||||
|
"OfflineAlert": "",
|
||||||
|
"Ok": "",
|
||||||
|
"OnHand": "",
|
||||||
|
"OnHand_help": "",
|
||||||
|
"Open": "",
|
||||||
|
"Open_Data_Import": "",
|
||||||
|
"Open_Data_Slug": "",
|
||||||
|
"Options": "",
|
||||||
|
"Order": "",
|
||||||
|
"OrderInformation": "",
|
||||||
|
"Original_Text": "",
|
||||||
|
"Owner": "",
|
||||||
|
"Page": "",
|
||||||
|
"Parameter": "",
|
||||||
|
"Parent": "",
|
||||||
|
"PartialMatch": "",
|
||||||
|
"PartialMatchHelp": "",
|
||||||
|
"Password": "",
|
||||||
|
"Path": "",
|
||||||
|
"PerPage": "",
|
||||||
|
"Period": "",
|
||||||
|
"Periods": "",
|
||||||
|
"Pin": "",
|
||||||
|
"Pinned": "",
|
||||||
|
"PinnedConfirmation": "",
|
||||||
|
"Plan_Period_To_Show": "",
|
||||||
|
"Plan_Show_How_Many_Periods": "",
|
||||||
|
"Planned": "",
|
||||||
|
"Planner": "",
|
||||||
|
"Planner_Settings": "",
|
||||||
|
"Planning&Shopping": "",
|
||||||
|
"Plural": "",
|
||||||
|
"Postpone": "",
|
||||||
|
"PostponedUntil": "",
|
||||||
|
"PrecisionSearchHelp": "",
|
||||||
|
"Preferences": "",
|
||||||
|
"Preparation": "",
|
||||||
|
"Preview": "",
|
||||||
|
"Previous_Day": "",
|
||||||
|
"Previous_Period": "",
|
||||||
|
"Print": "",
|
||||||
|
"Private": "",
|
||||||
|
"Private_Recipe": "",
|
||||||
|
"Private_Recipe_Help": "",
|
||||||
|
"Profile": "",
|
||||||
|
"Properties": "",
|
||||||
|
"PropertiesFoodHelp": "",
|
||||||
|
"Properties_Food_Amount": "",
|
||||||
|
"Properties_Food_Unit": "",
|
||||||
|
"Property": "",
|
||||||
|
"PropertyHelp": "",
|
||||||
|
"PropertyType": "",
|
||||||
|
"PropertyTypeHelp": "",
|
||||||
|
"Property_Editor": "",
|
||||||
|
"Protected": "",
|
||||||
|
"Proteins": "",
|
||||||
|
"Quick actions": "",
|
||||||
|
"QuickEntry": "",
|
||||||
|
"Random Recipes": "",
|
||||||
|
"RandomOrder": "",
|
||||||
|
"RateLimit": "",
|
||||||
|
"RateLimitHelp": "",
|
||||||
|
"Rating": "",
|
||||||
|
"Ratings": "",
|
||||||
|
"Recently_Viewed": "",
|
||||||
|
"Recipe": "",
|
||||||
|
"RecipeBookEntryHelp": "",
|
||||||
|
"RecipeBookHelp": "",
|
||||||
|
"RecipeHelp": "",
|
||||||
|
"RecipeStepsHelp": "",
|
||||||
|
"Recipe_Book": "",
|
||||||
|
"Recipe_Image": "",
|
||||||
|
"Recipes": "",
|
||||||
|
"Recipes_In_Import": "",
|
||||||
|
"Recipes_per_page": "",
|
||||||
|
"Refresh": "",
|
||||||
|
"Remove": "",
|
||||||
|
"RemoveAllType": "",
|
||||||
|
"RemoveFoodFromShopping": "",
|
||||||
|
"RemoveParent": "",
|
||||||
|
"Remove_nutrition_recipe": "",
|
||||||
|
"Reset": "",
|
||||||
|
"ResetHelp": "",
|
||||||
|
"Reset_Search": "",
|
||||||
|
"Reusable": "",
|
||||||
|
"Role": "",
|
||||||
|
"Root": "",
|
||||||
|
"Saturday": "",
|
||||||
|
"Save": "",
|
||||||
|
"Save/Load": "",
|
||||||
|
"Save_and_View": "",
|
||||||
|
"SavedSearch": "",
|
||||||
|
"SavedSearchHelp": "",
|
||||||
|
"ScalableNumber": "",
|
||||||
|
"Search": "",
|
||||||
|
"Search Settings": "",
|
||||||
|
"SearchMethod": "",
|
||||||
|
"SearchSettingsOverview": "",
|
||||||
|
"SearchSettingsWarning": "",
|
||||||
|
"Second": "",
|
||||||
|
"Seconds": "",
|
||||||
|
"Select": "",
|
||||||
|
"SelectAll": "",
|
||||||
|
"SelectNone": "",
|
||||||
|
"Select_App_To_Import": "",
|
||||||
|
"Select_Book": "",
|
||||||
|
"Select_File": "",
|
||||||
|
"Selected": "",
|
||||||
|
"SelectedCategories": "",
|
||||||
|
"Serving": "",
|
||||||
|
"Servings": "",
|
||||||
|
"ServingsText": "",
|
||||||
|
"Settings": "",
|
||||||
|
"SettingsOnlySuperuser": "",
|
||||||
|
"Share": "",
|
||||||
|
"ShopLater": "",
|
||||||
|
"ShopNow": "",
|
||||||
|
"ShoppingBackgroundSyncWarning": "",
|
||||||
|
"ShoppingListEntry": "",
|
||||||
|
"ShoppingListEntryHelp": "",
|
||||||
|
"ShoppingListRecipe": "",
|
||||||
|
"Shopping_Categories": "",
|
||||||
|
"Shopping_Category": "",
|
||||||
|
"Shopping_List_Empty": "",
|
||||||
|
"Shopping_input_placeholder": "",
|
||||||
|
"Shopping_list": "",
|
||||||
|
"ShowDelayed": "",
|
||||||
|
"ShowIngredients": "",
|
||||||
|
"ShowMealPlanOnStartPage": "",
|
||||||
|
"ShowRecentlyCompleted": "",
|
||||||
|
"ShowUncategorizedFood": "",
|
||||||
|
"Show_Logo": "",
|
||||||
|
"Show_Logo_Help": "",
|
||||||
|
"Show_Week_Numbers": "",
|
||||||
|
"Show_as_header": "",
|
||||||
|
"Single": "",
|
||||||
|
"Size": "",
|
||||||
|
"Skip": "",
|
||||||
|
"Social_Authentication": "",
|
||||||
|
"Sort_by_new": "",
|
||||||
|
"Source": "",
|
||||||
|
"SourceImportHelp": "",
|
||||||
|
"SourceImportSubtitle": "",
|
||||||
|
"Space": "",
|
||||||
|
"SpaceHelp": "",
|
||||||
|
"SpaceLimitExceeded": "",
|
||||||
|
"SpaceLimitReached": "",
|
||||||
|
"SpaceMemberHelp": "",
|
||||||
|
"SpaceMembers": "",
|
||||||
|
"SpaceMembersHelp": "",
|
||||||
|
"SpaceName": "",
|
||||||
|
"SpacePrivateObjectsHelp": "",
|
||||||
|
"SpaceSettings": "",
|
||||||
|
"Space_Cosmetic_Settings": "",
|
||||||
|
"Split": "",
|
||||||
|
"Split_All_Steps": "",
|
||||||
|
"StartDate": "",
|
||||||
|
"Starting_Day": "",
|
||||||
|
"StartsWith": "",
|
||||||
|
"StartsWithHelp": "",
|
||||||
|
"Step": "",
|
||||||
|
"StepHelp": "",
|
||||||
|
"Step_Name": "",
|
||||||
|
"Step_Type": "",
|
||||||
|
"Step_start_time": "",
|
||||||
|
"Steps": "",
|
||||||
|
"StepsOverview": "",
|
||||||
|
"Sticky_Nav": "",
|
||||||
|
"Sticky_Nav_Help": "",
|
||||||
|
"Storage": "",
|
||||||
|
"StorageHelp": "",
|
||||||
|
"StoragePasswordTokenHelp": "",
|
||||||
|
"Structured": "",
|
||||||
|
"SubstituteOnHand": "",
|
||||||
|
"Substitutes": "",
|
||||||
|
"Success": "",
|
||||||
|
"SuccessClipboard": "",
|
||||||
|
"Summary": "",
|
||||||
|
"Sunday": "",
|
||||||
|
"Supermarket": "",
|
||||||
|
"SupermarketCategoriesOnly": "",
|
||||||
|
"SupermarketCategoryHelp": "",
|
||||||
|
"SupermarketHelp": "",
|
||||||
|
"SupermarketName": "",
|
||||||
|
"Supermarkets": "",
|
||||||
|
"SupportsDescriptionField": "",
|
||||||
|
"SyncLog": "",
|
||||||
|
"SyncLogHelp": "",
|
||||||
|
"SyncedPath": "",
|
||||||
|
"SyncedPathHelp": "",
|
||||||
|
"System": "",
|
||||||
|
"Table": "",
|
||||||
|
"Table_of_Contents": "",
|
||||||
|
"Text": "",
|
||||||
|
"ThankYou": "",
|
||||||
|
"ThanksTextHosted": "",
|
||||||
|
"ThanksTextSelfhosted": "",
|
||||||
|
"Theme": "",
|
||||||
|
"Thursday": "",
|
||||||
|
"Time": "",
|
||||||
|
"Title": "",
|
||||||
|
"Title_or_Recipe_Required": "",
|
||||||
|
"Today": "",
|
||||||
|
"Toggle": "",
|
||||||
|
"Transpose_Words": "",
|
||||||
|
"TrigramThreshold": "",
|
||||||
|
"TrigramThresholdHelp": "",
|
||||||
|
"Tuesday": "",
|
||||||
|
"Type": "",
|
||||||
|
"UPDATE_ERROR": "",
|
||||||
|
"Unchanged": "",
|
||||||
|
"Undefined": "",
|
||||||
|
"Undo": "",
|
||||||
|
"Unit": "",
|
||||||
|
"UnitConversion": "",
|
||||||
|
"UnitConversionHelp": "",
|
||||||
|
"UnitHelp": "",
|
||||||
|
"Unit_Alias": "",
|
||||||
|
"Unit_Replace": "",
|
||||||
|
"Units": "",
|
||||||
|
"Unpin": "",
|
||||||
|
"UnpinnedConfirmation": "",
|
||||||
|
"Unrated": "",
|
||||||
|
"Up": "",
|
||||||
|
"Update": "",
|
||||||
|
"Update_Existing_Data": "",
|
||||||
|
"Updated": "",
|
||||||
|
"UpgradeNow": "",
|
||||||
|
"Url": "",
|
||||||
|
"UrlImportSubtitle": "",
|
||||||
|
"UrlList": "",
|
||||||
|
"UrlListSubtitle": "",
|
||||||
|
"Url_Import": "",
|
||||||
|
"Use_Fractions": "",
|
||||||
|
"Use_Fractions_Help": "",
|
||||||
|
"Use_Kj": "",
|
||||||
|
"Use_Metric": "",
|
||||||
|
"Use_Plural_Food_Always": "",
|
||||||
|
"Use_Plural_Food_Simple": "",
|
||||||
|
"Use_Plural_Unit_Always": "",
|
||||||
|
"Use_Plural_Unit_Simple": "",
|
||||||
|
"User": "",
|
||||||
|
"UserFileHelp": "",
|
||||||
|
"UserHelp": "",
|
||||||
|
"Username": "",
|
||||||
|
"Users": "",
|
||||||
|
"Valid Until": "",
|
||||||
|
"View": "",
|
||||||
|
"ViewLogHelp": "",
|
||||||
|
"View_Recipes": "",
|
||||||
|
"Viewed": "",
|
||||||
|
"Visibility": "",
|
||||||
|
"Waiting": "",
|
||||||
|
"WaitingTime": "",
|
||||||
|
"WarnPageLeave": "",
|
||||||
|
"Warning": "",
|
||||||
|
"WarningRecipeBookEntryDuplicate": "",
|
||||||
|
"Warning_Delete_Supermarket_Category": "",
|
||||||
|
"Website": "",
|
||||||
|
"Wednesday": "",
|
||||||
|
"Week": "",
|
||||||
|
"Week_Numbers": "",
|
||||||
|
"Welcome": "",
|
||||||
|
"WelcomeSettingsHelp": "",
|
||||||
|
"WelcometoTandoor": "",
|
||||||
|
"WorkingTime": "",
|
||||||
|
"Year": "",
|
||||||
|
"Yes": "",
|
||||||
|
"YourSpaces": "",
|
||||||
|
"active": "",
|
||||||
|
"add_keyword": "",
|
||||||
|
"additional_options": "",
|
||||||
|
"advanced": "",
|
||||||
|
"advanced_search_settings": "",
|
||||||
|
"after": "",
|
||||||
|
"all": "",
|
||||||
|
"all_fields_optional": "",
|
||||||
|
"and": "",
|
||||||
|
"and_down": "",
|
||||||
|
"and_up": "",
|
||||||
|
"any": "",
|
||||||
|
"asc": "",
|
||||||
|
"base_amount": "",
|
||||||
|
"base_unit": "",
|
||||||
|
"before": "",
|
||||||
|
"book_filter_help": "",
|
||||||
|
"click_image_import": "",
|
||||||
|
"confirm_delete": "",
|
||||||
|
"convert_internal": "",
|
||||||
|
"converted_amount": "",
|
||||||
|
"converted_unit": "",
|
||||||
|
"copy_markdown_table": "",
|
||||||
|
"copy_to_clipboard": "",
|
||||||
|
"copy_to_new": "",
|
||||||
|
"create_food_desc": "",
|
||||||
|
"create_rule": "",
|
||||||
|
"create_title": "",
|
||||||
|
"created_by": "",
|
||||||
|
"created_on": "",
|
||||||
|
"csv_delim_help": "",
|
||||||
|
"csv_delim_label": "",
|
||||||
|
"csv_prefix_help": "",
|
||||||
|
"csv_prefix_label": "",
|
||||||
|
"date_created": "",
|
||||||
|
"date_viewed": "",
|
||||||
|
"default_delay": "",
|
||||||
|
"default_delay_desc": "",
|
||||||
|
"del_confirmation_tree": "",
|
||||||
|
"delete_confirmation": "",
|
||||||
|
"delete_title": "",
|
||||||
|
"desc": "",
|
||||||
|
"download_csv": "",
|
||||||
|
"download_pdf": "",
|
||||||
|
"edit_title": "",
|
||||||
|
"empty_list": "",
|
||||||
|
"enable_expert": "",
|
||||||
|
"err_creating_resource": "",
|
||||||
|
"err_deleting_protected_resource": "",
|
||||||
|
"err_deleting_resource": "",
|
||||||
|
"err_fetching_resource": "",
|
||||||
|
"err_importing_recipe": "",
|
||||||
|
"err_merge_self": "",
|
||||||
|
"err_merging_resource": "",
|
||||||
|
"err_move_self": "",
|
||||||
|
"err_moving_resource": "",
|
||||||
|
"err_updating_resource": "",
|
||||||
|
"exact": "",
|
||||||
|
"exclude": "",
|
||||||
|
"expert_mode": "",
|
||||||
|
"explain": "",
|
||||||
|
"fields": "",
|
||||||
|
"file_upload_disabled": "",
|
||||||
|
"filter": "",
|
||||||
|
"filter_name": "",
|
||||||
|
"filter_to_supermarket": "",
|
||||||
|
"filter_to_supermarket_desc": "",
|
||||||
|
"fluid_ounce": "",
|
||||||
|
"food_inherit_info": "",
|
||||||
|
"food_recipe_help": "",
|
||||||
|
"g": "",
|
||||||
|
"gallon": "",
|
||||||
|
"hide_step_ingredients": "",
|
||||||
|
"hours": "",
|
||||||
|
"ignore_shopping_help": "",
|
||||||
|
"imperial_fluid_ounce": "",
|
||||||
|
"imperial_gallon": "",
|
||||||
|
"imperial_pint": "",
|
||||||
|
"imperial_quart": "",
|
||||||
|
"imperial_tbsp": "",
|
||||||
|
"imperial_tsp": "",
|
||||||
|
"import_duplicates": "",
|
||||||
|
"import_running": "",
|
||||||
|
"in_shopping": "",
|
||||||
|
"ingredient_list": "",
|
||||||
|
"kg": "",
|
||||||
|
"l": "",
|
||||||
|
"last_cooked": "",
|
||||||
|
"last_viewed": "",
|
||||||
|
"left_handed": "",
|
||||||
|
"left_handed_help": "",
|
||||||
|
"make_now": "",
|
||||||
|
"make_now_count": "",
|
||||||
|
"mark_complete": "",
|
||||||
|
"mealplan_autoadd_shopping": "",
|
||||||
|
"mealplan_autoadd_shopping_desc": "",
|
||||||
|
"mealplan_autoexclude_onhand": "",
|
||||||
|
"mealplan_autoexclude_onhand_desc": "",
|
||||||
|
"mealplan_autoinclude_related": "",
|
||||||
|
"mealplan_autoinclude_related_desc": "",
|
||||||
|
"merge_confirmation": "",
|
||||||
|
"merge_selection": "",
|
||||||
|
"merge_title": "",
|
||||||
|
"min": "",
|
||||||
|
"ml": "",
|
||||||
|
"move_confirmation": "",
|
||||||
|
"move_selection": "",
|
||||||
|
"move_title": "",
|
||||||
|
"no_more_images_found": "",
|
||||||
|
"no_pinned_recipes": "",
|
||||||
|
"not": "",
|
||||||
|
"nothing": "",
|
||||||
|
"nothing_planned_today": "",
|
||||||
|
"on": "",
|
||||||
|
"one_url_per_line": "",
|
||||||
|
"open_data_help_text": "",
|
||||||
|
"or": "",
|
||||||
|
"ounce": "",
|
||||||
|
"parameter_count": "",
|
||||||
|
"paste_ingredients": "",
|
||||||
|
"paste_ingredients_placeholder": "",
|
||||||
|
"paste_json": "",
|
||||||
|
"per_serving": "",
|
||||||
|
"pint": "",
|
||||||
|
"plan_share_desc": "",
|
||||||
|
"plural_short": "",
|
||||||
|
"plural_usage_info": "",
|
||||||
|
"pound": "",
|
||||||
|
"property_type_fdc_hint": "",
|
||||||
|
"quart": "",
|
||||||
|
"recipe_filter": "",
|
||||||
|
"recipe_name": "",
|
||||||
|
"recipe_property_info": "",
|
||||||
|
"related_recipes": "",
|
||||||
|
"remember_hours": "",
|
||||||
|
"remember_search": "",
|
||||||
|
"remove_selection": "",
|
||||||
|
"reset_children": "",
|
||||||
|
"reset_children_help": "",
|
||||||
|
"reset_food_inheritance": "",
|
||||||
|
"reset_food_inheritance_info": "",
|
||||||
|
"reusable_help_text": "",
|
||||||
|
"review_shopping": "",
|
||||||
|
"save_filter": "",
|
||||||
|
"searchFilterCreatedByHelp": "",
|
||||||
|
"searchFilterObjectsAndHelp": "",
|
||||||
|
"searchFilterObjectsAndNotHelp": "",
|
||||||
|
"searchFilterObjectsHelp": "",
|
||||||
|
"searchFilterObjectsOrNotHelp": "",
|
||||||
|
"search_create_help_text": "",
|
||||||
|
"search_import_help_text": "",
|
||||||
|
"search_no_recipes": "",
|
||||||
|
"search_rank": "",
|
||||||
|
"seconds": "",
|
||||||
|
"select_file": "",
|
||||||
|
"select_food": "",
|
||||||
|
"select_keyword": "",
|
||||||
|
"select_recipe": "",
|
||||||
|
"select_unit": "",
|
||||||
|
"shared_with": "",
|
||||||
|
"shopping_add_onhand": "",
|
||||||
|
"shopping_add_onhand_desc": "",
|
||||||
|
"shopping_auto_sync": "",
|
||||||
|
"shopping_auto_sync_desc": "",
|
||||||
|
"shopping_category_help": "",
|
||||||
|
"shopping_recent_days": "",
|
||||||
|
"shopping_recent_days_desc": "",
|
||||||
|
"shopping_share": "",
|
||||||
|
"shopping_share_desc": "",
|
||||||
|
"show_books": "",
|
||||||
|
"show_filters": "",
|
||||||
|
"show_foods": "",
|
||||||
|
"show_ingredient_overview": "",
|
||||||
|
"show_ingredients_table": "",
|
||||||
|
"show_keywords": "",
|
||||||
|
"show_only_internal": "",
|
||||||
|
"show_rating": "",
|
||||||
|
"show_sortby": "",
|
||||||
|
"show_split_screen": "",
|
||||||
|
"show_sql": "",
|
||||||
|
"show_step_ingredients": "",
|
||||||
|
"show_step_ingredients_setting": "",
|
||||||
|
"show_step_ingredients_setting_help": "",
|
||||||
|
"show_units": "",
|
||||||
|
"simple_mode": "",
|
||||||
|
"sort_by": "",
|
||||||
|
"sql_debug": "",
|
||||||
|
"step_time_minutes": "",
|
||||||
|
"substitute_children": "",
|
||||||
|
"substitute_children_help": "",
|
||||||
|
"substitute_help": "",
|
||||||
|
"substitute_siblings": "",
|
||||||
|
"substitute_siblings_help": "",
|
||||||
|
"success_creating_resource": "",
|
||||||
|
"success_deleting_resource": "",
|
||||||
|
"success_fetching_resource": "",
|
||||||
|
"success_merging_resource": "",
|
||||||
|
"success_moving_resource": "",
|
||||||
|
"success_updating_resource": "",
|
||||||
|
"tbsp": "",
|
||||||
|
"theUsernameCannotBeChanged": "",
|
||||||
|
"times_cooked": "",
|
||||||
|
"to_close": "",
|
||||||
|
"to_navigate": "",
|
||||||
|
"to_select": "",
|
||||||
|
"today_recipes": "",
|
||||||
|
"total": "",
|
||||||
|
"tree_root": "",
|
||||||
|
"tree_select": "",
|
||||||
|
"tsp": "",
|
||||||
|
"unsaved": "",
|
||||||
|
"updatedon": "",
|
||||||
|
"view_recipe": "",
|
||||||
|
"warning_duplicate_filter": "",
|
||||||
|
"warning_feature_beta": "",
|
||||||
|
"warning_space_delete": ""
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -34,10 +34,10 @@
|
|||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
<template v-if="totalRecipes > 0">
|
<template v-if="totalRecipes > 0">
|
||||||
<horizontal-recipe-scroller :skeletons="4" mode="recent" v-if="totalRecipes > 0"></horizontal-recipe-scroller>
|
<horizontal-recipe-scroller :skeletons="4" mode="recent" v-if="totalRecipes > 10"></horizontal-recipe-scroller>
|
||||||
<horizontal-recipe-scroller :skeletons="4" mode="new" v-if="totalRecipes > 10"></horizontal-recipe-scroller>
|
<horizontal-recipe-scroller :skeletons="4" mode="new" v-if="totalRecipes > 10"></horizontal-recipe-scroller>
|
||||||
<horizontal-recipe-scroller :skeletons="4" mode="keyword" v-if="totalRecipes > 10"></horizontal-recipe-scroller>
|
<horizontal-recipe-scroller :skeletons="4" mode="keyword" v-if="totalRecipes > 10"></horizontal-recipe-scroller>
|
||||||
<horizontal-recipe-scroller :skeletons="4" mode="random" v-if="totalRecipes >= 5"></horizontal-recipe-scroller>
|
<horizontal-recipe-scroller :skeletons="4" mode="random" v-if="totalRecipes > 0"></horizontal-recipe-scroller>
|
||||||
<horizontal-recipe-scroller :skeletons="4" mode="created_by" v-if="totalRecipes > 10"></horizontal-recipe-scroller>
|
<horizontal-recipe-scroller :skeletons="4" mode="created_by" v-if="totalRecipes > 10"></horizontal-recipe-scroller>
|
||||||
<horizontal-recipe-scroller :skeletons="2" mode="rating" v-if="totalRecipes > 10"></horizontal-recipe-scroller>
|
<horizontal-recipe-scroller :skeletons="2" mode="rating" v-if="totalRecipes > 10"></horizontal-recipe-scroller>
|
||||||
<horizontal-recipe-scroller :skeletons="4" mode="keyword" v-if="totalRecipes > 25"></horizontal-recipe-scroller>
|
<horizontal-recipe-scroller :skeletons="4" mode="keyword" v-if="totalRecipes > 25"></horizontal-recipe-scroller>
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ import {useUserPreferenceStore} from "@/stores/UserPreferenceStore.ts";
|
|||||||
*/
|
*/
|
||||||
export function roundDecimals(num: number) {
|
export function roundDecimals(num: number) {
|
||||||
let decimals = useUserPreferenceStore().userSettings.ingredientDecimals
|
let decimals = useUserPreferenceStore().userSettings.ingredientDecimals
|
||||||
|
if (decimals === undefined) {
|
||||||
|
decimals = 2
|
||||||
|
}
|
||||||
return Number(num.toFixed(decimals))
|
return Number(num.toFixed(decimals))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import {aliases, fa} from 'vuetify/iconsets/fa'
|
|||||||
// Composables
|
// Composables
|
||||||
import {createVuetify} from 'vuetify'
|
import {createVuetify} from 'vuetify'
|
||||||
import {DateTime} from "luxon";
|
import {DateTime} from "luxon";
|
||||||
|
import {af, ar, az, bg, ca, ckb, cs, da, de, el, en, es, et, fi, fr, he, hr, hu, id, it, ja, km, ko, lt, lv, nl, no, pl, pt, ro, ru, sk, sl, srCyrl, srLatn, sv, th, tr, uk, vi, zhHans, zhHant} from "vuetify/locale";
|
||||||
|
|
||||||
// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides
|
// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides
|
||||||
export default createVuetify({
|
export default createVuetify({
|
||||||
@@ -22,22 +23,24 @@ export default createVuetify({
|
|||||||
maxWidth: '1400px'
|
maxWidth: '1400px'
|
||||||
},
|
},
|
||||||
// always localize the date display of DateInputs
|
// always localize the date display of DateInputs
|
||||||
VDateInput: {
|
// VDateInput: {
|
||||||
displayFormat: (date: Date) => DateTime.fromJSDate(date).toLocaleString()
|
// displayFormat: (date: Date) => DateTime.fromJSDate(date).toLocaleString()
|
||||||
},
|
// },
|
||||||
// always use color for switches to properly see if enabled or not
|
// always use color for switches to properly see if enabled or not
|
||||||
VSwitch: {
|
VSwitch: {
|
||||||
color: 'primary'
|
color: 'primary'
|
||||||
},
|
},
|
||||||
// globally set the correct decimal seperator
|
// globally set the correct decimal seperator
|
||||||
VNumberInput: {
|
// VNumberInput: {
|
||||||
decimalSeparator: 0.1.toLocaleString().replace(/\d/g, '')
|
// decimalSeparator: 0.1.toLocaleString().replace(/\d/g, '')
|
||||||
}
|
// }
|
||||||
|
},
|
||||||
|
locale: {
|
||||||
|
locale: 'en',
|
||||||
|
fallback: 'en',
|
||||||
|
messages: {af, ar, az, bg, ca, ckb, cs, da, de, el, en, es, et, fi, fr, he, hr, hu, id, it, ja, km, ko, lt, lv, nl, no, pl, pt, ro, ru, sk, sl, srCyrl, srLatn, sv, th, tr, uk, vi, zhHans, zhHant},
|
||||||
|
decimalSeparator: 0.1.toLocaleString().replace(/\d/g, '')
|
||||||
},
|
},
|
||||||
// locale: {
|
|
||||||
// locale: 'de',
|
|
||||||
// fallback: 'en',
|
|
||||||
// },
|
|
||||||
theme: {
|
theme: {
|
||||||
defaultTheme: 'light',
|
defaultTheme: 'light',
|
||||||
themes: {
|
themes: {
|
||||||
|
|||||||
@@ -1417,10 +1417,10 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.17.tgz#e8b3a41f0be76499882a89e8ed40d86a70fa4b70"
|
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.17.tgz#e8b3a41f0be76499882a89e8ed40d86a70fa4b70"
|
||||||
integrity sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==
|
integrity sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==
|
||||||
|
|
||||||
"@vue/tsconfig@^0.7.0":
|
"@vue/tsconfig@^0.8.1":
|
||||||
version "0.7.0"
|
version "0.8.1"
|
||||||
resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.7.0.tgz#67044c847b7a137b8cbfd6b23104c36dbaf80d1d"
|
resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.8.1.tgz#4732251fa58945024424385cf3be0b1708fad5fe"
|
||||||
integrity sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==
|
integrity sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==
|
||||||
|
|
||||||
"@vueform/multiselect@^2.6.11":
|
"@vueform/multiselect@^2.6.11":
|
||||||
version "2.6.11"
|
version "2.6.11"
|
||||||
@@ -1448,18 +1448,23 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-13.6.0.tgz#49196025c96c7daeb591c20a54b61cc336af99b6"
|
resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-13.6.0.tgz#49196025c96c7daeb591c20a54b61cc336af99b6"
|
||||||
integrity sha512-rnIH7JvU7NjrpexTsl2Iwv0V0yAx9cw7+clymjKuLSXG0QMcLD0LDgdNmXic+qL0SGvgSVPEpM9IDO/wqo1vkQ==
|
integrity sha512-rnIH7JvU7NjrpexTsl2Iwv0V0yAx9cw7+clymjKuLSXG0QMcLD0LDgdNmXic+qL0SGvgSVPEpM9IDO/wqo1vkQ==
|
||||||
|
|
||||||
"@vueuse/router@^13.6.0":
|
"@vueuse/router@^13.9.0":
|
||||||
version "13.6.0"
|
version "13.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/@vueuse/router/-/router-13.6.0.tgz#29456dab42eb75a0dc5fe4c62f59dd3f7c21a6ab"
|
resolved "https://registry.yarnpkg.com/@vueuse/router/-/router-13.9.0.tgz#44235e6732a30b53d1c8e2ef13ce783fdd189ca6"
|
||||||
integrity sha512-iXRwR4K7nz4PReW0QudhnM9NtYGvN4KrskFgF9G7NouM43big3bpSNRRocJKFWK7iu97ww5y82B3QA2zz3S/vw==
|
integrity sha512-7AYay8Pv/0fC4D0eygbIyZuLyVs+9D7dsnO5D8aqat9qcOz91v/XFWR667WE1+p+OkU0ib+FjQUdnTVBNoIw8g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@vueuse/shared" "13.6.0"
|
"@vueuse/shared" "13.9.0"
|
||||||
|
|
||||||
"@vueuse/shared@13.6.0":
|
"@vueuse/shared@13.6.0":
|
||||||
version "13.6.0"
|
version "13.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-13.6.0.tgz#872fdbd725fb4e3a12bd5aab85af9a5db0b1e481"
|
resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-13.6.0.tgz#872fdbd725fb4e3a12bd5aab85af9a5db0b1e481"
|
||||||
integrity sha512-pDykCSoS2T3fsQrYqf9SyF0QXWHmcGPQ+qiOVjlYSzlWd9dgppB2bFSM1GgKKkt7uzn0BBMV3IbJsUfHG2+BCg==
|
integrity sha512-pDykCSoS2T3fsQrYqf9SyF0QXWHmcGPQ+qiOVjlYSzlWd9dgppB2bFSM1GgKKkt7uzn0BBMV3IbJsUfHG2+BCg==
|
||||||
|
|
||||||
|
"@vueuse/shared@13.9.0":
|
||||||
|
version "13.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-13.9.0.tgz#7168b4ed647e625b05eb4e7e80fe8aabd00e3923"
|
||||||
|
integrity sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==
|
||||||
|
|
||||||
acorn@^8.14.0:
|
acorn@^8.14.0:
|
||||||
version "8.15.0"
|
version "8.15.0"
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
|
||||||
@@ -3343,10 +3348,10 @@ vite-plugin-vuetify@^2.1.1:
|
|||||||
debug "^4.3.3"
|
debug "^4.3.3"
|
||||||
upath "^2.0.1"
|
upath "^2.0.1"
|
||||||
|
|
||||||
vite@7.1.5:
|
vite@7.1.11:
|
||||||
version "7.1.5"
|
version "7.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.5.tgz#4dbcb48c6313116689be540466fc80faa377be38"
|
resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.11.tgz#4d006746112fee056df64985191e846ebfb6007e"
|
||||||
integrity sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==
|
integrity sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild "^0.25.0"
|
esbuild "^0.25.0"
|
||||||
fdir "^6.5.0"
|
fdir "^6.5.0"
|
||||||
@@ -3418,10 +3423,10 @@ vuedraggable@^4.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
sortablejs "1.14.0"
|
sortablejs "1.14.0"
|
||||||
|
|
||||||
vuetify@^3.9.7:
|
vuetify@^3.10.3:
|
||||||
version "3.9.7"
|
version "3.10.3"
|
||||||
resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-3.9.7.tgz#aea996f35111f25dd7e31ab956fbb40911841c24"
|
resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-3.10.3.tgz#f04e507bb5efee6b52f11b2fd60a20dced1a8831"
|
||||||
integrity sha512-Ib8PB3ItcguCol8f0DXLpoGyy7FvoOYW23SEWqXX+in1CSItJZHxUXXGSus94m5JWqYqQrFiwCykbHm7UWPi4Q==
|
integrity sha512-psc7oZfjz3LwH96ZRzSm4iGcOKKoeoVZIyO5Q5xO4vcUfWYxobL7TvMQv53jv1PnNvaMIXWeVIrQmiyce5dpTg==
|
||||||
|
|
||||||
w3c-xmlserializer@^5.0.0:
|
w3c-xmlserializer@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user