X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/d7fdd04b5a113b6dded40cb79b670b16570c11b3..5168f51094e8ebf89dc73e765770f053bfcee91c:/IkiWiki/CGI.pm?ds=inline diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index 55ee5d86a..cfb2c0b1d 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -84,53 +84,6 @@ sub decode_cgi_utf8 ($) { #{{{ } } #}}} -sub cgi_recentchanges ($) { #{{{ - my $q=shift; - - # Optimisation: building recentchanges means calculating lots of - # links. Memoizing htmllink speeds it up a lot (can't be memoized - # during page builds as the return values may change, but they - # won't here.) - eval q{use Memoize}; - error($@) if $@; - memoize("htmllink"); - - eval q{use Time::Duration}; - error($@) if $@; - - my $changelog=[rcs_recentchanges(100)]; - foreach my $change (@$changelog) { - $change->{when} = concise(ago(time - $change->{when})); - - $change->{user} = userlink($change->{user}); - - my $is_excess = exists $change->{pages}[10]; # limit pages to first 10 - delete @{$change->{pages}}[10 .. @{$change->{pages}}] if $is_excess; - $change->{pages} = [ - map { - $_->{link} = htmllink("", "", $_->{page}, - noimageinline => 1, - linktext => pagetitle($_->{page})); - $_; - } @{$change->{pages}} - ]; - push @{$change->{pages}}, { link => '...' } if $is_excess; - } - - my $template=template("recentchanges.tmpl"); - $template->param( - title => "RecentChanges", - indexlink => indexlink(), - wikiname => $config{wikiname}, - changelog => $changelog, - baseurl => baseurl(), - ); - run_hooks(pagetemplate => sub { - shift->(page => "", destpage => "", template => $template); - }); - print $q->header(-charset => 'utf-8'), $template->output; -} #}}} - # Check if the user is signed in. If not, redirect to the signin form and # save their place to return to later. sub needsignin ($$) { #{{{ @@ -404,6 +357,8 @@ sub cgi_editpage ($$) { #{{{ linkify($page, "", preprocess($page, $page, filter($page, $page, $content), 0, 1)))); + # previewing may have created files on disk + saveindex(); } elsif ($form->submitted eq "Save Page") { $form->tmpl_param("page_preview", ""); @@ -439,9 +394,10 @@ sub cgi_editpage ($$) { #{{{ $dir=~s![^/]+/+$!!; push @page_locs, $dir.$page; } + + push @page_locs, "$config{userdir}/$page" + if length $config{userdir}; } - push @page_locs, "$config{userdir}/$page" - if length $config{userdir}; @page_locs = grep { ! exists $pagecase{lc $_} @@ -449,8 +405,16 @@ sub cgi_editpage ($$) { #{{{ if (! @page_locs) { # hmm, someone else made the page in the # meantime? - redirect($q, "$config{url}/".htmlpage($page)); - return; + if ($form->submitted eq "Preview") { + # let them go ahead with the edit + # and resolve the conflict at save + # time + @page_locs=$page; + } + else { + redirect($q, "$config{url}/".htmlpage($page)); + return; + } } my @editable_locs = grep { @@ -495,7 +459,6 @@ sub cgi_editpage ($$) { #{{{ } showform($form, \@buttons, $session, $q); - saveindex(); } else { # save page @@ -573,7 +536,7 @@ sub cgi_editpage ($$) { #{{{ # Prevent deadlock with post-commit hook by # signaling to it that it should not try to - # do anything (except send commit mails). + # do anything. disable_commit_hook(); $conflict=rcs_commit($file, $message, $form->field("rcsinfo"), @@ -586,10 +549,6 @@ sub cgi_editpage ($$) { #{{{ # may have been committed while the post-commit hook was # disabled. require IkiWiki::Render; - # Reload index, since the first time it's loaded is before - # the wiki is locked, and things may have changed in the - # meantime. - loadindex(); refresh(); saveindex(); @@ -661,14 +620,9 @@ sub cgi (;$$) { #{{{ } } - # Things that do not need a session. - if ($do eq 'recentchanges') { - cgi_recentchanges($q); - return; - } - # Need to lock the wiki before getting a session. lockwiki(); + loadindex(); if (! $session) { $session=cgi_getsession($q);