]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/CGI.pm
Allow colons in URLs after the first slash
[git.ikiwiki.info.git] / IkiWiki / CGI.pm
index 55ee5d86ae1a61ea7c28750b18d2c8f6dd3924e7..87cb9c3f3f12c637005cc06ecbbc04b18c5736c5 100644 (file)
@@ -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 ($$) { #{{{
@@ -401,9 +354,11 @@ sub cgi_editpage ($$) { #{{{
                });
                $form->tmpl_param("page_preview",
                        htmlize($page, $type,
-                       linkify($page, "",
-                       preprocess($page, $page,
-                       filter($page, $page, $content), 0, 1))));
+                       linkify($page, "/",
+                       preprocess($page, "/",
+                       filter($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);