web commit by http://mem.myopenid.com/: Add implementation code

master
joey 2007-05-05 16:17:10 +00:00
parent b9f553ef42
commit 4ea3cd880a
1 changed files with 66 additions and 42 deletions

View File

@ -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 <div> with a <dt> 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:
sub preprocess (@) { #{{{
my %params=@_;
From: Marcelo
my ($text, $date, $from, $subject, $r);
$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};
$r = qq{<div class="blogcomment"><dl>\n};
$r .= '<dt>' . gettext("From") . "</dt><dd>$from</dd>\n" if defined $from;
$r .= '<dt>' . gettext("Date") . "</dt><dd>$date</dd>\n" if defined $date;
$r .= '<dt>' . gettext("Subject") . "</dt><dd>$subject</dd>\n"
if defined $subject;
$r .= "</dl>\n" . $text . "</div>\n";
return $r;
} # }}}
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...
Questions:
* Notice how this assumes that the page it's writing to is in mdwn format.
* What to do about the bit marked XXX?
* What about special formatting? Is mdwn enough?
1;