1 |
dpavlin |
449 |
package Frey::View::Exhibit; |
2 |
|
|
use Moose; |
3 |
|
|
|
4 |
|
|
extends 'Frey'; |
5 |
|
|
with 'Frey::Web'; |
6 |
|
|
|
7 |
|
|
use MooseX::Types::Moose qw(Str Int ArrayRef); |
8 |
|
|
use MooseX::Types::Structured qw/Dict/; |
9 |
|
|
|
10 |
|
|
use Data::Dump qw/dump/; |
11 |
|
|
|
12 |
|
|
=head1 DESCRIPTION |
13 |
|
|
|
14 |
|
|
present C<sponge> as Exhibit from L<http://simile.mit.edu/exhibit/> |
15 |
|
|
|
16 |
|
|
=cut |
17 |
|
|
|
18 |
|
|
has sponge => ( |
19 |
|
|
is => 'rw', |
20 |
|
|
isa => Dict[ |
21 |
|
|
rows => ArrayRef[ArrayRef], |
22 |
|
|
NAME => ArrayRef[Str], |
23 |
|
|
], |
24 |
|
|
# required => 1, |
25 |
|
|
); |
26 |
|
|
|
27 |
dpavlin |
455 |
sub as_data { |
28 |
dpavlin |
449 |
my ($self) = @_; |
29 |
|
|
|
30 |
dpavlin |
455 |
confess "need sponge" unless $self->as_sponge; |
31 |
dpavlin |
449 |
|
32 |
|
|
my $items; |
33 |
dpavlin |
455 |
my $names = $self->as_sponge->{NAME}; |
34 |
dpavlin |
449 |
|
35 |
dpavlin |
453 |
my $id = 0; |
36 |
|
|
my $have_id = grep { m{^id$} } @$names; |
37 |
|
|
my $have_label = grep { m{^label$} } @$names; |
38 |
|
|
|
39 |
dpavlin |
455 |
foreach my $row ( @{ $self->as_sponge->{rows} } ) { |
40 |
dpavlin |
449 |
my $item; |
41 |
|
|
map { $item->{ $names->[$_] } = $row->[$_] } ( 0 .. $#{ $row } ); |
42 |
dpavlin |
453 |
$item->{id} = $id unless $have_id; |
43 |
|
|
$item->{label} = $id unless $have_label; |
44 |
|
|
$id++; |
45 |
dpavlin |
449 |
push @{ $items->{items} }, $item; |
46 |
|
|
} |
47 |
|
|
|
48 |
|
|
return $items; |
49 |
|
|
} |
50 |
|
|
|
51 |
|
|
sub depends { |
52 |
|
|
my ($self) = @_; |
53 |
|
|
$self->add_head(qq{ |
54 |
dpavlin |
467 |
<link href="/Frey::Pipe/as_markup?pipe=Frey::DelIcioUs/as_sponge|Frey::View::Exhibit/as_data|Frey::View::JSON/as_markup" |
55 |
dpavlin |
461 |
type="application/json" rel="exhibit/data" /> |
56 |
dpavlin |
449 |
}); |
57 |
|
|
$self->add_head(qq| |
58 |
|
|
<script src="http://static.simile.mit.edu/exhibit/api-2.0/exhibit-api.js" |
59 |
|
|
type="text/javascript"></script> |
60 |
|
|
|); |
61 |
|
|
warn "# depends"; |
62 |
|
|
} |
63 |
|
|
|
64 |
dpavlin |
455 |
sub as_markup { |
65 |
dpavlin |
449 |
my ($self) = @_; |
66 |
|
|
|
67 |
|
|
return qq| |
68 |
|
|
<table width="100%"> |
69 |
|
|
<tr valign="top"> |
70 |
|
|
<td ex:role="viewPanel"> |
71 |
|
|
<div ex:role="view"></div> |
72 |
|
|
</td> |
73 |
|
|
<td width="25%"> |
74 |
|
|
browsing controls here... |
75 |
|
|
</td> |
76 |
|
|
</tr> |
77 |
|
|
</table> |
78 |
|
|
|; |
79 |
|
|
} |
80 |
|
|
|
81 |
|
|
1; |