Merge branch 'develop' into feature/shopping-ui
This commit is contained in:
commit
62e1d860a9
4
.github/workflows/build-docker-open-data.yml
vendored
4
.github/workflows/build-docker-open-data.yml
vendored
@ -21,7 +21,7 @@ jobs:
|
|||||||
suffix: ""
|
suffix: ""
|
||||||
continue-on-error: false
|
continue-on-error: false
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Get version number
|
- name: Get version number
|
||||||
id: get_version
|
id: get_version
|
||||||
@ -43,7 +43,7 @@ jobs:
|
|||||||
path: ./recipes/plugins/open_data_plugin
|
path: ./recipes/plugins/open_data_plugin
|
||||||
|
|
||||||
# Build Vue frontend
|
# Build Vue frontend
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
cache: yarn
|
cache: yarn
|
||||||
|
4
.github/workflows/build-docker.yml
vendored
4
.github/workflows/build-docker.yml
vendored
@ -21,7 +21,7 @@ jobs:
|
|||||||
suffix: ""
|
suffix: ""
|
||||||
continue-on-error: false
|
continue-on-error: false
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Get version number
|
- name: Get version number
|
||||||
id: get_version
|
id: get_version
|
||||||
@ -35,7 +35,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Build Vue frontend
|
# Build Vue frontend
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
cache: yarn
|
cache: yarn
|
||||||
|
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@ -12,13 +12,13 @@ jobs:
|
|||||||
python-version: ['3.10']
|
python-version: ['3.10']
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Set up Python 3.10
|
- name: Set up Python 3.10
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.10'
|
python-version: '3.10'
|
||||||
# Build Vue frontend
|
# Build Vue frontend
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
- name: Install Vue dependencies
|
- name: Install Vue dependencies
|
||||||
|
6
.github/workflows/codeql-analysis.yml
vendored
6
.github/workflows/codeql-analysis.yml
vendored
@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
# We must fetch at least the immediate parents so that if this is
|
# We must fetch at least the immediate parents so that if this is
|
||||||
# a pull request then we can checkout the head.
|
# a pull request then we can checkout the head.
|
||||||
@ -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@v2
|
uses: github/codeql-action/init@v3
|
||||||
# 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@v2
|
uses: github/codeql-action/analyze@v3
|
||||||
with:
|
with:
|
||||||
languages: javascript, python
|
languages: javascript, python
|
||||||
|
4
.github/workflows/docs.yml
vendored
4
.github/workflows/docs.yml
vendored
@ -9,8 +9,8 @@ jobs:
|
|||||||
if: github.repository_owner == 'TandoorRecipes'
|
if: github.repository_owner == 'TandoorRecipes'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-python@v4
|
- uses: actions/setup-python@v5
|
||||||
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
|
||||||
|
2
boot.sh
2
boot.sh
@ -76,4 +76,4 @@ echo "Done"
|
|||||||
|
|
||||||
chmod -R 755 /opt/recipes/mediafiles
|
chmod -R 755 /opt/recipes/mediafiles
|
||||||
|
|
||||||
exec gunicorn -b :$TANDOOR_PORT --workers $GUNICORN_WORKERS --threads $GUNICORN_THREADS --access-logfile - --error-logfile - --log-level $GUNICORN_LOG_LEVEL recipes.wsgi
|
exec gunicorn -b "[::]:$TANDOOR_PORT" --workers $GUNICORN_WORKERS --threads $GUNICORN_THREADS --access-logfile - --error-logfile - --log-level $GUNICORN_LOG_LEVEL recipes.wsgi
|
||||||
|
@ -10,9 +10,12 @@ Tandoor can be installed as a progressive web app (PWA) on mobile and desktop de
|
|||||||
#### Safari (iPhone/iPad)
|
#### Safari (iPhone/iPad)
|
||||||
Open Tandoor, click Safari's share button, select `Add to Home Screen`
|
Open Tandoor, click Safari's share button, select `Add to Home Screen`
|
||||||
|
|
||||||
### Chrome/Chromium
|
#### Chrome/Chromium
|
||||||
Open Tandoor, click the `add Tandoor to the home screen` message that pops up at the bottom of the screen
|
Open Tandoor, click the `add Tandoor to the home screen` message that pops up at the bottom of the screen
|
||||||
|
|
||||||
|
#### Firefox for Android
|
||||||
|
Open Tandoor, click on the `⋮` menu icon, then on `Install`
|
||||||
|
|
||||||
### Desktop browsers
|
### Desktop browsers
|
||||||
|
|
||||||
#### Google Chrome
|
#### Google Chrome
|
||||||
@ -124,13 +127,13 @@ to your dream setup.
|
|||||||
## How can I upgrade postgres (major versions)?
|
## How can I upgrade postgres (major versions)?
|
||||||
Postgres requires manual intervention when updating from one major version to another. The steps are roughly
|
Postgres requires manual intervention when updating from one major version to another. The steps are roughly
|
||||||
|
|
||||||
1. use `pg_dumpall` to dump your database into SQL (for Docker `docker-compose exec -T <database_container_name> pg_dumpall -U <postgres_user_name> -f /path/to/dump.sql`)
|
1. use `pg_dumpall` to dump your database into SQL (for Docker `docker-compose exec -T <postgres_container_name> pg_dumpall -U <postgres_user_name> -f /path/to/dump.sql`)
|
||||||
2. stop the DB / down the container
|
2. stop the DB / down the container
|
||||||
3. move your postgres directory in order to keep it as a backup (e.g. `mv postgres postgres_old`)
|
3. move your postgres directory in order to keep it as a backup (e.g. `mv postgres postgres_old`)
|
||||||
4. update postgres to the new major version (for Docker just change the version number and pull)
|
4. update postgres to the new major version (for Docker just change the version number and pull)
|
||||||
5. start the db / up the container (do not start tandoor as it will automatically perform the database migrations which will conflict with loading the dump)
|
5. start the db / up the container (do not start tandoor as it will automatically perform the database migrations which will conflict with loading the dump)
|
||||||
6. if not using docker, you might need to create the same postgres user you had in the old database
|
6. if not using docker, you might need to create the same postgres user you had in the old database
|
||||||
7. load the postgres dump (for Docker `'/usr/local/bin/docker-compose exec -T <database_container_name> psql -U <postgres_user_name> postgres < /path/to/dump.sql`)
|
7. load the postgres dump (for Docker `'/usr/local/bin/docker-compose exec -T <postgres_container_name> psql -U <postgres_user_name> <postgres_database_name> < /path/to/dump.sql`)
|
||||||
|
|
||||||
If anything fails, go back to the old postgres version and data directory and try again.
|
If anything fails, go back to the old postgres version and data directory and try again.
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ In order to prevent denial of service attacks on the RegEx engine the number of
|
|||||||
and the length of the inputs that are processed are limited. Those limits should never be reached
|
and the length of the inputs that are processed are limited. Those limits should never be reached
|
||||||
during normal usage.
|
during normal usage.
|
||||||
|
|
||||||
## Instructtion Replace, Title Replace, Food Replace & Unit Replace
|
## Instruction Replace, Title Replace, Food Replace & Unit Replace
|
||||||
|
|
||||||
These work just like the Description Replace automation.
|
These work just like the Description Replace automation.
|
||||||
Instruction, Food and Unit Replace will run against every iteration of the object in a recipe during import.
|
Instruction, Food and Unit Replace will run against every iteration of the object in a recipe during import.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
!!! info "WIP"
|
!!! info "WIP"
|
||||||
While being around for a while there are still a lot of features that i plan on adding to the shopping list.
|
While being around for a while there are still a lot of features that I plan on adding to the shopping list.
|
||||||
You can see an overview of what is still planned on [this](https://github.com/vabene1111/recipes/issues/114) issue.
|
You can see an overview of what is still planned on [this](https://github.com/vabene1111/recipes/issues/114) issue.
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,6 +59,155 @@ I used two paths `<sub path>` and `<www path>` for simplicity. In my case I have
|
|||||||
|
|
||||||
I left out the TLS config in this example for simplicity.
|
I left out the TLS config in this example for simplicity.
|
||||||
|
|
||||||
|
## Docker + Apache + Sub-Path
|
||||||
|
|
||||||
|
The following could prove to be useful if you are not using Traefik, but instead run Apache as your reverse proxy to route all calls for a shared (sub)domain to a sub path, e.g. https://mydomain.tld/tandoor
|
||||||
|
|
||||||
|
As a side note, I am using [Blocky](https://0xerr0r.github.io/blocky/) + [Consul](https://hub.docker.com/r/hashicorp/consul) + [Registrator](https://hub.docker.com/r/gliderlabs/registrator) as a DNS solution.
|
||||||
|
|
||||||
|
The relevant Apache config:
|
||||||
|
```
|
||||||
|
<Location /tandoor>
|
||||||
|
# in case you want to restrict access to specific IP addresses:
|
||||||
|
Require local
|
||||||
|
Require forward-dns [myhomedomain.useyourdomain.com]
|
||||||
|
Require ip [anylocalorremoteipyouwanttowhitelist]
|
||||||
|
|
||||||
|
# The following assumes that tandoor.service.consul.local resolves to the IP address of the Docker container.
|
||||||
|
ProxyPass http://tandoor.service.consul.local:8080/tandoor
|
||||||
|
ProxyPassReverse http://tandoor.service.consul.local:8080/tandoor
|
||||||
|
RequestHeader add X-Script-Name /tandoor
|
||||||
|
RequestHeader set X-Forwarded-Proto "https"
|
||||||
|
ProxyPreserveHost On
|
||||||
|
</Location>
|
||||||
|
<Location /tandoor/static>
|
||||||
|
Require local
|
||||||
|
Require forward-dns [myhomedomain.useyourdomain.com]
|
||||||
|
Require ip [anylocalorremoteipyouwanttowhitelist]
|
||||||
|
|
||||||
|
ProxyPass http://tandoor.service.consul.local:8080/tandoor/tandoor/static
|
||||||
|
ProxyPassReverse http://tandoor.service.consul.local:8080/tandoor/static
|
||||||
|
RequestHeader add X-Script-Name /tandoor
|
||||||
|
RequestHeader set X-Forwarded-Proto "https"
|
||||||
|
ProxyPreserveHost On
|
||||||
|
</Location>
|
||||||
|
```
|
||||||
|
and the relevant section from the docker-compose.yml:
|
||||||
|
```
|
||||||
|
tandoor:
|
||||||
|
restart: always
|
||||||
|
container_name: tandoor
|
||||||
|
image: vabene1111/recipes
|
||||||
|
environment:
|
||||||
|
- SCRIPT_NAME=/tandoor
|
||||||
|
- JS_REVERSE_SCRIPT_PREFIX=/tandoor
|
||||||
|
- STATIC_URL=/tandoor/static/
|
||||||
|
- MEDIA_URL=/tandoor/media/
|
||||||
|
- GUNICORN_MEDIA=0
|
||||||
|
- SECRET_KEY=${YOUR_TANDOOR_SECRET_KEY}
|
||||||
|
- POSTGRES_HOST=postgres.service.consul.local
|
||||||
|
- POSTGRES_PORT=${POSTGRES_PORT}
|
||||||
|
- POSTGRES_USER=${YOUR_TANDOOR_POSTGRES_USER}
|
||||||
|
- POSTGRES_PASSWORD=${YOUR_TANDOOR_POSTGRES_PASSWORD}
|
||||||
|
- POSTGRES_DB=${YOUR_TANDOOR_POSTGRES_DB}
|
||||||
|
labels:
|
||||||
|
# The following is relevant only if you are using Registrator and Consul
|
||||||
|
- "SERVICE_NAME=tandoor"
|
||||||
|
volumes:
|
||||||
|
- ${YOUR_DOCKER_VOLUME_BASE_DIR}/tandoor/static:/opt/recipes/staticfiles:rw
|
||||||
|
# Do not make this a bind mount, see https://docs.tandoor.dev/install/docker/#volumes- vs-bind-mounts
|
||||||
|
- tandoor_nginx_config:/opt/recipes/nginx/conf.d
|
||||||
|
- ${YOUR_DOCKER_VOLUME_BASE_DIR}}/tandoor/media:/opt/recipes/mediafiles:rw
|
||||||
|
depends_on:
|
||||||
|
# You will have to set up postgres accordingly
|
||||||
|
- postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
The relevant docker-compose.yml for Registrator, Consul, and Blocky, and Autoheal:
|
||||||
|
```
|
||||||
|
consul:
|
||||||
|
image: hashicorp/consul
|
||||||
|
container_name: consul
|
||||||
|
command: >
|
||||||
|
agent -server
|
||||||
|
-domain consul.local
|
||||||
|
-advertise=${YOUR_DOCKER_HOST_IP_ON_THE_LAN}
|
||||||
|
-client=0.0.0.0
|
||||||
|
-encrypt=${SOME_SECRET_KEY}
|
||||||
|
-datacenter=${YOUR_DC_NAME}
|
||||||
|
-bootstrap-expect=1
|
||||||
|
-ui
|
||||||
|
-log-level=info
|
||||||
|
environment:
|
||||||
|
- "CONSUL_LOCAL_CONFIG={\"skip_leave_on_interrupt\": true, \"dns_config\": { \"service_ttl\": { \"*\": \"0s\" } } }"
|
||||||
|
network_mode: "host"
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
registrator:
|
||||||
|
image: gliderlabs/registrator:latest
|
||||||
|
container_name: registrator
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/tmp/docker.sock:ro
|
||||||
|
command: >
|
||||||
|
-internal
|
||||||
|
-cleanup=true
|
||||||
|
-deregister="always"
|
||||||
|
-resync=60
|
||||||
|
consul://host.docker.internal:8500
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
blocky:
|
||||||
|
image: spx01/blocky
|
||||||
|
container_name: blocky
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
start_period: 1m
|
||||||
|
labels:
|
||||||
|
# The following is only relevant if you use autoheal
|
||||||
|
autoheal: true
|
||||||
|
# Optional the instance hostname for logging purpose
|
||||||
|
hostname: blocky
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
ports:
|
||||||
|
- "1153:53/tcp"
|
||||||
|
- "1153:53/udp"
|
||||||
|
- 4000:4000
|
||||||
|
environment:
|
||||||
|
- TZ=YOUR_TIMEZONE # Optional to synchronize the log timestamp with host
|
||||||
|
volumes:
|
||||||
|
# Optional to synchronize the log timestamp with host
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
# config file
|
||||||
|
- ${YOUR_DOCKER_VOLUME_BASE_DIR}/blocky/config.yml:/app/config.yml
|
||||||
|
networks:
|
||||||
|
# in case you want to bind Blocky to an IP address
|
||||||
|
your-docker-network-name:
|
||||||
|
ipv4_address: 'some-ip-address-in-the-docker-network-subnet'
|
||||||
|
|
||||||
|
autoheal:
|
||||||
|
image: willfarrell/autoheal
|
||||||
|
volumes:
|
||||||
|
- '/var/run/docker.sock:/var/run/docker.sock'
|
||||||
|
environment:
|
||||||
|
- AUTOHEAL_CONTAINER_LABEL=autoheal
|
||||||
|
restart: always
|
||||||
|
container_name: autoheal
|
||||||
|
|
||||||
|
```
|
||||||
|
as well as a snippet of the Blocky configuration:
|
||||||
|
```
|
||||||
|
conditional:
|
||||||
|
fallbackUpstream: false
|
||||||
|
mapping:
|
||||||
|
consul.local: tcp+udp:host.docker.internal:8600
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## WSL
|
## WSL
|
||||||
|
|
||||||
If you want to install Tandoor on the Windows Subsystem for Linux you can find a detailed post here: <https://github.com/TandoorRecipes/recipes/issues/1733>.
|
If you want to install Tandoor on the Windows Subsystem for Linux you can find a detailed post here: <https://github.com/TandoorRecipes/recipes/issues/1733>.
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
|
listen [::]:80 ipv6only=on;
|
||||||
server_name localhost;
|
server_name localhost;
|
||||||
|
|
||||||
client_max_body_size 128M;
|
client_max_body_size 128M;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Django==4.2.7
|
Django==4.2.7
|
||||||
cryptography===41.0.6
|
cryptography===41.0.7
|
||||||
django-annoying==0.10.6
|
django-annoying==0.10.6
|
||||||
django-autocomplete-light==3.9.4
|
django-autocomplete-light==3.9.7
|
||||||
django-cleanup==8.0.0
|
django-cleanup==8.0.0
|
||||||
django-crispy-forms==2.0
|
django-crispy-forms==2.0
|
||||||
crispy-bootstrap4==2022.1
|
crispy-bootstrap4==2022.1
|
||||||
@ -14,7 +14,7 @@ bleach==6.0.0
|
|||||||
gunicorn==20.1.0
|
gunicorn==20.1.0
|
||||||
lxml==4.9.3
|
lxml==4.9.3
|
||||||
Markdown==3.5.1
|
Markdown==3.5.1
|
||||||
Pillow==10.0.1
|
Pillow==10.1.0
|
||||||
psycopg2-binary==2.9.5
|
psycopg2-binary==2.9.5
|
||||||
python-dotenv==1.0.0
|
python-dotenv==1.0.0
|
||||||
requests==2.31.0
|
requests==2.31.0
|
||||||
@ -26,7 +26,7 @@ pyyaml==6.0.1
|
|||||||
uritemplate==4.1.1
|
uritemplate==4.1.1
|
||||||
beautifulsoup4==4.12.2
|
beautifulsoup4==4.12.2
|
||||||
microdata==0.8.0
|
microdata==0.8.0
|
||||||
Jinja2==3.1.2
|
Jinja2==3.1.3
|
||||||
django-webpack-loader==1.8.1
|
django-webpack-loader==1.8.1
|
||||||
git+https://github.com/BITSOLVER/django-js-reverse@071e304fd600107bc64bbde6f2491f1fe049ec82
|
git+https://github.com/BITSOLVER/django-js-reverse@071e304fd600107bc64bbde6f2491f1fe049ec82
|
||||||
django-allauth==0.58.1
|
django-allauth==0.58.1
|
||||||
@ -36,13 +36,13 @@ pytest==7.4.3
|
|||||||
pytest-django==4.6.0
|
pytest-django==4.6.0
|
||||||
django-treebeard==4.7
|
django-treebeard==4.7
|
||||||
django-cors-headers==4.2.0
|
django-cors-headers==4.2.0
|
||||||
django-storages==1.13.2
|
django-storages==1.14.2
|
||||||
boto3==1.28.75
|
boto3==1.28.75
|
||||||
django-prometheus==2.2.0
|
django-prometheus==2.2.0
|
||||||
django-hCaptcha==0.2.0
|
django-hCaptcha==0.2.0
|
||||||
python-ldap==3.4.3
|
python-ldap==3.4.3
|
||||||
django-auth-ldap==4.4.0
|
django-auth-ldap==4.4.0
|
||||||
pytest-factoryboy==2.5.1
|
pytest-factoryboy==2.6.0
|
||||||
pyppeteer==1.0.2
|
pyppeteer==1.0.2
|
||||||
validators==0.20.0
|
validators==0.20.0
|
||||||
pytube==15.0.0
|
pytube==15.0.0
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
"vue2-touch-events": "^3.2.2",
|
"vue2-touch-events": "^3.2.2",
|
||||||
"vuedraggable": "^2.24.3",
|
"vuedraggable": "^2.24.3",
|
||||||
"workbox-webpack-plugin": "^6.5.4",
|
"workbox-webpack-plugin": "^6.5.4",
|
||||||
"workbox-window": "^6.5.4"
|
"workbox-window": "^7.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@kazupon/vue-i18n-loader": "^0.5.0",
|
"@kazupon/vue-i18n-loader": "^0.5.0",
|
||||||
@ -65,11 +65,11 @@
|
|||||||
"typescript": "~5.1.6",
|
"typescript": "~5.1.6",
|
||||||
"vue-cli-plugin-i18n": "^2.3.2",
|
"vue-cli-plugin-i18n": "^2.3.2",
|
||||||
"webpack-bundle-tracker": "1.8.1",
|
"webpack-bundle-tracker": "1.8.1",
|
||||||
"workbox-background-sync": "^6.5.4",
|
"workbox-background-sync": "^7.0.0",
|
||||||
"workbox-expiration": "^6.5.4",
|
"workbox-expiration": "^6.5.4",
|
||||||
"workbox-navigation-preload": "^6.5.4",
|
"workbox-navigation-preload": "^7.0.0",
|
||||||
"workbox-precaching": "^6.5.4",
|
"workbox-precaching": "^6.5.4",
|
||||||
"workbox-routing": "^6.5.4",
|
"workbox-routing": "^7.0.0",
|
||||||
"workbox-strategies": "^6.2.4"
|
"workbox-strategies": "^6.2.4"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
|
@ -364,7 +364,7 @@ export default {
|
|||||||
},
|
},
|
||||||
mobileSimpleGrid() {
|
mobileSimpleGrid() {
|
||||||
let grid = [];
|
let grid = [];
|
||||||
let currentDate = moment();
|
let currentDate = moment(this.showDate);
|
||||||
for (let x = 0; x < 7; x++) {
|
for (let x = 0; x < 7; x++) {
|
||||||
let moment_date = currentDate.clone().add(x, "d");
|
let moment_date = currentDate.clone().add(x, "d");
|
||||||
grid.push({
|
grid.push({
|
||||||
@ -483,7 +483,7 @@ export default {
|
|||||||
this.setShowDate(ctx.selectedDate)
|
this.setShowDate(ctx.selectedDate)
|
||||||
},
|
},
|
||||||
setShowDate(d) {
|
setShowDate(d) {
|
||||||
this.showDate = d
|
this.showDate = d ?? new Date();
|
||||||
},
|
},
|
||||||
createEntryClick(data) {
|
createEntryClick(data) {
|
||||||
this.mealplan_default_date = moment(data).format("YYYY-MM-DD")
|
this.mealplan_default_date = moment(data).format("YYYY-MM-DD")
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<td class="d-print-none" v-if="detailed" @click="done">
|
<td class="d-print-none align-baseline py-2" v-if="detailed" @click="done">
|
||||||
<i class="far fa-check-circle text-success" v-if="ingredient.checked"></i>
|
<i class="far fa-check-circle text-success" v-if="ingredient.checked"></i>
|
||||||
<i class="far fa-check-circle text-primary" v-if="!ingredient.checked"></i>
|
<i class="far fa-check-circle text-primary" v-if="!ingredient.checked"></i>
|
||||||
</td>
|
</td>
|
||||||
@ -40,9 +40,9 @@
|
|||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</td>
|
</td>
|
||||||
<td v-if="detailed">
|
<td v-if="detailed" class="align-baseline">
|
||||||
<template v-if="ingredient.note">
|
<template v-if="ingredient.note">
|
||||||
<span v-b-popover.hover="ingredient.note" class="d-print-none touchable py-0 px-2">
|
<span class="d-print-none touchable py-0 px-2" v-b-popover.hover="ingredient.note">
|
||||||
<i class="far fa-comment"></i>
|
<i class="far fa-comment"></i>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@ -106,9 +106,22 @@ export default {
|
|||||||
<style scoped>
|
<style scoped>
|
||||||
/* increase size of hover/touchable space without changing spacing */
|
/* increase size of hover/touchable space without changing spacing */
|
||||||
.touchable {
|
.touchable {
|
||||||
/* padding-right: 2em;
|
--target-increase: 2em;
|
||||||
padding-left: 2em; */
|
display: inline-flex;
|
||||||
margin-right: -1em;
|
|
||||||
margin-left: -1em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.touchable::after {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: var(--target-increase);
|
||||||
|
margin-right: calc(var(--target-increase) * -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.touchable::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: var(--target-increase);
|
||||||
|
margin-left: calc(var(--target-increase) * -1);
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -534,5 +534,25 @@
|
|||||||
"Food_Replace": "Zastąp produkt",
|
"Food_Replace": "Zastąp produkt",
|
||||||
"Unit_Replace": "Zastąp jednostkę",
|
"Unit_Replace": "Zastąp jednostkę",
|
||||||
"Alignment": "Wyrównanie",
|
"Alignment": "Wyrównanie",
|
||||||
"make_now_count": "Najbardziej brakujące składniki"
|
"make_now_count": "Najbardziej brakujące składniki",
|
||||||
|
"CustomTheme": "Własny motyw",
|
||||||
|
"CustomThemeHelp": "Zastąp style wybranego motywu, przesyłając własny plik CSS.",
|
||||||
|
"CustomLogoHelp": "Prześlij kwadratowe obrazy w różnych rozmiarach, aby zmienić logo w zakładce przeglądarki i zainstalowanej aplikacji internetowej.",
|
||||||
|
"Logo": "Logo",
|
||||||
|
"Show_Logo_Help": "Pokaż logo Tandoor lub przestrzeni na pasku nawigacyjnym.",
|
||||||
|
"Space_Cosmetic_Settings": "Administratorzy przestrzeni mogą zmienić niektóre ustawienia kosmetyczne, które zastąpią ustawienia klienta dla tej przestrzeni.",
|
||||||
|
"err_importing_recipe": "Wystąpił błąd podczas importowania przepisu!",
|
||||||
|
"Properties_Food_Amount": "Właściwości ilości żywności",
|
||||||
|
"Properties_Food_Unit": "Właściwości jednostek żywności",
|
||||||
|
"FDC_Search": "Wyszukiwanie w FDC",
|
||||||
|
"property_type_fdc_hint": "Tylko właściwe typy z identyfikatorem FDC mogą automatycznie pobierać dane z bazy danych FDC",
|
||||||
|
"Property_Editor": "Edytor właściwości",
|
||||||
|
"FDC_ID": "Identyfikator FDC",
|
||||||
|
"FDC_ID_help": "Identyfikator bazy FDC",
|
||||||
|
"CustomImageHelp": "Prześlij obraz, który będzie wyświetlany w przeglądzie przestrzeni.",
|
||||||
|
"CustomNavLogoHelp": "Prześlij obraz, który będzie używany jako logo paska nawigacyjnego.",
|
||||||
|
"CustomLogos": "Własne loga",
|
||||||
|
"Show_Logo": "Pokaż logo",
|
||||||
|
"Nav_Text_Mode": "Tryb nawigacji tekstowej",
|
||||||
|
"Nav_Text_Mode_Help": "Zachowuje się inaczej dla każdego motywu."
|
||||||
}
|
}
|
||||||
|
@ -6049,9 +6049,9 @@ flush-write-stream@^1.0.0:
|
|||||||
readable-stream "^2.3.6"
|
readable-stream "^2.3.6"
|
||||||
|
|
||||||
follow-redirects@^1.0.0, follow-redirects@^1.15.0:
|
follow-redirects@^1.0.0, follow-redirects@^1.15.0:
|
||||||
version "1.15.2"
|
version "1.15.4"
|
||||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
|
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf"
|
||||||
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
|
integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==
|
||||||
|
|
||||||
for-each@^0.3.3:
|
for-each@^0.3.3:
|
||||||
version "0.3.3"
|
version "0.3.3"
|
||||||
@ -11848,7 +11848,7 @@ wildcard@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
|
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
|
||||||
integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
|
integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
|
||||||
|
|
||||||
workbox-background-sync@6.6.1, workbox-background-sync@^6.5.4:
|
workbox-background-sync@6.6.1:
|
||||||
version "6.6.1"
|
version "6.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f"
|
resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f"
|
||||||
integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg==
|
integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg==
|
||||||
@ -11863,6 +11863,14 @@ workbox-background-sync@^5.1.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
workbox-core "^5.1.4"
|
workbox-core "^5.1.4"
|
||||||
|
|
||||||
|
workbox-background-sync@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz#2b84b96ca35fec976e3bd2794b70e4acec46b3a5"
|
||||||
|
integrity sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==
|
||||||
|
dependencies:
|
||||||
|
idb "^7.0.1"
|
||||||
|
workbox-core "7.0.0"
|
||||||
|
|
||||||
workbox-broadcast-update@6.6.1:
|
workbox-broadcast-update@6.6.1:
|
||||||
version "6.6.1"
|
version "6.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz#0fad9454cf8e4ace0c293e5617c64c75d8a8c61e"
|
resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz#0fad9454cf8e4ace0c293e5617c64c75d8a8c61e"
|
||||||
@ -11981,6 +11989,11 @@ workbox-core@6.6.1:
|
|||||||
resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.6.1.tgz#7184776d4134c5ed2f086878c882728fc9084265"
|
resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.6.1.tgz#7184776d4134c5ed2f086878c882728fc9084265"
|
||||||
integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw==
|
integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw==
|
||||||
|
|
||||||
|
workbox-core@7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-7.0.0.tgz#dec114ec923cc2adc967dd9be1b8a0bed50a3545"
|
||||||
|
integrity sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==
|
||||||
|
|
||||||
workbox-core@^5.1.4:
|
workbox-core@^5.1.4:
|
||||||
version "5.1.4"
|
version "5.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-5.1.4.tgz#8bbfb2362ecdff30e25d123c82c79ac65d9264f4"
|
resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-5.1.4.tgz#8bbfb2362ecdff30e25d123c82c79ac65d9264f4"
|
||||||
@ -12021,7 +12034,7 @@ workbox-google-analytics@^5.1.4:
|
|||||||
workbox-routing "^5.1.4"
|
workbox-routing "^5.1.4"
|
||||||
workbox-strategies "^5.1.4"
|
workbox-strategies "^5.1.4"
|
||||||
|
|
||||||
workbox-navigation-preload@6.6.1, workbox-navigation-preload@^6.5.4:
|
workbox-navigation-preload@6.6.1:
|
||||||
version "6.6.1"
|
version "6.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz#61a34fe125558dd88cf09237f11bd966504ea059"
|
resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz#61a34fe125558dd88cf09237f11bd966504ea059"
|
||||||
integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA==
|
integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA==
|
||||||
@ -12035,6 +12048,13 @@ workbox-navigation-preload@^5.1.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
workbox-core "^5.1.4"
|
workbox-core "^5.1.4"
|
||||||
|
|
||||||
|
workbox-navigation-preload@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz#4913878dbbd97057181d57baa18d2bbdde085c6c"
|
||||||
|
integrity sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==
|
||||||
|
dependencies:
|
||||||
|
workbox-core "7.0.0"
|
||||||
|
|
||||||
workbox-precaching@6.6.1, workbox-precaching@^6.5.4:
|
workbox-precaching@6.6.1, workbox-precaching@^6.5.4:
|
||||||
version "6.6.1"
|
version "6.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.6.1.tgz#dedeeba10a2d163d990bf99f1c2066ac0d1a19e2"
|
resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.6.1.tgz#dedeeba10a2d163d990bf99f1c2066ac0d1a19e2"
|
||||||
@ -12077,7 +12097,7 @@ workbox-recipes@6.6.1:
|
|||||||
workbox-routing "6.6.1"
|
workbox-routing "6.6.1"
|
||||||
workbox-strategies "6.6.1"
|
workbox-strategies "6.6.1"
|
||||||
|
|
||||||
workbox-routing@6.6.1, workbox-routing@^6.5.4:
|
workbox-routing@6.6.1:
|
||||||
version "6.6.1"
|
version "6.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.6.1.tgz#cba9a1c7e0d1ea11e24b6f8c518840efdc94f581"
|
resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.6.1.tgz#cba9a1c7e0d1ea11e24b6f8c518840efdc94f581"
|
||||||
integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg==
|
integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg==
|
||||||
@ -12091,6 +12111,13 @@ workbox-routing@^5.1.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
workbox-core "^5.1.4"
|
workbox-core "^5.1.4"
|
||||||
|
|
||||||
|
workbox-routing@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-7.0.0.tgz#6668438a06554f60645aedc77244a4fe3a91e302"
|
||||||
|
integrity sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==
|
||||||
|
dependencies:
|
||||||
|
workbox-core "7.0.0"
|
||||||
|
|
||||||
workbox-strategies@6.6.1, workbox-strategies@^6.2.4:
|
workbox-strategies@6.6.1, workbox-strategies@^6.2.4:
|
||||||
version "6.6.1"
|
version "6.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.6.1.tgz#38d0f0fbdddba97bd92e0c6418d0b1a2ccd5b8bf"
|
resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.6.1.tgz#38d0f0fbdddba97bd92e0c6418d0b1a2ccd5b8bf"
|
||||||
@ -12155,7 +12182,7 @@ workbox-webpack-plugin@^6.5.4:
|
|||||||
webpack-sources "^1.4.3"
|
webpack-sources "^1.4.3"
|
||||||
workbox-build "6.6.1"
|
workbox-build "6.6.1"
|
||||||
|
|
||||||
workbox-window@6.6.1, workbox-window@^6.5.4:
|
workbox-window@6.6.1:
|
||||||
version "6.6.1"
|
version "6.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.6.1.tgz#f22a394cbac36240d0dadcbdebc35f711bb7b89e"
|
resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.6.1.tgz#f22a394cbac36240d0dadcbdebc35f711bb7b89e"
|
||||||
integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ==
|
integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ==
|
||||||
@ -12170,6 +12197,14 @@ workbox-window@^5.1.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
workbox-core "^5.1.4"
|
workbox-core "^5.1.4"
|
||||||
|
|
||||||
|
workbox-window@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-7.0.0.tgz#a683ab33c896e4f16786794eac7978fc98a25d08"
|
||||||
|
integrity sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==
|
||||||
|
dependencies:
|
||||||
|
"@types/trusted-types" "^2.0.2"
|
||||||
|
workbox-core "7.0.0"
|
||||||
|
|
||||||
worker-farm@^1.7.0:
|
worker-farm@^1.7.0:
|
||||||
version "1.7.0"
|
version "1.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
|
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
|
||||||
|
Loading…
Reference in New Issue
Block a user