aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/CGI.pm45
-rw-r--r--debian/changelog5
-rw-r--r--doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn127
-rw-r--r--templates/editpage.tmpl2
4 files changed, 42 insertions, 137 deletions
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index 21bb6ea38..759a49b7d 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -325,7 +325,7 @@ sub cgi_editpage ($$) { #{{{
eval q{use CGI::FormBuilder};
my $form = CGI::FormBuilder->new(
- fields => [qw(do rcsinfo subpage from page editcontent comments)],
+ fields => [qw(do rcsinfo subpage from page type editcontent comments)],
header => 1,
charset => "utf-8",
method => 'POST',
@@ -353,13 +353,32 @@ sub cgi_editpage ($$) { #{{{
}
$page=lc($page);
+ my $from;
+ if (defined $form->field('from')) {
+ ($from)=$form->field('from')=~/$config{wiki_file_regexp}/;
+ }
+
my $file;
- if (exists $pagesources{lc($page)}) {
- $file=$pagesources{lc($page)};
+ my $type;
+ if (exists $pagesources{$page}) {
+ $file=$pagesources{$page};
+ $type=pagetype($file);
}
else {
- $file=$page.".".$config{default_pageext};
+ $type=$form->param('type');
+ if (defined $type && length $type && $hooks{htmlize}{$type}) {
+ $type=possibly_foolish_untaint($type);
+ }
+ elsif (defined $from) {
+ # favor the type of linking page
+ $type=pagetype($pagesources{$from});
+ }
+ else {
+ $type=$config{default_pageext};
+ }
+ $file=$page.".".$type;
}
+
my $newfile=0;
if (! -e "$config{srcdir}/$file") {
$newfile=1;
@@ -369,7 +388,8 @@ sub cgi_editpage ($$) { #{{{
$form->field(name => "from", type => 'hidden');
$form->field(name => "rcsinfo", type => 'hidden');
$form->field(name => "subpage", type => 'hidden');
- $form->field(name => "page", value => "$page", force => 1);
+ $form->field(name => "page", value => $page, force => 1);
+ $form->field(name => "type", value => $type, force => 1);
$form->field(name => "comments", type => "text", size => 80);
$form->field(name => "editcontent", type => "textarea", rows => 20,
cols => 80);
@@ -397,8 +417,7 @@ sub cgi_editpage ($$) { #{{{
$form->field(name => "comments",
value => $comments, force => 1);
$form->tmpl_param("page_preview",
- htmlize(pagetype($file),
- linkify($page, $page, $content)));
+ htmlize($type, linkify($page, $page, $content)));
}
else {
$form->tmpl_param("page_preview", "");
@@ -410,7 +429,6 @@ sub cgi_editpage ($$) { #{{{
if ($form->field("do") eq "create") {
my @page_locs;
my $best_loc;
- my ($from)=$form->field('from')=~/$config{wiki_file_regexp}/;
if (! defined $from || ! length $from ||
$from ne $form->field('from') ||
$from=~/$config{wiki_file_prune_regexp}/ ||
@@ -449,10 +467,17 @@ sub cgi_editpage ($$) { #{{{
redirect($q, "$config{url}/".htmlpage($page));
return;
}
-
+
+ my @page_types;
+ if (exists $hooks{htmlize}) {
+ @page_types=keys %{$hooks{htmlize}};
+ }
+
$form->tmpl_param("page_select", 1);
$form->field(name => "page", type => 'select',
options => \@page_locs, value => $best_loc);
+ $form->field(name => "type", type => 'select',
+ options => \@page_types);
$form->title("creating ".pagetitle($page));
}
elsif ($form->field("do") eq "edit") {
@@ -469,6 +494,7 @@ sub cgi_editpage ($$) { #{{{
}
$form->tmpl_param("page_select", 0);
$form->field(name => "page", type => 'hidden');
+ $form->field(name => "type", type => 'hidden');
$form->title("editing ".pagetitle($page));
}
@@ -517,6 +543,7 @@ sub cgi_editpage ($$) { #{{{
$form->field("do", "edit)");
$form->tmpl_param("page_select", 0);
$form->field(name => "page", type => 'hidden');
+ $form->field(name => "type", type => 'hidden');
$form->title("editing $page");
print $form->render(submit => \@buttons);
return;
diff --git a/debian/changelog b/debian/changelog
index 391569fad..50720bc0f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -18,8 +18,11 @@ ikiwiki (1.9) UNRELEASED; urgency=low
readable and avoid future mistakes. The patch seems to work and for the
first time I have a UTF-8 username ;-) (Faidon)
* Use form->field consistently, not form->param.
+ * Patch from Recai to allow selection of page type when creating a new page.
+ Default page type is inherited from the link clicked on to create the new
+ page.
- -- Joey Hess <joeyh@debian.org> Tue, 11 Jul 2006 17:18:39 -0400
+ -- Joey Hess <joeyh@debian.org> Wed, 26 Jul 2006 16:48:43 -0400
ikiwiki (1.8) unstable; urgency=low
diff --git a/doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn b/doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn
deleted file mode 100644
index d1c865598..000000000
--- a/doc/patchqueue/allow_to_select_a_page_type_on_new_file_creations.mdwn
+++ /dev/null
@@ -1,127 +0,0 @@
-From [[Recai]].
-
-Note that this isn't safe since it needs to check file types from the CGI
-against the list of allowed file types. Also, renaming a page won't work so
-at least the first cut needs to be changed to only allow changing file type
-when crating a new page. -- [[Joey]]
-
- diff -rup ikiwiki.orig/IkiWiki/CGI.pm ikiwiki/IkiWiki/CGI.pm
- --- ikiwiki.orig/IkiWiki/CGI.pm 2006-07-08 02:33:07.000000000 +0300
- +++ ikiwiki/IkiWiki/CGI.pm 2006-07-08 18:27:24.000000000 +0300
- @@ -310,7 +310,7 @@ sub cgi_editpage ($$) { #{{{
-
- eval q{use CGI::FormBuilder};
- my $form = CGI::FormBuilder->new(
- - fields => [qw(do rcsinfo subpage from page editcontent comments)],
- + fields => [qw(do rcsinfo subpage from page type editcontent comments)],
- header => 1,
- charset => "utf-8",
- method => 'POST',
- @@ -337,12 +337,21 @@ sub cgi_editpage ($$) { #{{{
- $page=lc($page);
-
- my $file;
- - if (exists $pagesources{lc($page)}) {
- - $file=$pagesources{lc($page)};
- + my $type;
- + if (exists $pagesources{$page}) {
- + $file=$pagesources{$page};
- + $type=pagetype($file);
- }
- else {
- - $file=$page.".".$config{default_pageext};
- + $type=$form->param('type');
- + if (defined $type && length $type) {
- + $type=possibly_foolish_untaint($type);
- + } else {
- + $type=$config{default_pageext};
- + }
- + $file=$page.".".$type;
- }
- +
- my $newfile=0;
- if (! -e "$config{srcdir}/$file") {
- $newfile=1;
- @@ -353,6 +362,7 @@ sub cgi_editpage ($$) { #{{{
- $form->field(name => "rcsinfo", type => 'hidden');
- $form->field(name => "subpage", type => 'hidden');
- $form->field(name => "page", value => "$page", force => 1);
- + $form->field(name => "type", value => "$type", force => 1, type => 'hidden');
- $form->field(name => "comments", type => "text", size => 80);
- $form->field(name => "editcontent", type => "textarea", rows => 20,
- cols => 80);
- @@ -382,8 +392,7 @@ sub cgi_editpage ($$) { #{{{
- $form->field(name => "comments",
- value => $comments, force => 1);
- $form->tmpl_param("page_preview",
- - htmlize(pagetype($file),
- - linkify($page, $page, $content)));
- + htmlize($type, linkify($page, $page, $content)));
- }
- else {
- $form->tmpl_param("page_preview", "");
- @@ -395,6 +404,8 @@ sub cgi_editpage ($$) { #{{{
- if ($form->field("do") eq "create") {
- my @page_locs;
- my $best_loc;
- + my @page_types;
- + my $best_type;
- my ($from)=$form->param('from')=~/$config{wiki_file_regexp}/;
- if (! defined $from || ! length $from ||
- $from ne $form->param('from') ||
- @@ -435,9 +446,24 @@ sub cgi_editpage ($$) { #{{{
- return;
- }
-
- + if (exists $hooks{htmlize}) {
- + @page_types=keys %{$hooks{htmlize}};
- + }
- + else {
- + @page_types=($type);
- + }
- +
- + # favor the type of originated page
- + $best_type=pagetype($pagesources{$from});
- + if (! defined $best_type || ! length $best_type) {
- + $best_type=$type;
- + }
- +
- $form->tmpl_param("page_select", 1);
- $form->field(name => "page", type => 'select',
- options => \@page_locs, value => $best_loc);
- + $form->field(name => "type", type => 'select',
- + options => \@page_types, value => $best_type);
- $form->title("creating ".pagetitle($page));
- }
- elsif ($form->field("do") eq "edit") {
- @@ -454,6 +480,7 @@ sub cgi_editpage ($$) { #{{{
- }
- $form->tmpl_param("page_select", 0);
- $form->field(name => "page", type => 'hidden');
- + $form->field(name => "type", type => 'hidden');
- $form->title("editing ".pagetitle($page));
- }
-
- @@ -503,6 +530,7 @@ sub cgi_editpage ($$) { #{{{
- $form->field("do", "edit)");
- $form->tmpl_param("page_select", 0);
- $form->field(name => "page", type => 'hidden');
- + $form->field(name => "type", type => 'hidden');
- $form->title("editing $page");
- print $form->render(submit => \@buttons);
- return;
- diff -rup ikiwiki.orig/templates/editpage.tmpl ikiwiki/templates/editpage.tmpl
- --- ikiwiki.orig/templates/editpage.tmpl 2006-07-03 03:13:46.000000000 +0300
- +++ ikiwiki/templates/editpage.tmpl 2006-07-08 18:04:48.000000000 +0300
- @@ -28,9 +28,11 @@ confict and commit again to save your ch
- <TMPL_VAR FIELD-RCSINFO>
- <TMPL_IF NAME="PAGE_SELECT">
- Page location: <TMPL_VAR FIELD-PAGE>
- +Page type: <TMPL_VAR FIELD-TYPE>
- <TMPL_ELSE>
- <br />
- <TMPL_VAR FIELD-PAGE>
- +<TMPL_VAR FIELD-TYPE>
- </TMPL_IF>
- <TMPL_VAR FIELD-EDITCONTENT><br />
- <TMPL_IF NAME="CAN_COMMIT">
diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl
index cf4520575..1ee4c4947 100644
--- a/templates/editpage.tmpl
+++ b/templates/editpage.tmpl
@@ -28,9 +28,11 @@ confict and commit again to save your changes.
<TMPL_VAR FIELD-RCSINFO>
<TMPL_IF NAME="PAGE_SELECT">
Page location: <TMPL_VAR FIELD-PAGE>
+Page type: <TMPL_VAR FIELD-TYPE>
<TMPL_ELSE>
<br />
<TMPL_VAR FIELD-PAGE>
+<TMPL_VAR FIELD-TYPE>
</TMPL_IF>
<TMPL_VAR FIELD-EDITCONTENT><br />
<TMPL_IF NAME="CAN_COMMIT">