From 01e4cb1464d07afb22d22bf98116a3ed9126612b Mon Sep 17 00:00:00 2001 From: Will Uther Date: Sun, 26 Jul 2009 16:22:56 +0100 Subject: [PATCH] Add getsource plugin --- IkiWiki/Plugin/getsource.pm | 79 +++++++++++++++++++++++++++++++++++++ templates/page.tmpl | 3 ++ 2 files changed, 82 insertions(+) create mode 100644 IkiWiki/Plugin/getsource.pm diff --git a/IkiWiki/Plugin/getsource.pm b/IkiWiki/Plugin/getsource.pm new file mode 100644 index 000000000..4e74eaea0 --- /dev/null +++ b/IkiWiki/Plugin/getsource.pm @@ -0,0 +1,79 @@ +#!/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 => "sessioncgi", id => "getsource", call => \&cgi_getsource); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, + getsource_mimetype => { + type => "string", + example => "application/octet-stream", + 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; + my $session=shift; + + # Note: we use sessioncgi rather than just cgi + # because we need $IkiWiki::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'); + + if ($IkiWiki::pagesources{$page}) { + + my $data = IkiWiki::readfile(IkiWiki::srcfile($IkiWiki::pagesources{$page})); + + if (! $config{getsource_mimetype}) { + $config{getsource_mimetype} = "text/plain"; + } + + print "Content-Type: $config{getsource_mimetype}\r\n"; + + print ("\r\n"); + + print $data; + + exit 0; + } + + error("Unable to find page source for page: $page"); + + exit 0; +} + +1 diff --git a/templates/page.tmpl b/templates/page.tmpl index 8622d1a01..599758cc7 100644 --- a/templates/page.tmpl +++ b/templates/page.tmpl @@ -50,6 +50,9 @@
  • History
  • + +
  • Get Source
  • +
  • Preferences
  • -- 2.26.2