X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fstemmaweb%2FController%2FRoot.pm;h=abc19522939b97edf1f1df04127b09158b00b292;hb=e0b902362ea75e07419933809f6cf99a2f2d082c;hp=5decf721576d0ae6a407806e3c4a122a3b603fdf;hpb=2bfac19751089df74b9382ef3d06180560cdca7f;p=scpubgit%2Fstemmaweb.git diff --git a/lib/stemmaweb/Controller/Root.pm b/lib/stemmaweb/Controller/Root.pm index 5decf72..abc1952 100644 --- a/lib/stemmaweb/Controller/Root.pm +++ b/lib/stemmaweb/Controller/Root.pm @@ -1,4 +1,5 @@ package stemmaweb::Controller::Root; +use File::Temp; use Moose; use namespace::autoclean; use Text::Tradition::Analysis qw/ run_analysis /; @@ -40,6 +41,17 @@ sub index :Path :Args(0) { $c->stash->{template} = 'index.tt'; } +=head2 about + +A general overview/documentation page for the site. + +=cut + +sub about :Local :Args(0) { + my( $self, $c ) = @_; + $c->stash->{template} = 'about.tt'; +} + =head1 Elements of index page =head2 directory @@ -78,7 +90,8 @@ sub directory :Local :Args(0) { { name: , language: , public: , - file: } + filename: , + file: } Creates a new tradition belonging to the logged-in user, with the given name and the collation given in the uploaded file. The file type is indicated via @@ -87,6 +100,7 @@ name of the new tradition. =cut +## TODO Figure out how to mimic old-style HTML file uploads in AJAX / HTML5 sub newtradition :Local :Args(0) { my( $self, $c ) = @_; return _json_error( $c, 403, 'Cannot save a tradition without being logged in' ) @@ -95,16 +109,18 @@ sub newtradition :Local :Args(0) { my $user = $c->user->get_object; # Grab the file upload, check its name/extension, and call the # appropriate parser(s). - my $upload = $c->request->upload('file'); + my $upload = File::Temp->new(); + print $upload $c->request->param('file'); + close $upload; my $name = $c->request->param('name') || 'Uploaded tradition'; my $lang = $c->request->param( 'language' ) || 'Default'; my $public = $c->request->param( 'public' ) ? 1 : undef; - my( $ext ) = $upload->filename =~ /\.(\w+)$/; + my( $ext ) = $c->request->param( 'filename' ) =~ /\.(\w+)$/; my %newopts = ( 'name' => $name, 'language' => $lang, 'public' => $public, - 'file' => $upload->tempname + 'file' => $upload->filename ); my $tradition; @@ -119,7 +135,10 @@ sub newtradition :Local :Args(0) { } catch { $errmsg = "Unexpected parsing error"; } - last if $tradition; + if( $tradition ) { + $errmsg = undef; + last; + } } } elsif( $ext =~ /^(txt|csv|xls(x)?)$/ ) { # If it's Excel we need to pass excel => $ext; @@ -256,11 +275,11 @@ sub textinfo :Local :Args(1) { textid => $textid, name => $tradition->name, language => $tradition->language, - public => $tradition->public, + public => $tradition->public || 0, owner => $tradition->user ? $tradition->user->id : undef, witnesses => [ map { $_->sigil } $tradition->witnesses ], }; - my @stemmasvg = map { $_->as_svg({ size => [ 500, 375 ] }) } $tradition->stemmata; + my @stemmasvg = map { $_->as_svg() } $tradition->stemmata; map { $_ =~ s/\n/ /mg } @stemmasvg; $textinfo->{stemmata} = \@stemmasvg; $c->stash->{'result'} = $textinfo; @@ -319,8 +338,8 @@ sub stemma :Local :Args(2) { try { if( $stemmaid eq 'n' ) { # We are adding a new stemma. + $stemmaid = $tradition->stemma_count; $stemma = $tradition->add_stemma( 'dot' => $dot ); - $stemmaid = $tradition->stemma_count - 1; } elsif( $stemmaid !~ /^\d+$/ ) { return _json_error( $c, 403, "Invalid stemma ID specification $stemmaid" ); } elsif( $stemmaid < $tradition->stemma_count ) { @@ -347,7 +366,7 @@ sub stemma :Local :Args(2) { if( !$stemma && $tradition->stemma_count > $stemmaid ) { $stemma = $tradition->stemma( $stemmaid ); } - my $stemma_xml = $stemma ? $stemma->as_svg( { size => [ 500, 375 ] } ) : ''; + my $stemma_xml = $stemma ? $stemma->as_svg() : ''; # What was requested, XML or JSON? my $return_view = 'SVG'; if( my $accept_header = $c->req->header('Accept') ) {