- Add Discussion links to the button bar, these will automatically create

/Discussion subpages.
- Fix linking to DNE pages in some edge cases.
- Fix --rebuild (oops)
- Fix propigation of "from" field trru the login process when creating a
  new page.a
- Ideas for change notification.
master
joey 2006-03-13 00:52:57 +00:00
parent f4a6a03de6
commit 2d4bf757fb
5 changed files with 69 additions and 16 deletions

View File

@ -4,16 +4,32 @@
to point to it, but will forget to update the linkbacks in Foo/Baz. to point to it, but will forget to update the linkbacks in Foo/Baz.
And if Foo/Bar/Baz is then removed, it forgets to update Foo/Bar to link And if Foo/Bar/Baz is then removed, it forgets to update Foo/Bar to link
back to Foo/Baz. back to Foo/Baz.
Basically this makes creating new pages painful, top of TODO list..
* Foo/Bar/Baz shows up as Bar/Baz in the linkbacks on page Foo/Bar. Should * Foo/Bar/Baz shows up as Bar/Baz in the linkbacks on page Foo/Bar. Should
show as just Baz there. show as just Baz there.
* If I try to do a web commit, to a svn+ssh repo, it fails with * If I try to do a web commit, to a svn+ssh repo, it fails with
"Host key verification failed." "Host key verification failed."
I think that the setuid isn't fully taking; it should be running as me, I think that the setuid isn't fully taking; it should be running as me,
but commit log shows www-data. So maybe it has the wrong username? but commit log shows www-data. So maybe it has the wrong username? Or
EUID/Real UID screwage.
* Can't put the source in a directory named .source; the page finder skips * Can't put the source in a directory named .source; the page finder skips
that due to too broad exclusion of any dotfile in a path. that due to too broad exclusion of any dotfile in a path.
* RecentChanges is a regular page, perhaps it should be automatically replaced with a link to the [[CGI]]? * RecentChanges is a regular page, perhaps it should be automatically
replaced with a link to the [[CGI]]?
* [[ikiwiki]] should go to the same place as [[index]] (on this wiki). * [[ikiwiki]] should go to the same place as [[index]] (on this wiki).
* There's no way to escape a [[WikiLink]] when discussing one on a wiki. * There's no way to escape a [[WikiLink]] when discussing one on a wiki.
* Wikilinks are even expanded in the middle of [[MarkDown]] code blocks, and probably shouldn't be (nor in blockquotes?) * Wikilinks are even expanded in the middle of [[MarkDown]] code blocks,
* RecentChanges is supposed to linkify WikiNames and it does, but only if the user's page exists. It doesn't add a ?link to a noneistant page to aid creating it. and probably shouldn't be (nor in blockquotes?)
Hmm, the best way to fix this would be to add WikiLink support into
markdown, but that will probably be a bear. I guess the question is how
common "[[ ]]" is, and maybe we should just provide a way to escape a
wikilink..
Fixed bugs:
* RecentChanges is supposed to linkify WikiNames and it does, but only if
the user's page exists. It doesn't add a ?link to a noneistant page to
aid creating it. (Fixed. -- [[Joey]])

View File

@ -58,6 +58,12 @@ Currently implemented:
Can optionally be configured to allow only registered users to post Can optionally be configured to allow only registered users to post
pages; online user registration form, etc. pages; online user registration form, etc.
* Discussion pages
Thanks to subpages, every page can easily and automatically have a
/Discussion subpage. By default, these links are included in the
[[templates]] for each page.
---- ----
It also has lots of [[TODO]] items and [[Bugs]]. This wiki is not ready for production! It also has lots of [[TODO]] items and [[Bugs]]. This wiki is not ready for production!

View File

@ -8,7 +8,16 @@
## recentchanges ## recentchanges
Should support RSS for notification of new and changed pages. * Should support RSS for notification of new and changed pages.
This can be a static rss file that is generated when the moo
is built. (As long as all changes to all pages is ok.)
* Should support mail notification of new and changed pages.
Hmm, should be easy to implement this.. it runs as a svn post-cookit hook
already, so just look at the userdb, svnlook at what's changed, and send
mails to people who have subscribed.
## docs ## docs
@ -44,4 +53,12 @@ case.
Make the html valid. Add css. Make the html valid. Add css.
## sigs
Need a way to sign name in page that's easier to type than "-- [[ Joey ]]"
and that includes the date.
What syntax do other wikis use for this? I'm considering "[[ -- ]]" (with
spaces removed) as it has a nice nmemonic.
## [[Bugs]] ## [[Bugs]]

34
ikiwiki
View File

@ -27,6 +27,7 @@ my $cgiurl="";
my $historyurl=""; my $historyurl="";
my $svn=1; my $svn=1;
my $anonok=0; my $anonok=0;
my $rebuild=0;
sub usage { #{{{ sub usage { #{{{
die "usage: ikiwiki [options] source templates dest\n"; die "usage: ikiwiki [options] source templates dest\n";
@ -177,11 +178,12 @@ sub isinlinableimage ($) { #{{{
sub htmllink { #{{{ sub htmllink { #{{{
my $page=shift; my $page=shift;
my $link=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); 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 # 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 # was also added and isn't yet rendered! Note that this bug is
@ -191,12 +193,17 @@ sub htmllink { #{{{
$bestlink=htmlpage($bestlink); $bestlink=htmlpage($bestlink);
} }
if (! grep { $_ eq $bestlink } values %renderedfiles) { if (! grep { $_ eq $bestlink } values %renderedfiles) {
return "<a href=\"$cgiurl?do=create&page=$link&from=$page\">?</a>$link" if (! $createsubpage) {
return "<a href=\"$cgiurl?do=create&page=$link&from=$page\">?</a>$link"
}
else {
return "<a href=\"$cgiurl?do=create&page=$page/$link\">?</a>$link"
}
} }
$bestlink=File::Spec->abs2rel($bestlink, dirname($page)); $bestlink=File::Spec->abs2rel($bestlink, dirname($page));
if (! $noimagelink && isinlinableimage($bestlink)) { if (! $noimageinline && isinlinableimage($bestlink)) {
return "<img src=\"$bestlink\">"; return "<img src=\"$bestlink\">";
} }
return "<a href=\"$bestlink\">$link</a>"; return "<a href=\"$bestlink\">$link</a>";
@ -271,7 +278,7 @@ sub parentlinks ($) { #{{{
sub indexlink () { #{{{ sub indexlink () { #{{{
return "<a href=\"$url\">$wikiname</a>"; return "<a href=\"$url\">$wikiname</a>";
} #}}} } #}}}
sub finalize ($$) { #{{{ sub finalize ($$) { #{{{
my $content=shift; my $content=shift;
my $page=shift; my $page=shift;
@ -301,6 +308,7 @@ sub finalize ($$) { #{{{
parentlinks => [parentlinks($page)], parentlinks => [parentlinks($page)],
content => $content, content => $content,
backlinks => [backlinks($page)], backlinks => [backlinks($page)],
discussionlink => htmllink($page, "Discussion", 1, 1),
); );
return $template->output; return $template->output;
@ -312,8 +320,11 @@ sub check_overwrite ($$) { #{{{
my $dest=shift; my $dest=shift;
my $src=shift; my $src=shift;
if (! exists $renderedfiles{$src} && -e $dest) { if (! exists $renderedfiles{$src} && -e $dest && ! $rebuild) {
error("$dest exists and was not rendered from $src before, not overwriting"); error("$dest exists and was rendered from ".
join(" ",(grep { $renderedfiles{$_} eq $dest } keys
%renderedfiles)).
", not from $src before not overwriting");
} }
} #}}} } #}}}
@ -757,7 +768,7 @@ sub cgi_signin ($$) { #{{{
eval q{use CGI::FormBuilder}; eval q{use CGI::FormBuilder};
my $form = CGI::FormBuilder->new( my $form = CGI::FormBuilder->new(
title => "$wikiname signin", title => "$wikiname signin",
fields => [qw(do page name password confirm_password email)], fields => [qw(do page from name password confirm_password email)],
header => 1, header => 1,
method => 'POST', method => 'POST',
validate => { validate => {
@ -777,6 +788,7 @@ sub cgi_signin ($$) { #{{{
$form->field(name => "name", required => 0); $form->field(name => "name", required => 0);
$form->field(name => "do", type => "hidden"); $form->field(name => "do", type => "hidden");
$form->field(name => "page", 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 => "password", type => "password", required => 0);
$form->field(name => "confirm_password", type => "password", required => 0); $form->field(name => "confirm_password", type => "password", required => 0);
$form->field(name => "email", required => 0); $form->field(name => "email", required => 0);
@ -850,7 +862,8 @@ sub cgi_signin ($$) { #{{{
$form->field("do") ne 'signin') { $form->field("do") ne 'signin') {
print $q->redirect( print $q->redirect(
"$cgiurl?do=".$form->field("do"). "$cgiurl?do=".$form->field("do").
"&page=".$form->field("page")); "&page=".$form->field("page").
"&from=".$form->field("from"));;
} }
else { else {
print $q->redirect($url); print $q->redirect($url);
@ -1035,7 +1048,7 @@ sub cgi_editpage ($$) { #{{{
# The trailing question mark tries to avoid broken # The trailing question mark tries to avoid broken
# caches and get the most recent version of the page. # caches and get the most recent version of the page.
print $q->redirect("$url/".htmlpage($page)."?"); print $q->redirect("$url/".htmlpage($page)."?updated");
} }
} #}}} } #}}}
@ -1085,7 +1098,6 @@ sub cgi () { #{{{
} #}}} } #}}}
# main {{{ # main {{{
my $rebuild=0;
my $wrapper=0; my $wrapper=0;
if (grep /^-/, @ARGV) { if (grep /^-/, @ARGV) {
eval {use Getopt::Long}; eval {use Getopt::Long};

View File

@ -21,6 +21,8 @@
<a href="<TMPL_VAR HISTORYURL>">History</a> <a href="<TMPL_VAR HISTORYURL>">History</a>
</TMPL_IF> </TMPL_IF>
<TMPL_VAR DISCUSSIONLINK><br>
<hr> <hr>
<TMPL_VAR CONTENT> <TMPL_VAR CONTENT>
<hr> <hr>