/[pub]/suikawiki/script/lib/SuikaWiki/Plugin/Referer.wps
Suika

Contents of /suikawiki/script/lib/SuikaWiki/Plugin/Referer.wps

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations) (download)
Sat Oct 18 07:08:34 2003 UTC (21 years, 6 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
FILE REMOVED
Imporoved SuikaWiki 3 implementation

1 wakaba 1.1 Name:
2     Referer
3     FullName:
4     Backward linking
5     URI:
6     IW:SuikaWiki:WikiPage
7    
8     Initialize:
9     SuikaWiki::Plugin->feature ('SuikaWiki::Markup::XML') or die "Referer: module SuikaWiki::Markup::XML can't be loaded";
10     my $NS_XHTML1 = 'http://www.w3.org/1999/xhtml';
11     my $NS_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
12     my $NS_RSS = 'http://purl.org/rss/1.0/';
13     my $NS_DC = 'http://purl.org/dc/elements/1.1/';
14    
15     {
16     Name:
17     wikiview/referer-list
18     FullName:
19     List of referers to the page
20     Format:
21     my $page = $o->{page} || $p->{page};
22     my %list = get_referer_list ($page);
23     my @name = get_site_name_list ();
24     $r = SuikaWiki::Markup::XML->new (namespace_uri => $NS_XHTML1, local_name => 'ul');
25     for my $uri (sort {$list{$b}<=>$list{$a}||$a cmp $b} keys %list) {
26     my $title;
27     for my $item (@name) {
28     if ($uri =~ /$item->[0]/) {
29     $title = $uri;
30     eval qq{\$title =~ s/^.*$item->[0].*\$/$item->[1]/e}
31     or die "Referer: referer-list: $@";
32     #. qq{\$title =~ s/^.*$item->[0].*\$/$item->[1]/e};
33     last;
34     }
35     }
36     my $item = $r->append_new_node (namespace_uri => $NS_XHTML1, local_name => 'li');
37     for ($item->append_new_node (namespace_uri => $NS_XHTML1, local_name => 'span')) {
38     $_->set_attribute (class => 'referer-uri-weight');
39     $_->append_text (qq({$list{$uri}}));
40     }
41     $item->append_text (' ');
42     if ($title) {
43     for ($item->append_new_node (namespace_uri => $NS_XHTML1, local_name => 'a')) {
44     $_->set_attribute (href => $uri);
45     $_->set_attribute (title => qq(URI: <$uri>));
46     $_->append_text ($title);
47     }
48     } else {
49     $item->append_text ('<');
50     for ($item->append_new_node (namespace_uri => $NS_XHTML1, local_name => 'a')) {
51     $_->set_attribute (href => $uri);
52     $_->set_attribute (title => qq(URI: <$uri>));
53     $_->append_text ($uri);
54     }
55     $item->append_text ('>');
56     }
57     }
58     unless ($r->count) {
59     $r = '';
60     }
61     }
62    
63     MODULE:
64     sub add_uri ($$) {
65     my $page = shift;
66     my $uri = shift;
67     unless (ref $uri) {
68     require URI;
69     $uri = URI->new ($uri);
70     ## Some schemes do not have query part.
71     eval q{ $uri->query (undef) if $uri->query =~ /^[0-9]{6,8}$/ };
72     $uri->fragment (undef);
73     }
74     $uri = $uri->canonical;
75     return unless $uri;
76     for my $regex (get_dont_record_list ()) {
77     return if $uri =~ /$regex/;
78     }
79     my %list = get_referer_list ($page);
80     $list{ $uri }++;
81     set_referer_list ($page, \%list);
82     }
83    
84     sub get_referer_list ($) {
85     split /"/, SuikaWiki::Plugin->_database->meta (Referer => $_[0]);
86     }
87     sub set_referer_list ($%) {
88     my $page = shift;
89     my $list = shift;
90     SuikaWiki::Plugin->_database->meta (Referer => $page => join '"', %$list);
91     }
92    
93     sub get_dont_record_list () {
94     map {s/\$/\\\$/g; s/\@/\\\@/g; $_}
95     grep !/^#/,
96     split /[\x0D\x0A]+/, $main::database{$main::PageName{RefererDontRecord}};
97     }
98     sub get_site_name_list () {
99     my @lines = grep /[^#]/, split /[\x0D\x0A]+/, $main::database{$main::PageName{RefererSiteName}};
100     my @item;
101     for (@lines) {
102     next if /^#/;
103     my ($uri, $name) = split /\s+/, $_, 2;
104     $uri =~ s/\$/\\\$/g; $uri =~ s/\@/\\\@/g; $uri =~ s/\//\\\//g;
105     $name =~ s!([()/\\])!\\$1!g; $name =~ s/\$([0-9]+)/).__decode (\${$1}).q(/g;
106     push @item, [$uri, qq(q($name))];
107     }
108     @item;
109     }
110    
111     sub __decode ($) {
112     my $s = shift;
113     $s =~ tr/+/ /;
114     $s =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/chr hex $1/ge;
115     main::code_convert (\$s);
116     }
117    
118     push @{$SuikaWiki::Plugin::On{WikiDatabaseLoaded}}, sub {
119     SuikaWiki::Plugin::Referer::add_uri ($main::form{mypage}, $main::ENV{HTTP_REFERER});
120     };
121    
122     POD:TO DO:
123     - Customizable referer list
124    
125     - Trackback/pingback
126    
127     - Message::Util::Formatter text in referer-referring page title
128     POD:SEE ALSO:
129     SuikaWiki::Plugin::Map
130     POD:LICENSE:
131     Copyright 2003 Wakaba <w@suika.fam.cx>
132    
133     %%GNUGPL2%%

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24