X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=stemmaweb%2Froot%2Fjs%2Frelationship.js;h=ed1b150f2998cfd7d16a7a5c45d7c05c3072f10c;hb=041d760cbcf2aca8b26586ef3bf6af7a846f94e2;hp=64bd041b7d88245d1740a59f5975c150c973b230;hpb=679f17e1a60a81370df8cbb49b94a2b5d19e3a98;p=scpubgit%2Fstemmatology.git diff --git a/stemmaweb/root/js/relationship.js b/stemmaweb/root/js/relationship.js index 64bd041..ed1b150 100644 --- a/stemmaweb/root/js/relationship.js +++ b/stemmaweb/root/js/relationship.js @@ -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( '/' ); @@ -23,6 +28,14 @@ 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'} ); @@ -42,12 +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(); - // $('#loading_overlay').hide(); + 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) { @@ -56,7 +68,9 @@ 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 ); @@ -68,7 +82,8 @@ function add_relations() { node_obj.set_draggable( false ); node_obj.ellipse.data( 'node_obj', null ); } - }) + }); + callback_fn.call(); }); }); } @@ -109,12 +124,14 @@ function node_obj(ellipse) { this.set_draggable = function( draggable ) { if( draggable ) { - self.ellipse.attr( {stroke:'black', fill:'#fff'} ); - self.ellipse.mousedown( this.mousedown_listener ); - self.ellipse.hover( this.enter_node, this.leave_node ); + $(self.ellipse).attr( {stroke:'black', fill:'#fff'} ); + $(self.ellipse).parent().mousedown( this.mousedown_listener ); + $(self.ellipse).parent().hover( this.enter_node, this.leave_node ); + self.ellipse.siblings('text').attr('class', 'noselect draggable'); } else { - self.ellipse.unbind('mouseenter').unbind('mouseleave').unbind('mousedown'); - self.ellipse.attr( {stroke:'green', fill:'#b3f36d'} ); + self.ellipse.siblings('text').attr('class', ''); + $(self.ellipse).parent().unbind('mouseenter').unbind('mouseleave').unbind('mousedown'); + $(self.ellipse).attr( {stroke:'green', fill:'#b3f36d'} ); } } @@ -124,7 +141,7 @@ function node_obj(ellipse) { self.y = evt.clientY; $('body').mousemove( self.mousemove_listener ); $('body').mouseup( self.mouseup_listener ); - self.ellipse.unbind('mouseenter').unbind('mouseleave') + $(self.ellipse).parent().unbind('mouseenter').unbind('mouseleave') self.ellipse.attr( 'fill', '#ff66ff' ); first_node_g_element = $("#svgenlargement g .node" ).filter( ":first" ); if( first_node_g_element.attr('id') !== self.get_g().attr('id') ) { self.get_g().insertBefore( first_node_g_element ) }; @@ -134,20 +151,27 @@ function node_obj(ellipse) { self.dx = (evt.clientX - self.x) / mouse_scale; self.dy = (evt.clientY - self.y) / mouse_scale; self.move_elements(); + evt.returnValue = false; + evt.preventDefault(); + return false; } this.mouseup_listener = function(evt) { if( $('ellipse[fill="#ffccff"]').size() > 0 ) { var source_node_id = self.ellipse.siblings('title').text(); + var source_node_text = self.ellipse.siblings('text').text(); var target_node_id = $('ellipse[fill="#ffccff"]').siblings("title").text(); + var target_node_text = $('ellipse[fill="#ffccff"]').siblings("text").text(); $('#source_node_id').val( source_node_id ); + $('#source_node_text').val( source_node_text ); $('#target_node_id').val( target_node_id ); + $('#target_node_text').val( target_node_text ); $('#dialog-form').dialog( 'open' ); }; $('body').unbind('mousemove'); $('body').unbind('mouseup'); self.ellipse.attr( 'fill', '#fff' ); - self.ellipse.hover( self.enter_node, self.leave_node ); + $(self.ellipse).parent().hover( self.enter_node, self.leave_node ); self.reset_elements(); } @@ -235,12 +259,14 @@ function svgpath( path_element, svg_element ) { if( this.svg_element.parent(filter).size() != 0 ) { this.svg_element.attr('stroke', '#e5e5e5'); this.svg_element.siblings('text').attr('fill', '#e5e5e5'); + this.svg_element.siblings('text').attr('class', 'noselect'); } } this.un_grey_out = function(filter) { if( this.svg_element.parent(filter).size() != 0 ) { this.svg_element.attr('stroke', '#000000'); this.svg_element.siblings('text').attr('fill', '#000000'); + this.svg_element.siblings('text').attr('class', ''); } } } @@ -493,7 +519,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() {