CGI-Wiki-Kwiki
view release on metacpan or search on metacpan
lib/CGI/Wiki/Kwiki.pm view on Meta::CPAN
extended_links => 1,
implicit_links => 0,
allowed_tags => \@allowed_tags,
node_prefix => "index.cgi?node=",
edit_prefix => "index.cgi?action=edit;node=",
# branding is important
munge_node_name => sub {
my $node_name = shift;
$node_name =~ s/State51/state51/g;
$node_name = "alex" if $node_name eq "Alex";
return $node_name;
},
);
my $formatter = CGI::Wiki::Formatter::UseMod->new( %formatter_conf );
# Create an extra wiki object too for passing to ->format when we call
# it in the macros - so the formatter can find out which nodes already
# exist.
my $wiki = CGI::Wiki->new(
store => CGI::Wiki::Store::SQLite->new(
dbname => "./data/node.db"
)
);
my %macros = (
# Perl Advent Calendar feed
'@PERL_ADVENT_TODAY' => sub {
my $xml = get( "http://perladvent.org/perladventone.rdf" )
or return "[Can't get RSS for the Perl Advent Calendar!]";
# Yes I know parsing XML with regexes is yuck, but this
# is just a quick hack for December.
if ( $xml =~ m|<item>\s*<title>([^<]+)</title>\s*<link>([^<]+)</link>| ) {
return qq(<div align="center" style="border:dashed 1px; padding-top:5px; padding-bottom:5px;">Today's Perl Advent Calendar goodie is: [<a href="$2">$1</a>]</div>);
} else {
return "Can't parse Perl Advent Calendar RSS!";
}
},
# Match state51::* modules and link to wiki page.
qr/\b(state51::\w+(::\w+)*)\b/ => sub {
my $module_name = shift;
my $link = $formatter->format( "[[$module_name]]", $wiki );
$link =~ s|<p>||;
$link =~ s|</p>||;
chomp $link; # or headings won't work
return "<tt>$link</tt>";
},
# Match non-state51::* modules and link to search.cpan.org.
# Don't match anything already inside an <a href ...
# or preceded by a :, since that will be part of state51::*
qr/(?<![>:])\b([A-Za-rt-z]\w*::\w+(::w+)*)\b/ => sub {
my $module_name = shift;
my $dist = $module_name;
$dist =~ s/::/-/g;
return qq(<a href="http://search.cpan.org/dist/$dist"><tt><small>(CPAN)</small> $module_name</tt></a>);
},
# Print method names in <tt>
qr/(->\w+)/ => sub { return "<tt>$_[0]</tt>" },
# Macro to list available HTML tags.
'@ALLOWED_HTML_TAGS' => join( ", ", @allowed_tags ),
);
my %config = (
db_type => 'SQLite',
db_name => './data/node.db',
db_user => 'not_used',
home_node => "Home",
site_name => "state51 wiki",
formatters => {
default => [
'CGI::Wiki::Formatter::UseMod',
%formatter_conf,
macros => \%macros,
]
},
template_path => "templates/",
search_map => "./data/search_map/",
);
The above is not intended to exemplify good programming practice.
=head1 TODO
Things I still need to do
=over 4
=item Polish templates
=item Import script should catch case-sensitive dupes better
=item CGI::Wiki::Kwiki does not currently work under mod_perl. This is a serious problem.
=back
=head1 SEE ALSO
=over
=item *
L<CGI::Wiki>
=item *
L<http://london-crafts.org> - a wiki for a local crafts group, running on CGI::Wiki::Kwiki
=back
=head1 AUTHORS
Tom Insam (tom@jerakeen.org)
Kake Pugh (kake@earth.li)
=head1 CREDITS
Thanks to Kake for writing CGI::Wiki, and providing the initial
patches to specify store and formatter types in the config. And for
complaining at me till I released things. Thanks to Ivor Williams for
diff support.
( run in 1.219 second using v1.01-cache-2.11-cpan-5b529ec07f3 )