/[pub]/suikawiki/script/misc/plugins/referer.wp2
Suika

Diff of /suikawiki/script/misc/plugins/referer.wp2

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

revision 1.4 by wakaba, Fri Mar 12 04:57:10 2004 UTC revision 1.8 by wakaba, Sat Apr 17 04:17:53 2004 UTC
# Line 54  FormattingRule: Line 54  FormattingRule:
54      __ATTRTEXT:%page__;      __ATTRTEXT:%page__;
55      my @list;      my @list;
56      try {      try {
57        @list = map {[split /\x09/, $_, 2]}        my $ref = $o->{wiki}->{db}->get ('referer',
58                split /\x0A/,                                         $o->{wiki}->name ($p->{page} ||
               $o->{wiki}->{db}->get ('referer',  
                                      $o->{wiki}->name ($p->{page} ||  
59                                         $o->{wiki}->{var}->{page}));                                         $o->{wiki}->{var}->{page}));
60          @list = map {[$_ => $ref->{$_}]} keys %$ref;
61      } catch SuikaWiki::DB::Util::Error with {      } catch SuikaWiki::DB::Util::Error with {
62        #        #
63      };      };
64          
65      if (@list) {      if (@list) {
66        my $list = $p->{-parent}->append_new_node        my $list = $p->{-parent}->append_new_node
67                       (type => '#element',                       (type => '#element',
68                        namespace_uri => $NS_XHTML1,                        namespace_uri => $NS_XHTML1,
69                        local_name => 'ol');                        local_name => 'ol');
70    
71          @list = sort {$b->[1] <=> $a->[1] or $a->[0] cmp $b->[0]} @list;
72    
73        my $start = length $p->{start} ? $p->{start} :
74                    $o->{wiki}->{input}->parameter ('ref--range-start') || 0;
75        $p->{number} = $o->{wiki}->{input}->parameter ('ref--range-number')
76                     unless length $p->{number};
77        my $end = $p->{number} ? $start + $p->{number} - 1 : $start + 29;
78        $start = 0 if $start > $#list or $start < 0;
79        $end = $#list if $end < $start or $end > $#list;
80        $end = $start + 255 if $end > $start + 255;
81        local $o->{var}->{search__result} = {
82          min => 0,
83          max => $#list,
84          start => $start,
85          end => $end,
86          number => $p->{number} || 30,
87          param_prefix => 'ref',
88        };
89    
90        my $default_label = $WIKIRESOURCE->get        my $default_label = $WIKIRESOURCE->get
91                               (name => 'Referer:URIReference2Label',                               (name => 'Referer:URIReference2Label',
92                                o => $o, wiki => $o->{wiki});                                o => $o, wiki => $o->{wiki});
93        my $li_label = $WIKIRESOURCE->get        my $li_label = $WIKIRESOURCE->get
94                              (name => 'Referer:RefererList:Label',                              (name => 'Referer:RefererList:Label',
95                               o => $o, wiki => $o->{wiki});                               o => $o, wiki => $o->{wiki});
96        my $i = 0;  
97        my $j = 0;        for my $item (@list[$start..$end]) {
       for my $item (sort {$b->[1] <=> $a->[1] or $a->[0] cmp $b->[0]} @list) {  
         last if $j++ == 512;  
98          local $o->{iwc__param}->{uri_reference} = URI->new ($item->[0]);          local $o->{iwc__param}->{uri_reference} = URI->new ($item->[0]);
99          my $label;          my $label;
100          try {          try {
101            $label = $o->{wiki}->{db}->get (ref__item_template => [$item->[0]])            $label = $o->{wiki}->{db}->get (ref__item_template => [$item->[0]])
102              or do {              or do {
               if ($i > 5make0) { ## avoid browser timeout  
                 $label = $default_label;  
               } else {  
                 $i++;  
103                  my $site = $INTERWIKICORE->get_site_entry_by_uri_reference_match                  my $site = $INTERWIKICORE->get_site_entry_by_uri_reference_match
104                           (o => $o,                           (o => $o,
105                            page => $o->{wiki}->{config}->{page}->{InterWikiName});                            page => $o->{wiki}->{config}->{page}->{InterWikiName});
# Line 95  FormattingRule: Line 108  FormattingRule:
108                                 : $default_label;                                 : $default_label;
109                  $o->{wiki}->{db}->set (ref__item_template => [$item->[0]]                  $o->{wiki}->{db}->set (ref__item_template => [$item->[0]]
110                                                            => $label);                                                            => $label);
               }  
111              };              };
112          } catch SuikaWiki::DB::Util::Error with {};          } catch SuikaWiki::DB::Util::Error with {};
113          $WIKILINKING->to_resource_by_uri_in_html ({          $WIKILINKING->to_resource_by_uri_in_html ({
# Line 112  FormattingRule: Line 124  FormattingRule:
124            ref__weight => $item->[1],            ref__weight => $item->[1],
125          });          });
126        }        }
127    
128          $list->set_attribute (start => $start + 1);
129          __ATTRNODE:%post_list->{$p->{-parent}}__;
130      }      }
131    
132  Function:  Function:
# Line 162  Function: Line 177  Function:
177      }      }
178            
179      ## Update referer list      ## Update referer list
180      my %referer;      my $ref = $opt{wiki}->{db}->get ('referer', $opt{page});
181      for (split /\x0A/, $opt{wiki}->{db}->get ('referer', $opt{page})) {      $ref->{$o->{iwc__param}->{uri_reference}}++;
182        my ($n, $t) = split /\x09/, $_, 2;      $opt{wiki}->{db}->set ('referer', $opt{page} => $ref);
       $referer{$n} = $t + 0;  
     }  
     $referer{$o->{iwc__param}->{uri_reference}}++;  
     $opt{wiki}->{db}->set ('referer', $opt{page}  
             => join "\x0A", map {$_ . "\x09" . $referer{$_}} keys %referer);  
183    
184  FormattingRule:  FormattingRule:
185    @Category[list]: link-to-resource    @Category[list]: link-to-resource
# Line 213  ViewFragment: Line 223  ViewFragment:
223          %section (          %section (
224            id => referer,            id => referer,
225            title => {%res(name=>Referer);}p, heading,            title => {%res(name=>Referer);}p, heading,
226            content => {%referer-list;}p,            content => {%referer-list (
227                number => 10,
228                post-list => {%search--result-navigation (
229                  fragment => referer,
230                );}p,
231              );}p,
232          );          );
233    
234  Resource:  Resource:

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.8

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24