X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/410c95a95a71949a644b268b7db68fa4cfaba6e9..fa14d781d9c07406f84bec5c13d2d8ea01bf11a8:/ikiwiki diff --git a/ikiwiki b/ikiwiki index 33d1ae709..8e22ebfac 100755 --- a/ikiwiki +++ b/ikiwiki @@ -27,6 +27,7 @@ my $cgiurl=""; my $historyurl=""; my $svn=1; my $anonok=0; +my $rebuild=0; sub usage { #{{{ die "usage: ikiwiki [options] source templates dest\n"; @@ -177,11 +178,12 @@ sub isinlinableimage ($) { #{{{ sub htmllink { #{{{ my $page=shift; my $link=shift; - my $noimagelink=shift; + my $noimageinline=shift; # don't turn links into inline html images + my $createsubpage=shift; # force creation of a subpage if page DNE my $bestlink=bestlink($page, $link); - return $link if $page eq $bestlink; + return $link if length $bestlink && $page eq $bestlink; # TODO BUG: %renderedfiles may not have it, if the linked to page # was also added and isn't yet rendered! Note that this bug is @@ -191,12 +193,17 @@ sub htmllink { #{{{ $bestlink=htmlpage($bestlink); } if (! grep { $_ eq $bestlink } values %renderedfiles) { - return "?$link" + if (! $createsubpage) { + return "?$link" + } + else { + return "?$link" + } } $bestlink=File::Spec->abs2rel($bestlink, dirname($page)); - if (! $noimagelink && isinlinableimage($bestlink)) { + if (! $noimageinline && isinlinableimage($bestlink)) { return ""; } return "$link"; @@ -271,7 +278,7 @@ sub parentlinks ($) { #{{{ sub indexlink () { #{{{ return "$wikiname"; } #}}} - + sub finalize ($$) { #{{{ my $content=shift; my $page=shift; @@ -301,6 +308,7 @@ sub finalize ($$) { #{{{ parentlinks => [parentlinks($page)], content => $content, backlinks => [backlinks($page)], + discussionlink => htmllink($page, "Discussion", 1, 1), ); return $template->output; @@ -312,8 +320,11 @@ sub check_overwrite ($$) { #{{{ my $dest=shift; my $src=shift; - if (! exists $renderedfiles{$src} && -e $dest) { - error("$dest exists and was not rendered from $src before, not overwriting"); + if (! exists $renderedfiles{$src} && -e $dest && ! $rebuild) { + error("$dest exists and was rendered from ". + join(" ",(grep { $renderedfiles{$_} eq $dest } keys + %renderedfiles)). + ", not from $src before not overwriting"); } } #}}} @@ -446,14 +457,19 @@ sub rcs_recentchanges ($) { #{{{ $state='body'; } elsif ($state eq 'body' && /$div/) { - print STDERR ">>$message[0]<<\n"; + my $committype="web"; if (defined $message[0] && - $message[0]=~/^web commit by (\w+)(.*)/) { - $user="$1 (web)"; - $message[0]=$2; + $message[0]->{line}=~/^web commit by (\w+):?(.*)/) { + $user="$1"; + $message[0]->{line}=$2; + } + else { + $committype="svn"; } - push @ret, { rev => $rev, user => $user, + push @ret, { rev => $rev, + user => htmllink("", $user, 1), + committype => $committype, when => $when, message => [@message], pages => [@pages] } if @pages; return @ret if @ret >= $num; @@ -626,7 +642,7 @@ sub gen_wrapper ($$) { #{{{ push @params, "--cgiurl=$cgiurl" if $cgiurl; push @params, "--historyurl=$historyurl" if $historyurl; push @params, "--anonok" if $anonok; - my $params=join(" ", @params); + my $params=join(" ", map { "\'$_\'" } @params); my $call=''; foreach my $p ($this, $this, @params) { $call.=qq{"$p", }; @@ -716,7 +732,7 @@ sub cgi_recentchanges ($) { #{{{ print $q->header, $template->output; } #}}} -sub userinfo_get ($$) { #{{ +sub userinfo_get ($$) { #{{{ my $user=shift; my $field=shift; @@ -727,9 +743,9 @@ sub userinfo_get ($$) { #{{ return ""; } return $userdata->{$user}->{$field}; -} #}} +} #}}} -sub userinfo_set ($$) { #{{ +sub userinfo_set ($$) { #{{{ my $user=shift; my $info=shift; @@ -743,7 +759,7 @@ sub userinfo_set ($$) { #{{ my $ret=Storable::lock_store($userdata, "$srcdir/.ikiwiki/userdb"); umask($oldmask); return $ret; -} #}} +} #}}} sub cgi_signin ($$) { #{{{ my $q=shift; @@ -752,7 +768,7 @@ sub cgi_signin ($$) { #{{{ eval q{use CGI::FormBuilder}; my $form = CGI::FormBuilder->new( title => "$wikiname signin", - fields => [qw(do page name password confirm_password email)], + fields => [qw(do page from name password confirm_password email)], header => 1, method => 'POST', validate => { @@ -772,6 +788,7 @@ sub cgi_signin ($$) { #{{{ $form->field(name => "name", required => 0); $form->field(name => "do", type => "hidden"); $form->field(name => "page", type => "hidden"); + $form->field(name => "from", type => "hidden"); $form->field(name => "password", type => "password", required => 0); $form->field(name => "confirm_password", type => "password", required => 0); $form->field(name => "email", required => 0); @@ -845,7 +862,8 @@ sub cgi_signin ($$) { #{{{ $form->field("do") ne 'signin') { print $q->redirect( "$cgiurl?do=".$form->field("do"). - "&page=".$form->field("page")); + "&page=".$form->field("page"). + "&from=".$form->field("from"));; } else { print $q->redirect($url); @@ -912,8 +930,10 @@ sub cgi_editpage ($$) { #{{{ fields => [qw(do from page content comments)], header => 1, method => 'POST', - validate => {}, - required => [qw{}], + validate => { + content => '/.+/', + }, + required => [qw{content}], javascript => 0, params => $q, action => $q->request_uri, @@ -935,6 +955,10 @@ sub cgi_editpage ($$) { #{{{ $form->field(name => "content", type => "textarea", rows => 20, cols => 80); + if ($form->submitted eq "Cancel") { + print $q->redirect("$url/".htmlpage($page)); + return; + } if (! $form->submitted || ! $form->validate) { if ($form->field("do") eq "create") { if (exists $pagesources{lc($page)}) { @@ -982,7 +1006,7 @@ sub cgi_editpage ($$) { #{{{ $form->tmpl_param("can_commit", $svn); $form->tmpl_param("indexlink", indexlink()); - print $form->render(submit => ["Save Page"]); + print $form->render(submit => ["Save Page", "Cancel"]); } else { # save page @@ -1022,7 +1046,9 @@ sub cgi_editpage ($$) { #{{{ refresh(); } - print $q->redirect("$url/".htmlpage($page)); + # The trailing question mark tries to avoid broken + # caches and get the most recent version of the page. + print $q->redirect("$url/".htmlpage($page)."?updated"); } } #}}} @@ -1072,18 +1098,17 @@ sub cgi () { #{{{ } #}}} # main {{{ -my $rebuild=0; my $wrapper=0; if (grep /^-/, @ARGV) { eval {use Getopt::Long}; GetOptions( "wikiname=s" => \$wikiname, "verbose|v" => \$verbose, - "rebuild" => \$rebuild, - "wrapper" => \$wrapper, + "rebuild!" => \$rebuild, + "wrapper!" => \$wrapper, "svn!" => \$svn, "anonok!" => \$anonok, - "cgi" => \$cgi, + "cgi!" => \$cgi, "url=s" => \$url, "cgiurl=s" => \$cgiurl, "historyurl=s" => \$historyurl,