[BACK]Return to dudelicious.pl CVS log [TXT][DIR] Up to [local] / todotxt / Text-Todo / bin

Diff for /todotxt/Text-Todo/bin/dudelicious.pl between version 1.8 and 1.15

version 1.8, 2010/04/30 18:17:40 version 1.15, 2010/05/05 02:43:03
Line 2 
Line 2 
   
 package Dudelicious;  package Dudelicious;
   
   use 5.010;
 use Data::Dumper;  use Data::Dumper;
 use version; our $VERSION = qv('0.1.0');  use version; our $VERSION = qv('0.1.0');
   
Line 25 
Line 26 
     default => { todo_dir => $ENV{DUDELICIOUS_HOME} || '.', },      default => { todo_dir => $ENV{DUDELICIOUS_HOME} || '.', },
 };  };
   
   app->renderer->add_helper(
       todo => sub {
           my ($self) = @_;
           state $todo = Text::Todo->new( $self->stash('config') );
   
           my $file = $self->stash('file');
           if ($file) {
               $file =~ s/(?:\.txt)?$/\.txt/ixms;
               $todo->load($file);
           }
   
           return $todo;
       }
   );
   
   app->renderer->add_helper(
       get_list => sub {
           my ($self) = @_;
   
           my $line = 1;
           return [
               map {
                   line     => $line++,
                       md5  => md5_hex( $_->text ),
                       text => $_->text,
                       done => $_->done,
               },
               $self->helper('todo')->list
           ];
       }
   );
   
 get '/' => sub {  get '/' => sub {
     my $self = shift;      my $self = shift;
   
     my $dir = _todo($self)->file('todo_dir');      my $dir = $self->helper('todo')->file('todo_dir');
     opendir my $dh, $dir or croak "Unable to opendir $dir: $!";      opendir my $dh, $dir or croak "Unable to opendir $dir: $!";
     my @files = grep {/\.te?xt$/ixms} readdir $dh;      my @files = grep {/\.te?xt$/ixms} readdir $dh;
     closedir $dh;      closedir $dh;
Line 36 
Line 69 
     $self->render( files => \@files, layout => 'todotxt' );      $self->render( files => \@files, layout => 'todotxt' );
 } => 'index';  } => 'index';
   
   get '/todotxt' => 'todotxt';
   
 get '/l/:file' => sub {  get '/l/:file' => sub {
     my $self   = shift;      my $self = shift;
     my $file   = $self->stash('file') . '.txt';  
     my $format = $self->stash('format') || 'html';      my $format = $self->stash('format') || 'html';
     my $list   = _get_list( $self, $file );  
   
     if ( $format eq 'json' ) {      if ( $format eq 'json' ) {
         $self->render_json($list);          $self->render_json( $self->helper('get_list') );
     }      }
     else {      else {
         $self->render( list => $list, layout => 'todotxt' );          $self->render(
               list   => $self->helper('get_list'),
               layout => 'todotxt'
           );
     }      }
 } => 'list';  } => 'list';
   
 get '/l/:file/e/:line' => sub {  get '/l/:file/e/:line' => sub {
     my $self   = shift;      my $self = shift;
     my $file   = $self->stash('file') . '.txt';  
     my $format = $self->stash('format') || 'html';      my $format = $self->stash('format') || 'html';
     my $entry  = _get_list( $self, $file )->[ $self->stash('line') - 1 ];      my $entry = $self->helper('get_list')->[ $self->stash('line') - 1 ];
   
     if ( $format eq 'json' ) {      if ( $format eq 'json' ) {
         $self->render_json($entry);          $self->render_json($entry);
Line 64 
Line 101 
     }      }
 } => 'entry';  } => 'entry';
   
 app->start unless caller();  get '/l/:file/t' => sub {
       my $self = shift;
   
 sub _todo {      my $format = $self->stash('format') || 'html';
     my ($c) = @_;  
   
     if ( !$c->stash('todo') ) {      if ( $format eq 'json' ) {
         my $todo = Text::Todo->new( $c->stash('config') );          $self->render_json( $self->helper('todo')->known_tags );
         $c->stash( 'todo' => $todo );  
     }      }
       else {
           $self->render(
               tags   => $self->helper('todo')->known_tags,
               layout => 'todotxt'
           );
       }
   } => 'tags';
   
     return $c->stash('todo');  get '/l/:file/t/:tag' => sub {
 }      my $self = shift;
   
 sub _get_list {      my $format = $self->stash('format') || 'html';
     my ( $c, $file ) = @_;      my $items  = $self->helper('todo')->listtag( $self->stash('tag') );
   
     my $line = 1;      if ( $format eq 'json' ) {
     return [          $self->render_json($items);
         map ( { line => $line++,      }
                 md5  => md5_hex( $_->text ),      else {
                 text => $_->text,          $self->render( items => $items, layout => 'todotxt' );
                 done => $_->done,      }
             },  } => 'tag';
             _todo($c)->listfile($file),  
         )  
     ];  
 }  
   
   app->start if !caller();
   
   1;
 __DATA__  __DATA__
   
 @@ list.txt.ep  @@ list.txt.ep
Line 102 
Line 144 
 @@ entry.txt.ep  @@ entry.txt.ep
 <%= $entry->{text} %>  <%= $entry->{text} %>
   
   @@ tags.txt.ep
   % foreach my $tag (keys %{ $tags }) {
   <%= $tag %>: <%= $tags->{$tag} %>
   % }
   
   @@ tag.txt.ep
   # <%== $tag %>
   % foreach my $item (@{ $items}) {
   <%= $item %>
   % }
   
 @@ layouts/todotxt.txt.ep  @@ layouts/todotxt.txt.ep
 %= content  %= content
   
 @@ index.html.ep  @@ index.html.ep
 % foreach my $file (@{ $files }) {  % foreach my $file (@{ $files }) {
 <%== $file %> <br />  % my ($basename) = $file =~ /^(.*?)(?:\.[^\.]+)?$/xms;
   <a href="<%= url_for 'list' %>/<%= $basename %>"><%= $file %></a><br />
 % }  % }
   
 @@ list.html.ep  @@ list.html.ep
Line 123 
Line 177 
 @@ entry.html.ep  @@ entry.html.ep
 <%= $entry->{text} %>  <%= $entry->{text} %>
   
   @@ tags.html.ep
   % foreach my $tag (keys%{ $tags }) {
   <a href="<%= url_for 'tag', format => '' %>/<%= $tag %>"><%= $tag %> == <%= $tags->{$tag} %></a><br />
   % }
   
   @@ tag.html.ep
   <h2><%= $tag %></h2>
   % foreach my $item (@{ $items }) {
   <%= $item %><br />
   % }
   
 @@ layouts/todotxt.html.ep  @@ layouts/todotxt.html.ep
 <!doctype html><html>  <!doctype html><html>
     <head><title>Funky!</title></head>      <head>
           <title>Funky!</title>
           <link rel="stylesheet" href="<%= url_for 'todotxt', format => 'css' %>">
       </head>
     <body><%== content %></body>      <body><%== content %></body>
 </html>  </html>
   
   @@ todotxt.css.ep
   body {
           background: LightGoldenRodYellow;
           color: DarkSlateBlue;
   }
   
   .inplaceeditor-saving {
           background: url(images/saving.gif) bottom right no-repeat;
   }
   
   
 __END__  __END__
   

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.15

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>