From 2073791ceeca5c63554ff58b1d17bc1767e53e79 Mon Sep 17 00:00:00 2001 From: flaburgan Date: Sat, 27 Apr 2019 11:52:48 +0200 Subject: [PATCH] Add a manifest.json file as a first step to make diaspora* a PWA fixes #7997 closes #7998 --- Changelog.md | 1 + .../images/branding/logos/app-icon-512.png | Bin 0 -> 25524 bytes app/assets/images/branding/logos/app-icon.png | Bin 0 -> 8991 bytes app/controllers/manifest_controller.rb | 33 ++++++++++-------- app/views/layouts/_head.haml | 2 ++ app/views/layouts/application.mobile.haml | 2 +- config/initializers/secure_headers.rb | 3 +- graphics/app-icon.svg | 4 +++ 8 files changed, 29 insertions(+), 16 deletions(-) create mode 100644 app/assets/images/branding/logos/app-icon-512.png create mode 100644 app/assets/images/branding/logos/app-icon.png create mode 100644 graphics/app-icon.svg diff --git a/Changelog.md b/Changelog.md index a20434771..0fe58b64f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -5,6 +5,7 @@ ## Bug fixes ## Features +* Add a manifest.json file as a first step to make diaspora* a Progressive Web App [#7998](https://github.com/diaspora/diaspora/pull/7998) # 0.7.10.0 diff --git a/app/assets/images/branding/logos/app-icon-512.png b/app/assets/images/branding/logos/app-icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..ec40b11155f594104b8224a8646c61a52c524e92 GIT binary patch literal 25524 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

kW(pIb0 z`YY|(Yk6bixdgtBTgUZ0PNmBmbRMuxDEzL>mG|Pv1Y^a!NJSzFkqSwPTHn~Ln(TsF5#|LeZj`RZEu(LT~mxAwA%c{ z(_`h|{%rVOyVazPHdxnqgV^&F(@dLQtAX;e|4<4C76u&(4p-GhB@E*2JwA(>+w z<0|AQ-BPXC8{dpStF`tB3_V~Ga{O)!m)Nn(-^mX>>KSkra*Xpz z?+2K|DiKXMPV!3on_Zdpo2{W&XEOn|s%#8nJ7?dDRogvRyQv5$WrgUW7V*d1gPHY? zLEq6h3Yp=-0`sw6c0g&rGUoVY(2VMQ3vz`8bO^@YS7} z>N5>mk-&e|f7)gWlg8ojy7#&zuXeyc1k_G1X6}z>KWd~Sg}>zpYB+3EtO?lSSaR|H z(4w@jMs3pd^!W7NPAM0eWuQxUG4k#$){?R#r+W`~tHeplQ`Mj*%WSCwv4uwrG8NI8 zq`3xump44il&->Afftx$wte{l`z?zdL80E;%3&$B1TSILTz~6DY1dKc7Duo~gnr!f z4^+-u8^!1-tg&qKuZ9qj)Xce%a2T?E*N6#Sx=l5if- z^S}}d0meow4^JZo)A>BUZgjxVkyWFq_GG+&m`;v*Hr87>M85agIr#bW>jDC*dXO}S zVP;NZq+Dw4>cyyxUne7OTCAzzhV0qY$j_*R=8rXBr(I6OJQfdQ)6>)O05{QvrPBQO z_cLIeb1v@%rw*%2$w3=>;>^Mjdmm$E9l~_ASps=v4?8_tVcr^2b+o_#oyes09|rt! z&?sS^teT2I7vok(4MM)jNImO2sA^h{NoVcf8&$PJ;1Q)@8*x+46(-wX%-OVGEX#WM!&524}Hc9k?Y7}PxNV#DKUysqB@R*mTUHsmlT zhAF{@WDyeGzydDTYz%drNg_HOvWD{|i<~wwrFcwOjR(~kywb~bC{*fs2dyqs>hb+5 z^69ClW{{i^DFEi_Aj3&NSWPBpiOP$k%l*VOx&_w%z;rL`RQ$vrF_Z`+V7i?tnO5~! zZk;aI!PZQ;7#UEPV&=DgLjGw+Rb_mQAlc5_7lmWiu-atw3BJ;=T<0 zZBs|yTqu~nciAtP-GmSC?G7+~tiPCl^0GiYw&(A+(;Z$JB`!X`i}XWH(kKA#XM0kBrC~{ypFdSMZX!*U!QHd4o|*+D<1|0HrU$ zwH`0@OQ&!?X@v9Z$7tPEaNPH2*^4suX?z6$jKu%; z0yw4x1)X8c;;aPUr^A%^vAL&Rh3`_AE|2?=kjIUaLetx*S?O91*z*)%Q zo1|t$h`39UX%Tan{fOml@A6i}-4#gt742nOYNKY>BhpI%a(Z>8X(SY`i4t6^w)c z%KlF3?=a#8BIC&F_?qnPb`>9cdTlF;K-;2Wu;ZD3XFmZr5J3vKj+*MSG-GH>D$J|H z-!vL=2ee~7Cz=Mf5mwQi#27;SHg)gbdMNUHylT`2YM=01<2;^y6vw)Uelq?^_Pm`A zQ9<5+?Vm;gBm?|f0KK*19hQ<|voF@XI>HP43C1cTwG?5SyPpBlK&0oTj1G}JyN!*_ zyi(;JD@kJ#G~ViKqx@7D#Az`4ihwZ`8xv!Vpw>AUy^91TeKv%IgZj-4$2kd96x~cGRDnT;{topn^^#eil%b4qE-0+0GXE|l>h($ literal 0 HcmV?d00001 diff --git a/app/controllers/manifest_controller.rb b/app/controllers/manifest_controller.rb index cf6f5c417..ccc45bdcd 100644 --- a/app/controllers/manifest_controller.rb +++ b/app/controllers/manifest_controller.rb @@ -1,22 +1,27 @@ # frozen_string_literal: true class ManifestController < ApplicationController - def show - render json: '{ - "short_name": "diaspora*", - "name": "diaspora*", - "description": "diaspora* is a free, decentralized and privacy respectful social network", - "icons": [ + def show # rubocop:disable Metrics/MethodLength + render json: { + short_name: AppConfig.settings.pod_name, + name: AppConfig.settings.pod_name, + description: "diaspora* is a free, decentralized and privacy respectful social network", + icons: [ { - "src": "/icon.png", - "type": "image/png", - "sizes": "192x192" + src: helpers.image_path("branding/logos/app-icon.png"), + type: "image/png", + sizes: "192x192" + }, + { + src: helpers.image_path("branding/logos/app-icon-512.png"), + type: "image/png", + sizes: "512x512" } ], - "start_url": "/", - "background_color": "#000000", - "display": "standalone", - "theme_color": "#000000" - }' + start_url: "/", + background_color: "#000000", + display: "standalone", + theme_color: "#000000" + } end end diff --git a/app/views/layouts/_head.haml b/app/views/layouts/_head.haml index fcb5eba56..a85a96c74 100644 --- a/app/views/layouts/_head.haml +++ b/app/views/layouts/_head.haml @@ -4,6 +4,8 @@ %meta{charset: "utf-8"}/ = content_for?(:meta_data) ? yield(:meta_data) : metas_tags +%link{rel: "manifest", href: "/manifest.json"} + / favicon / For Apple devices %link{rel: "apple-touch-icon", href: image_path("apple-touch-icon.png")} diff --git a/app/views/layouts/application.mobile.haml b/app/views/layouts/application.mobile.haml index 7c57b496d..e9667dbbe 100644 --- a/app/views/layouts/application.mobile.haml +++ b/app/views/layouts/application.mobile.haml @@ -9,7 +9,7 @@ = javascript_include_tag "mobile/mobile" = load_javascript_locales - = render "head" + = render "layouts/head" = include_color_theme "mobile" %meta{name: "viewport", content: "width=device-width, minimum-scale=1, maximum-scale=1, user-scalable=no"}/ diff --git a/config/initializers/secure_headers.rb b/config/initializers/secure_headers.rb index d76d345b5..99d515ac2 100644 --- a/config/initializers/secure_headers.rb +++ b/config/initializers/secure_headers.rb @@ -16,7 +16,8 @@ SecureHeaders::Configuration.default do |config| media_src: %w[https:], script_src: %w['self' blob: 'unsafe-eval' platform.twitter.com cdn.syndication.twimg.com widgets.flickr.com embedr.flickr.com www.instagram.com 'unsafe-inline'], - style_src: %w['self' 'unsafe-inline' platform.twitter.com *.twimg.com] + style_src: %w['self' 'unsafe-inline' platform.twitter.com *.twimg.com], + manifest_src: %w['self'] } if AppConfig.environment.assets.host.present? diff --git a/graphics/app-icon.svg b/graphics/app-icon.svg new file mode 100644 index 000000000..f573a1396 --- /dev/null +++ b/graphics/app-icon.svg @@ -0,0 +1,4 @@ + + + +