Merge remote-tracking branch 'tootsuite/main' into custom/quote
This commit is contained in:
@@ -2,10 +2,12 @@
|
||||
|
||||
module AccountsHelper
|
||||
def display_name(account, **options)
|
||||
str = account.display_name.presence || account.username
|
||||
|
||||
if options[:custom_emojify]
|
||||
Formatter.instance.format_display_name(account, **options)
|
||||
prerender_custom_emojis(h(str), account.emojis)
|
||||
else
|
||||
account.display_name.presence || account.username
|
||||
str
|
||||
end
|
||||
end
|
||||
|
||||
@@ -95,7 +97,7 @@ module AccountsHelper
|
||||
].join(' '),
|
||||
].join(', ')
|
||||
|
||||
[prepend_str, account.note].join(' · ')
|
||||
[prepend_str, account.note].join(' · ')
|
||||
end
|
||||
|
||||
def svg_logo
|
||||
|
@@ -12,9 +12,6 @@ module Admin::Trends::StatusesHelper
|
||||
|
||||
return '' if text.blank?
|
||||
|
||||
html = Formatter.instance.send(:encode, text)
|
||||
html = Formatter.instance.send(:encode_custom_emojis, html, status.emojis, prefers_autoplay?)
|
||||
|
||||
html.html_safe # rubocop:disable Rails/OutputSafety
|
||||
prerender_custom_emojis(h(text), status.emojis)
|
||||
end
|
||||
end
|
||||
|
@@ -9,9 +9,9 @@ module ApplicationHelper
|
||||
|
||||
RTL_LOCALES = %i(
|
||||
ar
|
||||
ckb
|
||||
fa
|
||||
he
|
||||
ku
|
||||
).freeze
|
||||
|
||||
def friendly_number_to_human(number, **options)
|
||||
@@ -19,8 +19,11 @@ module ApplicationHelper
|
||||
# is looked up from the locales definition, and rails-i18n comes with
|
||||
# values that don't seem to make much sense for many languages, so
|
||||
# override these values with a default of 3 digits of precision.
|
||||
options[:precision] = 3
|
||||
options[:strip_insignificant_zeros] = true
|
||||
options = options.merge(
|
||||
precision: 3,
|
||||
strip_insignificant_zeros: true,
|
||||
significant: true
|
||||
)
|
||||
|
||||
number_to_human(number, **options)
|
||||
end
|
||||
@@ -224,4 +227,23 @@ module ApplicationHelper
|
||||
content_tag(:script, json_escape(json).html_safe, id: 'initial-state', type: 'application/json')
|
||||
# rubocop:enable Rails/OutputSafety
|
||||
end
|
||||
|
||||
def grouped_scopes(scopes)
|
||||
scope_parser = ScopeParser.new
|
||||
scope_transformer = ScopeTransformer.new
|
||||
|
||||
scopes.each_with_object({}) do |str, h|
|
||||
scope = scope_transformer.apply(scope_parser.parse(str))
|
||||
|
||||
if h[scope.key]
|
||||
h[scope.key].merge!(scope)
|
||||
else
|
||||
h[scope.key] = scope
|
||||
end
|
||||
end.values
|
||||
end
|
||||
|
||||
def prerender_custom_emojis(html, custom_emojis)
|
||||
EmojiFormatter.new(html, custom_emojis, animate: prefers_autoplay?).to_s
|
||||
end
|
||||
end
|
||||
|
33
app/helpers/formatting_helper.rb
Normal file
33
app/helpers/formatting_helper.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module FormattingHelper
|
||||
def html_aware_format(text, local, options = {})
|
||||
HtmlAwareFormatter.new(text, local, options).to_s
|
||||
end
|
||||
|
||||
def linkify(text, options = {})
|
||||
TextFormatter.new(text, options).to_s
|
||||
end
|
||||
|
||||
def extract_status_plain_text(status)
|
||||
PlainTextFormatter.new(status.text, status.local?).to_s
|
||||
end
|
||||
module_function :extract_status_plain_text
|
||||
|
||||
def status_content_format(status)
|
||||
html_aware_format(
|
||||
status.text,
|
||||
status.local?,
|
||||
preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : []),
|
||||
quote: status.respond_to?(:quote) && status.quote,
|
||||
)
|
||||
end
|
||||
|
||||
def account_bio_format(account)
|
||||
html_aware_format(account.note, account.local?)
|
||||
end
|
||||
|
||||
def account_field_value_format(field, with_rel_me: true)
|
||||
html_aware_format(field.value, field.account.local?, with_rel_me: with_rel_me, with_domains: true, multiline: false)
|
||||
end
|
||||
end
|
@@ -15,6 +15,14 @@ module JsonLdHelper
|
||||
value.is_a?(Array) ? value.first : value
|
||||
end
|
||||
|
||||
def uri_from_bearcap(str)
|
||||
if str&.start_with?('bear:')
|
||||
Addressable::URI.parse(str).query_values['u']
|
||||
else
|
||||
str
|
||||
end
|
||||
end
|
||||
|
||||
# The url attribute can be a string, an array of strings, or an array of objects.
|
||||
# The objects could include a mimeType. Not-included mimeType means it's text/html.
|
||||
def url_to_href(value, preferred_type = nil)
|
||||
@@ -54,7 +62,7 @@ module JsonLdHelper
|
||||
end
|
||||
|
||||
def unsupported_uri_scheme?(uri)
|
||||
!uri.start_with?('http://', 'https://')
|
||||
uri.nil? || !uri.start_with?('http://', 'https://')
|
||||
end
|
||||
|
||||
def invalid_origin?(url)
|
||||
|
@@ -88,7 +88,7 @@ module LanguagesHelper
|
||||
ko: ['Korean', '한국어'].freeze,
|
||||
kr: ['Kanuri', 'Kanuri'].freeze,
|
||||
ks: ['Kashmiri', 'कश्मीरी'].freeze,
|
||||
ku: ['Kurdish', 'Kurdî'].freeze,
|
||||
ku: ['Kurmanji (Kurdish)', 'Kurmancî'].freeze,
|
||||
kv: ['Komi', 'коми кыв'].freeze,
|
||||
kw: ['Cornish', 'Kernewek'].freeze,
|
||||
ky: ['Kyrgyz', 'Кыргызча'].freeze,
|
||||
@@ -108,7 +108,7 @@ module LanguagesHelper
|
||||
ml: ['Malayalam', 'മലയാളം'].freeze,
|
||||
mn: ['Mongolian', 'Монгол хэл'].freeze,
|
||||
mr: ['Marathi', 'मराठी'].freeze,
|
||||
ms: ['Malay', 'Bahasa Malaysia'].freeze,
|
||||
ms: ['Malay', 'Bahasa Melayu'].freeze,
|
||||
mt: ['Maltese', 'Malti'].freeze,
|
||||
my: ['Burmese', 'ဗမာစာ'].freeze,
|
||||
na: ['Nauru', 'Ekakairũ Naoero'].freeze,
|
||||
@@ -117,7 +117,7 @@ module LanguagesHelper
|
||||
ne: ['Nepali', 'नेपाली'].freeze,
|
||||
ng: ['Ndonga', 'Owambo'].freeze,
|
||||
nl: ['Dutch', 'Nederlands'].freeze,
|
||||
nn: ['Norwegian Nynorsk', 'Norsk nynorsk'].freeze,
|
||||
nn: ['Norwegian Nynorsk', 'Norsk Nynorsk'].freeze,
|
||||
no: ['Norwegian', 'Norsk'].freeze,
|
||||
nr: ['Southern Ndebele', 'isiNdebele'].freeze,
|
||||
nv: ['Navajo', 'Diné bizaad'].freeze,
|
||||
@@ -188,8 +188,9 @@ module LanguagesHelper
|
||||
|
||||
ISO_639_3 = {
|
||||
ast: ['Asturian', 'Asturianu'].freeze,
|
||||
ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze,
|
||||
kab: ['Kabyle', 'Taqbaylit'].freeze,
|
||||
kmr: ['Northern Kurdish', 'Kurmancî'].freeze,
|
||||
kmr: ['Kurmanji (Kurdish)', 'Kurmancî'].freeze,
|
||||
zgh: ['Standard Moroccan Tamazight', 'ⵜⴰⵎⴰⵣⵉⵖⵜ'].freeze,
|
||||
}.freeze
|
||||
|
||||
@@ -241,6 +242,15 @@ module LanguagesHelper
|
||||
code
|
||||
end
|
||||
|
||||
def valid_locale_cascade(*arr)
|
||||
arr.each do |str|
|
||||
locale = valid_locale_or_nil(str)
|
||||
return locale if locale.present?
|
||||
end
|
||||
|
||||
nil
|
||||
end
|
||||
|
||||
def valid_locale?(locale)
|
||||
locale.present? && SUPPORTED_LOCALES.key?(locale.to_sym)
|
||||
end
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
module RoutingHelper
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
include Rails.application.routes.url_helpers
|
||||
include ActionView::Helpers::AssetTagHelper
|
||||
include Webpacker::Helper
|
||||
@@ -22,8 +23,6 @@ module RoutingHelper
|
||||
full_asset_url(asset_pack_path(source, **options))
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def use_storage?
|
||||
Rails.configuration.x.use_s3 || Rails.configuration.x.use_swift
|
||||
end
|
||||
|
@@ -113,26 +113,12 @@ module StatusesHelper
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def simplified_text(text)
|
||||
text.dup.tap do |new_text|
|
||||
URI.extract(new_text).each do |url|
|
||||
new_text.gsub!(url, '')
|
||||
end
|
||||
|
||||
new_text.gsub!(Account::MENTION_RE, '')
|
||||
new_text.gsub!(Tag::HASHTAG_RE, '')
|
||||
new_text.gsub!(/\s+/, '')
|
||||
end
|
||||
end
|
||||
|
||||
def embedded_view?
|
||||
params[:controller] == EMBEDDED_CONTROLLER && params[:action] == EMBEDDED_ACTION
|
||||
end
|
||||
|
||||
def render_video_component(status, **options)
|
||||
video = status.media_attachments.first
|
||||
video = status.ordered_media_attachments.first
|
||||
|
||||
meta = video.file.meta || {}
|
||||
|
||||
@@ -150,12 +136,12 @@ module StatusesHelper
|
||||
}.merge(**options)
|
||||
|
||||
react_component :video, component_params do
|
||||
render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
|
||||
render partial: 'statuses/attachment_list', locals: { attachments: status.ordered_media_attachments }
|
||||
end
|
||||
end
|
||||
|
||||
def render_audio_component(status, **options)
|
||||
audio = status.media_attachments.first
|
||||
audio = status.ordered_media_attachments.first
|
||||
|
||||
meta = audio.file.meta || {}
|
||||
|
||||
@@ -170,7 +156,7 @@ module StatusesHelper
|
||||
}.merge(**options)
|
||||
|
||||
react_component :audio, component_params do
|
||||
render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
|
||||
render partial: 'statuses/attachment_list', locals: { attachments: status.ordered_media_attachments }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -178,11 +164,11 @@ module StatusesHelper
|
||||
component_params = {
|
||||
sensitive: sensitized?(status, current_account),
|
||||
autoplay: prefers_autoplay?,
|
||||
media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json },
|
||||
media: status.ordered_media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json },
|
||||
}.merge(**options)
|
||||
|
||||
react_component :media_gallery, component_params do
|
||||
render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
|
||||
render partial: 'statuses/attachment_list', locals: { attachments: status.ordered_media_attachments }
|
||||
end
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user