/[Frey]/branches/no-pager/lib/Frey/View/NoPager.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /branches/no-pager/lib/Frey/View/NoPager.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 742 by dpavlin, Sat Dec 6 16:35:43 2008 UTC revision 743 by dpavlin, Sat Dec 6 17:17:17 2008 UTC
# Line 14  has search => ( Line 14  has search => (
14          is => 'rw',          is => 'rw',
15          isa => 'Str',          isa => 'Str',
16          required => 1,          required => 1,
17            default => '',
18    );
19    
20    has 'sort' => (
21            is => 'rw',
22            isa => 'Str',
23    );
24    
25    has page => (
26            is => 'rw',
27            isa => 'Int',
28            default => 1,
29  );  );
30    
31  our $v = {  our $v = {
# Line 35  sub json { Line 47  sub json {
47          '</textarea>';          '</textarea>';
48  }  }
49    
50  sub sort_order {  sub results_as_markup {
         my $out;  
   
         my $sort = $q->param('sort');  
   
         $out .= '<select name="sort" id="sort">';  
   
         foreach my $s (@{ $config->{estraier}->{order} }) {  
                 my ($text,$value) = %{$s};  
                 $out .= qq{<option value="$value"} .  
                         ( $sort eq $value ? ' selected' : '' ) .  
                         qq{>$text</option>};  
         }  
   
         $out .= '</select>';  
 }  
   
 sub get_results {  
51          my $self = shift;          my $self = shift;
52          my $p = {@_};          my $p = {@_};
53    
54          my ($search,$page) = ( $p->{search} , $p->{page} );          my ($search,$page) = ( $p->{search} , $p->{page} );
55    
56          sub next_page {          sub next_page {
57                  return '<div id="next_page">' .                  my ($self) = @_;
58                          join("\n", @_) . $self->json() . '</div>';                  return
59                       qq|<div id="next_page">|
60                     . join("\n", @_) . $self->json()
61                     . qq|</div>|
62                     ;
63          }          }
64    
65          if (! $search || $search =~ m/^\s*$/) {          if (! $search || $search =~ m/^\s*$/) {
66                  $v->{status} = 'Enter search query';                  $v->{status} = 'Enter search query';
67                  return next_page();                  return $self->next_page;
68          }          }
69    
70          if (! $page) {          if (! $page) {
71                  $v->{status} = 'Error: no page number?';                  $v->{status} = 'Error: no page number?';
72                  return next_page();                  return $self->next_page;
73          }          }
74    
75          $search = join(" AND ", split(/\s+/, $search)) unless ($search =~ m/(?:AND|OR|\[|\])/);          $search = join(" AND ", split(/\s+/, $search)) unless ($search =~ m/(?:AND|OR|\[|\])/);
# Line 78  sub get_results { Line 77  sub get_results {
77    
78          $v->{page} = $page;          $v->{page} = $page;
79    
80          my $node = new Search::Estraier::Node(%{ $config->{estraier} });          my $node = new Search::Estraier::Node(%{ $self->config->{estraier} });
81    
82          my $on_page = 30;          my $on_page = 30;
83          my $skip = ( $page - 1 ) * $on_page;          my $skip = ( $page - 1 ) * $on_page;
# Line 89  sub get_results { Line 88  sub get_results {
88          $cond->set_skip( $skip );          $cond->set_skip( $skip );
89          $cond->set_order( $p->{sort} ) if ($p->{sort});          $cond->set_order( $p->{sort} ) if ($p->{sort});
90    
91          my $nres = $node->search($cond, ( $config->{estraier}->{depth} || 0 ) );          my $nres = $node->search($cond, ( $self->config->{estraier}->{depth} || 0 ) );
92    
93          my $out;          my $out;
94    
# Line 100  sub get_results { Line 99  sub get_results {
99    
100                  if ($v->{hits} == 0) {                  if ($v->{hits} == 0) {
101                          $v->{status} = qq{<strong>No results for your search.</strong>};                          $v->{status} = qq{<strong>No results for your search.</strong>};
102                          return next_page();                          return $self->next_page;
103                  } elsif ($nres->doc_num == 0) {                  } elsif ($nres->doc_num == 0) {
104                          $v->{status} = qq{<strong>Error getting results for page $page.</strong>};                          $v->{status} = qq{<strong>Error getting results for page $page.</strong>};
105                          return next_page('<strong>No results found.</strong>');                          return $self->next_page('<strong>No results found.</strong>');
106                  }                  }
107    
108                  $v->{max_page} = int( ($nres->hits + $on_page - 1) / $on_page );                  $v->{max_page} = int( ($nres->hits + $on_page - 1) / $on_page );
# Line 120  sub get_results { Line 119  sub get_results {
119                                  $out .= ' ... ' if ($out);                                  $out .= ' ... ' if ($out);
120                                  my ($pre,$hit,$post) = split(/\n/,$s,3);                                  my ($pre,$hit,$post) = split(/\n/,$s,3);
121                                  $hit =~ s/\t.*$//;                                  $hit =~ s/\t.*$//;
122                                  $out .=                                  $out
123                                          $q->escapeHTML( $pre || '' ) . '<b>' .                                   .= $self->html_escape( $pre )
124                                          $q->escapeHTML( $hit || '' ) . '</b>' .                                   . '<b>'
125                                          $q->escapeHTML( $post || '');                                   . $self->html_escape( $hit )
126                                     . '</b>'
127                                     . $self->html_escape( $post )
128                                     ;
129                          }                          }
130                          return $out;                          return $out;
131                  }                  }
# Line 133  sub get_results { Line 135  sub get_results {
135                          my $text = $rdoc->attr( $attr );                          my $text = $rdoc->attr( $attr );
136                          return unless defined($text);                          return unless defined($text);
137    
138                          if (my $r = $config->{estraier}->{attr_regex}->{$attr} ) {                          if (my $r = $self->config->{estraier}->{attr_regex}->{$attr} ) {
139                                  my $do = '$text =~ ' . $r . ';';                                  my $do = '$text =~ ' . $r . ';';
140                                  eval $do;                                  eval $do;
141                                  if ($@) {                                  if ($@) {
# Line 170  sub get_results { Line 172  sub get_results {
172          }          }
173    
174          if ($v->{page} == $v->{max_page}) {          if ($v->{page} == $v->{max_page}) {
175                  $out .= next_page('<br/><strong>All results shown</strong>');                  $out .= $self->next_page('<br/><strong>All results shown</strong>');
176          } else {          } else {
177                  $out .= next_page(                  $out .= $self->next_page(
178                          '<br/><strong>Loading results...</strong><br/>',                          '<br/><strong>Loading results...</strong><br/>',
179                          'If you are using the scroll bar, release the mouse to see more results.'                          'If you are using the scroll bar, release the mouse to see more results.'
180                  );                  );
# Line 182  sub get_results { Line 184  sub get_results {
184    
185  }  }
186    
 sub snippet_as_markup {  
         my ($self) = @_;  
   
         $self->get_results(  
                 search => $q->param('search') || '',  
                 page => $q->param('page') || 0,  
                 sort => $q->param('sort') || undef,  
         );  
 };  
   
187  sub as_markup {  sub as_markup {
188          my ($self) = @_;          my ($self) = @_;
189    
         my $get_results = $self->get_results(  
                 search => $q->param('search') || '',  
                 page => 1,  
                 sort => $q->param('sort') || undef,  
         );  
   
190          $self->add_css('static/Frey/NoPager.css');          $self->add_css('static/Frey/NoPager.css');
191          $self->add_css('static/Frey/NoPager.js');          $self->add_css('static/Frey/NoPager.js');
192    
# Line 214  sub as_markup { Line 200  sub as_markup {
200                  });                  });
201          |);          |);
202    
203          qq|          return qq|
204                  <div id="search_form_div">                  <div id="search_form_div">
205                          <form id="search_form" method="get">                          <form id="search_form" method="get">
206                                    
207                          <input autocomplete="off" name="search" type="input" value="<% $q->param('search') %>">                          <input autocomplete="off" name="search" type="input" value="|, $self->search, qq|">
208                            |, $self->sort, qq|
209                          <input type="submit" class="submit" value="search">                          <input type="submit" class="submit" value="search">
210    
211                          <span id="status" class="note">                          <span id="status" class="note">
# Line 228  sub as_markup { Line 215  sub as_markup {
215    
216                  <div style="margin-top: 3em;">                  <div style="margin-top: 3em;">
217                  <!-- Dynamic Content -->                  <!-- Dynamic Content -->
218                          |, $get_results, qq|                          |, $self->results_as_markup, qq|
219    
220                          <!-- Back Button Content -->                          <!-- Back Button Content -->
221                          <div style="position:absolute;top:0px;left:0px;visibility:hidden;" id="spacer">space</div>                          <div style="position:absolute;top:0px;left:0px;visibility:hidden;" id="spacer">space</div>

Legend:
Removed from v.742  
changed lines
  Added in v.743

  ViewVC Help
Powered by ViewVC 1.1.26