Parent Directory | Revision Log
r3584@llin (orig r703): dpavlin | 2008-12-03 22:24:09 +0100 rename r3585@llin (orig r704): dpavlin | 2008-12-03 22:26:29 +0100 document bin/log.sh r3586@llin (orig r705): dpavlin | 2008-12-03 22:36:12 +0100 fix paths for created class r3587@llin (orig r706): dpavlin | 2008-12-03 22:52:49 +0100 http://upload.wikimedia.org/wikipedia/commons/0/05/WikEd_fix_html.png r3588@llin (orig r707): dpavlin | 2008-12-03 23:20:46 +0100 last point for 0.24 and forward r3589@llin (orig r708): dpavlin | 2008-12-03 23:23:26 +0100 dump html content in textarea r3590@llin (orig r709): dpavlin | 2008-12-03 23:24:19 +0100 Cleanup all attributes from html r3591@llin (orig r710): dpavlin | 2008-12-04 14:26:57 +0100 added cookie killer described on my blog at https://blog.rot13.org/2006/11/clean_all_http_cookies_and_kill_session.html r3592@llin (orig r711): dpavlin | 2008-12-04 17:02:09 +0100 add created classes to svk by default r3593@llin (orig r712): dpavlin | 2008-12-04 17:02:57 +0100 convert form to post, so we don't have double action on next submit (one from get, one from post) r3594@llin (orig r713): dpavlin | 2008-12-04 17:17:48 +0100 add SlideShare favourites url r3595@llin (orig r714): dpavlin | 2008-12-04 17:28:31 +0100 fix dependency display r3596@llin (orig r715): dpavlin | 2008-12-04 18:33:39 +0100 hide _private attributes r3597@llin (orig r716): dpavlin | 2008-12-04 18:35:12 +0100 separate results_as_data from as_markup to make data reusable r3598@llin (orig r717): dpavlin | 2008-12-04 18:55:27 +0100 Split run to own line r3599@llin (orig r718): dpavlin | 2008-12-04 19:33:25 +0100 use_ok correct test r3600@llin (orig r719): dpavlin | 2008-12-04 19:39:37 +0100 wrap File::Slurp into Frey::File r3601@llin (orig r720): dpavlin | 2008-12-04 21:20:45 +0100 move checkbox to Frey::Web, fix multiple file commit r3602@llin (orig r721): dpavlin | 2008-12-04 23:31:06 +0100 fix Frey::File r3603@llin (orig r722): dpavlin | 2008-12-04 23:37:26 +0100 concepts r3604@llin (orig r723): dpavlin | 2008-12-05 00:09:52 +0100 mode pod r3605@llin (orig r724): dpavlin | 2008-12-05 18:25:05 +0100 display pod table of content r3606@llin (orig r725): dpavlin | 2008-12-05 18:33:01 +0100 fix warnings and take title for icon if it's not specified r3607@llin (orig r726): dpavlin | 2008-12-05 18:34:10 +0100 Fix output wrapping r3608@llin (orig r727): dpavlin | 2008-12-05 18:34:43 +0100 sort methods and attributes r3609@llin (orig r728): dpavlin | 2008-12-06 01:19:32 +0100 support check of single file r3610@llin (orig r729): dpavlin | 2008-12-06 01:20:20 +0100 more documentation, unfinished r3611@llin (orig r730): dpavlin | 2008-12-06 01:21:36 +0100 version bump [0.24] r3612@llin (orig r731): dpavlin | 2008-12-06 01:25:19 +0100 implement CSS2 form layout and support for undef (action support is still broken) r3613@llin (orig r732): dpavlin | 2008-12-06 01:26:12 +0100 simple two step action as still non-working prototype r3614@llin (orig r733): dpavlin | 2008-12-06 01:43:29 +0100 change yaml dump format, cleanup r3615@llin (orig r734): dpavlin | 2008-12-06 01:57:49 +0100 turn short lists to radio boxes r3616@llin (orig r735): dpavlin | 2008-12-06 13:22:36 +0100 css for documentation, always re-create introspect yaml r3617@llin (orig r736): dpavlin | 2008-12-06 15:34:41 +0100 put documentation in own line r3618@llin (orig r737): dpavlin | 2008-12-06 15:35:15 +0100 make commit form transparent so we can see diff behind it
1 | package Frey::Pod; |
2 | use Moose; |
3 | |
4 | =head1 NAME |
5 | |
6 | Frey::Pod - display documentation |
7 | |
8 | =cut |
9 | |
10 | extends 'Frey::ClassLoader'; |
11 | with 'Frey::Web'; |
12 | with 'Frey::File'; |
13 | |
14 | has 'class' => ( |
15 | is => 'rw', |
16 | isa => 'Str', |
17 | required => 1, |
18 | default => 'Frey::Manual', |
19 | ); |
20 | |
21 | use Pod::Find qw/pod_where/; |
22 | use Data::Dump qw/dump/; |
23 | |
24 | sub as_markup { |
25 | my $self = shift; |
26 | my $class = $self->class; |
27 | use Pod::Simple::HTML; |
28 | my $path = pod_where( { -inc => 1 }, $class ); |
29 | return $self->error( "Can't find pod for $class\n" ) unless $path; |
30 | my $pod = $self->read_file( $path ); |
31 | my $converter = Pod::Simple::HTML->new(); |
32 | my $body; |
33 | my $my_classes = join('|', $self->classes); |
34 | $converter->output_string( \$body ); |
35 | $converter->parse_string_document($pod); |
36 | $body =~ s{.*?<body [^>]+>}{}s; |
37 | $body =~ s{</body>\s*</html>\s*$}{}; |
38 | $body =~ s!%3A%3A!::!g; |
39 | # $body =~ s{<a href="http://search\.cpan\.org/perldoc\?($my_classes)"([^>]*)>}{<a href="/$1"$2>}g; |
40 | $body =~ s{<a href="http://(search\.cpan\.org/perldoc\?)([^"]+)"([^>]*)>([^<]+)<([^>]+)>}{<a href="/$2"$3>$4<$5><sup><a target="$1" title="CPAN" style="text-decoration: none" href="http://$1$2"$3>◊<$5></sup>}g; |
41 | $body =~ s!</li>\n\t<ul>!<ul>!; |
42 | $body =~ s!</ul>!</ul></li>!; |
43 | $body =~ s!<p></p>!!; |
44 | $body =~ s!__index__!index!g; |
45 | |
46 | our @toc = (); |
47 | |
48 | sub heading { |
49 | my ($level,$html) = @_; |
50 | push @toc, { $level => $html }; |
51 | warn "# heading $level $html"; |
52 | qq|<$level>$html</$level>|; |
53 | } |
54 | $body =~ s{<(h\d+)>(.+?)</\1>}{heading($1,$2)}egs; |
55 | |
56 | $self->title( $class ); |
57 | |
58 | # $body .= $self->html_dump( $toc ); |
59 | warn "# toc ", dump( @toc ); |
60 | |
61 | my $toc_html = ''; |
62 | my $current_level = 0; |
63 | foreach my $entry ( @toc ) { |
64 | my ( $level, $html ) = %$entry; |
65 | |
66 | if ( $level =~ m{h(\d+)} ) { |
67 | my $num = $1; |
68 | if ( $num > $current_level ) { |
69 | if ( ! $toc_html ) { # first ul |
70 | $toc_html .= qq|<ul class="first">|; |
71 | } else { |
72 | $toc_html .= qq|<ul>|; |
73 | } |
74 | } elsif ( $num < $current_level ) { |
75 | $toc_html .= qq|</ul>|; |
76 | } |
77 | $current_level = $num; |
78 | } |
79 | |
80 | my $target = $html; |
81 | $target =~ s{<[^>]+/?>}{}gs; # remove html |
82 | $target = qq|<a href="#$2">$target</a>| if $html =~ m{<a[^<]+name=(['"]?)([^'"<]+?)\1[^<]+>}; |
83 | |
84 | $toc_html .= qq|<li title="$level">$target</li>\n|; |
85 | } |
86 | |
87 | if ( $toc_html ) { |
88 | $self->add_css(qq| |
89 | .pod-toc { |
90 | float: right; |
91 | background: #eee; |
92 | font-size: 80%; |
93 | } |
94 | .pod-toc .first { |
95 | padding-left: 1em; |
96 | padding-right: 1em; |
97 | } |
98 | .pod-toc ul > li { |
99 | list-style: none; |
100 | } |
101 | .pod-toc a { |
102 | text-decoration: none; |
103 | } |
104 | |); |
105 | $toc_html = qq|<div class="pod-toc">$toc_html</div>|; |
106 | } |
107 | |
108 | return $toc_html . $body; |
109 | |
110 | } |
111 | |
112 | 1; |
113 |
ViewVC Help | |
Powered by ViewVC 1.1.26 |