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