package TreeOfTexts::Controller::Root;
use Moose;
use namespace::autoclean;
-use TreeOfTexts::Model::Analysis qw/ run_analysis /;
+use Text::Tradition::Analysis qw/ run_analysis /;
+
BEGIN { extends 'Catalyst::Controller' }
=head2 index
-The root page (/)
+The root page (/). Lists the traditions available in the DB to work on,
+and should also eventually have an 'Upload new' interface.
=cut
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
- my $m = $c->model('Analysis');
- $c->stash->{svg} = $m->{'svg'};
- $c->stash->{variants} = $m->{'variants'};
+ my $m = $c->model('Directory');
+ my @all_texts;
+ foreach my $id ( $m->tradition_ids ) {
+ my $data = {
+ 'id' => $id,
+ 'name' => $m->name( $id ),
+ };
+ push( @all_texts, $data );
+ }
+
+ $c->stash->{texts} = \@all_texts;
+ $c->stash->{template} = 'frontpage.tt';
+}
+
+=head2 tradition (TODO)
+
+The main page for a tradition, with information about it and links to the
+available tools.
+
+=head2 relationships
+
+The relationship editor tool.
+
+=cut
+
+sub relationships :Local {
+ my( $self, $c ) = @_;
+ my $m = $c->model('Directory');
+ my $tradition = $m->tradition( $c->request->params->{'textid'} );
+ my $table = $tradition->collation->make_alignment_table();
+ my $witlist = shift @$table;
+ $c->stash->{witnesses} = $wits;
+ $c->stash->{alignment} = $table;
+ $c->stash->{template} = 'relate.tt';
+}
+
+=head2 stexaminer
+
+The stemma analysis tool with the pretty colored table.
+
+=cut
+
+sub stexaminer :Local {
+ my( $self, $c ) = @_;
+ my $m = $c->model('Directory');
+ my $tradition = $m->tradition( $c->request->params->{'textid'} );
+ my $stemma = $tradition->stemma;
+ # TODO Think about caching the stemma in a session
+ $c->stash->{svg} = $stemma->as_svg;
+ $c->stash->{text_title} = $tradition->name;
$c->stash->{template} = 'index.tt';
+ # TODO Run the analysis as AJAX from the loaded page.
+ my $t = run_analysis( $tradition );
+ $c->stash->{variants} = $t->{'variants'};
+ $c->stash->{total} = $t->{'variant_count'};
+ $c->stash->{genealogical} = $t->{'genealogical_count'};
+ $c->stash->{conflict} = $t->{'conflict_count'};
+}
+
+=head2 alignment_table
+
+Return a JSON alignment table of a given text.
+
+=cut
+
+sub alignment_table :Local {
+ my( $self, $c ) = @_;
+ my $m = $c->model( 'Directory' );
+ my $tradition = $m->tradition( $c->request->params->{'textid'} );
+ my $table = $tradition->collation->make_alignment_table();
+ $c->stash->{'result'} => $table;
+ $c->forward-( 'View::JSON' );
+}
+
+=head1 OPENSOCIAL URLs
+
+=head2 view_table
+
+Simple gadget to return the analysis table for the stexaminer
+
+=cut
+
+sub view_table :Local {
+ my( $self, $c ) = @_;
+ my $m = $c->model('Directory');
+ my $id = $c->request->params->{'textid'};
+ my $t = run_analysis( $m->tradition( $id ), $m->stemma( $id ) );
+ $c->stash->{variants} = $t->{'variants'};
+ $c->stash->{template} = 'table_gadget.tt';
+}
+
+=head2 view_svg
+
+Simple gadget to return the SVG for a given stemma
+
+=cut
+
+sub view_svg :Local {
+ my( $self, $c ) = @_;
+ my $m = $c->model('Directory');
+ my $stemma = $m->tradition( $c->request->params->{'textid'} )->stemma;
+ if( $stemma ) {
+ $c->stash->{svg} = $stemma->as_svg;
+ }
+ $c->stash->{template} = 'stemma_gadget.tt';
}
=head2 default