#!/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 "