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==