commit
79312b2754
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
|
@ -132,3 +132,5 @@ All of this code is licensed under the GPLv2+. -- [[Will]]
|
|||
}
|
||||
|
||||
1
|
||||
|
||||
[[done]] --[[smcv]]
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue