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