summaryrefslogtreecommitdiff
path: root/doc/todo/Default_text_for_new_pages.mdwn
blob: 4a17bbf8bb1f276db6f1db1639968955d2dca5aa (plain)

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 @@
 </TMPL_IF>
 <input type="hidden" name="do" value="blog" />
 <input type="hidden" name="from" value="<TMPL_VAR ROOTPAGE>" />
+<TMPL_IF NAME="TEMPLATEPAGE">
+<input type="hidden" name="templatepage" value="<TMPL_VAR TEMPLATEPAGE>" />
+</TMPL_IF>
 <input type="hidden" name="subpage" value="1" />
 <TMPL_VAR POSTFORMTEXT>
 <input name="title" size="40" />

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? http://www.bddebian.com/~wiki/config_edittemplate/ with one template: http://www.bddebian.com/~wiki/config_edittemplate/regular_page/. -- [[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]]