You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

68 lines
1.9 KiB

##
## 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">&lt;$url&gt;</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>);
}