X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=root%2Fjs%2Frelationship.js;h=e822d70846d717dff217e35738a9dc95e62290b5;hb=f6516f222feb909cd3999fc0ca29ac90311a0266;hp=0f18f8673ab486aeed27c9c6947c8ed30610d4cf;hpb=c1add77704413310f34dcf5ce6f5cdf1011bae31;p=scpubgit%2Fstemmaweb.git diff --git a/root/js/relationship.js b/root/js/relationship.js index 0f18f86..e822d70 100644 --- a/root/js/relationship.js +++ b/root/js/relationship.js @@ -5,6 +5,17 @@ var start_element_height = 0; var reltypes = {}; var readingdata = {}; +function arrayUnique(array) { + var a = array.concat(); + for(var i=0; i').attr( + 'value', wit ).text( wit ) ); + }); + } // Now do the morphological properties. morphology_form( reading_info['lexemes'] ); // and then open the dialog. @@ -369,6 +388,10 @@ function node_obj(ellipse) { self.node_elements = node_elements_for(self.ellipse); } + this.get_witnesses = function() { + return readingdata[self.get_id()].witnesses + } + self.set_draggable( true ); } @@ -517,11 +540,11 @@ function relation_factory() { } } this.showinfo = function(relation) { - var htmlstr = 'type: ' + relation.data( 'type' ) + '
scope: ' + relation.data( 'scope' ); + $('#delete_relation_type').text( relation.data('type') ); + $('#delete_relation_scope').text( relation.data('scope') ); if( relation.data( 'note' ) ) { - htmlstr = htmlstr + '
note: ' + relation.data( 'note' ); + $('#delete_relation_note').text('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] ); @@ -583,33 +606,40 @@ function Marquee() { var self = this; + this.x = 0; + this.y = 0; + this.dx = 0; + this.dy = 0; this.enlargementOffset = $('#svgenlargement').offset(); this.svg_rect = $('#svgenlargement svg').svg('get'); this.show = function( event ) { // TODO: uncolor possible selected // TODO: unless SHIFT? + self.x = event.clientX; + self.y = event.clientY; p = svg_root.createSVGPoint(); p.x = event.clientX - self.enlargementOffset.left; p.y = event.clientY - self.enlargementOffset.top; - // NB: I think next line is officially needed, it's only - // coincidentally that viewport and svg scale 1 to 1 initially - // and therefor we don't need a transform? - // p.matrixTransform( svg_root_element.getCTM().inverse() ); self.svg_rect.rect( p.x, p.y, 0, 0, { fill: 'black', 'fill-opacity': '0.1', stroke: 'black', 'stroke-dasharray': '4,2', strokeWidth: '0.02em', id: 'marquee' } ); }; this.expand = function( event ) { + self.dx = (event.clientX - self.x); + self.dy = (event.clientY - self.y); var rect = $('#marquee'); - if( rect.length != 0 ) { - var pX = (event.clientX - self.enlargementOffset.left) - rect.attr("x");; - var pY = (event.clientY - self.enlargementOffset.top) - rect.attr("y");; - rect.attr("width", pX); - rect.attr("height", pY); + if( rect.length != 0 ) { + var rect_w = Math.abs( self.dx ); + var rect_h = Math.abs( self.dy ); + var rect_x = self.x - self.enlargementOffset.left; + var rect_y = self.y - self.enlargementOffset.top; + if( self.dx < 0 ) { rect_x = rect_x - rect_w } + if( self.dy < 0 ) { rect_y = rect_y - rect_h } + rect.attr("x", rect_x).attr("y", rect_y).attr("width", rect_w).attr("height", rect_h); } }; - this.hide = function() { + this.select = function() { var rect = $('#marquee'); if( rect.length != 0 ) { var left = $('#marquee').offset().left; @@ -626,6 +656,7 @@ function Marquee() { p.y=bottom; var cx_max = p.matrixTransform(tf).x; var cy_max = p.matrixTransform(tf).y; + var witnesses = []; $('#svgenlargement ellipse').each( function( index ) { var cx = parseInt( $(this).attr('cx') ); var cy = parseInt( $(this).attr('cy') ); @@ -633,14 +664,25 @@ function Marquee() { if( cy > cy_min && cy < cy_max) { // we actually heve no real 'selected' state for nodes, except coloring $(this).attr( 'fill', '#ffccff' ); + var this_witnesses = $(this).data( 'node_obj' ).get_witnesses(); + witnesses = arrayUnique( witnesses.concat( this_witnesses ) ); } } }); - // select here + if( $('ellipse[fill="#ffccff"]').size() > 0 ) { + $.each( witnesses, function( index, value ) { + $('#multipleselect-form').append( '' + value + '
' ); + }); + $('#multipleselect-form').dialog( 'open' ); + } self.svg_rect.remove( $('#marquee') ); } }; + this.unselect = function() { + $('ellipse[fill="#ffccff"]').attr( 'fill', '#fff' ); + } + } @@ -670,7 +712,7 @@ $(document).ready(function () { event.preventDefault(); return false; }).mouseup(function (event) { - marquee.hide(); + marquee.select(); $(this).data('down', false); }).mousemove(function (event) { if( timer != null ) { clearTimeout(timer); } @@ -750,12 +792,21 @@ $(document).ready(function () { }, create: function(event, ui) { $(this).data( 'relation_drawn', false ); + $('#rel_type').data( 'changed_after_open', false ); $.each( relationship_types, function(index, typedef) { $('#rel_type').append( $('