/[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.1 by wakaba, Wed Mar 10 06:57:25 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        for (sort {$b->[1] <=> $a->[1] or $a->[0] cmp $b->[0]} @list) {  
71          local $o->{iwc__param}->{uri_reference} = URI->new ($_->[0]);        @list = sort {$b->[1] <=> $a->[1] or $a->[0] cmp $b->[0]} @list;
72          my $site = $INTERWIKICORE->get_site_entry_by_uri_reference_match  
73                       (o => $o,      my $start = length $p->{start} ? $p->{start} :
74                        page => $o->{wiki}->{config}->{page}->{InterWikiName});                  $o->{wiki}->{input}->parameter ('ref--range-start') || 0;
75          $WIKILINKING->to_resource_by_uri_in_html ({      $p->{number} = $o->{wiki}->{input}->parameter ('ref--range-number')
76            label => $WIKIRESOURCE->get                   unless length $p->{number};
77                        (name => 'Referer:RefererList:Label',      my $end = $p->{number} ? $start + $p->{number} - 1 : $start + 29;
78                         o => $o, wiki => $o->{wiki}),      $start = 0 if $start > $#list or $start < 0;
79            ref__label => (($site ?      $end = $#list if $end < $start or $end > $#list;
80                             $site->get_attribute_value ('URIReference2Label'):'')      $end = $start + 255 if $end > $start + 255;
81                          || $WIKIRESOURCE->get      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
91                               (name => 'Referer:URIReference2Label',                               (name => 'Referer:URIReference2Label',
92                                o => $o, wiki => $o->{wiki})),                                o => $o, wiki => $o->{wiki});
93          my $li_label = $WIKIRESOURCE->get
94                                (name => 'Referer:RefererList:Label',
95                                 o => $o, wiki => $o->{wiki});
96    
97          for my $item (@list[$start..$end]) {
98            local $o->{iwc__param}->{uri_reference} = URI->new ($item->[0]);
99            my $label;
100            try {
101              $label = $o->{wiki}->{db}->get (ref__item_template => [$item->[0]])
102                or do {
103                    my $site = $INTERWIKICORE->get_site_entry_by_uri_reference_match
104                             (o => $o,
105                              page => $o->{wiki}->{config}->{page}->{InterWikiName});
106                    $label = $site ? $site->get_attribute_value
107                                       ('URIReference2Label') || $default_label
108                                   : $default_label;
109                    $o->{wiki}->{db}->set (ref__item_template => [$item->[0]]
110                                                              => $label);
111                };
112            } catch SuikaWiki::DB::Util::Error with {};
113            $WIKILINKING->to_resource_by_uri_in_html ({
114              label => $li_label,
115              ref__label => $label,
116          } => {          } => {
117            uri => $o->{iwc__param}->{uri_reference} = URI->new ($_->[0]),            uri => $o->{iwc__param}->{uri_reference},
118          }, {          }, {
119            o => $o,            o => $o,
120            parent => $list->append_new_node            parent => $list->append_new_node
121                       (type => '#element',                       (type => '#element',
122                        namespace_uri => $NS_XHTML1,                        namespace_uri => $NS_XHTML1,
123                        local_name => 'li'),                        local_name => 'li'),
124            ref__weight => $_->[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 100  Function: Line 134  Function:
134    @Main:    @Main:
135      my (undef, %opt) = @_;      my (undef, %opt) = @_;
136      return unless $opt{wiki}->{db};      return unless $opt{wiki}->{db};
137        return unless $opt{uri};
138      $opt{page} ||= $opt{wiki}->{var}->{page};      $opt{page} ||= $opt{wiki}->{var}->{page};
139      my $o = $opt{o} || {wiki => $opt{wiki}};      my $o = $opt{o} || {wiki => $opt{wiki}};
140            
# Line 142  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 160  FormattingRule: Line 190  FormattingRule:
190  FormattingRule:  FormattingRule:
191    @Category[list]: link-to-resource    @Category[list]: link-to-resource
192    @Name: ref--referer-item-label    @Name: ref--referer-item-label
193      @Description:
194        @@@:
195          Label for referer list item, that is taken from InterWikiName database.
196        @@lang: en
197      @Formatting:
198        try {
199          $f->replace ($o->{link}->{src}->{ref__label},
200                       param => $o,
201                       -parent => $p->{-parent});
202        } catch Message::Util::Formatter::error with {
203          my $err = shift;
204          if ($err->{-object}->{-category_name} eq $f->{-category_name}) {
205            my $wiki = $err->{option}->{param}->{wiki};
206            SuikaWiki::Plugin->module_package ('Error')
207                             ->reporting_formatting_template_error
208                                 ($err, $wiki,
209                                  template => $o->{link}->{src}->{ref__label});
210            undef;
211          } else {
212            $err->throw;
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:    @Formatting:
223      $f->replace ($o->{link}->{src}->{ref__label},          %section (
224                   param => $o,            id => referer,
225                   -parent => $p->{-parent});            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:

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24