2017-10-02 10:23:32 +11:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class ManifestSerializer < ActiveModel::Serializer
|
|
|
|
include RoutingHelper
|
|
|
|
include ActionView::Helpers::TextHelper
|
|
|
|
|
2022-06-10 06:25:23 +10:00
|
|
|
ICON_SIZES = %w(
|
|
|
|
36
|
|
|
|
48
|
|
|
|
72
|
|
|
|
96
|
|
|
|
144
|
|
|
|
192
|
|
|
|
256
|
|
|
|
384
|
|
|
|
512
|
|
|
|
).freeze
|
|
|
|
|
2023-10-13 01:47:18 +11:00
|
|
|
attributes :id, :name, :short_name,
|
2017-10-02 10:23:32 +11:00
|
|
|
:icons, :theme_color, :background_color,
|
2018-01-18 03:08:10 +11:00
|
|
|
:display, :start_url, :scope,
|
2020-12-15 12:04:56 +11:00
|
|
|
:share_target, :shortcuts
|
2017-10-02 10:23:32 +11:00
|
|
|
|
2023-10-13 01:47:18 +11:00
|
|
|
def id
|
|
|
|
# This is set to `/home` because that was the old value of `start_url` and
|
|
|
|
# thus the fallback ID computed by Chrome:
|
|
|
|
# https://developer.chrome.com/blog/pwa-manifest-id/
|
|
|
|
'/home'
|
|
|
|
end
|
|
|
|
|
2017-10-02 10:23:32 +11:00
|
|
|
def name
|
2022-10-05 12:47:56 +11:00
|
|
|
object.title
|
2017-10-02 10:23:32 +11:00
|
|
|
end
|
|
|
|
|
|
|
|
def short_name
|
2022-10-05 12:47:56 +11:00
|
|
|
object.title
|
2017-10-02 10:23:32 +11:00
|
|
|
end
|
|
|
|
|
|
|
|
def icons
|
2022-06-10 06:25:23 +10:00
|
|
|
ICON_SIZES.map do |size|
|
2017-10-02 10:23:32 +11:00
|
|
|
{
|
2024-01-17 23:19:51 +11:00
|
|
|
src: frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"),
|
2022-06-10 06:25:23 +10:00
|
|
|
sizes: "#{size}x#{size}",
|
2017-10-02 10:23:32 +11:00
|
|
|
type: 'image/png',
|
2022-11-17 20:52:30 +11:00
|
|
|
purpose: 'any maskable',
|
2022-06-10 06:25:23 +10:00
|
|
|
}
|
|
|
|
end
|
2017-10-02 10:23:32 +11:00
|
|
|
end
|
|
|
|
|
|
|
|
def theme_color
|
2022-10-24 00:58:24 +11:00
|
|
|
'#191b22'
|
2017-10-02 10:23:32 +11:00
|
|
|
end
|
|
|
|
|
|
|
|
def background_color
|
|
|
|
'#191b22'
|
|
|
|
end
|
|
|
|
|
|
|
|
def display
|
|
|
|
'standalone'
|
|
|
|
end
|
|
|
|
|
|
|
|
def start_url
|
2023-10-13 01:47:18 +11:00
|
|
|
'/'
|
2017-10-02 10:23:32 +11:00
|
|
|
end
|
|
|
|
|
|
|
|
def scope
|
2021-09-09 07:33:36 +10:00
|
|
|
'/'
|
2017-10-02 10:23:32 +11:00
|
|
|
end
|
2018-01-18 03:08:10 +11:00
|
|
|
|
|
|
|
def share_target
|
2019-02-02 11:26:49 +11:00
|
|
|
{
|
|
|
|
url_template: 'share?title={title}&text={text}&url={url}',
|
|
|
|
action: 'share',
|
2019-09-05 23:51:51 +10:00
|
|
|
method: 'GET',
|
|
|
|
enctype: 'application/x-www-form-urlencoded',
|
2019-02-02 11:26:49 +11:00
|
|
|
params: {
|
|
|
|
title: 'title',
|
|
|
|
text: 'text',
|
|
|
|
url: 'url',
|
|
|
|
},
|
|
|
|
}
|
2018-01-18 03:08:10 +11:00
|
|
|
end
|
2020-12-15 12:04:56 +11:00
|
|
|
|
|
|
|
def shortcuts
|
|
|
|
[
|
|
|
|
{
|
2022-06-10 06:25:23 +10:00
|
|
|
name: 'Compose new post',
|
2022-10-23 23:05:18 +11:00
|
|
|
url: '/publish',
|
2020-12-15 12:04:56 +11:00
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Notifications',
|
2022-10-23 23:05:18 +11:00
|
|
|
url: '/notifications',
|
2020-12-15 12:04:56 +11:00
|
|
|
},
|
2023-10-02 22:18:16 +11:00
|
|
|
{
|
|
|
|
name: 'Explore',
|
|
|
|
url: '/explore',
|
|
|
|
},
|
2020-12-15 12:04:56 +11:00
|
|
|
]
|
|
|
|
end
|
2017-10-02 10:23:32 +11:00
|
|
|
end
|