13 |
has search => ( |
has search => ( |
14 |
is => 'rw', |
is => 'rw', |
15 |
isa => 'Str', |
isa => 'Str', |
16 |
required => 1, |
# required => 1, |
17 |
default => '', |
default => '', |
18 |
); |
); |
19 |
|
|
48 |
} |
} |
49 |
|
|
50 |
sub results_as_markup { |
sub results_as_markup { |
51 |
my $self = shift; |
my ($self) = @_; |
52 |
|
|
53 |
my ($search,$page) = ( $self->search , $self->on_page ); |
my ($search,$page) = ( $self->search , $self->on_page ); |
54 |
|
|
55 |
sub next_page { |
sub next_page { |
56 |
my ($self) = @_; |
my $self = shift; |
57 |
return |
return |
58 |
qq|<div id="next_page">| |
qq|<div id="next_page">| |
59 |
. join("\n", @_) . $self->json() |
. join("\n", @_) . $self->json() |
144 |
return $text; |
return $text; |
145 |
} |
} |
146 |
|
|
147 |
my @template; |
my $result = q| |
148 |
open(my $t, 'result.html') || die "result.html: $!"; |
<div class="result"> |
149 |
while(<$t>) { |
<h1><% attr_regex( $rdoc, '@title' ) %></h1> |
150 |
push @template, $_; |
<p> |
151 |
} |
<% html_snippet( $rdoc->snippet ) %> |
152 |
close($t); |
</p> |
153 |
|
<span style="color: #888"><% $nr %></span> |
154 |
|
<strong><% attr_regex( $rdoc, 'source' ) %></strong> |
155 |
|
<em> |
156 |
|
<% attr_regex( $rdoc, '@size' ) %> bytes |
157 |
|
</em> |
158 |
|
<% attr_regex( $rdoc, '@mdate' ) %> |
159 |
|
<br/><a href="<% $uri %>"><tt><% $uri %></tt></a> |
160 |
|
</div> |
161 |
|
|; |
162 |
|
|
163 |
|
my @result = split(/\n/, $result); |
164 |
|
warn "# result template has ", $#result + 1, " lines"; |
165 |
|
|
166 |
# for each document in results |
# for each document in results |
167 |
for my $i ( 0 ... $nres->doc_num - 1 ) { |
for my $i ( 0 ... $nres->doc_num - 1 ) { |
174 |
my $l = $_; |
my $l = $_; |
175 |
$l =~ s/<%(.+?)%>/eval "$1"/ge; |
$l =~ s/<%(.+?)%>/eval "$1"/ge; |
176 |
$out .= $l; |
$out .= $l; |
177 |
} @template; |
} @result; |
178 |
|
|
179 |
} |
} |
180 |
|
|
191 |
); |
); |
192 |
} |
} |
193 |
|
|
194 |
|
$self->wrap_in_page( 0 ); # disable <body> and status bar |
195 |
|
|
196 |
return $out; |
return $out; |
197 |
|
|
198 |
} |
} |
200 |
sub as_markup { |
sub as_markup { |
201 |
my ($self) = @_; |
my ($self) = @_; |
202 |
|
|
203 |
$self->add_css('static/Frey/NoPager.css'); |
$self->add_css('static/Frey/View/NoPager.css'); |
204 |
$self->add_js ('static/Frey/NoPager.js'); |
$self->add_js ('static/Frey/View/NoPager.js'); |
205 |
|
|
206 |
$self->add_js(qq| |
$self->add_js(q| |
207 |
\$(document).ready( function() { |
$(document).ready( function() { |
208 |
\$.log.info('hook onchange to #search_form' ); |
$.log.info('hook onchange to #search_form' ); |
209 |
\$('#search_form').change( function() { |
$('#search_form').change( function() { |
210 |
//logDebug('submit #search_form'); |
//logDebug('submit #search_form'); |
211 |
this.submit(); |
this.submit(); |
212 |
}); |
}); |
213 |
}); |
}); |
214 |
|); |
|); |
215 |
|
|
216 |
return qq| |
my $html = join("\n", |
217 |
|
qq| |
218 |
<div id="search_form_div"> |
<div id="search_form_div"> |
219 |
<form id="search_form" method="get"> |
<form id="search_form" method="get"> |
220 |
|
|
221 |
<input autocomplete="off" name="search" type="input" value="|, $self->search, qq|"> |
<input autocomplete="off" name="search" type="input" value="|, $self->search, qq|"> |
222 |
|, $self->sort, qq| |
|, $self->sort, qq| |
223 |
<input type="submit" class="submit" value="search"> |
<input type="submit" class="submit" value="search"> |
224 |
|
|
225 |
<span id="status" class="note"> |
<span id="status" class="note"> |
226 |
|, $v->{status}, qq| |
|, $v->{status}, qq| |
227 |
</span> |
</span> |
228 |
</form> |
|
229 |
|
</form> |
230 |
|
</div> |
231 |
|
|
232 |
<div style="margin-top: 3em;"> |
<div style="margin-top: 3em;"> |
233 |
<!-- Dynamic Content --> |
<!-- Dynamic Content --> |
242 |
|
|
243 |
</div> |
</div> |
244 |
|
|
245 |
</div> |
| |
246 |
|; |
); |
247 |
|
|
248 |
|
$self->wrap_in_page( 1 ); # FIXME results_as_markup will turn it off |
249 |
|
return $html; |
250 |
} |
} |
251 |
|
|
252 |
1; |
1; |