Skip to content

Commit d9f14e6

Browse files
committed
ref #6 タグ一覧、タグページ
1 parent 5060609 commit d9f14e6

File tree

4 files changed

+127
-7
lines changed

4 files changed

+127
-7
lines changed

layouts/tag.html

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<!doctype html>
2+
<html lang="ja">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6+
<meta name="description" content="<?= $vars->{description} ?>">
7+
<title><?= $vars->{title} ?></title>
8+
<link rel="icon" href="/img/favicon.ico">
9+
<link href="TODO" rel="stylesheet">
10+
</head>
11+
<body>
12+
<h1><?= $vars->{tag} ?></h1>
13+
<ul>
14+
? for (@{$vars->{files}}) {
15+
<li>
16+
<a href="<?= $_->{href} ?>">
17+
<?= $_->{title} ?>
18+
</a>
19+
</li>
20+
? }
21+
</ul>
22+
23+
<a href="/tag">タグ一覧</a>
24+
<a href="/">HOME</a>
25+
26+
</body>
27+
</html>

layouts/tag_index.html

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<!doctype html>
2+
<html lang="ja">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6+
<meta name="description" content="cription} ?>">
7+
<title>タグ一覧</title>
8+
<link rel="icon" href="/img/favicon.ico">
9+
<link href="TODO" rel="stylesheet">
10+
</head>
11+
<body>
12+
<h1>タグ一覧</h1>
13+
<ul>
14+
? for my $tag (@{$vars->{tags}}) {
15+
<li>
16+
<a href=<?= "/tag/$tag" ?>>
17+
<?= $tag ?>
18+
</a>
19+
</li>
20+
? }
21+
</ul>
22+
23+
<a href="/">HOME</a>
24+
25+
</body>
26+
</html>

lib/PerlUsersJP/Builder.pm

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,8 @@ sub build_entries {
7272
$self->build_entry($src);
7373
}
7474

75-
$self->build_categories($src_list);
76-
# TODO
77-
#$self->build_tags(\@entries);
75+
#$self->build_categories($src_list);
76+
$self->build_tags($src_list);
7877
#$self->build_sitemap(\@entries);
7978
#$self->build_atom(\@entries);
8079
}
@@ -233,8 +232,75 @@ sub category_description {
233232
}
234233

235234
sub build_tags {
236-
my ($self, $entries) = @_;
237-
... # TODO
235+
my ($self, $src_list) = @_;
236+
237+
my %tag_map;
238+
for my $src ($src_list->@*) {
239+
my $matter = $self->front_matter($src);
240+
next unless $matter->exists;
241+
242+
for my $tag ($matter->tags->@*) {
243+
push $tag_map{$tag}->@*, $src;
244+
}
245+
}
246+
247+
$self->build_tag_index([keys %tag_map]);
248+
249+
for my $tag (keys %tag_map) {
250+
my $src_list = $tag_map{$tag};
251+
$self->build_tag($tag, $src_list);
252+
}
253+
}
254+
255+
sub build_tag_index {
256+
my ($self, $tags) = @_;
257+
258+
my $html = $self->_render_string('tag_index.html', {
259+
tags => [sort { $a cmp $b } $tags->@*],
260+
});
261+
262+
my $tag_dir = $self->public_dir->child('tag');
263+
my $dest = $tag_dir->child('index.html');
264+
$tag_dir->mkpath unless $tag_dir->is_dir;
265+
$dest->spew_utf8($html);
266+
$self->diag("Created tag_list $dest\n");
267+
}
268+
269+
sub build_tag {
270+
my ($self, $tag, $src_list) = @_;
271+
272+
my @src_list = map {
273+
my $file = Path::Tiny::path($_);
274+
my $matter = $self->front_matter($file);
275+
my $title = $matter->title;
276+
277+
# content/foo/bar.txt => /foo/bar
278+
my $href = do {
279+
my $content_dir = $self->content_dir;
280+
my $path = $file =~ s!$content_dir!!r;
281+
my $href = $path =~ s!\.([^.]+)$!!r;
282+
$href;
283+
};
284+
{
285+
file => $file,
286+
matter => $matter,
287+
title => $title,
288+
href => $href,
289+
}
290+
} $src_list->@*;
291+
292+
my $html = $self->_render_string('tag.html', {
293+
tag => $tag,
294+
description => $tag,
295+
title => $tag,
296+
files => [ sort { $a->{title} cmp $b->{title} } @src_list ],
297+
});
298+
299+
my $tag_dir = $self->public_dir->child('tag', $tag);
300+
my $dest = $tag_dir->child('index.html');
301+
$tag_dir->mkpath unless $tag_dir->is_dir;
302+
$dest->spew_utf8($html);
303+
$self->diag("Created tag $dest\n");
238304
}
239305

240306
sub build_sitemap {
@@ -249,7 +315,7 @@ sub build_atom {
249315

250316
sub diag {
251317
my ($self, $msg) = @_;
252-
print $msg;
318+
#print $msg;
253319
}
254320

255321
sub to_public {

lib/PerlUsersJP/FrontMatter.pm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,12 @@ sub BUILDARGS {
3535
return {
3636
format => $format,
3737
title => $data->{title} // '',
38+
tags => [], # TODO HTMLでもタグ対応したいね
3839
}
3940
}
4041
else {
4142
my $data = _parse_text_entry($file);
42-
my $tags = $data->{tags} ? [split ',', $data->{tags}] : [];
43+
my $tags = $data->{tags} ? [ grep { $_ } map { s!\s*!!; s!\s*$!!; $_ } split /[,\s]/, $data->{tags} ] : [];
4344

4445
return {
4546
body => $data->{body},

0 commit comments

Comments
 (0)