muck about with serialization of lexeme wordforms; allow individual lexeme addressing
[scpubgit/stemmatology.git] / stemmaweb / root / js / relationship.js
index 7f6ed87..b513197 100644 (file)
@@ -75,17 +75,13 @@ function node_dblclick_listener( evt ) {
                        morphoptions.push( tagstr );
                });
                var formtag = 'morphology_' + idx;
-               var form_morph_elements = morph_elements( formtag );
-               form_morph_elements[0].text( lex['string'] + ': ' );
-               form_morph_elements[1].autocomplete({ 
-                       source: morphoptions, 
-                       minLength: 0
-               });
                //forminput.autocomplete('search', '');
+               var formstr = '';
                if( lex['form'] ) {
-                       var formstr = stringify_wordform( lex['form'] );
-                       form_morph_elements[1].val( formstr );
+                       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 );
                });
@@ -97,15 +93,39 @@ function stringify_wordform ( tag ) {
        return tag['lemma'] + ' // ' + tag['morphology'];
 }
 
-function morph_elements ( formtag ) {
+function morph_elements ( formtag, formtxt, currform, morphoptions ) {
+       var clicktag = '(Click to select)';
+       if ( !currform ) {
+               currform = clicktag;
+       }
        var formlabel = $('<label/>').attr( 'id', 'label_' + formtag ).attr( 
-               'for', 'reading_' + formtag );
+               'for', 'reading_' + formtag ).text( formtxt + ': ' );
        var forminput = $('<input/>').attr( 'id', 'reading_' + formtag ).attr( 
-               'name', 'reading_' + formtag ).attr( 'size', '50' );
+               'name', 'reading_' + formtag ).attr( 'size', '50' ).val( currform );
+       forminput.autocomplete({ source: morphoptions, minLength: 0     });
+       forminput.focus( function() { 
+               if( $(this).val() == clicktag ) {
+                       $(this).val('');
+               }
+               $(this).autocomplete('search', '') 
+       });
        var morphel = [ formlabel, forminput, $('<br/>') ];
        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'} );
+       $.each( reading_info['lexemes'], function ( idx, lex ) {
+               if( !lex['is_disambiguated'] ) {
+                       $(el).attr( {stroke:'orange', fill:'#fee233'} );
+               }
+       });
+}
+
 // Initialize the SVG once it exists
 function svgEnlargementLoaded() {
        //Give some visual evidence that we are working
@@ -122,7 +142,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];
@@ -150,7 +174,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(); });
 }
 
@@ -217,8 +241,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 );
     }
   }
 
@@ -577,10 +601,6 @@ $(document).ready(function () {
     'cursor' : '-moz-grab'
   });
   
-  var rdgpath = getTextURL( 'readings' );
-  $.getJSON( rdgpath, function( data ) {
-       readingdata = data;
-  });
 
   $( "#dialog-form" ).dialog({
     autoOpen: false,
@@ -721,6 +741,8 @@ $(document).ready(function () {
                $("#dialog_overlay").hide();
        }
   });
+  
+  $('#reading_relemmatize').button();
 
   $('#update_workspace_button').click( function() {
      var svg_enlargement = $('#svgenlargement').svg().svg('get').root();