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

Contents of /suikawiki/script/misc/plugins/referer.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Sun May 16 23:05:49 2010 UTC (14 years, 5 months ago) by wakaba
Branch: MAIN
CVS Tags: suikawiki3-redirect, HEAD
added latest .pm files

1 wakaba 1.1 use strict;
2     package SuikaWiki::Plugin::Registry;
3    
4    
5     our %Info;
6     $Info{q#Referer#}->{Name} = q#Referer#;
7     $Info{q#Referer#}->{q#Version#} = q#2006.1203.0355#;
8     $Info{q#Referer#}->{q#InterfaceVersion#} = q#2.9.1#;
9     $Info{q#Referer#}->{q#mkpluginVersion#} = q#2.1.21#;
10     $Info{q#Referer#}->{q#module_name#} = q#SuikaWiki::Plugin::plugin::Referer1061103035513VAp6#;
11     $Info{q#Referer#}->{q#Date.RCS#} = q#$Date: 2004/04/17 04:17:53 $#;
12     $Info{q#Referer#}->{RequiredPlugin} = [q#InterWikiCore#, q#WikiStructure#, q#WikiLinking#];
13     $Info{q#Referer#}->{RequiredModule} = [q#URI#];
14     $Info{q#Referer#}->{Description} = [[q#Backward hyperlinking#, q#en#, q##]];
15     $Info{q#Referer#}->{License} = [[q#%%Perl%%#, q##, q##]];
16     $Info{q#Referer#}->{Author} = [[[[q#Wakaba#, q#ja#, q#Latn#]], [[q#w@suika.fam.cx#]], [q##]]];
17     package SuikaWiki::Plugin::plugin::Referer1061103035513VAp6;
18    
19    
20     #line 1 "(WikiPlugin module source referer.wp2, block Plugin/Use)"
21     use Message::Util::Error;
22     require URI;
23     my $INTERWIKICORE;
24     my $WIKIRESOURCE;
25     my $WIKILINKING;
26     #line 1 "(WikiPlugin module Referer, chunk 1)"
27    
28     {my $def = {q#Parameter#, {q#page#, {q#Type#, q#WikiName#, q#Default#, q#(auto)#, q#Description#, [[q##, q##, q##]]}}, q#Description#, [], q#main#, sub {my ($f, $rule_name, $p, $o, %opt) = @_;
29    
30     #line 1 "(WikiPlugin module source referer.wp2, block FormattingRule[name()='[q#view#, q#view-resource#, q#form-input#]/referer_list']/Formatting)"
31     $p->{q#page#} = do { my $r = $f->parse_attr ($p=>q#page#, $o, -non_parsed_to_node => 1, %opt); ref $r?$r->inner_text:$r};
32     my @list;
33     try {
34     my $ref = $o->{wiki}->{db}->get ('referer',
35     $o->{wiki}->name ($p->{page} ||
36     $o->{wiki}->{var}->{page}));
37     @list = map {[$_ => $ref->{$_}]} keys %$ref;
38     } catch SuikaWiki::DB::Util::Error with {
39     };
40     if (@list) {
41     my $list = $p->{-parent}->append_new_node
42     (type => '#element',
43     namespace_uri => q#http://www.w3.org/1999/xhtml#,
44     local_name => 'ol');
45     @list = sort {$b->[1] <=> $a->[1] or $a->[0] cmp $b->[0]} @list;
46     my $start = length $p->{start} ? $p->{start} :
47     $o->{wiki}->{input}->parameter ('ref--range-start') || 0;
48     $p->{number} = $o->{wiki}->{input}->parameter ('ref--range-number')
49     unless length $p->{number};
50     my $end = $p->{number} ? $start + $p->{number} - 1 : $start + 29;
51     $start = 0 if $start > $#list or $start < 0;
52     $end = $#list if $end < $start or $end > $#list;
53     $end = $start + 255 if $end > $start + 255;
54     local $o->{var}->{search__result} = {
55     min => 0,
56     max => $#list,
57     start => $start,
58     end => $end,
59     number => $p->{number} || 30,
60     param_prefix => 'ref',
61     };
62     my $default_label = ($WIKIRESOURCE ||= SuikaWiki::Plugin->module_package ('WikiResource'))->get
63     (name => 'Referer:URIReference2Label',
64     o => $o, wiki => $o->{wiki});
65     my $li_label = ($WIKIRESOURCE ||= SuikaWiki::Plugin->module_package ('WikiResource'))->get
66     (name => 'Referer:RefererList:Label',
67     o => $o, wiki => $o->{wiki});
68     for my $item (@list[$start..$end]) {
69     local $o->{iwc__param}->{uri_reference} = URI->new ($item->[0]);
70     my $label;
71     try {
72     $label = $o->{wiki}->{db}->get (ref__item_template => [$item->[0]])
73     or do {
74     my $site = ($INTERWIKICORE ||= SuikaWiki::Plugin->module_package ('InterWikiCore'))->get_site_entry_by_uri_reference_match
75     (o => $o,
76     page => $o->{wiki}->{config}->{page}->{InterWikiName});
77     $label = $site ? $site->get_attribute_value
78     ('URIReference2Label') || $default_label
79     : $default_label;
80     $o->{wiki}->{db}->set (ref__item_template => [$item->[0]]
81     => $label);
82     };
83     } catch SuikaWiki::DB::Util::Error with {};
84     ($WIKILINKING ||= SuikaWiki::Plugin->module_package ('WikiLinking'))->to_resource_by_uri_in_html ({
85     label => $li_label,
86     ref__label => $label,
87     } => {
88     uri => $o->{iwc__param}->{uri_reference},
89     }, {
90     o => $o,
91     parent => $list->append_new_node
92     (type => '#element',
93     namespace_uri => q#http://www.w3.org/1999/xhtml#,
94     local_name => 'li'),
95     ref__weight => $item->[1],
96     });
97     }
98     $list->set_attribute (start => $start + 1);
99     $f->parse_attr ($p=>q#post_list#, $o, -parent => $p->{-parent}, -non_parsed_to_node => 1, %opt);
100     }}}
101     #line 1 "(WikiPlugin module Referer, chunk 2)"
102     ;
103     $SuikaWiki::Plugin::Rule{view}->{referer_list} = $def;
104     $SuikaWiki::Plugin::Rule{view_resource}->{referer_list} = $def;
105     $SuikaWiki::Plugin::Rule{form_input}->{referer_list} = $def;
106     };
107    
108    
109     sub add_referer {
110    
111     #line 1 "(WikiPlugin module source referer.wp2, block Function[Name='add_referer']/Main)"
112     my (undef, %opt) = @_;
113     return unless $opt{wiki}->{db};
114     return unless $opt{uri};
115     $opt{page} ||= $opt{wiki}->{var}->{page};
116     my $o = $opt{o} || {wiki => $opt{wiki}};
117     unless (ref $opt{uri}) {
118     $opt{uri} = URI->new ($opt{uri})->canonical;
119     } else {
120     $opt{uri} = $opt{uri}->canonical;
121     }
122     local $o->{iwc__param} = {
123     uri_reference => $opt{uri},
124     };
125     my $site = ($INTERWIKICORE ||= SuikaWiki::Plugin->module_package ('InterWikiCore'))->get_site_entry_by_uri_reference_match
126     (o => $o,
127     page => $opt{wiki}->{config}->{page}->{InterWikiName});
128     if ($site) {
129     my $v = 1;
130     my $check = $site->get_attribute_value
131     ('RefererLog', default => '1');
132     try {
133     $v = $o->{wiki}->{plugin}
134     ->boolean_formatter ('iwc__urireference_operation')
135     ->replace ($check, param => $o);
136     } catch Message::Util::Formatter::error with {
137     my $err = shift;
138     if ($err->{-object}->{-category_name} eq 'iwc__urireference_operation') {
139     my $wiki = $err->{-option}->{param}->{wiki};
140     SuikaWiki::Plugin->module_package ('Error')
141     ->reporting_formatting_template_error
142     ($err, $err->{option}->{param}->{wiki},
143     template => $check);
144     } else {
145     $err->throw;
146     }
147     };
148     return unless $v;
149     }
150     my $ref = $opt{wiki}->{db}->get ('referer', $opt{page});
151     $ref->{$o->{iwc__param}->{uri_reference}}++;
152     $opt{wiki}->{db}->set ('referer', $opt{page} => $ref);
153     }
154    
155     #line 1 "(WikiPlugin module Referer, chunk 4)"
156    
157    
158     $SuikaWiki::Plugin::Rule{link_to_resource}->{ref__referer_item_weight} = {q#Parameter#, {}, q#Description#, [], q#main#, sub {my ($f, $rule_name, $p, $o, %opt) = @_;
159    
160     #line 1 "(WikiPlugin module source referer.wp2, block FormattingRule[name()='[q#link-to-resource#]/ref__referer_item_weight']/Formatting)"
161     $p->{-parent}->append_text ($o->{link}->{option}->{ref__weight});}}
162     #line 1 "(WikiPlugin module Referer, chunk 5)"
163     ;
164    
165     $SuikaWiki::Plugin::Rule{link_to_resource}->{ref__referer_item_label} = {q#Parameter#, {}, q#Description#, [[q#Label for referer list item, that is taken from InterWikiName database.#, q#en#, q##]], q#main#, sub {my ($f, $rule_name, $p, $o, %opt) = @_;
166    
167     #line 1 "(WikiPlugin module source referer.wp2, block FormattingRule[name()='[q#link-to-resource#]/ref__referer_item_label']/Formatting)"
168     try {
169     $f->replace ($o->{link}->{src}->{ref__label},
170     param => $o,
171     -parent => $p->{-parent});
172     } catch Message::Util::Formatter::error with {
173     my $err = shift;
174     if ($err->{-object}->{-category_name} eq $f->{-category_name}) {
175     my $wiki = $err->{option}->{param}->{wiki};
176     SuikaWiki::Plugin->module_package ('Error')
177     ->reporting_formatting_template_error
178     ($err, $wiki,
179     template => $o->{link}->{src}->{ref__label});
180     undef;
181     } else {
182     $err->throw;
183     }
184     };}}
185     #line 1 "(WikiPlugin module Referer, chunk 7)"
186     ;
187    
188     package SuikaWiki::Plugin::Resource;
189    
190     our $BaseResource;
191     $BaseResource->{q#und#}->{q##}->{q#Referer:RefererList:Label#} = q#{%ref--referer-item-weight;} %ref--referer-item-label;#;
192     $BaseResource->{q#und#}->{q##}->{q#Referer:URIReference2Label#} = q#<%link-to-it (label => {%uri-reference;}p);>#;
193     package SuikaWiki::Plugin::Registry;
194    
195     $Info{q#Referer#}->{provide} = {q#rule#, {q#link_to_resource#, [q#ref__referer_item_weight#, q#ref__referer_item_label#], q#form_input#, [q#referer_list#], q#view#, [q#referer_list#], q#view_resource#, [q#referer_list#]}};
196    
197     1;

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24