X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fupstream%2Fblosxom-plugins.git;a=blobdiff_plain;f=gavinc%2Fstorydate;h=78c2df15a994ffea7023afa3836cb51e656cce37;hp=0341ea0d2dc0dd3a4a87f197481fa60802142ee0;hb=ad3af3cccc6f2e50b250bd3ca8d98e2a1a58e994;hpb=2febc6d9b0a2d9d598461aed8a4c284d9ae43bbc diff --git a/gavinc/storydate b/gavinc/storydate index 0341ea0..78c2df1 100644 --- a/gavinc/storydate +++ b/gavinc/storydate @@ -2,7 +2,7 @@ # Author(s): Gavin Carr # (based on work by Frank Hecker # and Bob Schumaker ) -# Version: 0.001000 +# Version: 0.002000 # Documentation: See the bottom of this file or type: perldoc storydate package storydate; @@ -20,6 +20,7 @@ use File::stat; my @strftime_modules = qw(Time::Piece Date::Format POSIX); # --------------------------------- +# __END_CONFIG__ # Package variables use vars qw( @@ -29,14 +30,16 @@ use vars qw( $story_mtime_iso8601 $now_rfc822 $now_iso8601 + $latest_rfc822 + $latest_iso8601 %strftime_formats ); %strftime_formats = ( - rfc822 => "%a, %d %b %Y %T %z", + rfc822 => "%a, %d %b %Y %T %z", # ISO 8601 format (localtime, including time zone offset) # Format is YYYY-MM-DDThh:mm:ssTZD per http://www.w3.org/TR/NOTE-datetime - iso8601 => "%Y-%m-%dT%T %z", + iso8601 => "%Y-%m-%dT%T%z", ); sub start { @@ -48,6 +51,22 @@ sub start { 1; } +sub filter { + my ($pkg, $files, $others) = @_; + + # Find the latest publish date in our stories + my $latest_ts = 0; + for (values %$files) { + $latest_ts = $_ if $_ > $latest_ts; + } + + # Format the 'latest' variables + $latest_rfc822 = format_date('rfc822', $latest_ts); + $latest_iso8601 = format_date('iso8601', $latest_ts); + + return 1; +} + sub story { my ($pkg, $path, $filename, $story_ref, $title_ref, $body_ref) = @_; @@ -93,12 +112,20 @@ sub get_story_dates { sub format_date { my ($format, $time, $use_gmtime) = @_; return unless $format; + + my $date = ''; if ($format =~ m/%/) { - return strftime($format, $time, $use_gmtime); + $date = strftime($format, $time, $use_gmtime); } elsif ($strftime_formats{ $format }) { - return strftime($strftime_formats{ $format }, $time, $use_gmtime); + $date = strftime($strftime_formats{ $format }, $time, $use_gmtime); + } + # Hack to handle the fact that ISO8601 dates require a : in the timezone, which strftime doesn't support + if ($format eq 'iso8601') { + $date =~ s/(\d)(\d{2})$/$1:$2/; } + + return $date; } # strftime wrapper, using the first strftime() it finds in @strftime_modules @@ -198,6 +225,14 @@ The current time in RFC822 format. The current time in ISO8601 format. +=item $latest_rfc822 + +The latest story publication date, in RFC822 format. + +=item $latest_iso8601 + +The latest story publication date, in ISO8601 format. + =back In addition, storydate defines a few subroutines that might be useful