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 | dpavlin | 126 | 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 | dpavlin | 738 | with 'Frey::File'; |
13 | dpavlin | 126 | |
14 | has 'class' => ( | ||
15 | is => 'rw', | ||
16 | isa => 'Str', | ||
17 | required => 1, | ||
18 | dpavlin | 738 | default => 'Frey::Manual', |
19 | dpavlin | 126 | ); |
20 | |||
21 | dpavlin | 738 | use Pod::Find qw/pod_where/; |
22 | dpavlin | 126 | use Data::Dump qw/dump/; |
23 | |||
24 | dpavlin | 455 | sub as_markup { |
25 | dpavlin | 178 | my $self = shift; |
26 | my $class = $self->class; | ||
27 | dpavlin | 126 | use Pod::Simple::HTML; |
28 | dpavlin | 356 | my $path = pod_where( { -inc => 1 }, $class ); |
29 | dpavlin | 694 | return $self->error( "Can't find pod for $class\n" ) unless $path; |
30 | dpavlin | 738 | my $pod = $self->read_file( $path ); |
31 | dpavlin | 126 | 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 | dpavlin | 130 | $body =~ s!%3A%3A!::!g; |
39 | dpavlin | 356 | # $body =~ s{<a href="http://search\.cpan\.org/perldoc\?($my_classes)"([^>]*)>}{<a href="/$1"$2>}g; |
40 | dpavlin | 376 | $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 | dpavlin | 126 | $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 | dpavlin | 738 | |
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 | dpavlin | 691 | $self->title( $class ); |
57 | dpavlin | 379 | |
58 | dpavlin | 738 | # $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 | dpavlin | 126 | } |
111 | |||
112 | 1; | ||
113 |
ViewVC Help | |
Powered by ViewVC 1.1.26 |