From: tla Date: Mon, 28 Oct 2013 23:37:06 +0000 (+0100) Subject: initial work on Stemweb client - we have a button! (#29) X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=db23422016121c37eda553a795d409093f401b2e;p=scpubgit%2Fstemmaweb.git initial work on Stemweb client - we have a button! (#29) --- diff --git a/lib/stemmaweb/Controller/Root.pm b/lib/stemmaweb/Controller/Root.pm index d798cbd..f33761d 100644 --- a/lib/stemmaweb/Controller/Root.pm +++ b/lib/stemmaweb/Controller/Root.pm @@ -1,7 +1,7 @@ package stemmaweb::Controller::Root; use Moose; use namespace::autoclean; -use Text::Tradition::Analysis qw/ run_analysis /; +use LWP::UserAgent; use TryCatch; use XML::LibXML; use XML::LibXML::XPathContext; @@ -15,6 +15,8 @@ BEGIN { extends 'Catalyst::Controller' } # __PACKAGE__->config(namespace => ''); +my $STEMWEB_BASE_URL = 'http://slinkola.users.cs.helsinki.fi'; + =head1 NAME stemmaweb::Controller::Root - Root Controller for stemmaweb @@ -39,6 +41,14 @@ sub index :Path :Args(0) { if( $c->req->param('withtradition') ) { $c->stash->{'withtradition'} = $c->req->param('withtradition'); } + # Get the current list of Stemweb algorithms + my $ua = LWP::UserAgent->new(); + my $resp = $ua->get( $STEMWEB_BASE_URL . '/algorithms/available' ); + if( $resp->is_success ) { + $c->stash->{'stemweb_algorithms'} = $resp->content; + } else { + $c->stash->{'stemweb_algorithms'} = '{}'; + } $c->stash->{template} = 'index.tt'; } diff --git a/root/css/style.css b/root/css/style.css index 1785a21..83f7517 100644 --- a/root/css/style.css +++ b/root/css/style.css @@ -190,7 +190,7 @@ div.pager_left_button.greyed_out, div.pager_left_button.greyed_out:hover { position: relative; top: 15px; } -#run_stexaminer, #run_relater, #open_stemma_add, #open_stemma_edit { +#run_stexaminer, #run_relater, #open_stemma_add, #open_stemma_edit, #open_stemweb_ui { height: 32px; } #stemma_pager { diff --git a/root/js/componentload.js b/root/js/componentload.js index aba03fd..352d34a 100644 --- a/root/js/componentload.js +++ b/root/js/componentload.js @@ -45,10 +45,12 @@ function loadTradition( textid, textname, editable ) { // Hide the functionality that is irrelevant if( editable ) { $('#open_stemma_add').show(); + $('#open_stemweb_ui').show(); $('#open_textinfo_edit').show(); $('#relatebutton_label').text('View collation and edit relationships'); } else { $('#open_stemma_add').hide(); + $('#open_stemweb_ui').hide(); $('#open_textinfo_edit').hide(); $('#relatebutton_label').text('View collation and relationships'); } @@ -421,7 +423,7 @@ $(document).ready( function() { // If we are creating a new stemma, populate the textarea with a // bare digraph. $(evt.target).dialog('option', 'title', 'Add a new stemma') - $('#dot_field').val( "digraph stemma {\n\n}" ); + $('#dot_field').val( "digraph \"NAME STEMMA HERE\" {\n\n}" ); } else { // If we are editing a stemma, grab its stemmadot and populate the // textarea with that. @@ -442,6 +444,70 @@ $(document).ready( function() { display_error( jqXHR, $("#edit_stemma_status") ); } }); + + $('#stemweb-ui-dialog').dialog({ + autoOpen: false, + height: 200, + width: 300, + modal: true, + buttons: { + Run: function (evt) { + $("#stemweb_run_status").empty(); + $(evt.target).button("disable"); + var stemmaseq = $('#stemmaseq').val(); + var requrl = _get_url([ "stemma", selectedTextID, stemmaseq ]); + var reqparam = { 'dot': $('#dot_field').val() }; + // TODO We need to stash the literal SVG string in stemmata + // somehow. Implement accept header on server side to decide + // whether to send application/json or application/xml? + $.post( requrl, reqparam, function (data) { + // We received a stemma SVG string in return. + // Update the current stemma sequence number + selectedStemmaID = data.stemmaid; + delete data.stemmaid; + // Stash the answer in the appropriate spot in our stemma array + stemmata[selectedStemmaID] = data; + // Display the new stemma + load_stemma( selectedStemmaID, true ); + // Reenable the button and close the form + $(evt.target).button("enable"); + $('#stemma-edit-dialog').dialog('close'); + }, 'json' ); + }, + Cancel: function() { + $('#stemweb-ui-dialog').dialog('close'); + } + }, + create: function(evt) { + // Call out to Stemweb to get the algorithm options, with which we + // populate the form. + var algorithmTypes = {}; + var algorithmArgs = {}; + $.each( stemwebAlgorithms, function( i, o ) { + // If it's an algorithmarg, skip it for now + if( o.model === 'algorithms.algorithm' ) { + algorithmTypes[ o.pk ] = o.fields; + } else { + // it's an arg + algorithmArgs[ o.pk ] = o.fields; + } + }); + $.each( algorithmTypes, function( pk, fields ) { + var algopt = $('