package Kwiki::CoolURI; use strict; use warnings; use Kwiki::Plugin -Base; use mixin 'Kwiki::Installer'; our $VERSION = '0.04'; const class_id => 'cool_uri'; const class_title => "Cool URIs don't change"; sub init { super; $self->hub->template->add_path('plugin/cool_uri/template/tt2'); my $formatter = $self->hub->load_class('formatter'); $formatter->table->{forced} = 'Kwiki::CoolURI::ForcedLink'; } sub register { my $registry = shift; $registry->add(preload => 'cool_uri'); $registry->add(hook => 'page:kwiki_link', pre => 'uri_hook'); } sub uri_hook { my $hook = pop; $hook->code(undef); my ($label) = @_; my $page_uri = $self->uri; $label = $self->title unless defined $label; my $class = $self->active ? '' : ' class="empty"'; qq($label); } package Kwiki::CoolURI::ForcedLink; use base 'Kwiki::Formatter::ForcedLink'; sub html { $self->matched =~ $self->pattern_start; my $target = $1; my $text = $self->escape_html($target); my $class = $self->hub->pages->new_from_name($target)->exists ? '' : ' class="empty"'; return qq($target); } package Kwiki::CoolURI; __DATA__ =head1 NAME Kwiki::CoolURI - makes the Kwiki url cleaner =head1 SYNOPSIS $ cd /path/to/kwiki $ kwiki -add Kwiki::CoolURI =head1 DESCRIPTION Changes the internal links that Kwiki create. Instead of /index.cgi?SandBox, it will just be /SandBox. It only changes the url for the display plugin. Edit will still look like /index.cgi?action=edit&page_name=SandBox. =head2 Configuration Kwiki needs to be able to read request on the form /SandBox. With Apache this can be solved by putting the following mod_rewrite config in a .htaccess file in the directory where index.cgi is located. RewriteEngine on RewriteCond $1 !(css/|icons/|index.cgi|local/|palm90.png|plugin/|theme/) RewriteRule ^(.*)$ index.cgi?action=display&page_name=$1 [L] If you add new top directories, or files, that you still want to be readable, you have to add them in the RewriteCond. =head1 BUGS Does not currently fix the redirect that for instance happens after an edit. Should use new Kwiki 0.37 hooks. The mod_rewrite config could probably be better. The code is just copied from the original methods and slightly changed to output different urls. If Kwiki had a way to configure what the link urls should look like, this plugin wouldn't be needed. =head1 AUTHOR Jon Åslund =head1 COPYRIGHT Copyright (c) 2005. Jon Åslund. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO Cool URIs don't change L =cut __plugin/cool_uri/template/tt2/home_button.html__ [% INCLUDE home_button_icon.html %]