hook(type => "formbuilder_setup", id => "rename", call => \&formbuilder_setup);
hook(type => "formbuilder", id => "rename", call => \&formbuilder);
hook(type => "sessioncgi", id => "rename", call => \&sessioncgi);
- hook(type => "rename", id => "rename", call => \&rename);
+ hook(type => "rename", id => "rename", call => \&rename_subpages);
}
sub getsetup () {
# insert the standard extensions
my @page_types;
if (exists $IkiWiki::hooks{htmlize}) {
- @page_types=grep { !/^_/ }
- keys %{$IkiWiki::hooks{htmlize}};
+ foreach my $key (grep { !/^_/ } keys %{$IkiWiki::hooks{htmlize}}) {
+ push @page_types, [$key, $IkiWiki::hooks{htmlize}{$key}{longname} || $key];
+ }
}
+ @page_types=sort @page_types;
# make sure the current extension is in the list
my ($ext) = $pagesources{$page}=~/\.([^.]+)$/;
if (! $IkiWiki::hooks{htmlize}{$ext}) {
- unshift(@page_types, $ext);
+ unshift(@page_types, [$ext, $ext]);
}
$f->field(name => "type", type => 'select',
session => $session,
);
- # remove duplicates from @torename
- my %seen=();
- my @uniq_torename;
- foreach my $item (@torename) {
- push(@uniq_torename, $item) unless $seen{$item->{src}}++;
- }
- @torename=@uniq_torename;
-
require IkiWiki::Render;
IkiWiki::disable_commit_hook() if $config{rcs};
my %origpagesources=%pagesources;
}
# Add subpages to the list of pages to be renamed, if needed.
-sub rename(@) {
+sub rename_subpages (@) {
my %params = @_;
my %torename = %{$params{torename}};
return $content;
}
-sub rename_hook (@) {
+sub rename_hook {
my %params = @_;
my @torename=@{$params{torename}};
my $q=$params{cgi};
my $session=$params{session};
+ return () unless @torename;
+
my @nextset;
- if (@torename) {
- foreach my $torename (@torename) {
- unless (exists $done{$torename->{src}} && $done{$torename->{src}}) {
- IkiWiki::run_hooks(rename => sub {
- push @nextset, shift->(
- torename => $torename,
- cgi => $q,
- session => $session,
- );
- });
- $done{$torename->{src}}=1;
- }
+ foreach my $torename (@torename) {
+ unless (exists $done{$torename->{src}} && $done{$torename->{src}}) {
+ IkiWiki::run_hooks(rename => sub {
+ push @nextset, shift->(
+ torename => $torename,
+ cgi => $q,
+ session => $session,
+ );
+ });
+ $done{$torename->{src}}=1;
}
- push @torename, rename_hook(
- torename => \@nextset,
- done => \%done,
- cgi => $q,
- session => $session,
- );
- return @torename;
- }
- else {
- return ();
}
+
+ push @torename, rename_hook(
+ torename => \@nextset,
+ done => \%done,
+ cgi => $q,
+ session => $session,
+ );
+
+ # dedup
+ my %seen;
+ return grep { ! $seen{$_->{src}}++ } @torename;
}
-
+
sub do_rename ($$$) {
my $rename=shift;
my $q=shift;
IkiWiki::rcs_rename($rename->{srcfile}, $rename->{destfile});
}
else {
- if (! CORE::rename($config{srcdir}."/".$rename->{srcfile},
+ if (! rename($config{srcdir}."/".$rename->{srcfile},
$config{srcdir}."/".$rename->{destfile})) {
error("rename: $!");
}