X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=root%2Fjs%2Frelationship.js;h=708883124125338cb612ed612693ceb2304575a2;hb=8f6a090156b798530c69d925664637557ea7342f;hp=cf40f3efb49bb2913fa69e5ff76790d60b3be6e2;hpb=2baa2897361b57946789772107b4a4f5a6294961;p=scpubgit%2Fstemmaweb.git diff --git a/root/js/relationship.js b/root/js/relationship.js index cf40f3e..7088831 100644 --- a/root/js/relationship.js +++ b/root/js/relationship.js @@ -224,7 +224,10 @@ function svgEnlargementLoaded() { //initialize marquee marquee = new Marquee(); - + + if (text_direction == 'RL') { + scrollToEnd(); + } } function add_relations( callback_fn ) { @@ -247,8 +250,9 @@ function add_relations( callback_fn ) { var type_index = $.inArray(rel_info.type, rel_types); var source_found = get_ellipse( rel_info.source_id ); var target_found = get_ellipse( rel_info.target_id ); + var emphasis = rel_info.is_significant; if( type_index != -1 && source_found.size() && target_found.size() ) { - var relation = relation_manager.create( rel_info.source_id, rel_info.target_id, type_index ); + var relation = relation_manager.create( rel_info.source_id, rel_info.target_id, type_index, emphasis ); // Save the relationship data too. $.each( rel_info, function( k, v ) { relation.data( k, v ); @@ -559,10 +563,10 @@ function relation_factory() { temporary = null; } } - this.create = function( source_node_id, target_node_id, color_index ) { + this.create = function( source_node_id, target_node_id, color_index, emphasis ) { //TODO: Protect from (color_)index out of bound.. var relation_color = self.relation_colors[ color_index ]; - var relation = draw_relation( source_node_id, target_node_id, relation_color ); + var relation = draw_relation( source_node_id, target_node_id, relation_color, emphasis ); get_node_obj( source_node_id ).update_elements(); get_node_obj( target_node_id ).update_elements(); return relation; @@ -600,6 +604,14 @@ function relation_factory() { $('#delete_relation_type').text( relation.data('type') ); $('#delete_relation_scope').text( relation.data('scope') ); $('#delete_relation_attributes').empty(); + var significance = ' is not '; + if( relation.data( 'is_significant' ) === 'yes') { + significance = ' is '; + } else if ( relation.data( 'is_significant' ) === 'maybe' ) { + significance = ' might be '; + } + $('#delete_relation_attributes').append( + "This relationship" + significance + "stemmatically significant
"); if( relation.data( 'a_derivable_from_b' ) ) { $('#delete_relation_attributes').append( "'" + relation.data('source_text') + "' derivable from '" + relation.data('target_text') + "'
"); @@ -652,7 +664,7 @@ function get_related_nodes( relation_id ) { return srctotarg.split('-...-'); } -function draw_relation( source_id, target_id, relation_color ) { +function draw_relation( source_id, target_id, relation_color, emphasis ) { var source_ellipse = get_ellipse( source_id ); var target_ellipse = get_ellipse( target_id ); var relation_id = get_relation_id( source_id, target_id ); @@ -665,7 +677,8 @@ function draw_relation( source_id, target_id, relation_color ) { var ey = parseInt( target_ellipse.attr('cy') ); var relation = svg.group( $("#svgenlargement svg g"), { 'class':'relation', 'id':relation_id } ); svg.title( relation, source_id + '->' + target_id ); - svg.path( relation, path.move( sx, sy ).curveC( sx + (2*rx), sy, ex + (2*rx), ey, ex, ey ), {fill: 'none', stroke: relation_color, strokeWidth: 4}); + var stroke_width = emphasis === "yes" ? 6 : emphasis === "maybe" ? 4 : 2; + svg.path( relation, path.move( sx, sy ).curveC( sx + (2*rx), sy, ex + (2*rx), ey, ex, ey ), {fill: 'none', stroke: relation_color, strokeWidth: stroke_width }); var relation_element = $('#svgenlargement .relation').filter( ':last' ); relation_element.insertBefore( $('#svgenlargement g g').filter(':first') ); return relation_element; @@ -808,22 +821,22 @@ function merge_nodes( source_node_id, target_node_id, consequences ) { parent_g = svg.group( $('#svgenlargement svg g') ); var ids_text = node_ids[0] + '-' + node_ids[1]; var merge_id = 'merge-' + ids_text; - svg.image( parent_g, xC, (yC-8), 16, 16, merge_button_yes, { id: merge_id } ); - svg.image( parent_g, (xC+20), (yC-8), 16, 16, merge_button_no, { id: 'no' + merge_id } ); - $( '#' + merge_id ).hover( function(){ $(this).addClass( 'draggable' ) }, function(){ $(this).removeClass( 'draggable' ) } ); - $( '#no' + merge_id ).hover( function(){ $(this).addClass( 'draggable' ) }, function(){ $(this).removeClass( 'draggable' ) } ); - $( '#' + merge_id ).click( function( evt ){ + var yes = svg.image( parent_g, xC, (yC-8), 16, 16, merge_button_yes, { id: merge_id } ); + var no = svg.image( parent_g, (xC+20), (yC-8), 16, 16, merge_button_no, { id: 'no' + merge_id } ); + $(yes).hover( function(){ $(this).addClass( 'draggable' ) }, function(){ $(this).removeClass( 'draggable' ) } ); + $(no).hover( function(){ $(this).addClass( 'draggable' ) }, function(){ $(this).removeClass( 'draggable' ) } ); + $(yes).click( function( evt ){ merge_node( node_ids[0], node_ids[1] ); temp_relation.remove(); - $( '#' + merge_id ).parent().remove(); + $(evt.target).parent().remove(); //notify backend var ncpath = getTextURL( 'merge' ); var form_values = "source_id=" + node_ids[0] + "&target_id=" + node_ids[1] + "&single=true"; $.post( ncpath, form_values ); } ); - $( '#no' + merge_id ).click( function( evt ) { + $(no).click( function( evt ) { temp_relation.remove(); - $( '#' + merge_id ).parent().remove(); + $(evt.target).parent().remove(); } ); } ); } @@ -841,6 +854,53 @@ function merge_node( source_node_id, target_node_id ) { $( jq( source_node_id ) ).remove(); } +function compress_nodes(readings) { + //add text of other readings to 1st reading + + var first = get_ellipse(readings[0]); + var first_title = first.parent().find('text')[0]; + + for (var i = 1; i < readings.length; i++) { + var cur = get_ellipse(readings[i]); + var cur_title = cur.parent().find('text')[0]; + + first_title.textContent += " " + cur_title.textContent; + }; + + //delete all others + for (var i = 1; i < readings.length; i++) { + var node = get_ellipse(readings[i]); + var rid = readings[i-1] + '->' + readings[i]; + + //[].slice.call(s.getElementsByTagName('title')).find(function(elem){return elem.textContent=='r64.2->r66.2'}).parentNode.remove() + + var titles = svg_root.getElementsByTagName('title'); + var titlesArray = [].slice.call(titles); + + if (titlesArray.length > 0) { + var title = titlesArray.find(function(elem){ + return elem.textContent === rid; + }); + + if (title && title.parentNode) { + title.parentNode.remove(); + } + } + + var x = parseInt(first[0].getAttribute('cx'), 10); + + first[0].setAttribute('rx', 4.5 * first_title.textContent.length); + + if (text_direction !== "BI") { + first[0].setAttribute('cx', x + first_title.textContent.length + 20); + first_title.setAttribute('x', first[0].getAttribute('cx')); + } + + merge_node(readings[i], readings[0]); + //node.parent().remove(); + } +} + function Marquee() { var self = this; @@ -932,17 +992,53 @@ function Marquee() { if( $('ellipse[fill="#9999ff"]').size() > 0 ) { //add intersection of witnesses sets to the multi select form and open it $('#detach_collated_form').empty(); + $.each( readings, function( index, value ) { $('#detach_collated_form').append( $('').attr( "type", "hidden").attr("name", "readings[]").attr( "value", value ) ); - }); - $.each( witnesses, function( index, value ) { + }); + $.each( witnesses, function( index, value ) { $('#detach_collated_form').append( '' + value + '
' ); }); $('#multiple_selected_readings').attr('value', readings.join(',') ); + + if ($('#action-merge')[0].checked) { + $('#detach_collated_form').hide(); + $('#multipleselect-form-text').hide(); + + $('#detach_btn').hide(); + $('#merge_btn').show(); + } else { + $('#detach_collated_form').show(); + $('#multipleselect-form-text').show(); + + $('#detach_btn').show(); + $('#merge_btn').hide(); + } + + $('#action-detach').change(function() { + if ($('#action-detach')[0].checked) { + $('#detach_collated_form').show(); + $('#multipleselect-form-text').show(); + + $('#detach_btn').show(); + $('#merge_btn').hide(); + } + }); + + $('#action-merge').change(function() { + if ($('#action-merge')[0].checked) { + $('#detach_collated_form').hide(); + $('#multipleselect-form-text').hide(); + + $('#detach_btn').hide(); + $('#merge_btn').show(); + } + }); + $('#multipleselect-form').dialog( 'open' ); } self.svg_rect.remove( $('#marquee') ); @@ -971,6 +1067,21 @@ function readings_equivalent( source, target ) { return false; } +function scrollToEnd() { + var stateTf = svg_root_element.getCTM().inverse(); + + var vbdim = svg_root.viewBox.baseVal; + var width = Math.floor(svg_root_element.getBoundingClientRect().width) - vbdim.width; + + var p = svg_root.createSVGPoint(); + p.x = width; + p.y = 0; + p = p.matrixTransform(stateTf); + + var matrix = stateTf.inverse().translate(-p.x, -100); + var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")"; + svg_root_element.setAttribute("transform", s); +} $(document).ready(function () { @@ -1050,23 +1161,25 @@ $(document).ready(function () { if( editable ) { $( '#dialog-form' ).dialog( { autoOpen: false, - height: 270, - width: 330, + height: 350, + width: 340, modal: true, buttons: { 'Merge readings': function( evt ) { - $( evt.target ).button( 'disable' ); + var mybuttons = $(evt.target).closest('button').parent().find('button'); + mybuttons.button( 'disable' ); $( '#status' ).empty(); form_values = $( '#collapse_node_form' ).serialize(); ncpath = getTextURL( 'merge' ); var jqjson = $.post( ncpath, form_values, function( data ) { merge_nodes( $( '#source_node_id' ).val(), $( '#target_node_id' ).val(), data ); - $(evt.target).button( 'enable' ); + mybuttons.button( 'enable' ); $( '#dialog-form' ).dialog( 'close' ); } ); }, OK: function( evt ) { - $( evt.target ).button( 'disable' ); + var mybuttons = $(evt.target).closest('button').parent().find('button'); + mybuttons.button( 'disable' ); $( '#status' ).empty(); form_values = $( '#collapse_node_form' ).serialize(); ncpath = getTextURL( 'relationships' ); @@ -1076,13 +1189,14 @@ $(document).ready(function () { var target_found = get_ellipse( source_target[1] ); var relation_found = $.inArray( source_target[2], $( '#keymap' ).data( 'relations' ) ); if( source_found.size() && target_found.size() && relation_found > -1 ) { - var relation = relation_manager.create( source_target[0], source_target[1], relation_found ); + var emphasis = $('#is_significant option:selected').attr('value'); + var relation = relation_manager.create( source_target[0], source_target[1], relation_found, emphasis ); relation_manager.toggle_active( relation.attr('id') ); $.each( $('#collapse_node_form').serializeArray(), function( i, k ) { relation.data( k.name, k.value ); }); } - $(evt.target).button( 'enable' ); + mybuttons.button( 'enable' ); }); $( '#dialog-form' ).dialog( 'close' ); }, 'json' ); @@ -1100,11 +1214,15 @@ $(document).ready(function () { $.each( relationship_scopes, function(index, value) { $('#scope').append( $('