Merge commit '127503eb2cdd67126974bee304dde0f183300b84' into glitch-soc/merge-upstream

Conflicts:
- `app/helpers/accounts_helper.rb`:
  Conflict due to glitch-soc's option to hide followers count.
  Ported upstream changes.

Additional changes:
- `app/views/application/mailer/_account.html.haml`:
  Ported glitch-soc's option to hide followers count.
- `app/views/settings/flavours/show.html.haml`:
  Ported the `frontend_asset_url` helper change to glitch-soc.
This commit is contained in:
Claire
2024-01-17 18:21:44 +01:00
198 changed files with 1231 additions and 830 deletions

View File

@@ -31,22 +31,26 @@ module AccountsHelper
Setting.hide_followers_count || account.user&.settings&.[]('hide_followers_count')
end
def account_formatted_stat(value)
number_to_human(value, precision: 3, strip_insignificant_zeros: true)
end
def account_description(account)
prepend_stats = [
[
number_to_human(account.statuses_count, precision: 3, strip_insignificant_zeros: true),
account_formatted_stat(account.statuses_count),
I18n.t('accounts.posts', count: account.statuses_count),
].join(' '),
[
number_to_human(account.following_count, precision: 3, strip_insignificant_zeros: true),
account_formatted_stat(account.following_count),
I18n.t('accounts.following', count: account.following_count),
].join(' '),
]
unless hide_followers_count?(account)
prepend_stats << [
number_to_human(account.followers_count, precision: 3, strip_insignificant_zeros: true),
account_formatted_stat(account.followers_count),
I18n.t('accounts.followers', count: account.followers_count),
].join(' ')
end

View File

@@ -2,7 +2,7 @@
module MascotHelper
def mascot_url
full_asset_url(instance_presenter.mascot&.file&.url || asset_pack_path('media/images/elephant_ui_plane.svg'))
full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg'))
end
def instance_presenter

View File

@@ -24,8 +24,12 @@ module RoutingHelper
Rails.configuration.action_controller.asset_host || root_url
end
def full_pack_url(source, **options)
full_asset_url(asset_pack_path(source, **options))
def frontend_asset_path(source, **options)
asset_pack_path("media/#{source}", **options)
end
def frontend_asset_url(source, **options)
full_asset_url(frontend_asset_path(source, **options))
end
def use_storage?

View File

@@ -103,7 +103,7 @@ class Item extends PureComponent {
}
if (attachment.get('description')?.length > 0) {
badges.push(<span key='alt' className='media-gallery__gifv__label'>ALT</span>);
badges.push(<span key='alt' className='media-gallery__alt__label'>ALT</span>);
}
const description = attachment.getIn(['translation', 'description']) || attachment.get('description');

View File

@@ -393,6 +393,7 @@
"lists.search": "Leita millum fólk, sum tú fylgir",
"lists.subheading": "Tínir listar",
"load_pending": "{count, plural, one {# nýtt evni} other {# nýggj evni}}",
"loading_indicator.label": "Innlesur…",
"media_gallery.toggle_visible": "{number, plural, one {Fjal mynd} other {Fjal myndir}}",
"moved_to_account_banner.text": "Konta tín {disabledAccount} er í løtuni óvirkin, tí tú flutti til {movedToAccount}.",
"mute_modal.duration": "Tíðarbil",
@@ -483,6 +484,15 @@
"onboarding.follows.title": "Vælumtókt á Mastodon",
"onboarding.profile.discoverable": "Ger tað møguligt hjá øðrum at finna vangan hjá mær",
"onboarding.profile.discoverable_hint": "Tá tú játtar at onnur skulu kunna finna teg á Mastodon, so kann henda, at postar tínir síggjast í leitiúrslitum og rákum, og vangin hjá tær kann vera skotin upp fyri fólki við áhugamálum sum minna um tíni.",
"onboarding.profile.display_name": "Navn, sum skal vísast",
"onboarding.profile.display_name_hint": "Títt fulla navn ella títt stuttliga navn…",
"onboarding.profile.lead": "Tú kanst altíð gera hetta liðugt seinni í stillingunum, har enn fleiri tillagingarmøguleikar eru tøkir.",
"onboarding.profile.note": "Ævilýsing",
"onboarding.profile.note_hint": "Tú kanst @umrøða onnur fólk ella #frámerki…",
"onboarding.profile.save_and_continue": "Goym og halt fram",
"onboarding.profile.title": "Vangauppsetan",
"onboarding.profile.upload_avatar": "Legg vangamynd upp",
"onboarding.profile.upload_header": "Legg vangahøvd upp",
"onboarding.share.lead": "Lat fólk vita, hvussu tey kunnu finna teg á Mastodon!",
"onboarding.share.message": "Eg eri {username} á #Mastodon! Kom og fylg mær á {url}",
"onboarding.share.next_steps": "Møgulig næstu stig:",

View File

@@ -20,7 +20,7 @@
"account.block_short": "Bloquear",
"account.blocked": "Bloqueada",
"account.browse_more_on_origin_server": "Busca máis no perfil orixinal",
"account.cancel_follow_request": "Cancelar a solicitude de seguimento",
"account.cancel_follow_request": "Desbotar a solicitude de seguimento",
"account.copy": "Copiar ligazón ao perfil",
"account.direct": "Mencionar de xeito privado a @{name}",
"account.disable_notifications": "Deixar de notificarme cando @{name} publica",
@@ -184,7 +184,7 @@
"confirmations.mute.explanation": "Isto agochará as súas publicacións ou as que a mencionen, mais poderá ler as túas publicacións e ser seguidora túa.",
"confirmations.mute.message": "Tes a certeza de querer acalar a {name}?",
"confirmations.redraft.confirm": "Eliminar e reescribir",
"confirmations.redraft.message": "Tes a certeza de querer eliminar esta publicación e reescribila? Perderás as comparticións e favoritas, e as respostas á publicación orixinal ficarán orfas.",
"confirmations.redraft.message": "Tes a certeza de querer eliminar esta publicación e reescribila? Perderás as promocións e favorecementos, e as respostas á publicación orixinal ficarán orfas.",
"confirmations.reply.confirm": "Responder",
"confirmations.reply.message": "Ao responder sobrescribirás a mensaxe que estás a compor. Tes a certeza de que queres continuar?",
"confirmations.unfollow.confirm": "Deixar de seguir",
@@ -204,7 +204,7 @@
"disabled_account_banner.text": "Actualmente a túa conta {disabledAccount} está desactivada.",
"dismissable_banner.community_timeline": "Estas son as publicacións máis recentes das persoas que teñen a súa conta en {domain}.",
"dismissable_banner.dismiss": "Desbotar",
"dismissable_banner.explore_links": "As persoas deste servidor e da rede descentralizada están a falar destas historias agora mesmo.",
"dismissable_banner.explore_links": "Estas son as novas historias más compartidas hoxe na web social. Aparecen primeiro as novas compartidas por máis persoas diferentes.",
"dismissable_banner.explore_statuses": "Estas son as publicacións da web social que hoxe están gañando popularidade. As publicacións con máis promocións e favorecemento teñen puntuación máis alta.",
"dismissable_banner.explore_tags": "Estes cancelos están gañando popularidade entre as persoas deste servidor e noutros servidores da rede descentralizada.",
"dismissable_banner.public_timeline": "Estas son as publicacións públicas máis recentes das persoas que as usuarias de {domain} están a seguir.",
@@ -240,7 +240,7 @@
"empty_column.follow_requests": "Non tes peticións de seguimento. Cando recibas unha, amosarase aquí.",
"empty_column.followed_tags": "Aínda non seguiches ningún cancelo. Cando o fagas aparecerán aquí.",
"empty_column.hashtag": "Aínda non hai nada con este cancelo.",
"empty_column.home": "A túa cronoloxía inicial está baleira! Segue a outras usuarias para enchela. {suggestions}",
"empty_column.home": "A túa cronoloxía inicial está baleira! Sigue a outras usuarias para enchela.",
"empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.",
"empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.",
"empty_column.mutes": "Aínda non silenciaches a ningúnha usuaria.",
@@ -346,7 +346,7 @@
"keyboard_shortcuts.down": "Para mover cara abaixo na listaxe",
"keyboard_shortcuts.enter": "Para abrir publicación",
"keyboard_shortcuts.favourite": "Marcar como favorita",
"keyboard_shortcuts.favourites": "Para abrir a listaxe das favoritas",
"keyboard_shortcuts.favourites": "Para abrir a lista das favoritas",
"keyboard_shortcuts.federated": "Para abrir a cronoloxía federada",
"keyboard_shortcuts.heading": "Atallos do teclado",
"keyboard_shortcuts.home": "Para abrir a cronoloxía inicial",
@@ -383,7 +383,7 @@
"lists.delete": "Eliminar listaxe",
"lists.edit": "Editar listaxe",
"lists.edit.submit": "Mudar o título",
"lists.exclusive": "Agocha estas publicacións no inicio",
"lists.exclusive": "Agocha estas publicacións no Inicio",
"lists.new.create": "Engadir listaxe",
"lists.new.title_placeholder": "Título da nova listaxe",
"lists.replies_policy.followed": "Toda usuaria seguida",
@@ -480,8 +480,8 @@
"onboarding.actions.go_to_home": "Vai á cronoloxía de inicio",
"onboarding.compose.template": "Ola #Mastodon!",
"onboarding.follows.empty": "Desgraciadamente agora mesmo non hai nada que mostrar. Podes intentalo coa busca ou na páxina descubrir para atopar persoas ás que seguir, ou intentalo máis tarde.",
"onboarding.follows.lead": "Podes facer que a túa cronoloxía de inicio sexa como ti a queres. Canta máis xente sigas máis interesante será. Estes perfís poderían axudarche a comezar —sempre poderás deixar de seguilos despois!",
"onboarding.follows.title": "Popular en Mastodon",
"onboarding.follows.lead": "A cronoloxía de Inicio é o principal xeito de desfrutar Mastodon. Cantas máis persoas sigas mais interesante e activa será. Para comezar, aquí tes algunhas suxestións:",
"onboarding.follows.title": "Personaliza a cronoloxía de inicio",
"onboarding.profile.discoverable": "Que o meu perfil se poida atopar",
"onboarding.profile.discoverable_hint": "Cando elixes que poidan atoparte en Mastodon as túas publicacións aparecerán nos resultados das buscas e nos temas en voga, e o teu perfil podería ser suxerido para seguimento a persoas con intereses semellantes aos teus.",
"onboarding.profile.display_name": "Nome público",
@@ -494,20 +494,20 @@
"onboarding.profile.upload_avatar": "Subir imaxe do perfil",
"onboarding.profile.upload_header": "Subir cabeceira para o perfil",
"onboarding.share.lead": "Fai que as persoas saiban como atoparte en Mastodon!",
"onboarding.share.message": "Son {username} en #Mastodon! Ségueme en {url}",
"onboarding.share.message": "Son {username} en #Mastodon! Sígueme en {url}",
"onboarding.share.next_steps": "Seguintes pasos:",
"onboarding.share.title": "Comparte o teu perfil",
"onboarding.start.lead": "A túa nova conta en Mastodon está preparada. Mira de que xeito lle podes sacar proveito:",
"onboarding.start.lead": "Xa formas parte de Mastodon, unha plataforma de relacións sociais descentralizada, única, onde ti —e non un algoritmo— elixes o que les. Axudámosche cos primeiros pasos:",
"onboarding.start.skip": "Queres omitir todo isto?",
"onboarding.start.title": "Pois xa está!",
"onboarding.steps.follow_people.body": "Constrúes a túa cronoloxía. Énchea con persoas interesantes.",
"onboarding.steps.follow_people.title": "Segue a {count, plural, one {unha persoa} other {# persoas}}",
"onboarding.steps.publish_status.body": "Saúda a todo o mundo.",
"onboarding.steps.follow_people.body": "Mastodon consiste en seguir a persoas interesantes.",
"onboarding.steps.follow_people.title": "Personaliza a túa cronoloxía",
"onboarding.steps.publish_status.body": "Exprésate con texto, fotos, vídeos ou enquisas {emoji}",
"onboarding.steps.publish_status.title": "Escribe a túa primeira publicación",
"onboarding.steps.setup_profile.body": "Ao engadir información ao teu perfil é máis probable que teñas máis interaccións.",
"onboarding.steps.setup_profile.title": "Personaliza o perfil",
"onboarding.steps.share_profile.body": "Dille ás amizades como poden atoparte en Mastodon!",
"onboarding.steps.share_profile.title": "Comparte o teu perfil",
"onboarding.steps.share_profile.title": "Comparte o teu perfil en Mastodon",
"onboarding.tips.2fa": "<strong>Sabes que?</strong> Podes protexer a túa conta configurando un segundo factor de autenticación nos axustes. Funciona con calquera app TOTP, non precisas un número de teléfono!",
"onboarding.tips.accounts_from_other_servers": "<strong>Sabes que?</strong> Como Mastodon é descentralizado, algúns perfís que atopes estarán en servidores diferentes ao teu. Pero podes interactuar igualmente con eles! O seu servidor é o que ven despois da @ no seu identificador!",
"onboarding.tips.migration": "<strong>Sabes que?</strong> Se cres que {domain} non é o servidor axeitado para ti, podes mover a conta a outro servidor Mastodon sen perder as túas seguidoras. Incluso podes hospedar o teu propio servidor!",
@@ -573,7 +573,7 @@
"report.reasons.dislike": "Non me gusta",
"report.reasons.dislike_description": "Non é algo que queiras ver",
"report.reasons.legal": "É ilegal",
"report.reasons.legal_description": "Cres que atenta contra as leis do país do teu servidor",
"report.reasons.legal_description": "Cres que atenta contra as leis do país do teu pais ou servidor",
"report.reasons.other": "É outra cousa",
"report.reasons.other_description": "O problema non cae dentro de outras categorías",
"report.reasons.spam": "É spam",

View File

@@ -9,14 +9,20 @@
"account.block": "Blocar @{name}",
"account.block_short": "Blocar",
"account.blocked": "Blocate",
"account.browse_more_on_origin_server": "Navigar plus sur le profilo original",
"account.copy": "Copiar ligamine a profilo",
"account.domain_blocked": "Dominio blocate",
"account.edit_profile": "Modificar profilo",
"account.enable_notifications": "Notifica me quando @{name} publica",
"account.endorse": "Evidentiar sur le profilo",
"account.featured_tags.last_status_at": "Ultime message in {date}",
"account.featured_tags.last_status_never": "Necun messages",
"account.featured_tags.title": "Hashtags eminente de {name}",
"account.follow": "Sequer",
"account.follow_back": "Sequer etiam",
"account.followers": "Sequitores",
"account.followers.empty": "Iste usator ancora non ha sequitores.",
"account.followers_counter": "{count, plural, one {{counter} sequitor} other {{counter} sequitores}}",
"account.following": "Sequente",
"account.go_to_profile": "Vader al profilo",
"account.hide_reblogs": "Celar boosts de @{name}",
@@ -30,6 +36,7 @@
"account.mute_short": "Silentiar",
"account.muted": "Silentiate",
"account.no_bio": "Nulle description fornite.",
"account.open_original_page": "Aperir le pagina original",
"account.posts": "Messages",
"account.posts_with_replies": "Messages e responsas",
"account.share": "Compartir profilo de @{name}",

View File

@@ -9,7 +9,7 @@
"about.domain_blocks.suspended.explanation": "Jokie duomenys iš šio serverio nebus apdorojami, saugomi ar keičiami, todėl bet kokia sąveika ar bendravimas su šio serverio naudotojais bus neįmanomas.",
"about.domain_blocks.suspended.title": "Uždrausta",
"about.not_available": "Ši informacija nebuvo pateikta šiame serveryje.",
"about.powered_by": "Decentralizuota socialinė žiniasklaida, kurią valdo {mastodon}",
"about.powered_by": "Decentralizuota socialinė medija, kurią valdo {mastodon}",
"about.rules": "Serverio taisyklės",
"account.account_note_header": "Pastaba",
"account.add_or_remove_from_list": "Pridėti arba ištrinti iš sąrašų",
@@ -27,24 +27,24 @@
"account.domain_blocked": "Užblokuotas domenas",
"account.edit_profile": "Redaguoti profilį",
"account.enable_notifications": "Pranešti man, kai @{name} paskelbia",
"account.endorse": "Savybė profilyje",
"account.endorse": "Rekomenduoti profilyje",
"account.featured_tags.last_status_at": "Paskutinį kartą paskelbta {date}",
"account.featured_tags.last_status_never": "Nėra įrašų",
"account.featured_tags.title": "{name} rekomenduojamos grotažymės",
"account.featured_tags.title": "{name} rekomenduojami saitažodžiai",
"account.follow": "Sekti",
"account.follow_back": "Sekti atgal",
"account.followers": "Sekėjai",
"account.followers.empty": "Šio naudotojo dar niekas neseka.",
"account.followers_counter": "{count, plural, one {{counter} sekėjas} few {{counter} sekėjai} many {{counter} sekėjo} other {{counter} sekėjų}}",
"account.following": "Seka",
"account.following_counter": "{count, plural, one {{counter} Seka} few {{counter} Seka} many {{counter} Seka} other {{counter} Seka}}",
"account.following": "Sekama",
"account.following_counter": "{count, plural, one {{counter} sekimas} few {{counter} sekimai} many {{counter} sekimo} other {{counter} sekimų}}",
"account.follows.empty": "Šis (-i) naudotojas (-a) dar nieko neseka.",
"account.go_to_profile": "Eiti į profilį",
"account.hide_reblogs": "Slėpti pakėlimus iš @{name}",
"account.in_memoriam": "Atminimui.",
"account.joined_short": "Prisijungė",
"account.languages": "Keisti prenumeruojamas kalbas",
"account.link_verified_on": "Šios nuorodos nuosavybė buvo patikrinta {date}",
"account.link_verified_on": "Šios nuorodos nuosavybė buvo patikrinta {date}.",
"account.locked_info": "Šios paskyros privatumo būsena nustatyta kaip užrakinta. Savininkas (-ė) rankiniu būdu peržiūri, kas gali sekti.",
"account.media": "Medija",
"account.mention": "Paminėti @{name}",
@@ -58,8 +58,8 @@
"account.open_original_page": "Atidaryti originalinį puslapį",
"account.posts": "Įrašai",
"account.posts_with_replies": "Įrašai ir atsakymai",
"account.report": "Pranešti @{name}",
"account.requested": "Laukiama patvirtinimo. Spausk, kad atšaukti sekimo užklausą",
"account.report": "Pranešti apie @{name}",
"account.requested": "Laukiama patvirtinimo. Spustelėk, jei nori atšaukti sekimo prašymą.",
"account.requested_follow": "{name} paprašė tave sekti",
"account.share": "Bendrinti @{name} profilį",
"account.show_reblogs": "Rodyti pakėlimus iš @{name}",
@@ -69,28 +69,28 @@
"account.unblock_short": "Atblokuoti",
"account.unendorse": "Nerodyti profilyje",
"account.unfollow": "Nebesekti",
"account.unmute": "Atitildyti @{name}",
"account.unmute_notifications_short": "Atitildyti pranešimus",
"account.unmute_short": "Atitildyti",
"account_note.placeholder": "Spausk norėdamas (-a) pridėti pastabą",
"admin.dashboard.daily_retention": "Vartotojų išbuvimo rodiklis pagal dieną po registracijos",
"admin.dashboard.monthly_retention": "Naudotojų išlaikymo rodiklis pagal mėnesį po registracijos",
"account.unmute": "Atšaukti nutildy @{name}",
"account.unmute_notifications_short": "Atšaukti nutildy pranešimams",
"account.unmute_short": "Atšaukti nutildy",
"account_note.placeholder": "Spustelėk norėdamas (-a) pridėti pastabą",
"admin.dashboard.daily_retention": "Naudotojų pasilikimo rodiklis pagal dieną po registracijos",
"admin.dashboard.monthly_retention": "Naudotojų pasilikimo rodiklis pagal mėnesį po registracijos",
"admin.dashboard.retention.average": "Vidurkis",
"admin.dashboard.retention.cohort": "Registravimo mėnuo",
"admin.dashboard.retention.cohort": "Registracijos mėnuo",
"admin.dashboard.retention.cohort_size": "Nauji naudotojai",
"admin.impact_report.instance_accounts": "Paskyrų profiliai, kuriuos tai ištrintų",
"admin.impact_report.instance_followers": "Sekėjai, kuriuos prarastų mūsų naudotojai",
"admin.impact_report.instance_follows": "Sekėjai, kuriuos prarastų jų naudotojai",
"admin.impact_report.title": "Poveikio apibendrinimas",
"alert.rate_limited.message": "Pabandyk vėliau po {retry_time, time, medium}.",
"alert.rate_limited.title": "Spartos ribojimas",
"alert.rate_limited.title": "Sparta ribota",
"alert.unexpected.message": "Įvyko netikėta klaida.",
"alert.unexpected.title": "Ups!",
"announcement.announcement": "Skelbimas",
"attachments_list.unprocessed": "(neapdorotas)",
"audio.hide": "Slėpti garsą",
"autosuggest_hashtag.per_week": "{count} per savaitę",
"boost_modal.combo": "Gali spausti {combo}, kad praleisti kitą kartą",
"boost_modal.combo": "Gali paspausti {combo}, kad praleisti kitą kartą",
"bundle_column_error.copy_stacktrace": "Kopijuoti klaidos ataskaitą",
"bundle_column_error.error.body": "Užklausos puslapio nepavyko atvaizduoti. Tai gali būti dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos.",
"bundle_column_error.error.title": "O, ne!",
@@ -104,10 +104,10 @@
"bundle_modal_error.message": "Kraunant šį komponentą kažkas nepavyko.",
"bundle_modal_error.retry": "Bandyti dar kartą",
"closed_registrations.other_server_instructions": "Kadangi Mastodon yra decentralizuotas, gali susikurti paskyrą kitame serveryje ir vis tiek bendrauti su šiuo serveriu.",
"closed_registrations_modal.description": "Sukurti paskyrą {domain} šiuo metu neįmanoma, tačiau nepamiršk, kad norint naudotis Mastodon nebūtina turėti paskyrą {domain}.",
"closed_registrations_modal.description": "Sukurti paskyrą {domain} šiuo metu neįmanoma, tačiau nepamiršk, kad norint naudotis Mastodon nebūtina turėti paskyrą domene {domain}.",
"closed_registrations_modal.find_another_server": "Rasti kitą serverį",
"closed_registrations_modal.preamble": "Mastodon yra decentralizuotas, todėl nesvarbu, kur susikursi paskyrą, galėsi sekti ir bendrauti su bet kuriuo šiame serveryje esančiu asmeniu. Jį gali net savarankiškai talpinti!",
"closed_registrations_modal.title": "Užsiregistravimas į Mastodon",
"closed_registrations_modal.title": "Užsiregistruoti Mastodon",
"column.about": "Apie",
"column.blocks": "Užblokuoti naudotojai",
"column.bookmarks": "Žymės",
@@ -116,15 +116,15 @@
"column.directory": "Naršyti profilius",
"column.domain_blocks": "Užblokuoti domenai",
"column.favourites": "Mėgstamiausi",
"column.firehose": "Tiesioginiai padavimai",
"column.follow_requests": "Sekti prašymus",
"column.firehose": "Tiesioginiai srautai",
"column.follow_requests": "Sekimo prašymus",
"column.home": "Pagrindinis",
"column.lists": "Sąrašai",
"column.mutes": "Nutildyti naudotojai",
"column.notifications": "Pranešimai",
"column.pins": "Prisegti įrašai",
"column.public": "Federacinė laiko skalė",
"column_back_button.label": "Atgal",
"column_back_button.label": "Grįžti",
"column_header.hide_settings": "Slėpti nustatymus",
"column_header.moveLeft_settings": "Judinti stulpelį į kairę",
"column_header.moveRight_settings": "Judinti stulpelį į dešinę",

View File

@@ -88,6 +88,85 @@ table + p {
padding: 24px;
}
// Account
.email-account-banner-table {
background-color: #f3f2f5;
border-top-left-radius: 12px;
border-top-right-radius: 12px;
}
.email-account-banner-td {
border-top-left-radius: 12px;
border-top-right-radius: 12px;
height: 140px;
vertical-align: bottom;
background-color: #f3f2f5;
background-position: center;
background-size: cover;
}
.email-account-banner-inner-td {
padding: 24px 24px 0;
mso-padding-alt: 24px;
}
.email-account-banner-overlap-div {
max-height: 42px;
}
.email-account-banner-icon-table {
width: auto;
margin: 0;
overflow: hidden;
border-radius: 8px;
border-collapse: separate;
background-color: #fff;
border: 2px solid #fff;
img {
display: block;
max-width: 100%;
border: none;
border-radius: 6px;
}
}
.email-account-body-td {
padding: 56px 24px 24px;
mso-padding-alt: 24px;
}
.email-account-name {
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: #17063b;
}
.email-account-handle {
font-size: 14px;
line-height: 20px;
color: #746a89;
}
.email-account-stats-table {
td {
padding-right: 16px;
font-size: 14px;
line-height: 20px;
color: #746a89;
}
b {
font-weight: 600;
color: #17063b;
}
span {
white-space: nowrap;
}
}
// Utility classes
.email-w-full {
width: 100%;
@@ -122,6 +201,14 @@ table + p {
padding-top: 24px;
}
.email-padding-top-16 {
padding-top: 16px;
}
.email-padding-top-0 {
padding-top: 0;
}
.email-border-top {
border-top: 1px solid #dfdee3;
}

View File

@@ -1398,8 +1398,7 @@ body > [data-popper-placement] {
.icon {
width: 15px;
height: 15px;
position: relative;
top: 0.145em;
vertical-align: middle;
}
}
@@ -5544,6 +5543,10 @@ a.status-card {
padding-inline-end: 10px;
}
.icon {
vertical-align: middle;
}
.button {
flex: 0 0 auto;
}
@@ -6094,6 +6097,7 @@ a.status-card {
gap: 2px;
}
.media-gallery__alt__label,
.media-gallery__gifv__label {
display: flex;
align-items: center;
@@ -6170,6 +6174,7 @@ a.status-card {
.icon {
color: $dark-text-color;
vertical-align: middle;
}
}
}
@@ -7415,6 +7420,13 @@ noscript {
span {
user-select: all;
}
.icon-lock {
height: 16px;
width: 16px;
position: relative;
top: 3px;
}
}
}
}

View File

@@ -75,22 +75,41 @@ class Announcement < ApplicationRecord
end
def reactions(account = nil)
records = begin
scope = announcement_reactions.group(:announcement_id, :name, :custom_emoji_id).order(Arel.sql('MIN(created_at) ASC'))
if account.nil?
scope.select('name, custom_emoji_id, count(*) as count, false as me')
else
scope.select("name, custom_emoji_id, count(*) as count, exists(select 1 from announcement_reactions r where r.account_id = #{account.id} and r.announcement_id = announcement_reactions.announcement_id and r.name = announcement_reactions.name) as me")
grouped_ordered_announcement_reactions.select(
[:name, :custom_emoji_id, 'COUNT(*) as count'].tap do |values|
values << value_for_reaction_me_column(account)
end
end.to_a
ActiveRecord::Associations::Preloader.new(records: records, associations: :custom_emoji).call
records
).to_a.tap do |records|
ActiveRecord::Associations::Preloader.new(records: records, associations: :custom_emoji).call
end
end
private
def grouped_ordered_announcement_reactions
announcement_reactions
.group(:announcement_id, :name, :custom_emoji_id)
.order(
Arel.sql('MIN(created_at)').asc
)
end
def value_for_reaction_me_column(account)
if account.nil?
'FALSE AS me'
else
<<~SQL.squish
EXISTS(
SELECT 1
FROM announcement_reactions inner_reactions
WHERE inner_reactions.account_id = #{account.id}
AND inner_reactions.announcement_id = announcement_reactions.announcement_id
AND inner_reactions.name = announcement_reactions.name
) AS me
SQL
end
end
def set_published
return unless scheduled_at.blank? || scheduled_at.past?

View File

@@ -39,7 +39,7 @@ class ManifestSerializer < ActiveModel::Serializer
def icons
ICON_SIZES.map do |size|
{
src: full_pack_url("media/icons/android-chrome-#{size}x#{size}.png"),
src: frontend_asset_url("icons/android-chrome-#{size}x#{size}.png"),
sizes: "#{size}x#{size}",
type: 'image/png',
purpose: 'any maskable',

View File

@@ -28,7 +28,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
}
else
{
url: full_pack_url('media/images/preview.png'),
url: frontend_asset_url('images/preview.png'),
}
end
end

View File

@@ -33,7 +33,7 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer
end
def thumbnail
instance_presenter.thumbnail ? full_asset_url(instance_presenter.thumbnail.file.url(:'@1x')) : full_pack_url('media/images/preview.png')
instance_presenter.thumbnail ? full_asset_url(instance_presenter.thumbnail.file.url(:'@1x')) : frontend_asset_url('images/preview.png')
end
def max_toot_chars

View File

@@ -0,0 +1,30 @@
%table.email-w-full.email-account-banner-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-account-banner-td{ height: 140, background: full_asset_url(account.header.url) }
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-account-banner-inner-td
.email-account-banner-overlap-div
%table.email-account-banner-icon-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td
%img{ src: full_asset_url(account.avatar.url), width: 80, height: 80, alt: '' }
%table.email-w-full.email-account-body-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-account-body-td
%p.email-account-name= display_name(account)
%p.email-account-handle= acct(account)
%table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-padding-top-16
%table.email-w-full.email-account-stats-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td
%b= account_formatted_stat(account.statuses_count)
%span= t('accounts.posts', count: account.statuses_count)
%td
%b= account_formatted_stat(account.following_count)
%span= t('accounts.following')
%td
%b= hide_followers_count?(account) ? '-' : account_formatted_stat(account.followers_count)
%span= t('accounts.followers', count: account.followers_count)

View File

@@ -11,9 +11,9 @@
%tr
%td.email-checklist-icons-checkbox-td
- if defined?(checked) && checked
= image_tag full_pack_url('media/images/mailer-new/welcome/checkbox-on.png'), alt: '', width: 20, height: 20
= image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-on.png'), alt: '', width: 20, height: 20
- else
= image_tag full_pack_url('media/images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20
= image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20
%td.email-checklist-icons-step-td
- if defined?(step_image_url)
= image_tag step_image_url, alt: '', width: 40, height: 40

View File

@@ -14,12 +14,12 @@
%link{ rel: 'icon', href: '/favicon.ico', type: 'image/x-icon' }/
- %w(16 32 48).each do |size|
%link{ rel: 'icon', sizes: "#{size}x#{size}", href: asset_pack_path("media/icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/
%link{ rel: 'icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/
- %w(57 60 72 76 114 120 144 152 167 180 1024).each do |size|
%link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: asset_pack_path("media/icons/apple-touch-icon-#{size}x#{size}.png") }/
%link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/
%link{ rel: 'mask-icon', href: asset_pack_path('media/images/logo-symbol-icon.svg'), color: '#6364FF' }/
%link{ rel: 'mask-icon', href: frontend_asset_path('images/logo-symbol-icon.svg'), color: '#6364FF' }/
%link{ rel: 'manifest', href: manifest_path(format: :json) }/
%meta{ name: 'theme-color', content: '#191b22' }/
%meta{ name: 'apple-mobile-web-app-capable', content: 'yes' }/

View File

@@ -50,7 +50,7 @@
/[if mso]
</v:textbox></v:rect>
= link_to root_url, class: 'email-header-logo-a' do
= image_tag full_pack_url('media/images/mailer-new/common/logo-header.png'), alt: 'Mastodon', width: 157, height: 40
= image_tag frontend_asset_url('images/mailer-new/common/logo-header.png'), alt: 'Mastodon', width: 157, height: 40
-# Heading
= yield :heading
@@ -75,7 +75,7 @@
%td.email-footer-td
%p.email-footer-p
= link_to root_url, class: 'email-footer-logo-a' do
= image_tag full_pack_url('media/images/mailer-new/common/logo-footer.png'), alt: 'Mastodon', width: 44, height: 44
= image_tag frontend_asset_url('images/mailer-new/common/logo-footer.png'), alt: 'Mastodon', width: 44, height: 44
%p.email-footer-p
= t 'about.hosted_on', domain: site_hostname
%p.email-footer-p

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('notification_mailer.favourite.title'), heading_subtitle: t('notification_mailer.favourite.body', name: @account.pretty_acct), heading_image_url: full_pack_url('media/images/mailer-new/heading/favorite.png')
= render 'application/mailer/heading', heading_title: t('notification_mailer.favourite.title'), heading_subtitle: t('notification_mailer.favourite.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/favorite.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,9 +1,13 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('notification_mailer.follow.title'), heading_subtitle: t('notification_mailer.follow.body', name: @account.pretty_acct), heading_image_url: full_pack_url('media/images/mailer-new/heading/user.png')
= render 'application/mailer/heading', heading_title: t('notification_mailer.follow.title'), heading_subtitle: t('notification_mailer.follow.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/user.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td
%table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-inner-card-td
= render 'application/mailer/button', text: t('application_mailer.view_profile'), url: web_url("@#{@account.pretty_acct}")
%td.email-inner-card-td-without-padding
= render 'application/mailer/account', account: @account
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-padding-24.email-padding-top-0
= render 'application/mailer/button', text: t('application_mailer.view_profile'), url: web_url("@#{@account.pretty_acct}")

View File

@@ -1,9 +1,13 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('notification_mailer.follow_request.title'), heading_subtitle: t('notification_mailer.follow_request.body', name: @account.pretty_acct), heading_image_url: full_pack_url('media/images/mailer-new/heading/follow.png')
= render 'application/mailer/heading', heading_title: t('notification_mailer.follow_request.title'), heading_subtitle: t('notification_mailer.follow_request.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/follow.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td
%table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-inner-card-td
= render 'application/mailer/button', text: t('notification_mailer.follow_request.action'), url: web_url('follow_requests')
%td.email-inner-card-td-without-padding
= render 'application/mailer/account', account: @account
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-padding-24.email-padding-top-0
= render 'application/mailer/button', text: t('notification_mailer.follow_request.action'), url: web_url('follow_requests')

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('notification_mailer.mention.title'), heading_subtitle: t('notification_mailer.mention.body', name: @status.account.pretty_acct), heading_image_url: full_pack_url('media/images/mailer-new/heading/mention.png')
= render 'application/mailer/heading', heading_title: t('notification_mailer.mention.title'), heading_subtitle: t('notification_mailer.mention.body', name: @status.account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/mention.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('notification_mailer.reblog.title'), heading_subtitle: t('notification_mailer.reblog.body', name: @account.pretty_acct), heading_image_url: full_pack_url('media/images/mailer-new/heading/boost.png')
= render 'application/mailer/heading', heading_title: t('notification_mailer.reblog.title'), heading_subtitle: t('notification_mailer.reblog.body', name: @account.pretty_acct), heading_image_url: frontend_asset_url('images/mailer-new/heading/boost.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -4,8 +4,8 @@
= simple_form_for current_user, url: settings_flavour_path(@selected), html: { method: :put } do |f|
= render 'shared/error_messages', object: current_user
- Themes.instance.flavour(@selected)['screenshot'].each do |screen|
%img.flavour-screen{ src: full_pack_url("media/#{screen}"), alt: '' }
- Themes.instance.flavour(@selected)['screenshot'].each do |screenshot|
%img.flavour-screen{ src: frontend_asset_url(screenshot), alt: '' }
.flavour-description
= t "flavours.#{@selected}.description", default: ''

View File

@@ -8,7 +8,7 @@
= opengraph 'og:type', 'website'
= opengraph 'og:title', instance_presenter.title
= opengraph 'og:description', description
= opengraph 'og:image', full_asset_url(thumbnail&.file&.url(:'@1x') || asset_pack_path('media/images/preview.png', protocol: :request))
= opengraph 'og:image', full_asset_url(thumbnail&.file&.url(:'@1x') || frontend_asset_path('images/preview.png'))
= opengraph 'og:image:width', thumbnail ? thumbnail.meta['width'] : '1200'
= opengraph 'og:image:height', thumbnail ? thumbnail.meta['height'] : '630'
= opengraph 'twitter:card', 'summary_large_image'

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('user_mailer.appeal_approved.title'), heading_subtitle: t('user_mailer.appeal_approved.subtitle'), heading_image_url: full_pack_url('media/images/mailer-new/heading/appeal-approved.png')
= render 'application/mailer/heading', heading_title: t('user_mailer.appeal_approved.title'), heading_subtitle: t('user_mailer.appeal_approved.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/appeal-approved.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('user_mailer.appeal_rejected.title'), heading_subtitle: t('user_mailer.appeal_rejected.subtitle'), heading_image_url: full_pack_url('media/images/mailer-new/heading/appeal-rejected.png')
= render 'application/mailer/heading', heading_title: t('user_mailer.appeal_rejected.title'), heading_subtitle: t('user_mailer.appeal_rejected.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/appeal-rejected.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('user_mailer.backup_ready.title'), heading_subtitle: t('user_mailer.backup_ready.explanation'), heading_image_url: full_pack_url('media/images/mailer-new/heading/archive.png')
= render 'application/mailer/heading', heading_title: t('user_mailer.backup_ready.title'), heading_subtitle: t('user_mailer.backup_ready.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/archive.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.confirmation_instructions.title'), heading_image_url: full_pack_url('media/images/mailer-new/heading/email.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.confirmation_instructions.title'), heading_image_url: frontend_asset_url('images/mailer-new/heading/email.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.email_changed.title'), heading_subtitle: t('devise.mailer.email_changed.explanation'), heading_image_url: full_pack_url('media/images/mailer-new/heading/email.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.email_changed.title'), heading_subtitle: t('devise.mailer.email_changed.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/email.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.password_change.title'), heading_subtitle: t('devise.mailer.password_change.explanation'), heading_image_url: full_pack_url('media/images/mailer-new/heading/password.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.password_change.title'), heading_subtitle: t('devise.mailer.password_change.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/password.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.reconfirmation_instructions.title'), heading_image_url: full_pack_url('media/images/mailer-new/heading/email.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.reconfirmation_instructions.title'), heading_image_url: frontend_asset_url('images/mailer-new/heading/email.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.reset_password_instructions.title'), heading_subtitle: t('devise.mailer.reset_password_instructions.explanation'), heading_image_url: full_pack_url('media/images/mailer-new/heading/password.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.reset_password_instructions.title'), heading_subtitle: t('devise.mailer.reset_password_instructions.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/password.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('user_mailer.suspicious_sign_in.title'), heading_subtitle: t('user_mailer.suspicious_sign_in.explanation'), heading_image_url: full_pack_url('media/images/mailer-new/heading/login.png')
= render 'application/mailer/heading', heading_title: t('user_mailer.suspicious_sign_in.title'), heading_subtitle: t('user_mailer.suspicious_sign_in.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/login.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_disabled.title'), heading_subtitle: t('devise.mailer.two_factor_disabled.subtitle'), heading_image_url: full_pack_url('media/images/mailer-new/heading/2fa-disabled.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_disabled.title'), heading_subtitle: t('devise.mailer.two_factor_disabled.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/2fa-disabled.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_enabled.title'), heading_subtitle: t('devise.mailer.two_factor_enabled.subtitle'), heading_image_url: full_pack_url('media/images/mailer-new/heading/2fa-enabled.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_enabled.title'), heading_subtitle: t('devise.mailer.two_factor_enabled.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/2fa-enabled.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_recovery_codes_changed.title'), heading_subtitle: t('devise.mailer.two_factor_recovery_codes_changed.subtitle'), heading_image_url: full_pack_url('media/images/mailer-new/heading/2fa-recovery.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.two_factor_recovery_codes_changed.title'), heading_subtitle: t('devise.mailer.two_factor_recovery_codes_changed.subtitle'), heading_image_url: frontend_asset_url('images/mailer-new/heading/2fa-recovery.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t("user_mailer.warning.title.#{@warning.action}"), heading_image_url: full_pack_url('media/images/mailer-new/heading/warning.png')
= render 'application/mailer/heading', heading_title: t("user_mailer.warning.title.#{@warning.action}"), heading_image_url: frontend_asset_url('images/mailer-new/heading/warning.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_credential.added.title'), heading_subtitle: t('devise.mailer.webauthn_credential.added.explanation'), heading_image_url: full_pack_url('media/images/mailer-new/heading/key-added.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_credential.added.title'), heading_subtitle: t('devise.mailer.webauthn_credential.added.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-added.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_credential.deleted.title'), heading_subtitle: t('devise.mailer.webauthn_credential.deleted.explanation'), heading_image_url: full_pack_url('media/images/mailer-new/heading/key-deleted.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_credential.deleted.title'), heading_subtitle: t('devise.mailer.webauthn_credential.deleted.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-deleted.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_disabled.title'), heading_subtitle: t('devise.mailer.webauthn_disabled.explanation'), heading_image_url: full_pack_url('media/images/mailer-new/heading/key-disabled.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_disabled.title'), heading_subtitle: t('devise.mailer.webauthn_disabled.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-disabled.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td

View File

@@ -1,5 +1,5 @@
= content_for :heading do
= render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_enabled.title'), heading_subtitle: t('devise.mailer.webauthn_enabled.explanation'), heading_image_url: full_pack_url('media/images/mailer-new/heading/key-enabled.png')
= render 'application/mailer/heading', heading_title: t('devise.mailer.webauthn_enabled.title'), heading_subtitle: t('devise.mailer.webauthn_enabled.explanation'), heading_image_url: frontend_asset_url('images/mailer-new/heading/key-enabled.png')
%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' }
%tr
%td.email-body-padding-td