Postbox
FossilOrigin-Name: fa0971dfd73b18da2b62d02dcb1f3aa5ef301d17c21efab4ece79d5a6981a297
This commit is contained in:
parent
4f07f2768f
commit
3ac0145efc
|
@ -6,6 +6,7 @@ use Exporter 'import';
|
|||
our @EXPORT = qw( generate_attachment );
|
||||
|
||||
use template_helpers 'to_template';
|
||||
use icons 'get_icon';
|
||||
|
||||
sub generate_attachment
|
||||
{
|
||||
|
@ -15,7 +16,8 @@ sub generate_attachment
|
|||
prefix => '',
|
||||
ssn => $ssn,
|
||||
attachment => $att,
|
||||
sensitive => $sensitive
|
||||
sensitive => $sensitive,
|
||||
icon => \&get_icon,
|
||||
);
|
||||
|
||||
to_template(\%vars, \$data->{'attachment.tt'});
|
||||
|
|
23
perl/postbox.pm
Normal file
23
perl/postbox.pm
Normal file
|
@ -0,0 +1,23 @@
|
|||
package postbox;
|
||||
use strict;
|
||||
use warnings;
|
||||
use template_helpers 'to_template';
|
||||
use string_helpers qw( get_mentions_from_content );
|
||||
use Exporter 'import';
|
||||
|
||||
our @EXPORT = qw( generate_postbox );
|
||||
|
||||
sub generate_postbox
|
||||
{
|
||||
my ($ssn, $data, $status) = @_;
|
||||
|
||||
my %vars = (
|
||||
prefix => '',
|
||||
ssn => $ssn,
|
||||
data => $data,
|
||||
status => $status,
|
||||
mentionify => \&get_mentions_from_content,
|
||||
);
|
||||
|
||||
to_template(\%vars, \$data->{'postbox.tt'});
|
||||
}
|
|
@ -5,6 +5,7 @@ use HTML::Escape 'escape_html';
|
|||
use string_helpers qw( reltime_to_str greentextify emojify format_username );
|
||||
use icons qw( get_icon visibility_to_icon );
|
||||
use attachments 'generate_attachment';
|
||||
use postbox 'generate_postbox';
|
||||
use emojis 'generate_emoji';
|
||||
use Exporter 'import';
|
||||
|
||||
|
@ -20,6 +21,7 @@ sub generate_status
|
|||
prefix => '',
|
||||
ssn => $ssn,
|
||||
status => $status,
|
||||
data => $data,
|
||||
# Functions
|
||||
icon => \&get_icon,
|
||||
rel_to_str => \&reltime_to_str,
|
||||
|
@ -30,6 +32,7 @@ sub generate_status
|
|||
emojify => \&emojify,
|
||||
escape => \&escape_html,
|
||||
format_username => \&format_username,
|
||||
make_postbox => \&generate_postbox,
|
||||
);
|
||||
|
||||
to_template(\%vars, \$data->{'status.tt'});
|
||||
|
|
|
@ -4,7 +4,7 @@ use warnings;
|
|||
use HTML::Escape 'escape_html';
|
||||
use Exporter 'import';
|
||||
|
||||
our @EXPORT = qw( reltime_to_str greentextify emojify format_username );
|
||||
our @EXPORT = qw( reltime_to_str greentextify emojify format_username get_mentions_from_content );
|
||||
|
||||
sub reltime_to_str
|
||||
{
|
||||
|
@ -44,7 +44,13 @@ sub emojify
|
|||
|
||||
sub format_username
|
||||
{
|
||||
my $username = shift;
|
||||
emojify escape_html($username);
|
||||
my $account = shift;
|
||||
emojify(escape_html($account->{display_name}), $account->{emojis});
|
||||
}
|
||||
|
||||
sub get_mentions_from_content
|
||||
{
|
||||
my $status = shift;
|
||||
# todo
|
||||
"";
|
||||
}
|
||||
|
|
|
@ -900,6 +900,7 @@ HV* perlify_account(const struct mstdnt_account* acct)
|
|||
hvstores_int(acct_hv, "suspended", acct->suspended);
|
||||
hvstores_int(acct_hv, "locked", acct->locked);
|
||||
hvstores_int(acct_hv, "discoverable", acct->discoverable);
|
||||
hvstores_ref(acct_hv, "emojis", perlify_emojis(acct->emojis, acct->emojis_len));
|
||||
|
||||
return acct_hv;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "../templates/emoji_picker.ctt"
|
||||
#include "../templates/attachment.ctt"
|
||||
#include "../templates/emoji.ctt"
|
||||
#include "../templates/postbox.ctt"
|
||||
|
||||
HV* template_files;
|
||||
pthread_mutex_t perl_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
@ -40,6 +41,7 @@ void init_template_files()
|
|||
hv_stores(template_files, "emoji_picker.tt", newSVpv(data_emoji_picker_tt, data_emoji_picker_tt_size));
|
||||
hv_stores(template_files, "attachment.tt", newSVpv(data_attachment_tt, data_attachment_tt_size));
|
||||
hv_stores(template_files, "emoji.tt", newSVpv(data_emoji_tt, data_emoji_tt_size));
|
||||
hv_stores(template_files, "postbox.tt", newSVpv(data_postbox_tt, data_postbox_tt_size));
|
||||
}
|
||||
|
||||
void cleanup_template_files()
|
||||
|
|
78
templates/postbox.tt
Normal file
78
templates/postbox.tt
Normal file
|
@ -0,0 +1,78 @@
|
|||
<form class="reply-form" action="$prefix/status/create" method="post" enctype="multipart/form-data">
|
||||
[% IF status %]
|
||||
<input type="hidden" name="replyid" value="[% status.in_reply_to_id %]">
|
||||
[% END %]
|
||||
<div class="statusbox">
|
||||
<textarea name="content" placeholder="Just landed in N.Y." rows="5">
|
||||
[%- IF status -%]
|
||||
[%- mentionify(status) -%]
|
||||
[%- END -%]
|
||||
</textarea>
|
||||
<div class="statusfooter">
|
||||
<div class="statusfooter-left">
|
||||
<label>
|
||||
<input type="file" name="file" class="hidden" multiple>
|
||||
<div class="file-upload-btn btn-icon">
|
||||
[% icon('fileclip') %]
|
||||
</div>
|
||||
</label>
|
||||
<select name="contenttype" class="content-type">
|
||||
<option value="plaintext">Plain Text</option>
|
||||
<option value="markdown">Markdown</option>
|
||||
<option value="html">HTML</option>
|
||||
<option value="bbcode">BBCode</option>
|
||||
</select>
|
||||
<div class="post-group">
|
||||
<!-- Local -->
|
||||
<label>
|
||||
<input type="radio" name="visibility" value="local" class="hidden"
|
||||
[%- IF status.visibility == 6 %] checked[% END %]>
|
||||
<div class="visibility-icon vis-local">
|
||||
[% icon('local') %]
|
||||
</div>
|
||||
</label>
|
||||
<!-- Direct -->
|
||||
<label>
|
||||
<input type="radio" name="visibility" value="direct" class="hidden"
|
||||
[%- IF status.visibility == 5 %] checked[% END %]>
|
||||
<div class="visibility-icon vis-direct">
|
||||
[% icon('direct') %]
|
||||
</div>
|
||||
</label>
|
||||
<!-- Private -->
|
||||
<label>
|
||||
<input type="radio" name="visibility" value="private" class="hidden"
|
||||
[%- IF status.visibility == 3 %] checked[% END %]
|
||||
[%- IF status.visibility > 3 %] disabled[% END %]>
|
||||
<div class="visibility-icon vis-private">
|
||||
[% icon('private') %]
|
||||
</div>
|
||||
</label>
|
||||
<!-- Unlisted -->
|
||||
<label>
|
||||
<input type="radio" name="visibility" value="unlisted" class="hidden"
|
||||
[%- IF status.visibility == 2 %] checked[% END %]
|
||||
[%- IF status.visibility > 2 %] disabled[% END %]>
|
||||
<div class="visibility-icon vis-unlisted">
|
||||
[% icon('unlisted') %]
|
||||
</div>
|
||||
</label>
|
||||
<!-- Public -->
|
||||
<label>
|
||||
<input type="radio" name="visibility" value="public" class="hidden"
|
||||
[%- IF status.visibility == 1 %] checked[% END %]
|
||||
[%- IF status.visibility > 2 %] disabled[% END %]>
|
||||
<div class="visibility-icon vis-public">
|
||||
[% icon('public') %]
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="statusfooter-right">
|
||||
<input type="submit" value="Post" class="btn post-btn">
|
||||
</div>
|
||||
</div>
|
||||
<div class="file-uploads-container hidden"></div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
</td>
|
||||
<td class="status-info">
|
||||
<div class="poster-stats">
|
||||
<span class="username">[% format_username(status.account.display_name) %]</span>
|
||||
<span class="username">[% format_username(status.account) %]</span>
|
||||
<a class="instance-info" href="$prefix/@[% status.account.acct %]">[% status.account.acct %]</a>
|
||||
<span class="alignend">
|
||||
<div class="menu-container status-visibility">
|
||||
|
@ -142,5 +142,4 @@
|
|||
</table>
|
||||
</div>
|
||||
<input type="checkbox" class="quickreply-hide hidden" id="status-quickreply-[% status.id %]">
|
||||
<!-- {{ %s : reply }} -->
|
||||
|
||||
[% make_postbox(ssn, data, status) %]
|
||||
|
|
Loading…
Reference in a new issue