summaryrefslogtreecommitdiff
path: root/lib/VN3/Producer/Page.pm
blob: 0e891fa8f16e76eb723135c6b3c9d433a5b5e162 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package VN3::Producer::Page;

use VN3::Prelude;

# TODO: Releases/VNs
# TODO: Relation graph

sub Notes {
    my $e = shift;

    Div class => 'row', sub {
        Div class => 'fixed-size-left-sidebar-md', sub {
            H2 class => 'detail-page-sidebar-section-header', 'Notes';
        };
        Div class => 'col-md', sub {
            Div class => 'description serif mb-5', sub {
                P sub { Lit bb2html $e->{desc} };
            };
        };
    } if $e->{desc};
}


sub DetailsTable {
    my $e = shift;

    my @links = (
        $e->{website} ? [ 'Official website', $e->{website}                              ] : (),
        $e->{l_wp}    ? [ 'Wikipedia',        "https://en.wikipedia.org/wiki/$e->{l_wp}" ] : (),
    );

    my %rel;
    push @{$rel{$_->{relation}}}, $_ for (sort { $a->{name} cmp $b->{name} } @{$e->{relations}});

    my @list = (
        $e->{alias} ? sub {
            Dt $e->{alias} =~ /\n/ ? 'Aliases' : 'Alias';
            Dd $e->{alias} =~ s/\n/, /gr;
        } : (),

        sub {
            Dt 'Type';
            Dd $PRODUCER_TYPES{$e->{type}};
        },

        sub {
            Dt 'Language';
            Dd sub {
                Lang $e->{lang};
                Txt " $LANGUAGE{$e->{lang}}";
            }
        },

        @links ? sub {
            Dt 'Links';
            Dd sub {
                Join ', ', sub { A href => $_[0][1], rel => 'nofollow', $_[0][0] }, @links;
            };
        } : (),

        (map {
            my $r = $_;
            sub {
                Dt producer_relation_display $r;
                Dd sub {
                    Join ', ', sub {
                        A href => "/p$_[0]{pid}", title => $_[0]{original}||$_[0]{name}, $_[0]{name};
                    }, @{$rel{$r}}
                }
            }
        } grep $rel{$_}, keys %PRODUCER_RELATIONS)
    );

    Div class => 'row', sub {
        Div class => 'fixed-size-left-sidebar-md', sub {
            H2 class => 'detail-page-sidebar-section-header', 'Details';
        };
        Div class => 'col-md', sub {
            Div class => 'card card--white mb-5', sub {
                Div class => 'card__section fs-medium', sub {
                    Div class => 'row', sub {
                        Dl class => 'col-md dl--horizontal', sub { $_->() for @list[0..$#list/2] };
                        Dl class => 'col-md dl--horizontal', sub { $_->() for @list[$#list/2+1..$#list] };
                    }
                }
            }
        }
    } if @list;
}


TUWF::get qr{/$PREV_RE}, sub {
    my $e = entry p => tuwf->capture('id'), tuwf->capture('rev') or return tuwf->resNotFound;
    return tuwf->resNotFound if !$e->{id} || $e->{hidden};

    enrich pid => q{SELECT id AS pid, name, original FROM producers WHERE id IN}, $e->{relations};

    Framework
        title => $e->{name},
        top => sub {
            Div class => 'col-md', sub {
                EntryEdit p => $e;
                Div class => 'detail-page-title', sub {
                    Txt $e->{name};
                    Debug $e;
                };
                Div class => 'detail-page-subtitle', $e->{original} if $e->{original};
                # TODO: link to discussions page. Prolly needs a TopNav
            }
        },
        sub {
            DetailsTable $e;
            Notes $e;
        };
};

1;