diff --git a/cookbook/templates/frontend/tandoor.html b/cookbook/templates/frontend/tandoor.html index b54adc6a6..c135c93c0 100644 --- a/cookbook/templates/frontend/tandoor.html +++ b/cookbook/templates/frontend/tandoor.html @@ -60,18 +60,16 @@ localStorage.setItem('BASE_PATH', "{% base_path request 'base' %}") - {#window.addEventListener("load", () => {#} - {# if ("serviceWorker" in navigator) {#} - {# navigator.serviceWorker.register("{% url 'service_worker' %}", {scope: "{% base_path request 'base' %}" + '/'}).then(function (reg) {#} - {# }).catch(function (err) {#} - {# console.warn('Error whilst registering service worker', err);#} - {# });#} - {# } else {#} - {# console.warn('service worker not in navigator');#} - {# }#} - {#}) - ; - #} + window.addEventListener("load", () => { + if ("serviceWorker" in navigator) { + navigator.serviceWorker.register("{% url 'service_worker' %}", {scope: "{% base_path request 'base' %}" + '/'}).then(function (reg) { + }).catch(function (err) { + console.warn('Error whilst registering service worker', err); + }); + } else { + console.warn('service worker not in navigator'); + } + }); diff --git a/cookbook/templates/offline.html b/cookbook/templates/offline.html index 272c37757..e7b6108c5 100644 --- a/cookbook/templates/offline.html +++ b/cookbook/templates/offline.html @@ -1,5 +1,4 @@ {% extends "base.html" %} -{% load webpack_loader %} {% load static %} {% load i18n %} @@ -16,14 +15,6 @@

Offline


- {% trans 'You are currently offline!' %}
- {% trans 'The recipes listed below are available for offline viewing because you have recently viewed them. Keep in mind that data might be outdated.' %} -
-
- -
- -


@@ -32,19 +23,5 @@ {% endblock %} {% block script %} - {% if debug %} - - {% else %} - - {% endif %} - - - {% endblock %} \ No newline at end of file diff --git a/cookbook/urls.py b/cookbook/urls.py index b5aecb48a..9412ba4a6 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -120,7 +120,7 @@ urlpatterns = [ path('api-token-auth/', CustomAuthToken.as_view()), path('offline/', views.offline, name='view_offline'), - #path('service-worker.js', (TemplateView.as_view(template_name="sw.js", content_type='application/javascript')), name='service_worker'), + path('service-worker.js', views.service_worker, name='service_worker'), path('manifest.json', views.web_manifest, name='web_manifest'), ] diff --git a/cookbook/views/views.py b/cookbook/views/views.py index 47e0f419c..1c8748ad0 100644 --- a/cookbook/views/views.py +++ b/cookbook/views/views.py @@ -16,7 +16,7 @@ from django.core.cache import caches from django.core.exceptions import ValidationError from django.core.management import call_command from django.db import models -from django.http import HttpResponseRedirect, JsonResponse +from django.http import HttpResponseRedirect, JsonResponse, HttpResponse from django.shortcuts import get_object_or_404, render from django.templatetags.static import static from django.urls import reverse, reverse_lazy @@ -31,7 +31,7 @@ from cookbook.helper.permission_helper import CustomIsGuest, GroupRequiredMixin, from cookbook.models import InviteLink, ShareLink, Space, UserSpace from cookbook.templatetags.theming_tags import get_theming_values from cookbook.version_info import VERSION_INFO -from recipes.settings import PLUGINS +from recipes.settings import PLUGINS, BASE_DIR def index(request, path=None, resource=None): @@ -41,7 +41,7 @@ def index(request, path=None, resource=None): if User.objects.count() < 1 and 'django.contrib.auth.backends.RemoteUserBackend' not in settings.AUTHENTICATION_BACKENDS: return HttpResponseRedirect(reverse_lazy('view_setup')) - if request.user.is_authenticated or re.search(r'/recipe/\d+/', request.path[:512]) and request.GET.get('share') : + if request.user.is_authenticated or re.search(r'/recipe/\d+/', request.path[:512]) and request.GET.get('share'): return render(request, 'frontend/tandoor.html', {}) else: return HttpResponseRedirect(reverse('account_login') + '?next=' + request.path) @@ -134,15 +134,16 @@ def no_perm(request): return HttpResponseRedirect(reverse('account_login') + '?next=' + request.GET.get('next', '/search/')) return render(request, 'no_perm_info.html') + def recipe_pdf_viewer(request, pk): with scopes_disabled(): recipe = get_object_or_404(Recipe, pk=pk) if share_link_valid(recipe, request.GET.get('share', None)) or (has_group_permission( request.user, ['guest']) and recipe.space == request.space): - return render(request, 'pdf_viewer.html', {'recipe_id': pk, 'share': request.GET.get('share', None)}) return HttpResponseRedirect(reverse('index')) + def system(request): if not request.user.is_superuser: return HttpResponseRedirect(reverse('index')) @@ -451,6 +452,13 @@ def offline(request): return render(request, 'offline.html', {}) +def service_worker(request): + with open(os.path.join(BASE_DIR, 'cookbook', 'static', 'vue3', 'service-worker.js'), 'rb') as service_worker_file: + response = HttpResponse(content=service_worker_file) + response['Content-Type'] = 'text/javascript' + return response + + def test(request): if not settings.DEBUG: return HttpResponseRedirect(reverse('index')) @@ -516,4 +524,3 @@ def get_orphan_files(delete_orphans=False): orphans = find_orphans() return [img[1] for img in orphans] - diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index f483ab06b..1892def02 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -1,15 +1,15 @@ -:root { - --md-primary-fg-color: #ffcb76; - --md-accent-fg-color: #FF6F00; +:root > * { + --md-primary-fg-color: #ddbf86; + --md-accent-fg-color: #b55e4f; - --md-primary-fg-color--light: #ffcb76; + --md-primary-fg-color--light: #ddbf86; /* not working part, has no effect */ - --md-primary-bg-color: #272727; - --md-default-bg-color: #272727; - --md-default-bg-color--light: #272727; - --md-default-bg-color--lighter: #272727; - --md-default-bg-color--lightest: #272727; + --md-primary-bg-color: #121212; + --md-default-bg-color: #121212; + --md-default-bg-color--light: #f5efea; + --md-default-bg-color--lighter: #f5efea; + --md-default-bg-color--lightest: #f5efea; } /* diff --git a/mkdocs.yml b/mkdocs.yml index f51e36471..a919f446b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -13,6 +13,8 @@ theme: favicon: logo_color.svg palette: scheme: slate + primary: custom + accent: custom diff --git a/vue3/package.json b/vue3/package.json index 90744b9e3..fce124f86 100644 --- a/vue3/package.json +++ b/vue3/package.json @@ -36,6 +36,7 @@ "typescript": "^5.8.3", "vite": "6.3.5", "vite-plugin-pwa": "^1.0.1", + "workbox-core": "^7.3.0", "workbox-build": "^7.3.0", "workbox-window": "^7.3.0", "workbox-background-sync": "^7.3.0", diff --git a/vue3/src/service-worker.ts b/vue3/src/service-worker.ts index bdd1e4a37..08d0d7c1d 100644 --- a/vue3/src/service-worker.ts +++ b/vue3/src/service-worker.ts @@ -4,12 +4,18 @@ import {registerRoute, setCatchHandler} from 'workbox-routing'; import {CacheFirst, NetworkFirst, NetworkOnly, StaleWhileRevalidate} from 'workbox-strategies'; import {ExpirationPlugin} from 'workbox-expiration'; import {BackgroundSyncPlugin, Queue} from "workbox-background-sync"; +import { clientsClaim } from 'workbox-core' + + cleanupOutdatedCaches() declare let self: ServiceWorkerGlobalScope precacheAndRoute(self.__WB_MANIFEST) +self.skipWaiting() +clientsClaim() + const OFFLINE_CACHE_NAME = 'offline-html'; let script_name = typeof window !== 'undefined' ? localStorage.getItem('SCRIPT_NAME') : '/' var OFFLINE_PAGE_URL = script_name + 'offline/'; diff --git a/vue3/vite.config.ts b/vue3/vite.config.ts index ca4ac93af..fdf3113ca 100644 --- a/vue3/vite.config.ts +++ b/vue3/vite.config.ts @@ -16,14 +16,10 @@ export default defineConfig({ autoImport: true, }), VitePWA({ - registerType: 'autoUpdate', + //registerType: 'autoUpdate', strategies: 'injectManifest', srcDir: 'src', filename: 'service-worker.ts', - injectManifest: { - swDest: "../cookbook/templates/sw.js", - injectionPoint: undefined - } }) ], resolve: { diff --git a/vue3/yarn.lock b/vue3/yarn.lock index fb56ea2b5..a2e9a50d3 100644 --- a/vue3/yarn.lock +++ b/vue3/yarn.lock @@ -3581,7 +3581,7 @@ workbox-cacheable-response@7.3.0: dependencies: workbox-core "7.3.0" -workbox-core@7.3.0: +workbox-core@7.3.0, workbox-core@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-7.3.0.tgz#f24fb92041a0b7482fe2dd856544aaa9fa105248" integrity sha512-Z+mYrErfh4t3zi7NVTvOuACB0A/jA3bgxUN3PwtAVHvfEsZxV9Iju580VEETug3zYJRc0Dmii/aixI/Uxj8fmw==