web commit by http://mem.myopenid.com/: Add implementation code
parent
b9f553ef42
commit
4ea3cd880a
|
@ -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;
|
Loading…
Reference in New Issue