From: Tara L Andrews Date: Tue, 17 Jan 2012 16:17:13 +0000 (+0100) Subject: start reorganization of stemmaweb structure X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=6b70c348a22823855e32248dead9b1a33cb43fc6;p=scpubgit%2Fstemmatology.git start reorganization of stemmaweb structure --- diff --git a/TreeOfTexts/Makefile.PL b/TreeOfTexts/Makefile.PL index e20b64b..8b55ac4 100644 --- a/TreeOfTexts/Makefile.PL +++ b/TreeOfTexts/Makefile.PL @@ -15,6 +15,9 @@ requires 'Catalyst::Plugin::Static::Simple'; requires 'Catalyst::Plugin::Unicode::Encoding'; requires 'Catalyst::Action::RenderView'; requires 'Catalyst::Model::KiokuDB'; +requires 'Catalyst::View::Download::Plain'; +requires 'Catalyst::View::JSON'; +requires 'Catalyst::View::TT'; requires 'Moose'; requires 'namespace::autoclean'; requires 'Config::General'; # This should reflect the config file format you've chosen diff --git a/TreeOfTexts/lib/TreeOfTexts/Controller/Root.pm b/TreeOfTexts/lib/TreeOfTexts/Controller/Root.pm index db653bf..91e3201 100644 --- a/TreeOfTexts/lib/TreeOfTexts/Controller/Root.pm +++ b/TreeOfTexts/lib/TreeOfTexts/Controller/Root.pm @@ -18,22 +18,38 @@ TreeOfTexts::Controller::Root - Root Controller for TreeOfTexts =head1 DESCRIPTION -[enter your description here] +Serves up the main container pages. -=head1 METHODS +=head1 URLs =head2 index -The root page (/). Lists the traditions available in the DB to work on, -and should also eventually have an 'Upload new' interface. +The root page (/). Serves the main container page, from which the various +components will be loaded. =cut sub index :Path :Args(0) { my ( $self, $c ) = @_; + $c->stash->{template} = 'index.tt'; +} + +=head1 Elements of index page + +=head2 directory + + GET /directory + +Serves a snippet of HTML that lists the available texts. Eventually this will be available texts by user. + +=cut +sub directory :Path :Args(0) { + my( $self, $c ) = @_; my $m = $c->model('Directory'); - my @all_texts; + # TODO not used yet, will load user texts later + my $user = $c->request->param( 'user' ) || 'ALL'; + my @textlist; foreach my $id ( $m->tradition_ids ) { my $data = { 'id' => $id, @@ -42,14 +58,82 @@ sub index :Path :Args(0) { push( @all_texts, $data ); } - $c->stash->{texts} = \@all_texts; - $c->stash->{template} = 'frontpage.tt'; + $c->stash->{texts} = \@textlist; + $c->stash->{template} = 'directory.tt'; } -=head2 tradition (TODO) +=head2 alignment + + GET /alignment/$textid -The main page for a tradition, with information about it and links to the -available tools. +Returns an alignment table for the text specified at $textid. + +=cut + +sub alignment :Path :Args(1) { + my( $self, $c, $textid ) = @_; + my $m = $c->model('Directory'); + my $collation = $m->tradition( $textid )->collation; + my $alignment = $collation->make_alignment_table; + + # Turn the table, so that witnesses are by column and the rows + # are by rank. + my $wits = [ map { $_->{'witness'} } @{$alignment->{'alignment'}} ]; + my $rows; + foreach my $i ( 0 .. $alignment->{'length'} - 1 ) { + my @rankrdgs = map { $_->{'tokens'}->[$i]->{'t'} } + @{$alignment->{'alignment'}}; + push( @$rows, { 'rank' => $i+1, 'readings' => \@rankrdgs } ); + } + $c->log->debug( Dumper( $rows ) ); + $c->stash->{'witnesses'} = $wits; + $c->stash->{'table'} = $rows; + $c->stash->{'template'} = 'alignment.tt'; +} + +=head2 stemma + + GET /stemma/$textid + POST /stemma/$textid, { 'dot' => $dot_string } + +Returns an SVG representation of the stemma hypothesis for the text. If +the URL is called with POST and a new dot string, updates the stemma and +returns the SVG as with GET. + +=cut + +sub stemma :Path :Args(1) { + my( $self, $c, $textid ) = @_; + my $m = $c->model('Directory'); + my $tradition = $m->tradition( $textid ); + + if( $c->req->method eq 'POST' ) { + # Update the stemma + my $dot = $c->request->body_params->{'dot'}; + $tradition->add_stemma( $dot ); + $m->store( $tradition ); + } + + $c->stash->{'result'} = $tradition->stemma->as_svg; + $c->forward('View::SVG'); +} + +=head2 stemmadot + + GET /stemmadot/$textid + +Returns the 'dot' format representation of the current stemma hypothesis. + +=cut + +sub stemma :Path :Args(1) { + my( $self, $c, $textid ) = @_; + my $m = $c->model('Directory'); + my $tradition = $m->tradition( $textid ); + + $c->response->body( $tradition->stemma->editable ); + $c->forward('View::Plain'); +} =head2 relationships @@ -91,21 +175,6 @@ sub stexaminer :Local { $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 MICROSERVICE CALLS =head2 renderSVG diff --git a/TreeOfTexts/lib/TreeOfTexts/View/Plain.pm b/TreeOfTexts/lib/TreeOfTexts/View/Plain.pm new file mode 100644 index 0000000..73e101f --- /dev/null +++ b/TreeOfTexts/lib/TreeOfTexts/View/Plain.pm @@ -0,0 +1,4 @@ +package TreeOfTexts::View::Plain; + +use strict; +use base 'Catalyst::View::Download::Plain'; diff --git a/TreeOfTexts/lib/TreeOfTexts/View/TT.pm b/TreeOfTexts/lib/TreeOfTexts/View/TT.pm index af30bf5..1f43118 100644 --- a/TreeOfTexts/lib/TreeOfTexts/View/TT.pm +++ b/TreeOfTexts/lib/TreeOfTexts/View/TT.pm @@ -10,7 +10,6 @@ __PACKAGE__->config( INCLUDE_PATH => [ TreeOfTexts->path_to( 'root', 'src' ), ], - WRAPPER => 'wrapper.tt', render_die => 1, ); diff --git a/TreeOfTexts/root/src/alignment.tt b/TreeOfTexts/root/src/alignment.tt new file mode 100644 index 0000000..9ad1d34 --- /dev/null +++ b/TreeOfTexts/root/src/alignment.tt @@ -0,0 +1,15 @@ + + +[% END -%] + +[% FOREACH row IN table -%] + + +[% FOREACH reading IN row.readings -%] + +[% END -%] + +[% END -%] +
+[% FOREACH w IN witnesses -%] + [% w %]
[% row.rank %][% reading %]
diff --git a/TreeOfTexts/root/src/frontpage.tt b/TreeOfTexts/root/src/directory.tt similarity index 93% rename from TreeOfTexts/root/src/frontpage.tt rename to TreeOfTexts/root/src/directory.tt index 218405d..3c73f05 100644 --- a/TreeOfTexts/root/src/frontpage.tt +++ b/TreeOfTexts/root/src/directory.tt @@ -1,6 +1,3 @@ -[% BLOCK js %] -[% END %] -

Choose a text to examine