X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=stemmaweb%2Flib%2Fstemmaweb%2FController%2FStexaminer.pm;fp=stemmaweb%2Flib%2Fstemmaweb%2FController%2FStexaminer.pm;h=d2aa2617d787fca0938760827f2a735a83ec81b0;hb=f8d13166a3dca3726a5ccf07ed7d701ff93d28c3;hp=a0f4fcba5976e7948c606a737df01e3217f7c796;hpb=638e2a95fd818035ec4bd92adc60d61a21ddee0e;p=scpubgit%2Fstemmatology.git diff --git a/stemmaweb/lib/stemmaweb/Controller/Stexaminer.pm b/stemmaweb/lib/stemmaweb/Controller/Stexaminer.pm index a0f4fcb..d2aa261 100644 --- a/stemmaweb/lib/stemmaweb/Controller/Stexaminer.pm +++ b/stemmaweb/lib/stemmaweb/Controller/Stexaminer.pm @@ -1,9 +1,12 @@ package stemmaweb::Controller::Stexaminer; use Moose; use namespace::autoclean; +use Encode qw/ decode_utf8 /; use File::Temp; use JSON; use Text::Tradition::Analysis qw/ run_analysis wit_stringify /; +use Text::Tradition::Collation; +use Text::Tradition::Stemma; BEGIN { extends 'Catalyst::Controller' } @@ -18,12 +21,12 @@ The stemma analysis tool with the pretty colored table. =head1 METHODS +=head2 index + GET stexaminer/$textid Renders the application for the text identified by $textid. -=head2 index - =cut sub index :Path :Args(1) { @@ -32,8 +35,8 @@ sub index :Path :Args(1) { my $tradition = $m->tradition( $textid ); if( $tradition->stemma_count ) { my $stemma = $tradition->stemma(0); - # TODO Think about caching the stemma in a session - $c->stash->{svg} = $stemma->as_svg; + $c->stash->{svg} = $stemma->as_svg( { size => [ 600, 350 ] } ); + $c->stash->{graphdot} = $stemma->editable({ linesep => ' ' }); $c->stash->{text_title} = $tradition->name; $c->stash->{template} = 'stexaminer.tt'; # TODO Run the analysis as AJAX from the loaded page. @@ -60,6 +63,34 @@ sub index :Path :Args(1) { } } +=head2 graphsvg + + POST stexaminer/graphsvg + dot: + layerwits: [ request->param('dot'); + my @layerwits = $c->request->param('layerwits[]'); + open my $stemma_fh, '<', \$dot; + binmode( $stemma_fh, ':encoding(UTF-8)' ); + my $emptycoll = Text::Tradition::Collation->new(); + my $tempstemma = Text::Tradition::Stemma->new( + collation => $emptycoll, 'dot' => $stemma_fh ); + my $svgopts = { size => [ 600, 350 ] }; + if( @layerwits ) { + $svgopts->{'layerwits'} = \@layerwits; + } + $c->stash->{'result'} = $tempstemma->as_svg( $svgopts ); + $c->forward('View::SVG'); +} + =head2 end Attempt to render a view, if needed.