Changeset 1336

Show
Ignore:
Timestamp:
08/16/06 17:37:17
Author:
miyagawa
Message:

Add assets support to Widget::Simple

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plagger/lib/Plagger/Plugin/Widget/Simple.pm

    r1335 r1336  
    1212        $self, 
    1313        'publish.entry.fixup' => \&add, 
     14        'plugin.init'         => \&initialize, 
    1415    ); 
     16} 
     17 
     18sub initialize { 
     19    my($self, $context, $args) = @_; 
     20 
     21    if (my $name = $self->conf->{widget}) { 
     22        my $found; 
     23        $self->load_assets( 
     24            File::Find::Rule->name("$name.yaml"), 
     25            sub { 
     26                my $data = YAML::LoadFile(shift); 
     27                $self->{conf} = { %{$self->{conf}}, %$data }; 
     28                $found++; 
     29            }, 
     30        ); 
     31 
     32        unless ($found) { 
     33            $context->log(error => "Can't find widget for $name"); 
     34        } 
     35    } 
    1536} 
    1637 
     
    3253sub plugin { shift->{plugin} } 
    3354 
     55sub value { 
     56    my($self, $string, $args) = @_; 
     57 
     58    if ($string =~ /\$/) { # DWIM 
     59        $string = eval $string; 
     60        Plagger->context->log(error => $@) if $@; 
     61        utf8::encode($string) if utf8::is_utf8($string); 
     62    } 
     63 
     64    $string; 
     65} 
     66 
    3467sub html { 
    3568    my($self, $entry) = @_; 
     
    3871    my $args = { entry => $entry, feed => $self->{feed} }; 
    3972 
     73    if (my $append = $self->plugin->conf->{append}) { 
     74        $uri->path( $uri->path . $self->value($append, $args) ); 
     75    } 
     76 
    4077    if (my $query = $self->plugin->conf->{query}) { 
    41         my @query = map { 
    42             if ($query->{$_} =~ /\$/) { # DWIM 
    43                 $query->{$_} = eval $query->{$_}; 
    44                 Plagger->context->log(error => $@) if $@; 
    45             } 
    46             ($_ => $query->{$_}); 
    47         } sort keys %$query; 
    48         $uri->query_form(@query); 
     78        if (ref $query) { 
     79            my @query = map { 
     80                ($_ => $self->value($query->{$_}, $args)); 
     81            } sort keys %$query; 
     82            $uri->query_form(@query); 
     83        } else { 
     84            $query = $self->value($query, $args); 
     85            $uri->query($query); 
     86        } 
    4987    } 
    5088 
     
    5290 
    5391    my $content; 
    54     if ($self->plugin->conf->{content_dynamic}) { 
    55         $content = $self->plugin->templatize(\$self->plugin->conf->{content_dynamic}, $args); 
     92    if (my $template = $self->plugin->conf->{content_dynamic}) { 
     93        chomp $template; 
     94        $content = $self->plugin->templatize(\$template, $args); 
    5695    } else { 
    5796        $content = $self->plugin->conf->{content}; 
  • trunk/plagger/t/plugins/Widget-Simple/base.t

    r1335 r1336  
    6161<a href="http://www.example.com/">Entry from miyagawa</a> 
    6262 
     63=== Use del.icio.us asset 
     64--- input config 
     65plugins: 
     66  - module: Subscription::Config 
     67    config: 
     68      feed: 
     69        - file://$t::TestPlagger::BaseDir/t/samples/rss-full.xml 
     70  - module: Widget::Simple 
     71    config: 
     72      widget: delicious 
     73--- expected chomp 
     74<a href="http://del.icio.us/post?title=+%E3%82%BF%E3%82%A4%E3%83%97%E6%95%B0%E3%82%AB%E3%82%A6%E3%83%B3%E3%82%BF%E3%83%BC%E3%82%92%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E8%A1%A8%E7%A4%BA&amp;url=http%3A%2F%2Fsubtech.g.hatena.ne.jp%2Fmiyagawa%2F20060710%2F1152534733"><img src="http://del.icio.us/static/img/delicious.small.gif" alt="del.icio.us it!" style="border:0;vertical-align:middle" /></a> 
     75 
     76=== Use Hatena Bookmark asset 
     77--- input config 
     78plugins: 
     79  - module: Subscription::Config 
     80    config: 
     81      feed: 
     82        - file://$t::TestPlagger::BaseDir/t/samples/rss-full.xml 
     83  - module: Widget::Simple 
     84    config: 
     85      widget: hatena_bookmark 
     86--- expected chomp 
     87<a href="http://b.hatena.ne.jp/append?http://subtech.g.hatena.ne.jp/miyagawa/20060710/1152534733"><img src="http://b.hatena.ne.jp/images/append.gif" alt="Post to Hatena Bookmark" style="border:0;vertical-align:middle" /></a> 
     88 
     89=== Use Hatena Bookmark count asset 
     90--- input config 
     91plugins: 
     92  - module: Subscription::Config 
     93    config: 
     94      feed: 
     95        - file://$t::TestPlagger::BaseDir/t/samples/rss-full.xml 
     96  - module: Widget::Simple 
     97    config: 
     98      widget: hatena_bookmark_users 
     99--- expected chomp 
     100<a href="http://b.hatena.ne.jp/entry/http://subtech.g.hatena.ne.jp/miyagawa/20060710/1152534733"><img src="http://b.hatena.ne.jp/entry/image/normal/http://subtech.g.hatena.ne.jp/miyagawa/20060710/1152534733" style="border:0;vertical-align:middle" /></a>