1package Pod::ProjectDocs::IndexPage;
2use strict;
3use warnings;
4use base qw/Pod::ProjectDocs::File/;
5use Pod::ProjectDocs::Template;
6
7__PACKAGE__->default_name('index.html');
8__PACKAGE__->data( do{ local $/; <DATA> } );
9
10__PACKAGE__->mk_accessors(qw/json components/);
11
12sub _init {
13    my($self, %args) = @_;
14    $self->SUPER::_init(%args);
15    $self->json( $args{json} );
16    $self->components( $args{components} );
17}
18
19sub _get_data {
20    my $self = shift;
21    my $params = {
22        title    => $self->config->title,
23        desc     => $self->config->desc,
24        lang     => $self->config->lang,
25        json     => $self->json,
26        css      => $self->components->{css}->tag($self),
27        charset  => $self->config->charset || 'UTF-8',
28    };
29    my $tt = Pod::ProjectDocs::Template->new;
30    my $text = $tt->process($self, $self->data, $params);
31    return $text;
32}
33
341;
35__DATA__
36<?xml version="1.0" encoding="[% charset %]"?>
37<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
38   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
39<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="[% lang %]">
40<head>
41<meta http-equiv="Content-Type" content="text/html; charset=[% charset %]" />
42<title>[% title | html %]</title>
43[% css %]
44<script type="text/javascript">
45//<![CDATA[
46var managers = [% json %];
47function render(pattern) {
48    var html = '';
49    for ( var i = 0; i < managers.length; i++ ) {
50        var manager   = managers[i];
51        var rows_html = get_rows_html(manager, pattern);
52        var listbox = "<div class='box'><h2 class='t2'>"
53                    + manager.desc
54                    + "</h2><table width='100%'>"
55                    + rows_html
56                    + "</table></div>";
57        html += listbox;
58    }
59    var list = document.getElementById('list');
60    list.innerHTML = html;
61}
62function get_rows_html (manager, pattern) {
63    var html   = '';
64    var regexp = new RegExp( "(" + pattern + ")", "gi");
65    var seq    = 0;
66    for (var i = 0; i < manager.records.length; i++) {
67        var record = manager.records[i];
68        if ( record.name.match(regexp) ) {
69            var module_name = manager.records[i].name;
70            if(pattern != '' ) {
71                var replace_text = "<span class='search_highlight'>$1</span>";
72                module_name = module_name.replace(regexp, replace_text);
73            }
74            html += get_record_html(record, module_name, seq);
75            seq++;
76        }
77    }
78    return html;
79}
80function get_record_html (record, name, i) {
81    var row_class  = ( i % 2 == 0 ) ? 'r' : 's';
82    var row_html   = "<tr class='"
83                   + row_class
84                   + "'><td nowrap='nowrap'><a href='"
85                   + record.path
86                   + "'>"
87                   + name + "</a></td><td width='99%'><small>"
88                   + record.title
89                   + "</small></td></tr>";
90    return row_html;
91}
92//]]>
93</script>
94</head>
95<body onload="render('')">
96<div class="box">
97  <h1 class="t1">[% title | html %]</h1>
98  <table>
99    <tr>
100      <td class="label">Description</td>
101      <td class="cell">[% desc | html_line_break %]</td>
102    </tr>
103  </table>
104</div>
105
106<div class="box">
107  <h2 class="t2">Search</h2>
108  <table>
109    <tr>
110       <td class="cell"><input type="text" size="60" onkeyup="render(this.value)" /></td>
111    </tr>
112  </table>
113</div>
114
115<div id="list">
116</div>
117
118[% FOREACH manager IN managers %]
119[% IF manager.docs.size %]
120<div class="box">
121<h2 class="t2">[% manager.desc | html %]</h2>
122  <table width="100%">
123    [% seq = 1 %]
124    [% FOREACH doc IN manager.docs %]
125    <tr class="[% IF seq mod 2 == 1 %]r[% ELSE %]s[% END %]">
126      <td nowrap="nowrap">
127        <a href="[% doc.relpath %]">[% doc.name | html %]</a>
128      </td>
129      <td width="99%">
130        <small>[% doc.title | html %]</small>
131      </td>
132    </tr>
133    [% seq = seq + 1 %]
134    [% END %]
135  </table>
136</div>
137[% END %]
138[% END %]
139<div class="footer">generated by <a href="http://search.cpan.org/perldoc?Pod%3A%3AProjectDocs">Pod::ProjectDocs</a></div>
140</body>
141</html>
142