| blib/lib/XML/Atom/Feed/JavaScript.pm | |||
|---|---|---|---|
| Criterion | Covered | Total | % | 
| statement | 9 | 31 | 29.0 | 
| branch | 0 | 4 | 0.0 | 
| condition | 0 | 3 | 0.0 | 
| subroutine | 3 | 5 | 60.0 | 
| pod | n/a | ||
| total | 12 | 43 | 27.9 | 
| line | stmt | bran | cond | sub | pod | time | code | 
|---|---|---|---|---|---|---|---|
| 1 | package XML::Atom::Feed::JavaScript; | ||||||
| 2 | |||||||
| 3 | 3 | 3 | 2607 | use strict; | |||
| 3 | 7 | ||||||
| 3 | 116 | ||||||
| 4 | 3 | 3 | 17 | use warnings; | |||
| 3 | 6 | ||||||
| 3 | 113 | ||||||
| 5 | 3 | 3 | 24 | use base qw( XML::Atom::Feed ); | |||
| 3 | 4 | ||||||
| 3 | 2880 | ||||||
| 6 | |||||||
| 7 | our $VERSION = 0.5; | ||||||
| 8 | |||||||
| 9 | =head1 NAME | ||||||
| 10 | |||||||
| 11 | XML::Atom::Feed::JavaScript - Atom syndication with JavaScript | ||||||
| 12 | |||||||
| 13 | =head1 SYNOPSIS | ||||||
| 14 | |||||||
| 15 | ## get an Atom feed from the network | ||||||
| 16 | |||||||
| 17 | use XML::Atom::Client | ||||||
| 18 | use XML::Atom::Feed::JavaScript; | ||||||
| 19 | |||||||
| 20 | my $client = XML::Atom::Client->new(); | ||||||
| 21 | my $feed = $client->getFeed( 'http://example.com/atom.xml' ); | ||||||
| 22 | print $feed->asJavascript(); | ||||||
| 23 | |||||||
| 24 | ## or get an atom feed from disk | ||||||
| 25 | |||||||
| 26 | use XML::Atom::Feed::JavaScript; | ||||||
| 27 | |||||||
| 28 | my $feed = XML::Atom::Feed->new( Stream => 'atom.xml' ); | ||||||
| 29 | print $feed->asJavascript(); | ||||||
| 30 | |||||||
| 31 | =head1 DESCRIPTION | ||||||
| 32 | |||||||
| 33 | XML::Atom::Feed::JavaScript exports an additional function into the XML::Atom | ||||||
| 34 | package for outputting Atom feeds as javascript. | ||||||
| 35 | |||||||
| 36 | =head1 FUNCTIONS | ||||||
| 37 | |||||||
| 38 | =head2 asJavascript() | ||||||
| 39 | |||||||
| 40 | Returns a XML::Atom::Feed object as a string of JavaScript code. If | ||||||
| 41 | you want to limit the amount of entries you can pass in an integer argument: | ||||||
| 42 | |||||||
| 43 | ## limit to first 10 entries | ||||||
| 44 | my $javascript = $feed->asJavascript( 10 ); | ||||||
| 45 | |||||||
| 46 | =cut | ||||||
| 47 | |||||||
| 48 | sub XML::Atom::Feed::asJavascript { | ||||||
| 49 | 0 | 0 | 0 | my ( $feed, $max ) = @_ or die q( can't get feed ); | |||
| 50 | |||||||
| 51 | 0 | my @entries = $feed->entries(); | |||||
| 52 | 0 | my $items = scalar @entries; | |||||
| 53 | |||||||
| 54 | 0 | 0 | 0 | if ( not $max or $max > $items ) { $max = $items; } | |||
| 0 | |||||||
| 55 | |||||||
| 56 | ## open javascript section | ||||||
| 57 | 0 | my $output = _jsPrint( ' ' );
  | |||||
| 58 | 0 | $output   .= _jsPrint( ' ' . 
  | |||||
| 59 | $feed->title() . '' ); | ||||||
| 60 | |||||||
| 61 | ## open our list | ||||||
| 62 | 0 | $output .= _jsPrint( ' 
 | |||||
| 63 | |||||||
| 64 | ## generate content for each item | ||||||
| 65 | 0 | foreach my $item ( @entries[ 0..$max - 1 ] ) { | |||||
| 66 | 0 | my $link = $item->link->href(); | |||||
| 67 | 0 | my $title = $item->title(); | |||||
| 68 | 0 | my $desc = $item->content->body(); | |||||
| 69 | 0 | my $data = <<"JAVASCRIPT_TEXT"; | |||||
| 70 |  | ||||||
| 71 | |||||||
| 72 | $title | ||||||
| 73 | |||||||
| 74 | $desc | ||||||
| 75 | |||||||
| 76 | JAVASCRIPT_TEXT | ||||||
| 77 | 0 | $output .= _jsPrint( $data ); | |||||
| 78 | } | ||||||
| 79 | |||||||
| 80 | ## close our item list, and return | ||||||
| 81 | 0 | $output .= _jsPrint( '' ); | |||||
| 82 | 0 | $output .= _jsPrint( '' ); | |||||
| 83 | 0 | return $output; | |||||
| 84 | } | ||||||
| 85 | |||||||
| 86 | |||||||
| 87 | sub _jsPrint { | ||||||
| 88 | 0 | 0 | my $string = shift; | ||||
| 89 | 0 | $string =~ s/"/\\"/g; | |||||
| 90 | 0 | $string =~ s/'/\\'/g; | |||||
| 91 | 0 | $string =~ s/\n//g; | |||||
| 92 | 0 | return( "document.write('$string');\n" ); | |||||
| 93 | } | ||||||
| 94 | |||||||
| 95 | =head1 AUTHORS | ||||||
| 96 | |||||||
| 97 | =over 4 | ||||||
| 98 | |||||||
| 99 | =item David Jacobs | ||||||
| 100 | |||||||
| 101 | =item Ed Summers | ||||||
| 102 | |||||||
| 103 | =item Brian Cassidy | ||||||
| 104 | |||||||
| 105 | =back | ||||||
| 106 | |||||||
| 107 | =cut | ||||||
| 108 | |||||||
| 109 | 1; |