Add PWA metadata endpoint and icons
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class StaticController < ApplicationController
|
class StaticController < ApplicationController
|
||||||
|
include ThemeHelper
|
||||||
|
|
||||||
def index
|
def index
|
||||||
if user_signed_in?
|
if user_signed_in?
|
||||||
@timeline = current_user.cursored_timeline(last_id: params[:last_id])
|
@timeline = current_user.cursored_timeline(last_id: params[:last_id])
|
||||||
|
@ -53,4 +55,37 @@ class StaticController < ApplicationController
|
||||||
def terms
|
def terms
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def webapp_manifest
|
||||||
|
render json: {
|
||||||
|
name: APP_CONFIG["site_name"],
|
||||||
|
description: t(".front.subtitle"),
|
||||||
|
start_url: root_url(source: "pwa"),
|
||||||
|
scope: root_url,
|
||||||
|
display: "standalone",
|
||||||
|
categories: %w[social],
|
||||||
|
lang: I18n.locale,
|
||||||
|
shortcuts: [
|
||||||
|
{
|
||||||
|
name: t('views.navigation.inbox'),
|
||||||
|
url: inbox_url,
|
||||||
|
icons: [
|
||||||
|
{
|
||||||
|
src: "/icons/shortcuts/inbox.svg",
|
||||||
|
sizes: "96x96"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
icons: %i[1024 512 384 192 128 96 72 48].map do |size|
|
||||||
|
[
|
||||||
|
{ src: "/icons/maskable_icon_x#{size}.webp", size: "#{size}x#{size}", type: "image/webp" },
|
||||||
|
{ src: "/icons/maskable_icon_x#{size}.png", size: "#{size}x#{size}", type: "image/png" }
|
||||||
|
]
|
||||||
|
end.flatten,
|
||||||
|
theme_color: theme_color,
|
||||||
|
background_color: mobile_theme_color,
|
||||||
|
orientation: "any"
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
!!! 5
|
!!! 5
|
||||||
%html{ lang: 'en', prefix: 'og: https://ogp.me/ns#' }
|
%html{ lang: I18n.locale, prefix: 'og: https://ogp.me/ns#' }
|
||||||
%head
|
%head
|
||||||
%meta{ charset: 'utf-8' }
|
%meta{ charset: 'utf-8' }
|
||||||
%meta{ 'http-equiv': 'X-UA-Compatible', content: 'IE=edge' }
|
%meta{ 'http-equiv': 'X-UA-Compatible', content: 'IE=edge' }
|
||||||
|
@ -9,7 +9,9 @@
|
||||||
%meta{ name: 'theme-color', content: mobile_theme_color, media: '(max-width: 992px)' }
|
%meta{ name: 'theme-color', content: mobile_theme_color, media: '(max-width: 992px)' }
|
||||||
- else
|
- else
|
||||||
%meta{ name: 'theme-color', content: theme_color }
|
%meta{ name: 'theme-color', content: theme_color }
|
||||||
|
%link{ rel: 'manifest', href: '/manifest.json', crossorigin: 'use-credentials' }
|
||||||
%link{ rel: 'apple-touch-icon', href: '/apple-touch-icon-precomposed.png' }
|
%link{ rel: 'apple-touch-icon', href: '/apple-touch-icon-precomposed.png' }
|
||||||
|
%link{ rel: 'mask-icon', href: '/icons/icon.svg', color: theme_color }
|
||||||
%link{ rel: 'icon', href: '/images/favicon/favicon-16.png', sizes: '16x16' }
|
%link{ rel: 'icon', href: '/images/favicon/favicon-16.png', sizes: '16x16' }
|
||||||
%link{ rel: 'icon', href: '/icon-152.png', sizes: '152x152' }
|
%link{ rel: 'icon', href: '/icon-152.png', sizes: '152x152' }
|
||||||
%link{ rel: 'icon', href: '/images/favicon/favicon-32.png', sizes: '32x32' }
|
%link{ rel: 'icon', href: '/images/favicon/favicon-32.png', sizes: '32x32' }
|
||||||
|
|
|
@ -42,6 +42,7 @@ Rails.application.routes.draw do
|
||||||
match '/privacy', to: 'static#privacy_policy', via: 'get', as: :privacy_policy
|
match '/privacy', to: 'static#privacy_policy', via: 'get', as: :privacy_policy
|
||||||
match '/terms', to: 'static#terms', via: 'get', as: :terms
|
match '/terms', to: 'static#terms', via: 'get', as: :terms
|
||||||
match '/linkfilter', to: 'static#linkfilter', via: 'get', as: :linkfilter
|
match '/linkfilter', to: 'static#linkfilter', via: 'get', as: :linkfilter
|
||||||
|
match '/manifest.json', to: 'static#webapp_manifest', via: 'get', as: :webapp_manifest
|
||||||
|
|
||||||
# Devise routes
|
# Devise routes
|
||||||
devise_for :users, path: 'user', skip: [:sessions, :registrations]
|
devise_for :users, path: 'user', skip: [:sessions, :registrations]
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
<svg height="1792" viewBox="0 0 1792 1792" width="1792" xmlns="http://www.w3.org/2000/svg"><path d="m1408 768q0 139-94 257t-256.5 186.5-353.5 68.5q-86 0-176-16-124 88-278 128-36 9-86 16h-3q-11 0-20.5-8t-11.5-21q-1-3-1-6.5t.5-6.5 2-6l2.5-5 3.5-5.5 4-5 4.5-5 4-4.5q5-6 23-25t26-29.5 22.5-29 25-38.5 20.5-44q-124-72-195-177t-71-224q0-139 94-257t256.5-186.5 353.5-68.5 353.5 68.5 256.5 186.5 94 257zm384 256q0 120-71 224.5t-195 176.5q10 24 20.5 44t25 38.5 22.5 29 26 29.5 23 25q1 1 4 4.5t4.5 5 4 5 3.5 5.5l2.5 5 2 6 .5 6.5-1 6.5q-3 14-13 22t-22 7q-50-7-86-16-154-40-278-128-90 16-176 16-271 0-472-132 58 4 88 4 161 0 309-45t264-129q125-92 192-212t67-254q0-77-23-152 129 71 204 178t75 230z"/></svg>
|
After Width: | Height: | Size: 693 B |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 696 B |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 318 B |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 440 B |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 568 B |
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1151 960h316q-1-3-2.5-8.5t-2.5-7.5l-212-496h-708l-212 496q-1 3-2.5 8.5t-2.5 7.5h316l95 192h320zm513 30v482q0 26-19 45t-45 19h-1408q-26 0-45-19t-19-45v-482q0-62 25-123l238-552q10-25 36.5-42t52.5-17h832q26 0 52.5 17t36.5 42l238 552q25 61 25 123z"/></svg>
|
After Width: | Height: | Size: 392 B |