The [[ikiwiki/directive/inline]] directive allows the creation of new pages. It would be nice if it was possible to specify default text for the new post. For example: \[[!inline pages="blog/* and !*/Discussion" postform="yes" newposttemplate="blogtemplate.mdwn"]] This would allow you to create a new blog post. When you hit the `Edit` button, the system presents you with an edit form as normal, but rather than being empty, it has the text from `blogtemplate.mdwn`. Inline below is a [[patch]] that implements this: ---- diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm index bb21ed2..10c985c 100644 --- a/IkiWiki/Plugin/editpage.pm +++ b/IkiWiki/Plugin/editpage.pm @@ -60,7 +60,7 @@ sub cgi_editpage ($$) { decode_cgi_utf8($q); - my @fields=qw(do rcsinfo subpage from page type editcontent comments); + my @fields=qw(do rcsinfo subpage from page type editcontent comments templatepage); my @buttons=("Save Page", "Preview", "Cancel"); eval q{use CGI::FormBuilder}; error($@) if $@; @@ -117,9 +117,20 @@ sub cgi_editpage ($$) { } else { $type=$form->param('type'); + + my $defaultContent = ""; + my $templatepage = $form->param('templatepage'); + if ($templatepage && $pagesources{$templatepage}) { + $defaultContent = readfile(IkiWiki::srcfile($pagesources{$templatepage})); + } + if (defined $type && length $type && $hooks{htmlize}{$type}) { $type=possibly_foolish_untaint($type); } + elsif ($templatepage && $pagesources{$templatepage}) { + # favor the type of the template page + $type=pagetype($pagesources{$templatepage}); + } elsif (defined $from && exists $pagesources{$from}) { # favor the type of linking page $type=pagetype($pagesources{$from}); @@ -129,7 +140,7 @@ sub cgi_editpage ($$) { if (! $form->submitted) { $form->field(name => "rcsinfo", value => "", force => 1); } - $form->field(name => "editcontent", validate => '/.+/'); + $form->field(name => "editcontent", value => $defaultContent, force => 0, validate => '/.+/'); } $form->field(name => "do", type => 'hidden'); diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 8efef3f..075d7d8 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -271,6 +271,7 @@ sub preprocess_inline (@) { $rootpage=$params{page}; } $formtemplate->param(rootpage => $rootpage); + $formtemplate->param(templatepage => $params{newposttemplate}) if $params{newposttemplate}; $formtemplate->param(rssurl => $rssurl) if $feeds && $rss; $formtemplate->param(atomurl => $atomurl) if $feeds && $atom; if (exists $params{postformtext}) { diff --git a/templates/blogpost.tmpl b/templates/blogpost.tmpl index 7eeede6..5c8b34c 100644 --- a/templates/blogpost.tmpl +++ b/templates/blogpost.tmpl @@ -8,6 +8,9 @@ + + + --- Perhaps I'm misunderstanding something, but can't you use already existing in-house means instead of this patch; use a procedure as I do in the Hurd wiki? with one template: . -- [[tschwinge]] > You are entirely correct. I thought I'd seen it somewhere, but then couldn't > find it when I came to use it. If the patch isn't applied (and I can see arguments > on both sides of that debate), then at least a pointer to > [[ikiwiki/directive/edittemplate]] should be added to [[ikiwiki/directive/inline]] > (and I'd make that change myself, but the edit needs to happen in the underlay, > not in the online docs). -- [[Will]] >> Go ahead and make the edit, ikiwiki's source is arranged such that edits >> on this wiki to files that form the underlay will affect the underlay. >> (Clearly I won't be adding duplicate functionality.) >> --[[Joey]] >>> Edit made. [[done]] -- [[Will]]