$c->stash->{'template'} = 'relate.tt';
}
-=head2 definitions
-
- GET relation/definitions
-
-Returns a data structure giving the valid types and scopes for a relationship.
-
-=cut
-
-sub definitions :Local :Args(0) {
- my( $self, $c ) = @_;
- my $valid_relationships = [ qw/ spelling orthographic grammatical lexical transposition / ];
- my $valid_scopes = [ qw/ local global / ];
- $c->stash->{'result'} = { 'types' => $valid_relationships, 'scopes' => $valid_scopes };
- $c->forward('View::JSON');
-}
-
=head2 text
GET relation/$textid/
my $ok = _check_permission( $c, $tradition );
return unless $ok;
+ $c->stash->{'textid'} = $textid;
+ $c->stash->{'tradition'} = $tradition;
+}
+
+sub main :Chained('text') :PathPart('') :Args(0) {
+ my( $self, $c ) = @_;
+ my $tradition = delete $c->stash->{'tradition'};
+ my $collation = $tradition->collation;
+
# See how big the tradition is. Edges are more important than nodes
# when it comes to rendering difficulty.
- my $numnodes = scalar $tradition->collation->readings;
- my $numedges = scalar $tradition->collation->paths;
- my $length = $tradition->collation->end->rank;
+ my $numnodes = scalar $collation->readings;
+ my $numedges = scalar $collation->paths;
+ my $length = $collation->end->rank;
# We should display no more than roughly 500 nodes, or roughly 700
# edges, at a time.
my $segments = $numnodes / 500;
$r += $segsize;
}
$c->stash->{'textsegments'} = [];
- $c->stash->{'segsize'} = $segsize;
- $c->stash->{'margin'} = $margin;
foreach my $i ( 0..$#divs ) {
my $seg = { 'start' => $divs[$i] };
$seg->{'display'} = "Segment " . ($i+1);
push( @{$c->stash->{'textsegments'}}, $seg );
}
}
- $c->stash->{'textid'} = $textid;
- $c->stash->{'tradition'} = $tradition;
-}
-
-sub main :Chained('text') :PathPart('') :Args(0) {
- my( $self, $c ) = @_;
my $startseg = $c->req->param('start');
- my $tradition = delete $c->stash->{'tradition'};
- my $collation = $tradition->collation;
my $svgopts;
if( $startseg ) {
# Only render the subgraph from startseg to endseg or to END,
# whichever is less.
- my $endseg = $startseg + $c->stash->{'segsize'} + $c->stash->{'margin'};
+ my $endseg = $startseg + $segsize + $margin;
$svgopts = { 'from' => $startseg };
$svgopts->{'to'} = $endseg if $endseg < $collation->end->rank;
} elsif( exists $c->stash->{'textsegments'} ) {
# This is the unqualified load of a long tradition. We implicitly start
- # at zero, but go only as far as 550.
- my $endseg = $c->stash->{'segsize'} + $c->stash->{'margin'};
+ # at zero, but go only as far as our segment size.
+ my $endseg = $segsize + $margin;
$startseg = 0;
$svgopts = { 'to' => $endseg };
}
+ # Spit out the SVG
my $svg_str = $collation->as_svg( $svgopts );
$svg_str =~ s/\n//gs;
$c->stash->{'startseg'} = $startseg if defined $startseg;
$c->stash->{'template'} = 'relate.tt';
}
+=head2 definitions
+
+ GET relation/$textid/definitions
+
+Returns a data structure giving the valid types and scopes for a relationship in
+this tradition.
+
+=cut
+
+sub definitions :Chained('text') :PathPart :Args(0) {
+ my( $self, $c ) = @_;
+ my $tradition = delete $c->stash->{'tradition'};
+ my @valid_relationships = map { $_->name } grep { !$_->is_weak }
+ $tradition->collation->relations->types;
+ my $valid_scopes = [ qw/ local global / ];
+ $c->stash->{'result'} = {
+ 'types' => \@valid_relationships,
+ 'scopes' => $valid_scopes
+ };
+ $c->forward('View::JSON');
+}
+
=head2 help
GET relation/help/$language
function add_relations( callback_fn ) {
var textrelpath = getTextURL( 'relationships' );
- $.getJSON( basepath + 'definitions', function(data) {
+ var typedefpath = getTextURL( 'definitions' );
+ $.getJSON( typedefpath, function(data) {
var rel_types = data.types.sort();
// Add the relationship types to our document data so that we don't have
// to call again
},
create: function(event, ui) {
$(this).data( 'relation_drawn', false );
- //TODO? Err handling?
- var jqjson = $.getJSON( basepath + 'definitions', function(data) {
+ //TODO Check whether we have already retrieved the definitions
+ var typedefpath = getTextURL( 'definitions' );
+ var jqjson = $.getJSON( typedefpath, function(data) {
var types = data.types.sort();
$.each( types, function(index, value) {
$('#rel_type').append( $('<option />').attr( "value", value ).text(value) );