},
comments_pagespec => {
type => 'pagespec',
- example => 'blog/* and *!/Discussion',
+ example => 'blog/* and !*/Discussion',
description => 'PageSpec of pages where comments are allowed',
link => 'ikiwiki/PageSpec',
safe => 1,
my $commentip;
my $commentauthor;
my $commentauthorurl;
+ my $commentopenid;
if (defined $params{username}) {
$commentuser = $params{username};
- ($commentauthorurl, $commentauthor) =
- linkuser($params{username});
+
+ my $oiduser = eval { IkiWiki::openiduser($commentuser) };
+
+ if (defined $oiduser) {
+ # looks like an OpenID
+ $commentauthorurl = $commentuser;
+ $commentauthor = $oiduser;
+ $commentopenid = $commentuser;
+ }
+ else {
+ $commentauthorurl = IkiWiki::cgiurl(
+ do => 'commenter',
+ page => (length $config{userdir}
+ ? "$config{userdir}/$commentuser"
+ : "$commentuser"));
+
+ $commentauthor = $commentuser;
+ }
}
else {
if (defined $params{ip}) {
}
$pagestate{$page}{comments}{commentuser} = $commentuser;
+ $pagestate{$page}{comments}{commentopenid} = $commentopenid;
$pagestate{$page}{comments}{commentip} = $commentip;
$pagestate{$page}{comments}{commentauthor} = $commentauthor;
$pagestate{$page}{comments}{commentauthorurl} = $commentauthorurl;
$pagestate{$page}{meta}{title} = $params{subject};
}
- my $baseurl = urlto($params{destpage}, undef, 1);
- my $anchor = "";
if ($params{page} =~ m/\/(\Q$config{comments_pagename}\E\d+)$/) {
- $anchor = $1;
+ $pagestate{$page}{meta}{permalink} = urlto(IkiWiki::dirname($params{page}), undef, 1).
+ "#".$params{page};
}
- $pagestate{$page}{meta}{permalink} = "${baseurl}#${anchor}";
eval q{use Date::Parse};
if (! $@) {
$IkiWiki::pagectime{$page} = $time if defined $time;
}
- # FIXME: hard-coded HTML (although it's just to set an ID)
- return "<div id=\"$anchor\">$content</div>" if $anchor;
return $content;
}
}
}
-# FIXME: basically the same logic as recentchanges
-# returns (author URL, pretty-printed version)
-sub linkuser ($) {
- my $user = shift;
- my $oiduser = eval { IkiWiki::openiduser($user) };
-
- if (defined $oiduser) {
- return ($user, $oiduser);
- }
- # FIXME: it'd be good to avoid having such a link for anonymous
- # posts
- else {
- return (IkiWiki::cgiurl(
- do => 'commenter',
- page => (length $config{userdir}
- ? "$config{userdir}/$user"
- : "$user")
- ), $user);
- }
-}
-
# Mostly cargo-culted from IkiWiki::plugin::editpage
sub sessioncgi ($$) {
my $cgi=shift;
action => $config{cgiurl},
header => 0,
table => 0,
- template => scalar IkiWiki::template_params('comments_form.tmpl'),
- # wtf does this do in editpage?
- wikiname => $config{wikiname},
+ template => scalar IkiWiki::template_params('editcomment.tmpl'),
);
IkiWiki::decode_form_utf8($form);
content => $preview);
});
- my $template = template("comments_display.tmpl");
+ my $template = template("comment.tmpl");
$template->param(content => $preview);
$template->param(title => $form->field('subject'));
$template->param(ctime => displaytime(time));
# breaks it or something
error($conflict) if defined $conflict;
- # Bounce back to where we were, but defeat broken caches
- my $anticache = "?updated=$page/$config{comments_pagename}$i";
- IkiWiki::redirect($cgi, urlto($page, undef, 1).$anticache);
+ # Jump to the new comment on the page.
+ IkiWiki::redirect($cgi, urlto($page, undef, 1)."#$location");
}
else {
IkiWiki::showform ($form, \@buttons, $session, $cgi,
my $page = $params{page};
my $template = $params{template};
+ my $shown = ($template->query(name => 'commentslink') ||
+ $template->query(name => 'comments')) &&
+ commentsshown($page);
if ($template->query(name => 'comments')) {
- my $shown = commentsshown($page);
-
my $comments = undef;
if ($shown) {
$comments = IkiWiki::preprocess_inline(
pages => "internal($page/$config{comments_pagename}*)",
- template => 'comments_display',
+ template => 'comment',
show => 0,
reverse => 'yes',
page => $page,
}
if ($shown && commentsopen($page)) {
- my $commenturl = IkiWiki::cgiurl(do => 'comment',
+ my $addcommenturl = IkiWiki::cgiurl(do => 'comment',
page => $page);
- $template->param(commenturl => $commenturl);
+ $template->param(addcommenturl => $addcommenturl);
}
}
# the link. But, to update the number, blog pages
# would have to update whenever comments of any inlines
# page are added, which is not currently done.
- if (commentsshown($page)) {
+ if ($shown) {
$template->param(commentslink =>
htmllink($page, $params{destpage}, $page,
linktext => gettext("Comments"),
$pagestate{$page}{comments}{commentuser});
}
+ if ($template->query(name => 'commentopenid')) {
+ $template->param(commentopenid =>
+ $pagestate{$page}{comments}{commentopenid});
+ }
+
if ($template->query(name => 'commentip')) {
$template->param(commentip =>
$pagestate{$page}{comments}{commentip});