X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=stemmaweb%2Froot%2Fjs%2Frelationship.js;h=cd3d867d0ed8ed8d01c2470ff8a913cba3f2cd5f;hb=a1411d50483bfd6cc561d7f8d81941cd6d6f61a9;hp=ac621f2894af3bf92ffaffa2bcb4366a0c75bb6a;hpb=e31609d321f5e5371c20434c8d1e2229c4e25406;p=scpubgit%2Fstemmatology.git diff --git a/stemmaweb/root/js/relationship.js b/stemmaweb/root/js/relationship.js index ac621f2..cd3d867 100644 --- a/stemmaweb/root/js/relationship.js +++ b/stemmaweb/root/js/relationship.js @@ -52,8 +52,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').val( reading_info['is_nonsense'] ); - $('#reading_grammar_invalid').val( 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 ) { @@ -66,18 +66,31 @@ function node_dblclick_listener( evt ) { $('#reading_normal_form').attr( 'size', nfboxsize ) $('#reading_normal_form').val( normal_form ); // Now do the morphological properties. + morphology_form( reading_info['lexemes'] ); // and then open the dialog. + $('#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( reading_info['lexemes'], function( idx, lex ) { + $.each( lexlist, function( idx, lex ) { var morphoptions = []; - $.each( lex['wordform_matchlist'], function( tdx, tag ) { - var tagstr = stringify_wordform( tag ); - morphoptions.push( tagstr ); - }); + if( 'wordform_matchlist' in lex ) { + $.each( lex['wordform_matchlist'], function( tdx, tag ) { + var tagstr = stringify_wordform( tag ); + morphoptions.push( tagstr ); + }); + } var formtag = 'morphology_' + idx; - //forminput.autocomplete('search', ''); var formstr = ''; - if( lex['form'] ) { + if( 'form' in lex ) { formstr = stringify_wordform( lex['form'] ); } var form_morph_elements = morph_elements( @@ -86,11 +99,14 @@ function node_dblclick_listener( evt ) { $('#morphology').append( el ); }); }); - $('#reading-form').dialog("open"); } function stringify_wordform ( tag ) { - return tag['lemma'] + ' // ' + tag['morphology']; + if( tag ) { + var elements = tag.split(' // '); + return elements[1] + ' // ' + elements[2]; + } + return '' } function morph_elements ( formtag, formtxt, currform, morphoptions ) { @@ -101,7 +117,8 @@ function morph_elements ( formtag, formtxt, currform, morphoptions ) { var formlabel = $('').attr( 'id', 'label_' + formtag ).attr( 'for', 'reading_' + formtag ).text( formtxt + ': ' ); var forminput = $('').attr( 'id', 'reading_' + formtag ).attr( - 'name', 'reading_' + formtag ).attr( 'size', '50' ).val( currform ); + 'name', 'reading_' + formtag ).attr( 'size', '50' ).attr( + 'class', 'reading_morphology' ).val( currform ); forminput.autocomplete({ source: morphoptions, minLength: 0 }); forminput.focus( function() { if( $(this).val() == clicktag ) { @@ -113,6 +130,43 @@ function morph_elements ( formtag, formtxt, currform, morphoptions ) { return morphel; } +function color_inactive ( el ) { + var reading_id = $(el).parent().attr('id'); + var reading_info = readingdata[reading_id]; + // If the reading info has any non-disambiguated lexemes, color it yellow; + // otherwise color it green. + $(el).attr( {stroke:'green', fill:'#b3f36d'} ); + 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 = { + 'normal_form': $('#reading_normal_form').val(), + 'relemmatize': 1 }; + var jqjson = $.post( ncpath, form_values, function( data ) { + // Update the form with the return + if( 'id' in data ) { + // We got back a good answer. Stash it + readingdata[reading_id] = data; + // and regenerate the morphology form. + morphology_form( data['lexemes'] ); + } else { + alert("Could not relemmatize as requested: " + data['error']); + } + $('#relemmatize_pending').hide(); + }); +} + // Initialize the SVG once it exists function svgEnlargementLoaded() { //Give some visual evidence that we are working @@ -129,7 +183,11 @@ function svgEnlargementLoaded() { $('#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. - $('#svgenlargement ellipse').attr( {stroke:'green', fill:'#b3f36d'} ); + var rdgpath = getTextURL( 'readings' ); + $.getJSON( rdgpath, function( data ) { + readingdata = data; + $('#svgenlargement ellipse').each( function( i, el ) { color_inactive( el ) }); + }); $('#svgenlargement ellipse').parent().dblclick( node_dblclick_listener ); var graph_svg = $('#svgenlargement svg'); var svg_g = $('#svgenlargement svg g')[0]; @@ -157,7 +215,7 @@ function svgEnlargementLoaded() { var transform = 'rotate(0) scale(' + scale + ') translate(4 ' + translate + ')'; svg_g.setAttribute('transform', transform); //used to calculate min and max zoom level: - start_element_height = $('#__START__ ellipse')[0].getBBox().height; + start_element_height = $('#__START__').children('ellipse')[0].getBBox().height; add_relations( function() { $('#loading_overlay').hide(); }); } @@ -224,8 +282,8 @@ function node_obj(ellipse) { self.ellipse.siblings('text').attr('class', 'noselect draggable'); } else { self.ellipse.siblings('text').attr('class', ''); - $(self.ellipse).parent().unbind('mouseenter').unbind('mouseleave').unbind('mousedown'); - $(self.ellipse).attr( {stroke:'green', fill:'#b3f36d'} ); + $(self.ellipse).parent().unbind( 'mouseenter' ).unbind( 'mouseleave' ).unbind( 'mousedown' ); + color_inactive( self.ellipse ); } } @@ -584,10 +642,6 @@ $(document).ready(function () { 'cursor' : '-moz-grab' }); - var rdgpath = getTextURL( 'readings' ); - $.getJSON( rdgpath, function( data ) { - readingdata = data; - }); $( "#dialog-form" ).dialog({ autoOpen: false, @@ -595,11 +649,11 @@ $(document).ready(function () { width: 290, modal: true, buttons: { - "Ok": function() { + "Ok": function( evt ) { + $(evt.target).button("disable"); $('#status').empty(); form_values = $('#collapse_node_form').serialize(); ncpath = getTextURL( 'relationships' ); - $(':button :contains("Ok")').attr("disabled", true); var jqjson = $.post( ncpath, form_values, function(data) { $.each( data, function(item, source_target) { var source_found = get_ellipse( source_target[0] ); @@ -611,7 +665,8 @@ $(document).ready(function () { relation.data( 'note', $('#note').val() ); relation_manager.toggle_active( relation.attr('id') ); } - }); + $(evt.target).button("enable"); + }); $( "#dialog-form" ).dialog( "close" ); }, 'json' ); }, @@ -649,10 +704,12 @@ $(document).ready(function () { $("#dialog_overlay").hide(); } }).ajaxError( function(event, jqXHR, ajaxSettings, thrownError) { - if( ( ajaxSettings.type == 'POST' ) && jqXHR.status == 403 ) { + 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({ @@ -703,31 +760,65 @@ $(document).ready(function () { Cancel: function() { $( this ).dialog( "close" ); }, - Update: function() { - form_values = $('#reading_data_form').serialize(); - ncpath = getReadingURL(); - var reading_element = get_node_obj( $('#reading_data_id').val() ); - $(':button :contains("Update")').attr("disabled", true); + 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(); + } + }); + // 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.data( 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() {}, + 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() ); + $("#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"); }); + $('#update_workspace_button').click( function() { var svg_enlargement = $('#svgenlargement').svg().svg('get').root();