From fa74ee1755980da12f5ed20574473ccb90b4569b Mon Sep 17 00:00:00 2001 From: Alex Turchyn Date: Sat, 1 Feb 2025 21:55:47 +0200 Subject: [PATCH] add Progressive Web App --- app/controllers/pwa_controller.rb | 4 ++++ app/views/layouts/application.html.erb | 3 +++ app/views/pwa/manifest.json.erb | 25 +++++++++++++++++++++++++ config/routes.rb | 1 + lib/docuseal.rb | 4 ++++ public/apple-icon-180x180.png | Bin 12716 -> 11407 bytes public/service-worker.js | 11 +++++++++++ 7 files changed, 48 insertions(+) create mode 100644 app/controllers/pwa_controller.rb create mode 100644 app/views/pwa/manifest.json.erb create mode 100644 public/service-worker.js diff --git a/app/controllers/pwa_controller.rb b/app/controllers/pwa_controller.rb new file mode 100644 index 00000000..d1d4e4f3 --- /dev/null +++ b/app/controllers/pwa_controller.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +class PwaController < ActionController::Base +end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 590e0b23..df578657 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -2,6 +2,9 @@ <%= render 'layouts/head_tags' %> + <% if Docuseal.enable_pwa? %> + + <% end %> <%= csrf_meta_tags %> <%= csp_meta_tag %> diff --git a/app/views/pwa/manifest.json.erb b/app/views/pwa/manifest.json.erb new file mode 100644 index 00000000..3049f743 --- /dev/null +++ b/app/views/pwa/manifest.json.erb @@ -0,0 +1,25 @@ +{ + "name": "<%= Docuseal.product_name %>", + "short_name": "<%= Docuseal.product_name %>", + "id": "/", + "icons": [ + { + "src": "/logo.svg", + "type": "image/svg+xml", + "sizes": "any" + }, + { + "src": "/apple-touch-icon.png", + "type": "image/png", + "sizes": "192x192" + } + ], + "start_url": "/", + "display": "standalone", + "scope": "/", + "orientation": "natural", + "description": "<%= Docuseal.product_name %> is an open source platform that provides secure and efficient digital document signing and processing.", + "categories": ["productivity", "utilities"], + "theme_color": "#FAF7F4", + "background_color": "#FAF7F4" +} diff --git a/config/routes.rb b/config/routes.rb index b2f84549..0223f234 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,7 @@ Rails.application.routes.draw do root 'dashboard#index' get 'up' => 'rails/health#show' + get 'manifest' => 'pwa#manifest' devise_for :users, path: '/', only: %i[sessions passwords omniauth_callbacks], diff --git a/lib/docuseal.rb b/lib/docuseal.rb index 4e08d724..f74b99d1 100644 --- a/lib/docuseal.rb +++ b/lib/docuseal.rb @@ -69,6 +69,10 @@ module Docuseal @default_pkcs ||= GenerateCertificate.load_pkcs(Docuseal::CERTS) end + def enable_pwa? + true + end + def trusted_certs @trusted_certs ||= ENV['TRUSTED_CERTS'].to_s.gsub('\\n', "\n").split("\n\n").map do |base64| diff --git a/public/apple-icon-180x180.png b/public/apple-icon-180x180.png index bc23cb2ca3c2bfcfc91043b36a95807ff6adaaba..deb9f313bd27ff37600a251a098ac6157ca706f1 100644 GIT binary patch literal 11407 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 literal 12716 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 { + console.log('DocuSeal App installed') +}) + +self.addEventListener('activate', () => { + console.log('DocuSeal App activated') +}) + +self.addEventListener('fetch', (event) => { + event.respondWith(fetch(event.request)) +})