/[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.2 by wakaba, Thu Mar 11 08:06:09 2004 UTC revision 1.9 by wakaba, Sun Aug 17 05:14:53 2008 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        for my $item (sort {$b->[1] <=> $a->[1] or $a->[0] cmp $b->[0]} @list) {  
97          for my $item (@list[$start..$end]) {
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            if ($o->{wiki}->{db}->exist (ref__item_template => [$item->[0]])) {            $label = $o->{wiki}->{db}->get (ref__item_template => [$item->[0]])
102              $label = $o->{wiki}->{db}->get (ref__item_template => [$item->[0]]);              or do {
103            } else {                  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});
106              $label = $site ? $site->get_attribute_value ('URIReference2Label')                  $label = $site ? $site->get_attribute_value
107                             : $default_label;                                     ('URIReference2Label') || $default_label
108              $o->{wiki}->{db}->set (ref__item_template => [$item->[0]]                                 : $default_label;
109                                                        => $label);                  $o->{wiki}->{db}->set (ref__item_template => [$item->[0]]
110            }                                                            => $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 ({
114            label => $li_label,            label => $li_label,
115            ref__label => $label || $default_label,            ref__label => $label,
116          } => {          } => {
117            uri => $o->{iwc__param}->{uri_reference},            uri => $o->{iwc__param}->{uri_reference},
118          }, {          }, {
# Line 104  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 154  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 195  FormattingRule: Line 213  FormattingRule:
213        }        }
214      };      };
215    
216    XViewFragment:
217      @Name: ws--post-content
218      @Description:
219        @@@: After content body -- referer lista
220        @@lang:en
221      @Order: 150
222      @Formatting:
223            %section (
224              id => referer,
225              title => {%res(name=>Referer);}p, heading,
226              content => {%referer-list (
227                number => 10,
228                post-list => {%search--result-navigation (
229                  fragment => referer,
230                );}p,
231              );}p,
232            );
233    
234  Resource:  Resource:
235    @Referer:RefererList:Label:    @Referer:RefererList:Label:
236      {%ref--referer-item-weight;} %ref--referer-item-label;      {%ref--referer-item-weight;} %ref--referer-item-label;

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.9

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24