add rudimentary logic for text segmentation in lemmatizer
[scpubgit/stemmatology.git] / stemmaweb / root / js / relationship.js
index b135c71..d569c16 100644 (file)
@@ -1,8 +1,13 @@
 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( '/' );
@@ -21,6 +26,16 @@ function getRelationshipURL() {
 }
 
 function svgEnlargementLoaded() {
+       //Give some visual evidence that we are working
+       $('#loading_overlay').show();
+       lo_height = $("#enlargement_container").outerHeight();
+       lo_width = $("#enlargement_container").outerWidth();
+       $("#loading_overlay").height( lo_height );
+       $("#loading_overlay").width( lo_width );
+       $("#loading_overlay").offset( $("#enlargement_container").offset() );
+       $("#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').
     //This is essential to make sure zooming and panning works properly.
     $('#svgenlargement ellipse').attr( {stroke:'green', fill:'#b3f36d'} );
@@ -40,11 +55,11 @@ 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 = $("#svgenlargement .node title:contains('#START#')").siblings('ellipse')[0].getBBox().height;
-    add_relations();
+    start_element_height = $("#svgenlargement .node title:contains('START#')").siblings('ellipse')[0].getBBox().height;
+    add_relations( function() { $('#loading_overlay').hide(); });
 }
 
-function add_relations() {
+function add_relations( callback_fn ) {
        var basepath = getRelativePath();
        var textrelpath = getRelationshipURL();
     $.getJSON( basepath + '/definitions', function(data) {
@@ -53,10 +68,13 @@ function add_relations() {
         function(data) {
             $.each(data, function( index, rel_info ) {
                 var type_index = $.inArray(rel_info.type, rel_types);
-                if( type_index != -1 ) {
+                var source_found = get_ellipse( rel_info.source );
+                var target_found = get_ellipse( rel_info.target );
+                if( type_index != -1 && source_found.size() && target_found.size() ) {
                     var relation = relation_manager.create( rel_info.source, rel_info.target, type_index );
                     relation.data( 'type', rel_info.type );
                     relation.data( 'scope', rel_info.scope );
+                    relation.data( 'note', rel_info.note );
                     var node_obj = get_node_obj(rel_info.source);
                     node_obj.set_draggable( false );
                     node_obj.ellipse.data( 'node_obj', null );
@@ -64,7 +82,8 @@ function add_relations() {
                     node_obj.set_draggable( false );
                     node_obj.ellipse.data( 'node_obj', null );
                 }
-            })
+            });
+            callback_fn.call();
         });
     });
 }
@@ -341,7 +360,11 @@ function relation_factory() {
         }
     }
     this.showinfo = function(relation) {
-        $('#delete-form-text').html( 'type: ' + relation.data( 'type' ) + '<br/>scope: ' + relation.data( 'scope' ) );
+       var htmlstr = 'type: ' + relation.data( 'type' ) + '<br/>scope: ' + relation.data( 'scope' );
+       if( relation.data( 'note' ) ) {
+               htmlstr = htmlstr + '<br/>note: ' + relation.data( 'note' );
+       }
+        $('#delete-form-text').html( htmlstr );
         var points = relation.children('path').attr('d').slice(1).replace('C',' ').split(' ');
         var xs = parseFloat( points[0].split(',')[0] );
         var xe = parseFloat( points[1].split(',')[0] );
@@ -454,6 +477,7 @@ $(document).ready(function () {
                 var relation = relation_manager.create( source_target[0], source_target[1], $('#rel_type').attr('selectedIndex') );
                 relation.data( 'type', $('#rel_type :selected').text()  );
                 relation.data( 'scope', $('#scope :selected').text()  );
+                relation.data( 'note', $('#note').val()  );
                 relation_manager.toggle_active( relation.children('title').text() );
             });
             $( "#dialog-form" ).dialog( "close" );
@@ -484,7 +508,7 @@ $(document).ready(function () {
         $(".ui-widget-overlay").css("background", "none");
         $("#dialog_overlay").show();
         $("#dialog_overlay").height( $("#enlargement_container").height() );
-        $("#dialog_overlay").width( $("#enlargement_container").width() );
+        $("#dialog_overlay").width( $("#enlargement_container").innerWidth() );
         $("#dialog_overlay").offset( $("#enlargement_container").offset() );
     },
     close: function() {
@@ -501,7 +525,7 @@ $(document).ready(function () {
 
   $( "#delete-form" ).dialog({
     autoOpen: false,
-    height: 120,
+    height: 135,
     width: 160,
     modal: false,
     buttons: {
@@ -580,6 +604,15 @@ $(document).ready(function () {
      }
   });
   
+  $('.helptag').popupWindow({ 
+         height:500, 
+         width:800, 
+         top:50, 
+         left:50,
+         scrollbars:1 
+  }); 
+
+  
   function toggle_relation_active( node_id ) {
       $('#svgenlargement .relation').find( "title:contains('" + node_id +  "')" ).each( function(index) {
           matchid = new RegExp( "^" + node_id );