From 4ea3cd880abb0b60f95585ba7ea238ae0d4f7e36 Mon Sep 17 00:00:00 2001 From: joey Date: Sat, 5 May 2007 16:17:10 +0000 Subject: web commit by http://mem.myopenid.com/: Add implementation code --- .../supporting_comments_via_disussion_pages.mdwn | 104 +++++++++++++-------- 1 file changed, 64 insertions(+), 40 deletions(-) (limited to 'doc') diff --git a/doc/todo/supporting_comments_via_disussion_pages.mdwn b/doc/todo/supporting_comments_via_disussion_pages.mdwn index e1f4f2786..95243d605 100644 --- a/doc/todo/supporting_comments_via_disussion_pages.mdwn +++ b/doc/todo/supporting_comments_via_disussion_pages.mdwn @@ -58,69 +58,93 @@ content to the old one. >> Figured it out. Can you comment on the code below? Thanks. -- [[MarceloMagallon]] +So, I have some code, included below. For some reason that I don't quite get it's not updating the wiki page after a submit. Maybe it's something silly on my side... + +What I ended up doing is write something like this to the page: + + [[blogcomment from="""Username""" timestamp="""12345""" subject="""Some text""" text="""the text of the comment"""]] + +Each comment is processed to a
with a
and the text inside it. In this way the comments can be styled using CSS. + +-- [[MarceloMagallon]] + +# Code + + #!/usr/bin/perl + package IkiWiki::Plugin::comments; + + use warnings; + use strict; + use IkiWiki '1.02'; + + sub import { #{{{ + hook(type => "formbuilder_setup", id => "comments", + call => \&formbuilder_setup); + hook(type => "preprocess", id => "blogcomment", + call => \&preprocess); + } # }}} + sub formbuilder_setup (@) { #{{{ my %params=@_; my $cgi = $params{cgi}; - my $form = $params{form}; + my $form = $params{form}; my $session = $params{session}; + my ($page)=$form->field('page'); + $page=IkiWiki::titlepage(IkiWiki::possibly_foolish_untaint($page)); + # XXX: This needs something to make it blog specific - unless ($cgi->param('page') =~ m{/discussion$} && + unless ($page =~ m{/discussion$} && $cgi->param('do') eq 'edit' && - ! defined $form->{title}) + ! exists $form->{title}) { return; } - $form->template(IkiWiki::template_file("makeblogcomment.tmpl")); - $form->field(name => "blogcomment", type => "textarea", rows => 20, + if (! $form->submitted) + { + $form->template(IkiWiki::template_file("makeblogcomment.tmpl")); + $form->field(name => "blogcomment", type => "textarea", rows => 20, cols => 80); + return; + } - my ($page)=$form->field('page'); my $content=""; if (exists $pagesources{$page}) { $content=readfile(srcfile($pagesources{$page})); $content.="\n\n"; } - $content.="----\n\n"; - my $name=$session->param('name'); - $name||="Anonymous"; - $content.=sprintf(gettext("From: %s\n\n"), $name); - $content.=sprintf(gettext("Date: %s\n\n"), scalar(localtime)); - if (defined $cgi->param('comments')) - { - $content.=sprintf(gettext("Subject: %s\n\n"), - $cgi->param('comments')); - } - $content.=$cgi->param('blogcomment'); + my $name=defined $session->param('name') ? + $session->param('name') : gettext('Anonymous'); + my $timestamp=time; + my $subject=defined $cgi->param('comments') ? + $cgi->param('comments') : ''; + my $comment=$cgi->param('blogcomment'); + + $content.=qq{[[blogcomment from="""$name""" timestamp="""$timestamp""" subject="""$subject""" text="""$comment"""]]\n\n}; $content=~s/\n/\r\n/g; $form->field(name => "editcontent", value => $content, force => 1); } # }}} -The above produces a page that looks like this: - - From: Marcelo - - Date: Fri Apr 27 21:16:27 2007 - - Subject: Pi - - 3.14 - - ---- - - From: Marcelo - - Date: Fri Apr 27 21:20:21 2007 - - Subject: - - A comment... + sub preprocess (@) { #{{{ + my %params=@_; -Questions: + my ($text, $date, $from, $subject, $r); - * Notice how this assumes that the page it's writing to is in mdwn format. + $text=IkiWiki::preprocess($params{page}, $params{destpage}, + IkiWiki::filter($params{page}, $params{text})); + $from=exists $params{from} ? $params{from} : gettext("Anonymous"); + $date=localtime($params{timestamp}) if exists $params{timestamp}; + $subject=$params{subject} if exists $params{subject}; - * What to do about the bit marked XXX? + $r = qq{
\n}; + $r .= '
' . gettext("From") . "
$from
\n" if defined $from; + $r .= '
' . gettext("Date") . "
$date
\n" if defined $date; + $r .= '
' . gettext("Subject") . "
$subject
\n" + if defined $subject; + $r .= "
\n" . $text . "
\n"; - * What about special formatting? Is mdwn enough? + return $r; + } # }}} + + 1; \ No newline at end of file -- cgit v1.2.3