93 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class ManifestSerializer < ActiveModel::Serializer
 | 
						|
  include InstanceHelper
 | 
						|
  include RoutingHelper
 | 
						|
  include ActionView::Helpers::TextHelper
 | 
						|
 | 
						|
  attributes :id, :name, :short_name,
 | 
						|
             :icons, :theme_color, :background_color,
 | 
						|
             :display, :start_url, :scope,
 | 
						|
             :share_target, :shortcuts
 | 
						|
 | 
						|
  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
 | 
						|
 | 
						|
  def name
 | 
						|
    object.title
 | 
						|
  end
 | 
						|
 | 
						|
  def short_name
 | 
						|
    object.title
 | 
						|
  end
 | 
						|
 | 
						|
  def icons
 | 
						|
    SiteUpload::ANDROID_ICON_SIZES.map do |size|
 | 
						|
      src = app_icon_path(size.to_i)
 | 
						|
      src = URI.join(root_url, src).to_s if src.present?
 | 
						|
 | 
						|
      {
 | 
						|
        src: src || frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"),
 | 
						|
        sizes: "#{size}x#{size}",
 | 
						|
        type: 'image/png',
 | 
						|
        purpose: 'any maskable',
 | 
						|
      }
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def theme_color
 | 
						|
    '#191b22'
 | 
						|
  end
 | 
						|
 | 
						|
  def background_color
 | 
						|
    '#191b22'
 | 
						|
  end
 | 
						|
 | 
						|
  def display
 | 
						|
    'standalone'
 | 
						|
  end
 | 
						|
 | 
						|
  def start_url
 | 
						|
    '/'
 | 
						|
  end
 | 
						|
 | 
						|
  def scope
 | 
						|
    '/'
 | 
						|
  end
 | 
						|
 | 
						|
  def share_target
 | 
						|
    {
 | 
						|
      url_template: 'share?title={title}&text={text}&url={url}',
 | 
						|
      action: 'share',
 | 
						|
      method: 'GET',
 | 
						|
      enctype: 'application/x-www-form-urlencoded',
 | 
						|
      params: {
 | 
						|
        title: 'title',
 | 
						|
        text: 'text',
 | 
						|
        url: 'url',
 | 
						|
      },
 | 
						|
    }
 | 
						|
  end
 | 
						|
 | 
						|
  def shortcuts
 | 
						|
    [
 | 
						|
      {
 | 
						|
        name: 'Compose new post',
 | 
						|
        url: '/publish',
 | 
						|
      },
 | 
						|
      {
 | 
						|
        name: 'Notifications',
 | 
						|
        url: '/notifications',
 | 
						|
      },
 | 
						|
      {
 | 
						|
        name: 'Explore',
 | 
						|
        url: '/explore',
 | 
						|
      },
 | 
						|
    ]
 | 
						|
  end
 | 
						|
end
 |