Merge commit 'smcv/ready/getsource'

Conflicts:
	debian/changelog
master
Joey Hess 2009-08-08 12:22:10 -04:00
commit 79312b2754
5 changed files with 110 additions and 0 deletions

View File

@ -0,0 +1,91 @@
#!/usr/bin/perl
package IkiWiki::Plugin::getsource;
use warnings;
use strict;
use IkiWiki;
use open qw{:utf8 :std};
sub import {
hook(type => "getsetup", id => "getsource", call => \&getsetup);
hook(type => "pagetemplate", id => "getsource", call => \&pagetemplate);
hook(type => "cgi", id => "getsource", call => \&cgi_getsource);
}
sub getsetup () {
return
plugin => {
safe => 1,
rebuild => 1,
},
getsource_mimetype => {
type => "string",
example => "text/plain; charset=utf-8",
description => "Mime type for returned source.",
safe => 1,
rebuild => 0,
},
}
sub pagetemplate (@) {
my %params=@_;
my $page=$params{page};
my $template=$params{template};
if (length $config{cgiurl}) {
$template->param(getsourceurl => IkiWiki::cgiurl(do => "getsource", page => $page));
$template->param(have_actions => 1);
}
}
sub cgi_getsource ($) {
my $cgi=shift;
# Note: we use sessioncgi rather than just cgi
# because we need %pagesources to be
# populated.
return unless (defined $cgi->param('do') &&
$cgi->param("do") eq "getsource");
IkiWiki::decode_cgi_utf8($cgi);
my $page=$cgi->param('page');
IkiWiki::loadindex();
if (! exists $pagesources{$page}) {
IkiWiki::cgi_custom_failure(
$cgi->header(-status => "404 Not Found"),
IkiWiki::misctemplate(gettext("missing page"),
"<p>".
sprintf(gettext("The page %s does not exist."),
htmllink("", "", $page)).
"</p>"));
exit;
}
if (! defined pagetype($pagesources{$page})) {
IkiWiki::cgi_custom_failure(
$cgi->header(-status => "403 Forbidden"),
IkiWiki::misctemplate(gettext("not a page"),
"<p>".
sprintf(gettext("%s is an attachment, not a page."),
htmllink("", "", $page)).
"</p>"));
exit;
}
if (! $config{getsource_mimetype}) {
$config{getsource_mimetype} = "text/plain; charset=utf-8";
}
print "Content-Type: $config{getsource_mimetype}\r\n";
print ("\r\n");
print readfile(srcfile($pagesources{$page}));
exit 0;
}
1

1
debian/changelog vendored
View File

@ -16,6 +16,7 @@ ikiwiki (3.15) UNRELEASED; urgency=low
* map: Avoid emitting an unclosed ul element if the map is empty. (harishcm)
* inline: Add pagenames parameter that can be used to list a set of
pages to inline, in a specific order, without using a PageSpec. (smcv)
* Add getsource plugin (Will, smcv)
-- Joey Hess <joeyh@debian.org> Tue, 02 Jun 2009 17:03:41 -0400

View File

@ -0,0 +1,13 @@
[[!template id=plugin name=getsource author="[[Will_Uther|Will]]"]]
This plugin adds a `getsource` action to the IkiWiki CGI, and a "Source" link
that uses it to display pages' source.
Configuration for this plugin in the setup file:
* `getsource_mimetype => "text/plain; charset=utf-8"`
Sets the MIME type used when page source is requested. The default is
usually appropriate, but you could set this to `application/octet-stream`
to encourage browsers to download the source to a file rather than showing
it in the browser.

View File

@ -132,3 +132,5 @@ All of this code is licensed under the GPLv2+. -- [[Will]]
}
1
[[done]] --[[smcv]]

View File

@ -50,6 +50,9 @@
<TMPL_IF NAME="HISTORYURL">
<li><a href="<TMPL_VAR HISTORYURL>">History</a></li>
</TMPL_IF>
<TMPL_IF NAME="GETSOURCEURL">
<li><a href="<TMPL_VAR GETSOURCEURL>">Source</a></li>
</TMPL_IF>
<TMPL_IF NAME="PREFSURL">
<li><a href="<TMPL_VAR PREFSURL>">Preferences</a></li>
</TMPL_IF>