X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/826af4600a4e413ca8ec7b6d56f0a1cdca0ad635..2b0c8d167e8b98d11e3504393fe4b98596dfd891:/IkiWiki/Plugin/rename.pm?ds=inline diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm index 6c131487a..0b6e74705 100644 --- a/IkiWiki/Plugin/rename.pm +++ b/IkiWiki/Plugin/rename.pm @@ -3,25 +3,25 @@ package IkiWiki::Plugin::rename; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "rename", call => \&getsetup); hook(type => "formbuilder_setup", id => "rename", call => \&formbuilder_setup); hook(type => "formbuilder", id => "rename", call => \&formbuilder); hook(type => "sessioncgi", id => "rename", call => \&sessioncgi); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 0, }, -} #}}} +} -sub check_canrename ($$$$$$) { #{{{ +sub check_canrename ($$$$$$) { my $src=shift; my $srcfile=shift; my $dest=shift; @@ -87,9 +87,9 @@ sub check_canrename ($$$$$$) { #{{{ IkiWiki::Plugin::attachment::check_canattach($session, $dest, $srcfile); } } -} #}}} +} -sub rename_form ($$$) { #{{{ +sub rename_form ($$$) { my $q=shift; my $session=shift; my $page=shift; @@ -111,19 +111,21 @@ sub rename_form ($$$) { #{{{ $f->field(name => "do", type => "hidden", value => "rename", force => 1); $f->field(name => "page", type => "hidden", value => $page, force => 1); - $f->field(name => "new_name", value => pagetitle($page), size => 60); + $f->field(name => "new_name", value => pagetitle($page, 1), size => 60); if (!$q->param("attachment")) { # 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', @@ -145,9 +147,9 @@ sub rename_form ($$$) { #{{{ $f->field(name => "attachment", type => "hidden"); return $f, ["Rename", "Cancel"]; -} #}}} +} -sub rename_start ($$$$) { #{{{ +sub rename_start ($$$$) { my $q=shift; my $session=shift; my $attachment=shift; @@ -171,9 +173,9 @@ sub rename_start ($$$$) { #{{{ my ($f, $buttons)=rename_form($q, $session, $page); IkiWiki::showform($f, $buttons, $session, $q); exit 0; -} #}}} +} -sub postrename ($;$$$) { #{{{ +sub postrename ($;$$$) { my $session=shift; my $src=shift; my $dest=shift; @@ -204,17 +206,18 @@ sub postrename ($;$$$) { #{{{ } IkiWiki::cgi_editpage($postrename, $session); -} #}}} +} -sub formbuilder (@) { #{{{ +sub formbuilder (@) { my %params=@_; my $form=$params{form}; - if (defined $form->field("do") && $form->field("do") eq "edit") { + if (defined $form->field("do") && ($form->field("do") eq "edit" || + $form->field("do") eq "create")) { my $q=$params{cgi}; my $session=$params{session}; - if ($form->submitted eq "Rename") { + if ($form->submitted eq "Rename" && $form->field("do") eq "edit") { rename_start($q, $session, 0, $form->field("page")); } elsif ($form->submitted eq "Rename Attachment") { @@ -228,27 +231,28 @@ sub formbuilder (@) { #{{{ rename_start($q, $session, 1, $selected[0]); } } -} #}}} +} my $renamesummary; -sub formbuilder_setup (@) { #{{{ +sub formbuilder_setup (@) { my %params=@_; my $form=$params{form}; my $q=$params{cgi}; - if (defined $form->field("do") && $form->field("do") eq "edit") { + if (defined $form->field("do") && ($form->field("do") eq "edit" || + $form->field("do") eq "create")) { # Rename button for the page, and also for attachments. - push @{$params{buttons}}, "Rename"; + push @{$params{buttons}}, "Rename" if $form->field("do") eq "edit"; $form->tmpl_param("field-rename" => ''); if (defined $renamesummary) { $form->tmpl_param(message => $renamesummary); } } -} #}}} +} -sub sessioncgi ($$) { #{{{ +sub sessioncgi ($$) { my $q=shift; if ($q->param("do") eq 'rename') { @@ -388,22 +392,8 @@ sub sessioncgi ($$) { #{{{ $template->param(error => $rename->{error}); if ($rename->{src} ne $rename->{dest}) { $template->param(brokenlinks_checked => 1); - $template->param(brokenlinks => [ - map { - { - page => htmllink($rename->{dest}, $rename->{dest}, $_, - noimageinline => 1) - } - } @{$rename->{brokenlinks}} - ]); - $template->param(fixedlinks => [ - map { - { - page => htmllink($rename->{dest}, $rename->{dest}, $_, - noimageinline => 1) - } - } @{$rename->{fixedlinks}} - ]); + $template->param(brokenlinks => linklist($rename->{dest}, $rename->{brokenlinks})); + $template->param(fixedlinks => linklist($rename->{dest}, $rename->{fixedlinks})); } $renamesummary.=$template->output; } @@ -416,9 +406,26 @@ sub sessioncgi ($$) { #{{{ exit 0; } -} #}}} +} + +sub linklist { + # generates a list of links in a form suitable for FormBuilder + my $dest=shift; + my $list=shift; + # converts a list of pages into a list of links + # in a form suitable for FormBuilder. + + [map { + { + page => htmllink($dest, $dest, $_, + noimageinline => 1, + linktext => pagetitle($_), + ) + } + } @{$list}] +} -sub renamepage_hook ($$$$) { #{{{ +sub renamepage_hook ($$$$) { my ($page, $src, $dest, $content)=@_; IkiWiki::run_hooks(renamepage => sub { @@ -431,9 +438,9 @@ sub renamepage_hook ($$$$) { #{{{ }); return $content; -}# }}} +} -sub do_rename ($$$) { #{{{ +sub do_rename ($$$) { my $rename=shift; my $q=shift; my $session=shift; @@ -458,9 +465,9 @@ sub do_rename ($$$) { #{{{ } } -} # }}} +} -sub fixlinks ($$$) { #{{{ +sub fixlinks ($$$) { my $rename=shift; my $session=shift; @@ -496,6 +503,6 @@ sub fixlinks ($$$) { #{{{ } return @fixedlinks; -} #}}} +} 1