X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=root%2Fjs%2Frelationship.js;h=4cb62f14609e358505b7707ae6108998ef84eda6;hb=30d0ba1eb65182ce262cc2e67a20d70519b0a419;hp=3fa40d1bc41b2eec15c8310eff4bc0bbb165d3a5;hpb=6666d1110a2a09fc7adca2976ca322ea5210f2a4;p=scpubgit%2Fstemmaweb.git diff --git a/root/js/relationship.js b/root/js/relationship.js index 3fa40d1..4cb62f1 100644 --- a/root/js/relationship.js +++ b/root/js/relationship.js @@ -5,36 +5,12 @@ var start_element_height = 0; var reltypes = {}; var readingdata = {}; -function getTextPath() { - var currpath = window.location.pathname; - // Get rid of trailing slash - if( currpath.lastIndexOf('/') == currpath.length - 1 ) { - currpath = currpath.slice( 0, currpath.length - 1) - }; - // Get rid of query parameters - if( currpath.lastIndexOf('?') != -1 ) { - currpath = currpath.slice( 0, currpath.lastIndexOf('?') ); - }; - var path_elements = currpath.split('/'); - var textid = path_elements.pop(); - var basepath = path_elements.join( '/' ); - var path_parts = [ basepath, textid ]; - return path_parts; -} - -function getRelativePath() { - var path_parts = getTextPath(); - return path_parts[0]; -} - function getTextURL( which ) { - var path_parts = getTextPath(); - return path_parts[0] + '/' + path_parts[1] + '/' + which; + return basepath + textid + '/' + which; } function getReadingURL( reading_id ) { - var path_parts = getTextPath(); - return path_parts[0] + '/' + path_parts[1] + '/reading/' + reading_id; + return basepath + textid + '/reading/' + reading_id; } // Make an XML ID into a valid selector @@ -52,8 +28,8 @@ function node_dblclick_listener( evt ) { // Set the easy properties first $('#reading-form').dialog( 'option', 'title', 'Reading information for "' + reading_info['text'] + '"' ); $('#reading_id').val( reading_id ); - $('#reading_is_nonsense').attr( 'checked', reading_info['is_nonsense'] ); - $('#reading_grammar_invalid').attr( 'checked', reading_info['grammar_invalid'] ); + toggle_checkbox( $('#reading_is_nonsense'), reading_info['is_nonsense'] ); + toggle_checkbox( $('#reading_grammar_invalid'), reading_info['grammar_invalid'] ); // Use .text as a backup for .normal_form var normal_form = reading_info['normal_form']; if( !normal_form ) { @@ -71,27 +47,39 @@ function node_dblclick_listener( evt ) { $('#reading-form').dialog("open"); } +function toggle_checkbox( box, value ) { + if( value == null ) { + value = false; + } + box.attr('checked', value ); +} + function morphology_form ( lexlist ) { - $('#morphology').empty(); - $.each( lexlist, function( idx, lex ) { - var morphoptions = []; - if( 'wordform_matchlist' in lex ) { - $.each( lex['wordform_matchlist'], function( tdx, tag ) { - var tagstr = stringify_wordform( tag ); - morphoptions.push( tagstr ); + if( lexlist.length ) { + $('#morph_outer').show(); + $('#morphology').empty(); + $.each( lexlist, function( idx, lex ) { + var morphoptions = []; + if( 'wordform_matchlist' in lex ) { + $.each( lex['wordform_matchlist'], function( tdx, tag ) { + var tagstr = stringify_wordform( tag ); + morphoptions.push( tagstr ); + }); + } + var formtag = 'morphology_' + idx; + var formstr = ''; + if( 'form' in lex ) { + formstr = stringify_wordform( lex['form'] ); + } + var form_morph_elements = morph_elements( + formtag, lex['string'], formstr, morphoptions ); + $.each( form_morph_elements, function( idx, el ) { + $('#morphology').append( el ); }); - } - var formtag = 'morphology_' + idx; - var formstr = ''; - if( 'form' in lex ) { - formstr = stringify_wordform( lex['form'] ); - } - var form_morph_elements = morph_elements( - formtag, lex['string'], formstr, morphoptions ); - $.each( form_morph_elements, function( idx, el ) { - $('#morphology').append( el ); }); - }); + } else { + $('#morph_outer').hide(); + } } function stringify_wordform ( tag ) { @@ -129,15 +117,18 @@ function color_inactive ( el ) { // If the reading info has any non-disambiguated lexemes, color it yellow; // otherwise color it green. $(el).attr( {stroke:'green', fill:'#b3f36d'} ); - $.each( reading_info['lexemes'], function ( idx, lex ) { - if( !lex['is_disambiguated'] ) { - $(el).attr( {stroke:'orange', fill:'#fee233'} ); - } - }); + if( reading_info ) { + $.each( reading_info['lexemes'], function ( idx, lex ) { + if( !lex['is_disambiguated'] || lex['is_disambiguated'] == 0 ) { + $(el).attr( {stroke:'orange', fill:'#fee233'} ); + } + }); + } } function relemmatize () { // Send the reading for a new lemmatization and reopen the form. + $('#relemmatize_pending').show(); var reading_id = $('#reading_id').val() ncpath = getReadingURL( reading_id ); form_values = { @@ -153,6 +144,7 @@ function relemmatize () { } else { alert("Could not relemmatize as requested: " + data['error']); } + $('#relemmatize_pending').hide(); }); } @@ -168,10 +160,11 @@ function svgEnlargementLoaded() { $("#loading_message").offset( { 'top': lo_height / 2 - $("#loading_message").height() / 2, 'left': lo_width / 2 - $("#loading_message").width() / 2 }); - //Set viewbox widht and height to widht and height of $('#svgenlargement svg'). - $('#update_workspace_button').data('locked', false); - $('#update_workspace_button').css('background-position', '0px 44px'); - //This is essential to make sure zooming and panning works properly. + if( editable ) { + // Show the update toggle button. + $('#update_workspace_button').data('locked', false); + $('#update_workspace_button').css('background-position', '0px 44px'); + } var rdgpath = getTextURL( 'readings' ); $.getJSON( rdgpath, function( data ) { readingdata = data; @@ -191,6 +184,8 @@ function svgEnlargementLoaded() { } } + //Set viewbox width and height to width and height of $('#svgenlargement svg'). + //This is essential to make sure zooming and panning works properly. svg_root.viewBox.baseVal.width = graph_svg.attr( 'width' ); svg_root.viewBox.baseVal.height = graph_svg.attr( 'height' ); //Now set scale and translate so svg height is about 150px and vertically centered in viewbox. @@ -209,32 +204,42 @@ function svgEnlargementLoaded() { } function add_relations( callback_fn ) { - var basepath = getRelativePath(); + // Add the relationship types to the keymap list + $.each( relationship_types, function(index, typedef) { + li_elm = $('
Error: ' + errobj.error + 'The relationship cannot be made.
' ); - } - } ); + $(evt.target).button("enable"); + }); + $( "#dialog-form" ).dialog( "close" ); + }, 'json' ); + }, + Cancel: function() { + $( this ).dialog( "close" ); + } + }, + create: function(event, ui) { + $(this).data( 'relation_drawn', false ); + $.each( relationship_types, function(index, typedef) { + $('#rel_type').append( $('').attr( "value", typedef.name ).text(typedef.name) ); + }); + $.each( relationship_scopes, function(index, value) { + $('#scope').append( $('').attr( "value", value ).text(value) ); + }); + }, + open: function() { + relation_manager.create_temporary( $('#source_node_id').val(), $('#target_node_id').val() ); + $(".ui-widget-overlay").css("background", "none"); + $("#dialog_overlay").show(); + $("#dialog_overlay").height( $("#enlargement_container").height() ); + $("#dialog_overlay").width( $("#enlargement_container").innerWidth() ); + $("#dialog_overlay").offset( $("#enlargement_container").offset() ); + }, + close: function() { + relation_manager.remove_temporary(); + $( '#status' ).empty(); + $("#dialog_overlay").hide(); + } + }).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) { + if( ajaxSettings.url == getTextURL('relationships') + && ajaxSettings.type == 'POST' && jqXHR.status == 403 ) { + var errobj = jQuery.parseJSON( jqXHR.responseText ); + $('#status').append( 'Error: ' + errobj.error + 'The relationship cannot be made.
' ); + } + $(event.target).parent().find('.ui-button').button("enable"); + } ); + } $( "#delete-form" ).dialog({ autoOpen: false, @@ -720,6 +725,13 @@ $(document).ready(function () { } }, create: function(event, ui) { + // Swap out the buttons if we are in readonly mode + if( !editable ) { + $( this ).dialog( "option", "buttons", + [{ text: "OK", click: function() { $( this ).dialog( "close" ); }}] ); + } + + // TODO What is this logic doing? var buttonset = $(this).parent().find( '.ui-dialog-buttonset' ).css( 'width', '100%' ); buttonset.find( "button:contains('Cancel')" ).css( 'float', 'right' ); var dialog_aria = $("div[aria-labelledby='ui-dialog-title-delete-form']"); @@ -737,70 +749,91 @@ $(document).ready(function () { } }); - // function for reading form dialog should go here; for now hide the element - $('#reading-form').dialog({ - autoOpen: false, - height: 400, - width: 600, - modal: true, - buttons: { - Cancel: function() { - $( this ).dialog( "close" ); - }, - Update: function() { - $('#reading_status').empty(); - var reading_id = $('#reading_id').val() - form_values = { - 'id' : reading_id, - 'is_nonsense': $('#reading_is_nonsense').is(':checked'), - 'grammar_invalid': $('#reading_grammar_invalid').is(':checked'), - 'normal_form': $('#reading_normal_form').val() }; - // Add the morphology values - $('.reading_morphology').each( function() { - var rmid = $(this).attr('id'); - rmid = rmid.substring(8); - form_values[rmid] = $(this).val(); - }); - // Make the JSON call - ncpath = getReadingURL( reading_id ); - var reading_element = readingdata[reading_id]; - $(':button :contains("Update")').attr("disabled", true); - var jqjson = $.post( ncpath, form_values, function(data) { - $.each( data, function(key, value) { - reading_element[key] = value; + // function for reading form dialog should go here; + // just hide the element for now if we don't have morphology + if( can_morphologize ) { + $('#reading-form').dialog({ + autoOpen: false, + // height: 400, + width: 450, + modal: true, + buttons: { + Cancel: function() { + $( this ).dialog( "close" ); + }, + Update: function( evt ) { + // Disable the button + $(evt.target).button("disable"); + $('#reading_status').empty(); + var reading_id = $('#reading_id').val() + form_values = { + 'id' : reading_id, + 'is_nonsense': $('#reading_is_nonsense').is(':checked'), + 'grammar_invalid': $('#reading_grammar_invalid').is(':checked'), + 'normal_form': $('#reading_normal_form').val() }; + // Add the morphology values + $('.reading_morphology').each( function() { + if( $(this).val() != '(Click to select)' ) { + var rmid = $(this).attr('id'); + rmid = rmid.substring(8); + form_values[rmid] = $(this).val(); + } }); - if( $('#update_workspace_button').data('locked') == false ) { - color_inactive( get_ellipse( reading_id ) ); - } - $( "#reading-form" ).dialog( "close" ); - }); - // Re-color the node if necessary - return false; - } - }, - create: function() { - }, - open: function() { - $(".ui-widget-overlay").css("background", "none"); - $("#dialog_overlay").show(); - $('#reading_status').empty(); - $("#dialog_overlay").height( $("#enlargement_container").height() ); - $("#dialog_overlay").width( $("#enlargement_container").innerWidth() ); - $("#dialog_overlay").offset( $("#enlargement_container").offset() ); - }, - close: function() { - $("#dialog_overlay").hide(); + // Make the JSON call + ncpath = getReadingURL( reading_id ); + var reading_element = readingdata[reading_id]; + // $(':button :contains("Update")').attr("disabled", true); + var jqjson = $.post( ncpath, form_values, function(data) { + $.each( data, function(key, value) { + reading_element[key] = value; + }); + if( $('#update_workspace_button').data('locked') == false ) { + color_inactive( get_ellipse( reading_id ) ); + } + $(evt.target).button("enable"); + $( "#reading-form" ).dialog( "close" ); + }); + // Re-color the node if necessary + return false; + } + }, + create: function() { + if( !editable ) { + // Get rid of the disallowed editing UI bits + $( this ).dialog( "option", "buttons", + [{ text: "OK", click: function() { $( this ).dialog( "close" ); }}] ); + $('#reading_relemmatize').hide(); + } + }, + open: function() { + $(".ui-widget-overlay").css("background", "none"); + $("#dialog_overlay").show(); + $('#reading_status').empty(); + $("#dialog_overlay").height( $("#enlargement_container").height() ); + $("#dialog_overlay").width( $("#enlargement_container").innerWidth() ); + $("#dialog_overlay").offset( $("#enlargement_container").offset() ); + $("#reading-form").parent().find('.ui-button').button("enable"); + }, + close: function() { + $("#dialog_overlay").hide(); + } + }).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) { + if( ajaxSettings.url.lastIndexOf( getReadingURL('') ) > -1 + && ajaxSettings.type == 'POST' && jqXHR.status == 403 ) { + var errobj = jQuery.parseJSON( jqXHR.responseText ); + $('#reading_status').append( 'Error: ' + errobj.error + '
' ); + } + $(event.target).parent().find('.ui-button').button("enable"); + }); + } else { + $('#reading-form').hide(); } - }).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) { - if( ajaxSettings.url.lastIndexOf( getReadingURL('') ) > -1 - && ajaxSettings.type == 'POST' && jqXHR.status == 403 ) { - var errobj = jQuery.parseJSON( jqXHR.responseText ); - $('#reading_status').append( 'Error: ' + errobj.error + '
' ); - } - }); $('#update_workspace_button').click( function() { + if( !editable ) { + return; + } var svg_enlargement = $('#svgenlargement').svg().svg('get').root(); mouse_scale = svg_root_element.getScreenCTM().a; if( $(this).data('locked') == true ) { @@ -842,6 +875,13 @@ $(document).ready(function () { $(this).data('locked', true ); } }); + + if( !editable ) { + // Hide the unused elements + $('#dialog-form').hide(); + $('#update_workspace_button').hide(); + } + $('.helptag').popupWindow({ height:500,