|
|
@@ -0,0 +1,68 @@
|
|
|
+##
|
|
|
+## Homepage: http://www.kwiki.org/?KwikiSpamWhitelist
|
|
|
+## Source: http://www.kwiki.org/?CodeKwikiSpamWhitelist
|
|
|
+##
|
|
|
+
|
|
|
+package Kwiki::SpamWhitelist;
|
|
|
+use Kwiki::Plugin -Base;
|
|
|
+use Kwiki::Formatter;
|
|
|
+our $VERSION = '0.0';
|
|
|
+
|
|
|
+const class_id => 'spam_whitelist';
|
|
|
+
|
|
|
+sub register {
|
|
|
+ my $registry = shift;
|
|
|
+ $registry->add(preload => $self->class_id);
|
|
|
+}
|
|
|
+
|
|
|
+package Kwiki::SpamWhitelist::Mixin;
|
|
|
+use mixin 'Spoon::IndexList';
|
|
|
+use IO::All;
|
|
|
+
|
|
|
+sub spam_link {
|
|
|
+ my ($url, $title) = @_;
|
|
|
+ return unless $url =~ s/^https?:\/\/([^\/]+)/spam:\/\/$1/i;
|
|
|
+ my $domain = $1;
|
|
|
+ my $whitelist =
|
|
|
+ $self->hub->spam_whitelist->plugin_directory . '/whitelist';
|
|
|
+ my $index = $self->index_list($whitelist);
|
|
|
+ my $ok = eval { $index->{$domain} };
|
|
|
+ return 'spam' if $@;
|
|
|
+ return if $ok;
|
|
|
+ my $spam_link = qq{<span style="font-weight: bold; background-color: red"><$url></span>};
|
|
|
+ $spam_link = qq{<span>$title</span>$spam_link}
|
|
|
+ unless $title =~ /^http/i;
|
|
|
+ return $spam_link;
|
|
|
+}
|
|
|
+
|
|
|
+package Kwiki::Formatter::TitledHyperLink;
|
|
|
+use mixin 'Kwiki::SpamWhitelist::Mixin';
|
|
|
+no warnings;
|
|
|
+
|
|
|
+sub html {
|
|
|
+ my $text = $self->escape_html($self->matched);
|
|
|
+ my ($title1, $target, $title2) = ($text =~ $self->pattern_start);
|
|
|
+ $title1 = '' unless defined $title1;
|
|
|
+ $title2 = '' unless defined $title2;
|
|
|
+ $target =~ s{^\w+:(?!//)}{};
|
|
|
+ my $title = $title1 . ' ' . $title2;
|
|
|
+ $title =~ s/^\s*(.*?)\s*$/$1/;
|
|
|
+ $title = $target
|
|
|
+ unless $title =~ /\S/;
|
|
|
+ return $self->spam_link($target, $title) ||
|
|
|
+ qq(<a href="$target">$title</a>);
|
|
|
+}
|
|
|
+
|
|
|
+package Kwiki::Formatter::HyperLink;
|
|
|
+use mixin 'Kwiki::SpamWhitelist::Mixin';
|
|
|
+
|
|
|
+sub html {
|
|
|
+ my $text = $self->escape_html($self->matched);
|
|
|
+ return $text if $text =~ s/^!//;
|
|
|
+ return qq(<img src="$text" />)
|
|
|
+ if $text =~ /(?:jpe?g|gif|png)$/i;
|
|
|
+ my $target = $text;
|
|
|
+ return $self->spam_link($target, $text) ||
|
|
|
+ qq(<a href="$target">$text</a>);
|
|
|
+}
|
|
|
+
|