File: | lib/Yukki/Web/Plugin/Attachment.pm |
Coverage: | 49.0% |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package Yukki::Web::Plugin::Attachment; | ||||||
2 | |||||||
3 | 1 1 | 2992 8 | use v5.24; | ||||
4 | 1 1 1 | 9 8 20 | use utf8; | ||||
5 | 1 1 1 | 29 7 18 | use Moo; | ||||
6 | |||||||
7 | 1 1 1 | 537 3 19 | use Types::Standard qw( HashRef Str ); | ||||
8 | |||||||
9 | 1 1 1 | 1237 4 23 | use namespace::clean; | ||||
10 | |||||||
11 | extends 'Yukki::Web::Plugin'; | ||||||
12 | |||||||
13 | # ABSTRACT: plugin for attachments | ||||||
14 | |||||||
15 | 1 1 1 | 428 5 571 | use URI::Escape qw( uri_escape ); | ||||
16 | |||||||
17 - 31 | =head1 SYNOPSIS {{attachment:main:Path/To/Attachment.pdf}} =head1 DESCRIPTION This provides a tool for generating URLs to link to attachments on the current page or from other pages. =head1 ATTRIBUTES =head2 format_helpers Links the "attachment" format helper to L</attachment_url>. =cut | ||||||
32 | |||||||
33 | has format_helpers => ( | ||||||
34 | is => 'ro', | ||||||
35 | isa => HashRef[Str], | ||||||
36 | required => 1, | ||||||
37 | default => sub { +{ | ||||||
38 | 'attachment' => 'attachment_url', | ||||||
39 | } }, | ||||||
40 | ); | ||||||
41 | |||||||
42 | with 'Yukki::Web::Plugin::Role::FormatHelper'; | ||||||
43 | |||||||
44 - 50 | =head1 METHODS =head2 attachment_url Generates a URL for an attachment path. =cut | ||||||
51 | |||||||
52 | sub attachment_url { | ||||||
53 | 0 | 1 | my ($self, $params) = @_; | ||||
54 | |||||||
55 | 0 | my $ctx = $params->{context}; | |||||
56 | 0 | my $file = $params->{file}; | |||||
57 | 0 | my $arg = $params->{arg}; | |||||
58 | |||||||
59 | 0 | if ($arg =~ m{ | |||||
60 | |||||||
61 | ^\s* | ||||||
62 | |||||||
63 | (?: ([\w]+) : )? # repository: is optional | ||||||
64 | (.+) # link/to/page is mandatory | ||||||
65 | |||||||
66 | \s*$ | ||||||
67 | |||||||
68 | }x) { | ||||||
69 | |||||||
70 | 0 | my $repository = $1 // $file->repository_name; | |||||
71 | 0 | my $page = $file->full_path; | |||||
72 | 0 | my $link = $2; | |||||
73 | |||||||
74 | 0 0 | $link =~ s/^\s+//; $link =~ s/\s+$//; | |||||
75 | |||||||
76 | 0 | $page =~ s{\.yukki$}{}; | |||||
77 | 0 0 | $link = join "/", map { uri_escape($_) } split m{/}, $link; | |||||
78 | |||||||
79 | 0 | if ($link =~ m{^/}) { | |||||
80 | 0 | return $ctx->rebae_url("attachment/view/$repository$link"); | |||||
81 | } | ||||||
82 | else { | ||||||
83 | 0 | return $ctx->rebase_url("attachment/view/$repository/$page/$link"); | |||||
84 | } | ||||||
85 | } | ||||||
86 | |||||||
87 | 0 | return; | |||||
88 | } | ||||||
89 | |||||||
90 | 1; |