/[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 - (show 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 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