comments: document what linkuser does
[ikiwiki.git] / IkiWiki / Plugin / comments.pm
index 29dc06f32c8907f37a178ef6710c7ca5f54a05fe..25f1b62f0ee207124069caaaeee0ec6c2c106d9d 100644 (file)
@@ -18,12 +18,13 @@ sub import { #{{{
        hook(type => "preprocess", id => 'comments', call => \&preprocess);
        hook(type => "sessioncgi", id => 'comment', call => \&sessioncgi);
        hook(type => "htmlize", id => "_comment", call => \&htmlize);
+       hook(type => "pagetemplate", id => "comments", call => \&pagetemplate);
        IkiWiki::loadplugin("inline");
        IkiWiki::loadplugin("mdwn");
 } # }}}
 
 sub htmlize { # {{{
-       eval { use IkiWiki::Plugin::mdwn; };
+       eval q{use IkiWiki::Plugin::mdwn};
        error($@) if ($@);
        return IkiWiki::Plugin::mdwn::htmlize(@_)
 } # }}}
@@ -48,7 +49,6 @@ sub preprocess (@) { #{{{
        $pagestate{$page}{comments}{comments} = defined $params{closed}
                ? (not IkiWiki::yesno($params{closed}))
                : 1;
-       $pagestate{$page}{comments}{allowhtml} = IkiWiki::yesno($params{allowhtml});
        $pagestate{$page}{comments}{allowdirectives} = IkiWiki::yesno($params{allowdirectives});
        $pagestate{$page}{comments}{commit} = defined $params{commit}
                ? IkiWiki::yesno($params{commit})
@@ -70,9 +70,9 @@ sub preprocess (@) { #{{{
 
        debug("page $params{page} => destpage $params{destpage}");
 
-       my $posts = '';
        unless (defined $params{inline} && !IkiWiki::yesno($params{inline})) {
-               eval { use IkiWiki::Plugin::inline; };
+               my $posts = '';
+               eval q{use IkiWiki::Plugin::inline};
                error($@) if ($@);
                my @args = (
                        pages => "internal($params{page}/_comment_*)",
@@ -90,10 +90,11 @@ sub preprocess (@) { #{{{
                push @args, feedshow => $params{feedshow} if defined $params{feedshow};
                push @args, timeformat => $params{timeformat} if defined $params{timeformat};
                push @args, feedonly => $params{feedonly} if defined $params{feedonly};
-               $posts = "\n" . IkiWiki::preprocess_inline(@args);
+               $posts = IkiWiki::preprocess_inline(@args);
+               $formtemplate->param("comments" => $posts);
        }
 
-       return $formtemplate->output . $posts;
+       return $formtemplate->output;
 } # }}}
 
 # FIXME: logic taken from editpage, should be common code?
@@ -106,6 +107,7 @@ sub getcgiuser ($) { # {{{
 } # }}}
 
 # FIXME: logic adapted from recentchanges, should be common code?
+# returns (author URL, pretty-printed version)
 sub linkuser ($) { # {{{
        my $user = shift;
        my $oiduser = eval { IkiWiki::openiduser($user) };
@@ -121,18 +123,6 @@ sub linkuser ($) { # {{{
        }
 } # }}}
 
-# FIXME: taken from IkiWiki::Plugin::editpage, should be common?
-sub checksessionexpiry ($$) { # {{{
-       my $session = shift;
-       my $sid = shift;
-
-       if (defined $session->param("name")) {
-               if (! defined $sid || $sid ne $session->id) {
-                       error(gettext("Your login session has expired."));
-               }
-       }
-} # }}}
-
 # Mostly cargo-culted from IkiWiki::plugin::editpage
 sub sessioncgi ($$) { #{{{
        my $cgi=shift;
@@ -187,7 +177,6 @@ sub sessioncgi ($$) { #{{{
        }
 
        my $allow_directives = $pagestate{$page}{comments}{allowdirectives};
-       my $allow_html = $pagestate{$page}{comments}{allowdirectives};
        my $commit_comments = defined $pagestate{$page}{comments}{commit}
                ? $pagestate{$page}{comments}{commit}
                : 1;
@@ -203,7 +192,6 @@ sub sessioncgi ($$) { #{{{
                htmllink($page, $page, 'ikiwiki/formatting',
                        noimageinline => 1,
                        linktext => 'FormattingHelp'),
-                       allowhtml => $allow_html,
                        allowdirectives => $allow_directives);
 
        if (not exists $pagesources{$page}) {
@@ -235,20 +223,14 @@ sub sessioncgi ($$) { #{{{
 
        unless ($allow_directives) {
                # don't allow new-style directives at all
-               $body =~ s/(^|[^\\])\[\[!/$1\\[[!/g;
+               $body =~ s/(^|[^\\])\[\[!/$1[[!/g;
 
                # don't allow [[ unless it begins an old-style
                # wikilink, if prefix_directives is off
-               $body =~ s/(^|[^\\])\[\[(?![^\n\s\]+]\]\])/$1\\[[!/g
+               $body =~ s/(^|[^\\])\[\[(?![^\n\s\]+]\]\])/$1[[!/g
                        unless $config{prefix_directives};
        }
 
-       unless ($allow_html) {
-               $body =~ s/&(\w|#)/&$1/g;
-               $body =~ s/</&lt;/g;
-               $body =~ s/>/&gt;/g;
-       }
-
        IkiWiki::run_hooks(sanitize => sub {
                # $fake is a possible location for this comment. We don't
                # know yet what the comment number *actually* is.
@@ -309,7 +291,7 @@ sub sessioncgi ($$) { #{{{
                # Let's get posting. We don't check_canedit here because
                # that somewhat defeats the point of this plugin.
 
-               checksessionexpiry($session, $cgi->param('sid'));
+               IkiWiki::checksessionexpiry($session, $cgi->param('sid'));
 
                # FIXME: check that the wiki is locked right now, because
                # if it's not, there are mad race conditions!
@@ -364,6 +346,21 @@ sub sessioncgi ($$) { #{{{
        exit;
 } #}}}
 
+sub pagetemplate (@) { #{{{
+       my %params = @_;
+
+       my $page = $params{page};
+       my $template = $params{template};
+
+       if ($template->query(name => 'comments')) {
+               my $comments = undef;
+
+               if (defined $comments && length $comments) {
+                       $template->param(name => $comments);
+               }
+       }
+} # }}}
+
 package IkiWiki::PageSpec;
 
 sub match_postcomment ($$;@) {