The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Plagger::Plugin::Widget::Delicious;
use strict;
use base qw( Plagger::Plugin );

use Encode;
use HTML::Entities;
use URI;

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'publish.entry.fixup' => \&add,
    );
}

sub add {
    my($self, $context, $args) = @_;
    $args->{entry}->add_widget($self);
}

sub html {
    my($self, $entry) = @_;
    my $uri = URI->new('http://del.icio.us/' . $self->conf->{username});
    my %query;
    $query{url}         = $entry->permalink;
    $query{description} = encode('utf-8', $entry->title);
    $query{tags}        = $self->conf->{tags} if $self->conf->{tags};
    $query{jump}        = 'doclose' if $self->conf->{one_click_post};

    $uri->query_form(%query);

    my $url = HTML::Entities::encode($uri->as_string);
    return qq(<a href="$url"><img src="http://del.icio.us/static/img/delicious.small.gif" alt="del.icio.us it!" style="border:0;vertical-align:middle" /></a>);
}

1;

__END__

=head1 NAME

Plagger::Plugin::Widget::Delicious - Widget to post to del.icio.us

=head1 SYNOPSIS

   module: Widget::Delicious
   config:
     username: miyagawa

=head1 DESCRIPTION

This plugin creates a widget to post to del.icio.us in the Publish
modules output.

=head1 CONFIG

=over 4

=item username

Your del.icio.us username. Required.

=item tags

Preset tags to tag the post.

  tags: foo bar

will set I<foo bar> as a predefined tag to use. Optional.

=item one_click_post

Flag to indicate that clicking the widget will automatically post the
item, without showing the form. Defaults to 0. (Optional)

=back

=head1 AUTHOR

Tatsuhiko Miyagawa

=head1 SEE ALSO

L<Plagger>, L<http://del.icio.us/>

=cut