diff --git a/app/assets/images/icon-192.png b/app/assets/images/icon-192.png new file mode 100644 index 0000000..0f40c2a Binary files /dev/null and b/app/assets/images/icon-192.png differ diff --git a/app/assets/images/icon-512.png b/app/assets/images/icon-512.png new file mode 100644 index 0000000..624430d Binary files /dev/null and b/app/assets/images/icon-512.png differ diff --git a/app/controllers/service_worker_controller.rb b/app/controllers/service_worker_controller.rb new file mode 100644 index 0000000..0cfafab --- /dev/null +++ b/app/controllers/service_worker_controller.rb @@ -0,0 +1,7 @@ +class ServiceWorkerController < ApplicationController + protect_from_forgery except: :service_worker + def service_worker + end + def manifest + end +end diff --git a/app/javascript/application.js b/app/javascript/application.js index c275ea8..a0afebe 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -1,2 +1,3 @@ // Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails import "controllers" +import "custom/companion" diff --git a/app/javascript/custom/companion.js b/app/javascript/custom/companion.js new file mode 100644 index 0000000..97d7805 --- /dev/null +++ b/app/javascript/custom/companion.js @@ -0,0 +1,11 @@ +if (navigator.serviceWorker) { + navigator.serviceWorker + .register("/service-worker.js", { scope: "/" }) + .then(() => navigator.serviceWorker.ready) + .then((registration) => { + if ("SyncManager" in window) { + registration.sync.register("sync-forms"); + } + }) + .then(() => console.log("[Companion]", "Service worker registered!")); +} diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 43feb1f..3ebfd04 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -2,6 +2,7 @@ <%= content_for?(:title) ? yield(:title) : "Terminator" %> + <%= csrf_meta_tags %> <%= csp_meta_tag %> diff --git a/app/views/layouts/calendar.html.erb b/app/views/layouts/calendar.html.erb index 2d4def9..e398ca6 100644 --- a/app/views/layouts/calendar.html.erb +++ b/app/views/layouts/calendar.html.erb @@ -2,6 +2,7 @@ Terminator + <%= csrf_meta_tags %> <%= csp_meta_tag %> diff --git a/app/views/service_worker/manifest.json.erb b/app/views/service_worker/manifest.json.erb new file mode 100644 index 0000000..c2391e9 --- /dev/null +++ b/app/views/service_worker/manifest.json.erb @@ -0,0 +1,21 @@ +{ + "short_name": "Zdravo Stopalo", + "name": "Zdravo Stopalo", + "icons": [ + { + "src": "<%= image_path('icon-192.png')%>", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "<%= image_path('icon-512.png')%>", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": "<%= root_path %>", + "background_color": "#FFFFFF", + "display": "standalone", + "scope": "<%= root_path %>", + "theme_color": "#8e2731" +} diff --git a/app/views/service_worker/service_worker.js b/app/views/service_worker/service_worker.js new file mode 100644 index 0000000..e44d1bb --- /dev/null +++ b/app/views/service_worker/service_worker.js @@ -0,0 +1,14 @@ +function onInstall(event) { + console.log("[Serviceworker]", "Installing!", event); +} + +function onActivate(event) { + console.log("[Serviceworker]", "Activating!", event); +} + +function onFetch(event) { + console.log("[Serviceworker]", "Fetching!", event); +} +self.addEventListener("install", onInstall); +self.addEventListener("activate", onActivate); +self.addEventListener("fetch", onFetch); diff --git a/config/importmap.rb b/config/importmap.rb index 0ea2e3b..ecfbdae 100644 --- a/config/importmap.rb +++ b/config/importmap.rb @@ -4,3 +4,4 @@ pin "@hotwired/stimulus", to: "stimulus.min.js" pin "@hotwired/stimulus-loading", to: "stimulus-loading.js" pin "application" pin_all_from "app/javascript/controllers", under: "controllers" +pin_all_from "app/javascript/custom", under: "custom" diff --git a/config/routes.rb b/config/routes.rb index 2ab910a..69f7424 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,9 @@ Rails.application.routes.draw do # Can be used by load balancers and uptime monitors to verify that the app is live. get "up" => "rails/health#show", as: :rails_health_check + # config/routes.rb + get "/service-worker.js" => "service_worker#service_worker" + get "/manifest.json" => "service_worker#manifest" # Defines the root path route ("/") # root "posts#index" end