X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=root%2Fjs%2Frelationship.js;h=708883124125338cb612ed612693ceb2304575a2;hb=8f6a090156b798530c69d925664637557ea7342f;hp=495d28cf4636b88d5c118ef848f0aa01b92f361a;hpb=5a80f535539141528fa6c08439196988dc3bb2f4;p=scpubgit%2Fstemmaweb.git diff --git a/root/js/relationship.js b/root/js/relationship.js index 495d28c..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 ) { @@ -851,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; @@ -942,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') ); @@ -981,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 () { @@ -1223,11 +1324,16 @@ $(document).ready(function () { width: 250, modal: true, buttons: { - Cancel: function() { $( this ).dialog( "close" ); }, - Detach: function ( evt ) { + Cancel: function() { + document.getElementById('duplicate-merge-error').innerHTML = ""; + $( this ).dialog( "close" ); + }, + Detach: function ( evt ) { + evt.target.id = 'detach_btn'; + var self = $(this); - var mybuttons = $(evt.target).closest('button').parent().find('button'); - mybuttons.button( 'disable' ); + var mybuttons = $(evt.target).closest('button').parent().find('button'); + mybuttons.button( 'disable' ); var form_values = $('#detach_collated_form').serialize(); ncpath = getTextURL( 'duplicate' ); var jqjson = $.post( ncpath, form_values, function(data) { @@ -1235,6 +1341,33 @@ $(document).ready(function () { mybuttons.button("enable"); self.dialog( "close" ); } ); + }, + Merge: function (evt) { + evt.target.id = 'merge_btn'; + + var self = $(this); + var mybuttons = $(evt.target).closest('button').parent().find('button'); + mybuttons.button('disable'); + + var ncpath = getTextURL('compress'); + var form_values = $('#detach_collated_form').serialize(); + + var jqjson = $.post(ncpath, form_values, function(data) { + if (data.success) { + document.getElementById('duplicate-merge-error').innerHTML = ""; + + if (data.nodes) { + compress_nodes(data.nodes); + } + + mybuttons.button('enable'); + self.dialog('close'); + } else if (data.error_msg) { + document.getElementById('duplicate-merge-error').innerHTML = data.error_msg; + mybuttons.button('enable'); + + } + }); } }, create: function(event, ui) { @@ -1249,6 +1382,25 @@ $(document).ready(function () { $("#dialog_overlay").height( $("#enlargement_container").height() ); $("#dialog_overlay").width( $("#enlargement_container").innerWidth() ); $("#dialog_overlay").offset( $("#enlargement_container").offset() ); + + var mybuttons = $(this).parent().find('button'); + + mybuttons[1].id = 'detach_btn'; + mybuttons[2].id = 'merge_btn'; + + 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(); + } }, close: function() { marquee.unselect();