App-MaMGal
view release on metacpan or search on metacpan
lib/App/MaMGal/Formatter.pm view on Meta::CPAN
sub LINK
{
my $self = shift;
my $link = encode_entities_numeric(URI::file->new(shift)->as_string);
my $text = shift;
"<a href='$link'>$text</a>";
}
# TRANSLATORS: The following three are for navigation on a slide page (< is shown as <, and > as >)
sub PREV { gettext('<< prev') }
sub NEXT { gettext('next >>') }
sub LINK_DOWN { $_[0]->LINK('../index.html', gettext('Up a dir')) }
sub FOOTER { "</body></html>"; }
sub EMPTY_PAGE_TEXT { gettext("This directory is empty") }
sub CURDIR { sprintf '<span class="curdir">%s</span>', $_[1] }
sub format
{
my $self = shift;
my $dir = shift;
croak "Only one arg is required" if @_;
my @elements = $dir->elements;
my @containers = $dir->containers;
my $down_dots = join('/', map { ".." } @containers);
$down_dots .= '/' if $down_dots;
my $ret = $self->HEADER('<link rel="stylesheet" href="'.$down_dots.'.mamgal-style.css" type="text/css">')."\n";
$ret .= '<table class="index">';
$ret .= '<tr><th colspan="4" class="header_cell">';
$ret .= join(' / ', map { $self->CURDIR($_->name) } @containers, $dir);
$ret .= '</th></tr>'."\n";
$ret .= ($dir->is_root ? '' : '<tr><th colspan="4" class="header_cell">'.$self->LINK_DOWN.'</th></tr>')."\n";
$ret .= "\n<tr>\n";
my $i = 1;
if (@elements) {
my $previous_description = undef;
foreach my $e (@elements) {
confess "[$e] is not an object" unless ref $e;
confess "[$e] is a ".ref($e) unless $e->isa('App::MaMGal::Entry');
my $this_description = $e->description;
$ret .= ' '.$self->entry_cell($e, ($this_description and $previous_description and ($this_description eq $previous_description)))."\n";
$ret .= "</tr>\n<tr>\n" if $i % 4 == 0;
$i++;
$previous_description = $this_description;
}
} else {
$ret .= '<td colspan="4">'.$self->EMPTY_PAGE_TEXT.'</td>';
}
$ret .= "</tr>\n";
return $ret.$self->FOOTER;
}
sub entry_cell
{
my $self = shift;
my $entry = shift;
my $suppress_description = shift;
my $path = $entry->page_path;
my $thumbnail_path = $entry->thumbnail_path;
my $ret = '';
$ret .= '<td class="entry_cell">';
my @timeret;
foreach my $time ($entry->creation_time()) {
push @timeret, sprintf('<span class="date">%s</span> <span class="time">%s</span>', $self->{locale_env}->format_date($time), $self->{locale_env}->format_time($time));
}
$ret .= '<br>'.join(' — ', @timeret).'<br>';
$ret .= $self->LINK($path, $self->MAYBE_IMG($thumbnail_path));
if ($entry->description and not $suppress_description) {
$ret .= sprintf('<br><span class="desc">%s</span>', $entry->description);
} else {
$ret .= sprintf('<br><span class="filename">[%s]</span><br>', $self->LINK($path, $entry->name));
}
$ret .= '</td>';
return $ret;
}
sub format_slide
{
my $self = shift;
my $pic = shift or croak "No pic";
croak "Only one arg required." if @_;
ref $pic and $pic->isa('App::MaMGal::Entry::Picture') or croak "Arg is not a pic";
my ($prev, $next) = map { defined $_ ? $_->name : '' } $pic->neighbours;
my @containers = $pic->containers;
my $down_dots = join('/', map { ".." } @containers);
my $r = $self->HEADER('<link rel="stylesheet" href="'.$down_dots.'/.mamgal-style.css" type="text/css">')."\n";
$r .= '<div style="float:left">';
$r .= $self->MAYBE_LINK($prev, $self->PREV);
$r .= ' | ';
# TRANSLATORS: This is the text of the link from a slide page to the index page.
$r .= $self->LINK('../index.html', gettext('index'));
$r .= ' | ';
$r .= $self->MAYBE_LINK($next, $self->NEXT);
$r .= '</div>';
$r .= '<div style="float:right">[ ';
$r .= join(' / ', map { $self->CURDIR($_->name) } @containers);
$r .= " ]</div><br>\n";
$r .= "<p>\n";
if ($pic->description) {
$r .= sprintf('<span class="slide_desc">%s</span>', $pic->description);
} else {
$r .= sprintf('[<span class="slide_filename">%s</span>]', $pic->name);
}
$r .= "</p>\n";
if ($pic->isa('App::MaMGal::Entry::Picture::Film')) {
$r .= $self->MAYBE_EMBED('../'.$pic->name);
$r .= '<br>';
$r .= $self->LINK('../'.$pic->name, gettext('Download'));
} else {
$r .= $self->LINK('../'.$pic->name, $self->MAYBE_IMG('../'.$pic->medium_dir.'/'.$pic->name));
}
my $time = $pic->creation_time();
$r .= sprintf('<br><span class="date">%s</span> <span class="time">%s</span><br>', $self->{locale_env}->format_date($time), $self->{locale_env}->format_time($time));
$r .= $self->FOOTER;
return $r;
}
sub stylesheet
{
my $t = <<END;
table.index { width: 100% }
( run in 1.642 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )