リビジョン | 85d0ec679f41b3f9a307c4778133482c386b153e (tree) |
---|---|
日時 | 2018-03-26 14:41:29 |
作者 | kgsoft <kgsoft@user...> |
コミッター | kgsoft |
アウトラインプラグインのページ指定対応
@@ -4,6 +4,13 @@ | ||
4 | 4 | # <pre> |
5 | 5 | # {{outline}} |
6 | 6 | # </pre> |
7 | +# <p> | |
8 | +# デフォルトでは表示中のページのアウトラインを表示しますが、 | |
9 | +# 指定したページのアウトラインを表示する事も出来ます。 | |
10 | +# </p> | |
11 | +# <pre> | |
12 | +# {{outline ページ名}} | |
13 | +# </pre> | |
7 | 14 | # |
8 | 15 | ############################################################ |
9 | 16 | package plugin::info::Outline; |
@@ -25,16 +32,20 @@ sub new { | ||
25 | 32 | sub paragraph { |
26 | 33 | my $self = shift; |
27 | 34 | my $wiki = shift; |
35 | + my $page = shift; | |
28 | 36 | my $cgi = $wiki->get_CGI; |
29 | 37 | my $p_cnt = 0; |
30 | 38 | |
31 | - my $pagename = $cgi->param("page"); | |
39 | + my $pagename = $page; | |
40 | + if (!defined($pagename)) { | |
41 | + $pagename = $cgi->param("page"); | |
42 | + } | |
32 | 43 | # ページの参照権限があるかどうか調べる |
33 | 44 | unless($wiki->can_show($pagename)){ |
34 | 45 | return undef; |
35 | 46 | } |
36 | 47 | my $parser = plugin::info::OutlineParser->new($wiki); |
37 | - return $parser->outline($wiki->get_page($pagename)); | |
48 | + return $parser->outline($wiki->get_page($pagename), $pagename); | |
38 | 49 | } |
39 | 50 | |
40 | 51 | 1; |
@@ -7,6 +7,7 @@ package plugin::info::OutlineParser; | ||
7 | 7 | use strict; |
8 | 8 | use vars qw(@ISA); |
9 | 9 | use Wiki::HTMLParser; |
10 | +use CGI2; | |
10 | 11 | |
11 | 12 | @ISA = qw(Wiki::HTMLParser); |
12 | 13 |
@@ -15,10 +16,16 @@ use Wiki::HTMLParser; | ||
15 | 16 | #============================================================================== |
16 | 17 | sub new { |
17 | 18 | my $class = shift; |
18 | - my $self = Wiki::HTMLParser->new(shift); | |
19 | + my $wiki = shift; | |
20 | + my $self = Wiki::HTMLParser->new($wiki); | |
21 | + | |
19 | 22 | $self->{outline_html} = ""; |
20 | 23 | $self->{outline_level} = 0; |
21 | 24 | $self->{outline_cnt} = 0; |
25 | + | |
26 | + # 他ページのoutline処理用 | |
27 | + $self->{url} = ""; | |
28 | + | |
22 | 29 | return bless $self,$class; |
23 | 30 | } |
24 | 31 |
@@ -57,7 +64,7 @@ sub l_headline { | ||
57 | 64 | } |
58 | 65 | |
59 | 66 | $self->{'outline_close_'.$level} = 1; |
60 | - $self->{outline_html} .= "<li><a href=\"#p".$self->{outline_cnt}."\">$text</a>"; | |
67 | + $self->{outline_html} .= "<li><a href=\"".$self->{url}."#p".$self->{outline_cnt}."\">$text</a>"; | |
61 | 68 | $self->{outline_cnt}++; |
62 | 69 | } |
63 | 70 |
@@ -67,6 +74,14 @@ sub l_headline { | ||
67 | 74 | sub outline { |
68 | 75 | my $self = shift; |
69 | 76 | my $source = shift; |
77 | + my $page = shift; | |
78 | + | |
79 | + # 他ページのアウトライン処理の場合はURL部を生成する | |
80 | + my $cgi = CGI2->new(); | |
81 | + if ($page ne $cgi->param("page")) { | |
82 | + $self->{url} = $self->{wiki}->create_url({page=>$page}); | |
83 | + } | |
84 | + | |
70 | 85 | $self->parse($source); |
71 | 86 | |
72 | 87 | while($self->{outline_level} != 0){ |