$('#textinfo_waitbox').hide();
$('#textinfo_load_status').empty();
$('#textinfo_container').show();
+ // The tradition name should appear here and should be identical in the
+ // corresponding directory span. In case the name was just changed...
$('.texttitle').empty().append( selectedTextInfo.name );
+ $('#' + selectedTextID).empty().append( selectedTextInfo.name );
// Witnesses
$('#witness_num').empty().append( selectedTextInfo.witnesses.size );
$('#witness_list').empty().append( selectedTextInfo.witnesses.join( ', ' ) );
$('#stemma_identifier').empty();
// Add the relevant Stemweb functionality
if( selectedTextEditable ) {
- if( selectedTextInfo.stemweb_jobid == 0 ) {
- $('#open_stemweb_ui').show();
- $('#query_stemweb_ui').hide();
- } else {
- $('#query_stemweb_ui').show();
- $('#open_stemweb_ui').hide();
- }
+ switch_stemweb_ui();
}
if( idx > -1 ) {
// Load the stemma and its properties
}
}
+function switch_stemweb_ui() {
+ if( selectedTextInfo.stemweb_jobid == 0 ) {
+ // We want to run Stemweb.
+ $('#open_stemweb_ui').show();
+ $('#query_stemweb_ui').hide();
+ if( ! $('#stemweb-ui-dialog').dialog('isOpen') ) {
+ $('#call_stemweb').show()
+ $('#stemweb_run_button').show();
+ }
+ } else {
+ $('#query_stemweb_ui').show();
+ $('#open_stemweb_ui').hide();
+ $('#call_stemweb').hide();
+ $('#stemweb_run_button').hide();
+ }
+}
+
function query_stemweb_progress() {
var requrl = _get_url([ "stemweb", "query", selectedTextInfo.stemweb_jobid ]);
+ $('#stemweb-ui-dialog').dialog('open');
+ $('#stemweb_run_status').empty().append(
+ _make_message( 'notification', 'Querying Stemweb for calculation progress...') );
$.getJSON( requrl, function (data) {
- // Look for a status message, either success, running, or notfound.
- if( data.status === 'success' ) {
- // Add the new stemmata to the textinfo and tell the user.
- selectedTextInfo.stemweb_jobid = 0;
- if( data.stemmata.length > 0 ) {
- stemmata = stemmata.concat( data.stemmata );
- if( selectedStemmaID == -1 ) {
- // We have a stemma for the first time; load the first one.
- load_stemma( 0, true );
- } else {
- // Move to the index of the first added stemma.
- var newIdx = stemmata.length - data.stemmata.length;
- load_stemma( newIdx, true );
- }
- alert( 'You have one or more new stemmata!' );
+ process_stemweb_result( data );
+ });
+}
+
+function process_stemweb_result(data) {
+ // Look for a status message, either success, running, or notfound.
+ if( data.status === 'success' ) {
+ // Add the new stemmata to the textinfo and tell the user.
+ selectedTextInfo.stemweb_jobid = 0;
+ if( data.stemmata.length > 0 ) {
+ stemmata = stemmata.concat( data.stemmata );
+ if( selectedStemmaID == -1 ) {
+ // We have a stemma for the first time; load the first one.
+ load_stemma( 0, true );
} else {
- alert( 'Stemweb run finished with no stemmata...huh?!' );
- }
- } else if( data.status === 'running' ) {
- // Just tell the user.
- alert( 'Your Stemweb query is still running!' );
- } else if( data.status === 'notfound' ) {
- // Ask the user to refresh, for now.
- alert( 'Your Stemweb query probably finished and reported back. Please reload to check.' );
+ // Move to the index of the first added stemma.
+ var newIdx = stemmata.length - data.stemmata.length;
+ load_stemma( newIdx, true );
+ }
+ // Hide the call dialog no matter how we got here
+ $('#call_stemweb').hide()
+ $('#stemweb_run_button').hide();
+ $('#stemweb_run_status').empty().append(
+ _make_message( 'notification', 'You have one or more new stemmata!' ) );
+ } else {
+ $('#stemweb_run_status').empty().append(
+ _make_message( 'warning', 'Stemweb run finished with no stemmata...huh?!' ) );
}
- });
+ } else if( data.status === 'running' ) {
+ // Just tell the user.
+ $('#stemweb_run_status').empty().append(
+ _make_message( 'warning', 'Your Stemweb query is still running!' ) );
+ } else if( data.status === 'notfound' ) {
+ // Ask the user to refresh, for now.
+ $('#stemweb_run_status').empty().append(
+ _make_message( 'warning', 'Your Stemweb query probably finished and reported back. Please reload to check.' ) );
+ } else if( data.status === 'failed' ) {
+ selectedTextInfo.stemweb_jobid = 0;
+ failureMsg = 'Your stemweb query failed';
+ if( data.message ) {
+ failureMsg = failureMsg + ' with the following message: ' + data.message
+ } else {
+ failureMsg = failureMsg + ' without telling us why.'
+ }
+ $('#stemweb_run_status').empty().append(
+ _make_message( 'error', failureMsg ) );
+ }
+}
+
+function _make_message( type, msg ) {
+ theMessage = $('<span>').attr( 'class', type );
+ theMessage.append( msg );
+ return theMessage;
}
// Load the SVG we are given
function set_stemma_interactive( svg_element ) {
if( selectedTextEditable ) {
+ // unbind is needed as this set_stemma_interactive is called each time
+ // the stemma is re-rooted, and each time jquery adds an
+ // onclick handler to the root_tree_dialog_button_ok
+ // that all re-root the stemma, that all add an onclick, etc..
+ $( "#root_tree_dialog_button_ok" ).unbind();
$( "#root_tree_dialog_button_ok" ).click( function() {
var requrl = _get_url([ "stemmaroot", selectedTextID, selectedStemmaID ]);
var targetnode = $('#root_tree_dialog').data( 'selectedNode' );
buttons: {
Save: function (evt) {
$("#edit_textinfo_status").empty();
- $(evt.target).button("disable");
+ var mybuttons = $(evt.target).closest('button').parent().find('button');
+ mybuttons.button( 'disable' );
var requrl = _get_url([ "textinfo", selectedTextID ]);
var reqparam = $('#edit_textinfo').serialize();
$.post( requrl, reqparam, function (data) {
selectedTextInfo = data;
load_textinfo();
// Reenable the button and close the form
- $(evt.target).button("enable");
+ mybuttons.button("enable");
$('#textinfo-edit-dialog').dialog('close');
}, 'json' );
},
buttons: {
Save: function (evt) {
$("#edit_stemma_status").empty();
- $(evt.target).button("disable");
+ var mybuttons = $(evt.target).closest('button').parent().find('button');
+ mybuttons.button( 'disable' );
var stemmaseq = $('#stemmaseq').val();
var requrl = _get_url([ "stemma", selectedTextID, stemmaseq ]);
var reqparam = { 'dot': $('#dot_field').val() };
// Display the new stemma
load_stemma( selectedStemmaID, true );
// Reenable the button and close the form
- $(evt.target).button("enable");
+ mybuttons.button("enable");
$('#stemma-edit-dialog').dialog('close');
}, 'json' );
},
$('#stemweb-ui-dialog').dialog({
autoOpen: false,
- height: 160,
- width: 225,
+ height: 'auto',
+ width: 520,
modal: true,
buttons: {
- Run: function (evt) {
+ Run: {
+ id: 'stemweb_run_button',
+ text: 'Run',
+ click: function (evt) {
$("#stemweb_run_status").empty();
- $(evt.target).button("disable");
+ var mybuttons = $(evt.target).closest('button').parent().find('button');
+ mybuttons.button( 'disable' );
var requrl = _get_url([ "stemweb", "request" ]);
var reqparam = $('#call_stemweb').serialize();
// 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?
$.getJSON( requrl, reqparam, function (data) {
- // Job ID is in data.jobid. TODO do something with it.
- selectedTextInfo.stemweb_jobid = data.jobid;
- $(evt.target).button("enable");
- $('#stemweb-ui-dialog').dialog('close');
- // Reload the current stemma to rejigger the buttons
- load_stemma( selectedStemmaID, true );
+ mybuttons.button("enable");
+ if( 'jobid' in data ) {
+ // There is a pending job.
+ selectedTextInfo.stemweb_jobid = data.jobid;
+ $('#stemweb_run_status').empty().append(
+ _make_message( 'notification', "Your request has been submitted to Stemweb.\nThe resulting tree will appear in due course." ) );
+ // Reload the current stemma to rejigger the buttons
+ switch_stemweb_ui();
+ } else {
+ // We appear to have an answer; process it.
+ process_stemweb_result( data );
+ }
}, 'json' );
+ },
+ },
+ Close: {
+ id: 'stemweb_close_button',
+ text: 'Close',
+ click: function() {
+ $('#stemweb-ui-dialog').dialog('close');
+ switch_stemweb_ui();
+ },
},
- Cancel: function() {
- $('#stemweb-ui-dialog').dialog('close');
- }
},
create: function(evt) {
// Call out to Stemweb to get the algorithm options, with which we
// Set up the relevant options for whichever algorithm is chosen.
// "key" -> form name, option ID "stemweb_$key_opt"
// "name" -> form label
+ $('#stemweb_algorithm_help').click( function() {
+ $('#stemweb_algorithm_desc_text').toggle( 'blind' );
+ });
$('#stemweb_algorithm').change( function() {
var pk = $(this).val();
+ // Display a link to the popup description, and fill in
+ // the description itself, if we have one.
+ if( 'desc' in algorithmTypes[pk] ) {
+ $('#stemweb_algorithm_desc_text').empty().append( algorithmTypes[pk].desc );
+ $('#stemweb_algorithm_desc').show();
+ } else {
+ $('#stemweb_algorithm_desc').hide();
+ }
$('#stemweb_runtime_options').empty();
$.each( algorithmTypes[pk].args, function( i, apk ) {
var argInfo = algorithmArgs[apk];
open: function(evt) {
$('#stemweb_run_status').empty();
$('#stemweb_tradition').attr('value', selectedTextID );
+ if( selectedTextInfo.stemweb_jobid == 0 ) {
+ $('#stemweb_merge_reltypes').empty();
+ $.each( selectedTextInfo.reltypes, function( i, r ) {
+ var relation_opt = $('<option>').attr( 'value', r ).append( r );
+ $('#stemweb_merge_reltypes').append( relation_opt );
+ });
+ $('#stemweb_merge_reltypes').multiselect({
+ header: false,
+ selectedList: 3
+ });
+ }
},
}).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) {
$(event.target).parent().find('.ui-button').button("enable");
- if( ajaxSettings.url.indexOf( 'stemweb/request' ) > -1 ) {
+ if( ajaxSettings.url.indexOf( 'stemweb/' ) > -1 ) {
display_error( jqXHR, $("#stemweb_run_status") );
}
});
Download: function (evt) {
var dlurl = _get_url([ "download", $('#download_tradition').val(), $('#download_format').val() ]);
window.location = dlurl;
- $('download-dialog').dialog('close');
},
- Cancel: function() {
+ Done: function() {
$('#download-dialog').dialog('close');
}
},