treebird/perl/status.pm

100 lines
3.0 KiB
Perl

package status;
use strict;
use warnings;
use string_helpers qw( reltime_to_str greentextify emojify format_username localize_mentions simple_escape );
use icons qw( get_icon visibility_to_icon );
use attachments 'generate_attachment';
use postbox 'generate_postbox';
use emojis 'generate_emoji';
use Exporter 'import';
use l10n 'lang';
our @EXPORT = qw( content_status generate_status );
use template_helpers 'to_template';
# Useful variable to prevent collisions
my $rel_context = 0;
sub generate_status
{
my ($ssn, $data, $status, $notif, $is_compact, $picker) = @_;
my $boost_acct;
# Move status reference for boosts and keep account
# I hate this design but blame MastoAPI, not me.
if ($status->{reblog})
{
$boost_acct = $status->{account};
$status = $status->{reblog};
}
my $is_statusey_notif = ($notif && ($notif->{type} eq 'mention' || $notif->{type} eq 'status'));
my %vars = (
prefix => '',
ssn => $ssn,
status => $status,
boost => $boost_acct, # May be undef
data => $data,
emoji_picker => $picker,
notif => $notif, # May be undef
compact => $is_compact, # May be undef
is_statusey_notif => $is_statusey_notif,
unique_toggle_id => $rel_context++,
interacted_with => $boost_acct || ($notif && !$is_statusey_notif),
# Functions
action_to_string => sub {
return lang('NOTIF_LIKED') if $notif && $notif->{type} eq 'favourite';
return lang('NOTIF_REPEATED') if $boost_acct || $notif->{type} eq 'reblog';
return lang('NOTIF_REACTED_WITH') .' '. $notif->{emoji} if $notif->{type} eq 'emoji reaction';
},
action_to_icon => sub {
return get_icon('like') if $notif && $notif->{type} eq 'favourite';
return get_icon('repeat') if $boost_acct || $notif->{type} eq 'reblog';
return $notif->{emoji} if $notif && $notif->{type} eq 'emoji reaction';
},
icon => \&get_icon,
lang => \&lang,
rel_to_str => \&reltime_to_str,
vis_to_icon => \&visibility_to_icon,
make_att => \&generate_attachment,
make_emoji => \&generate_emoji,
greentextify => \&greentextify,
emojify => \&emojify,
escape => \&simple_escape,
fix_mentions => \&localize_mentions,
format_username => \&format_username,
make_postbox => \&generate_postbox,
);
to_template(\%vars, \$data->{'status.tt'});
}
sub content_status
{
my ($ssn, $data, $status, $statuses_before, $statuses_after, $picker) = @_;
$rel_context = 0;
my %vars = (
prefix => '',
ssn => $ssn,
status => $status,
picker => $picker,
statuses_before => $statuses_before,
statuses_after => $statuses_after,
# Functions
create_status => sub { generate_status($ssn, $data, shift, 0, 0, shift) },
);
to_template(\%vars, \$data->{'content_status.tt'});
}
1;