#!/usr/bin/perl -- use strict; use warnings; use lib '/home/dsktnk/local/lib/perl5'; use encoding "utf8"; use Path::Class; use Text::Markdown::Discount qw/markdown/; use YAML::XS; use CGI; use Data::Pageset; my $obj = new CGI; my $page = $obj->param('p'); $page ||= "1"; my $baseurl="http://dsktnk.sakura.ne.jp/memo/"; print qq|Content-type: text/html\n\n|; print &header_html; print qq|

homepage of dsktnk

|; #ディレクトリ配下にあるファイルリストを作成(再帰的) my @files; Path::Class::Dir->new("/home/dsktnk/www/memo")->recurse( callback => sub { my $file = shift; return if $file->is_dir; #ディレクトリはスキップ if ($file=~/.md$/){ push(@files, $file); } }, ); #更新時間でソートしながら配列に入れる @files = sort {$b->stat->mtime <=> $a->stat->mtime} @files; my $total_entries=@files; my $current_page=$page; my $entries_per_page =5; my $pages_per_set = 10; my $page_info = Data::Pageset->new({ 'total_entries' => $total_entries, #すべての要素数(全ヒット数) 'entries_per_page' => $entries_per_page, #1ページあたりの要素表示数 'current_page' => $current_page, #現在のページ 'pages_per_set' => $pages_per_set, #1ページあたりのページング数 => 10 'mode' => 'slide', #ページングを表示ページ幅を固定するかスライドするか #'slide' or 'fixed' }); my $CarrentMinNum = ($page - 1) * ($entries_per_page + 1); my $CarrentMaxNum = $CarrentMinNum + $entries_per_page; for my $f (@files[$CarrentMinNum..$CarrentMaxNum]){ if ($f=~/.md$/){ my $data = $f->slurp; #stat #更新時間とファイルサイズを取得 my $mtime = localtime($f->stat->mtime); my $file_size = $f->stat->size; #時間 my ($sec, $min, $hour, $mday, $month, $year, $wday, $stime) = localtime($f->stat->mtime); $year += 1900; ++$month; my @wdays = ("日", "月", "火", "水", "木", "金", "土"); # YAML frontmatter my ($yaml_frontmatter,@y_line); if ($data =~/^-{3}${1}(.*?)-{3}${1}/s){ $yaml_frontmatter = "$1"; } my $yf = YAML::XS::Load($yaml_frontmatter); # Markdown my @line = split ( /\n/ , $data ); my ($ln,$line); my $i=0; my $item ="---"; foreach $ln(@line){ if ($ln =~ /^$item/){ $i++; } elsif($i>1){ $line .= "$ln\n"; } } #概要 my $description = substr($line, 0, 400); $description =~s/^.*\n=+$//m; $description =~s/^#[^#]*?$"//m; my $html = markdown($description); #ファイルネームを取得 my $file = file($f); my $basename=$file->basename; #相対パスを取得 my $fileurl=$file->relative; printf "

%04d/%02d/%02d %02d:%02d<\/h2><\/a>", $year, $month, $mday, $hour, $min, $sec; # print qq|$yf->{title}

|; # print "Filename:$basename 最終更新日時:$mtime $file_size(byte)
"; print "$html

"; } } print "
"; #前へ if ($page_info->previous_page) { print "<< 前へ\n"; } #ページ別リンク foreach my $page (@{$page_info->pages_in_set()}) { if($page == $page_info->current_page()) { print " $page\n "; } else { print " $page\n "; } } #次へ if ($page_info->next_page) { print "次へ >>\n"; } sub header_html{ my $printlines = <<"__EOF__";
__EOF__ return $printlines; }