<commit_before>package Bio::EnsEMBL::VRenderer::imagemap;
use strict;
use Sanger::Graphics::JSTools;
use base qw(Bio::EnsEMBL::VRenderer);

#########
# imagemaps are basically strings, so initialise the canvas with ""
# imagemaps also aren't too fussed about width & height boundaries
#
sub init_canvas {
  my ($self, $config, $im_width, $im_height) = @_;
  $self->canvas("");
  $self->{'show_zmenus'} = defined( $config->get_parameter( "opt_zmenus") ) ? $config->get_parameter( "opt_zmenus") : 1;
  $self->{'zmenu_zclick'} = $config->get_parameter( "opt_zclick");
  $self->{'zmenu_behaviour'} = $config->get_parameter( "zmenu_behaviour") || 'onmouseover';
}

sub add_canvas_frame {
    my ($self, $config, $im_width, $im_height) = @_;
	return(); # no-op!	
}

sub render_Rect {
  my ($self, $glyph) = @_;
  my $href = $self->_getHref( $glyph );
  return unless defined $href;
  return if $href eq '';
  my $x1 = int( $glyph->pixelx() );
  my $x2 = int( $x1 + $glyph->pixelwidth() );
  my $y1 = int( $glyph->pixely() );
  my $y2 = int( $y1 + $glyph->pixelheight() );

  $x1 = 0 if($x1<0);
  $x2 = 0 if($x2<0);
  $y1 = 0 if($y1<0);
  $y2 = 0 if($y2<0);
  $y2 ++;
  $x2 ++;
  $self->{'canvas'} = qq(<area shape="rect" coords="$y1 $x1 $y2 $x2"$href />\n).$self->{'canvas'}; 
}

sub render_Text {
    my ($self, $glyph) = @_;
	$self->render_Rect($glyph);
}

sub render_Circle { }

sub render_Ellipse { }

sub render_Intron { }

sub render_Poly {
  my ($self, $glyph) = @_;
  my $href = $self->_getHref( $glyph );
  return unless(defined $href);
  return if $href eq '';
  my $pointslist = join ' ',map { int } reverse @{$glyph->pixelpoints()};
  $self->{'canvas'} = qq(<area shape="poly" coords="$pointslist"$href />\n).$self->{'canvas'} ; 
}

sub render_Composite {
    my ($self, $glyph) = @_;
    $self->render_Rect($glyph);
	return;
}

sub render_Line { }

sub render_Space {
    my ($self, $glyph) = @_;
    $self->render_Rect($glyph);
	return;
}

sub _getHref {
  my( $self, $glyph ) = @_;

  my %actions = ();

  foreach (qw(title onmouseover onmouseout onclick alt href target)) {
    my $X = $glyph->$_;
    if(defined $X) {
      $actions{$_} = $X;

      if($_ eq 'alt' || $_ eq 'title') {
        $actions{'title'} = CGI::escapeHTML($X);
        $actions{'alt'}   = CGI::escapeHTML($X);
      }
    }
  }

  if($self->{'show_zmenus'} == 1) {
    my $zmenu = undef; # $glyph->zmenu();
    if(defined $zmenu && ((ref $zmenu  eq q()) ||
                          (ref $zmenu eq 'HASH')
                          && scalar keys(%{$zmenu}) > 0)) {

      if($self->{'zmenu_zclick'} || ($self->{'zmenu_behaviour'} =~ /onClick/mix)) {
#        $actions{'alt'}     = 'Click for Menu';
        $actions{'onclick'} = Sanger::Graphics::JSTools::js_menu($zmenu).q(;return false;);
        delete $actions{'onmouseover'};
        delete $actions{'onmouseout'};

      } else {
        delete $actions{'alt'};
        $actions{'onmouseover'} = Sanger::Graphics::JSTools::js_menu($zmenu);
      }
      $actions{'href'} ||= 'javascript:void(0);';
    }
  }

  if(keys %actions && !$actions{'href'}) {
    $actions{'nohref'} = 'nohref';
    delete $actions{'href'};
  }

  return unless $actions{'title'} || $actions{'href'};
  $actions{'alt'} ||= '';

  return join q(), map { qq( $_="$actions{$_}") } keys %actions;
}

1;
<commit_msg>add vdrag class to areas<commit_after>package Bio::EnsEMBL::VRenderer::imagemap;
use strict;
use Sanger::Graphics::JSTools;
use base qw(Bio::EnsEMBL::VRenderer);

#########
# imagemaps are basically strings, so initialise the canvas with ""
# imagemaps also aren't too fussed about width & height boundaries
#
sub init_canvas {
  my ($self, $config, $im_width, $im_height) = @_;
  $self->canvas("");
  $self->{'show_zmenus'} = defined( $config->get_parameter( "opt_zmenus") ) ? $config->get_parameter( "opt_zmenus") : 1;
  $self->{'zmenu_zclick'} = $config->get_parameter( "opt_zclick");
  $self->{'zmenu_behaviour'} = $config->get_parameter( "zmenu_behaviour") || 'onmouseover';
}

sub add_canvas_frame {
    my ($self, $config, $im_width, $im_height) = @_;
	return(); # no-op!	
}

sub render_Rect {
  my ($self, $glyph) = @_;
  
  my $href = $self->_getHref($glyph);
  
  return unless $href;
  
  my $class = $href =~ /#vdrag/ ? ' class="vdrag"' : '';
  
  my $x1 = int $glyph->pixelx;
  my $x2 = int $x1 + $glyph->pixelwidth;
  my $y1 = int $glyph->pixely;
  my $y2 = int $y1 + $glyph->pixelheight;

  $x1 = 0 if $x1 < 0;
  $x2 = 0 if $x2 < 0;
  $y1 = 0 if $y1 < 0;
  $y2 = 0 if $y2 < 0;
  $y2++;
  $x2++;
  $self->{'canvas'} = qq{<area shape="rect" coords="$y1 $x1 $y2 $x2"$href$class />\n$self->{'canvas'}}; 
}

sub render_Text {
    my ($self, $glyph) = @_;
	$self->render_Rect($glyph);
}

sub render_Circle { }

sub render_Ellipse { }

sub render_Intron { }

sub render_Poly {
  my ($self, $glyph) = @_;
  my $href = $self->_getHref( $glyph );
  return unless(defined $href);
  return if $href eq '';
  my $pointslist = join ' ',map { int } reverse @{$glyph->pixelpoints()};
  $self->{'canvas'} = qq(<area shape="poly" coords="$pointslist"$href />\n).$self->{'canvas'} ; 
}

sub render_Composite {
    my ($self, $glyph) = @_;
    $self->render_Rect($glyph);
	return;
}

sub render_Line { }

sub render_Space {
    my ($self, $glyph) = @_;
    $self->render_Rect($glyph);
	return;
}

sub _getHref {
  my( $self, $glyph ) = @_;

  my %actions = ();

  foreach (qw(title onmouseover onmouseout onclick alt href target)) {
    my $X = $glyph->$_;
    if(defined $X) {
      $actions{$_} = $X;

      if($_ eq 'alt' || $_ eq 'title') {
        $actions{'title'} = CGI::escapeHTML($X);
        $actions{'alt'}   = CGI::escapeHTML($X);
      }
    }
  }

  if($self->{'show_zmenus'} == 1) {
    my $zmenu = undef; # $glyph->zmenu();
    if(defined $zmenu && ((ref $zmenu  eq q()) ||
                          (ref $zmenu eq 'HASH')
                          && scalar keys(%{$zmenu}) > 0)) {

      if($self->{'zmenu_zclick'} || ($self->{'zmenu_behaviour'} =~ /onClick/mix)) {
#        $actions{'alt'}     = 'Click for Menu';
        $actions{'onclick'} = Sanger::Graphics::JSTools::js_menu($zmenu).q(;return false;);
        delete $actions{'onmouseover'};
        delete $actions{'onmouseout'};

      } else {
        delete $actions{'alt'};
        $actions{'onmouseover'} = Sanger::Graphics::JSTools::js_menu($zmenu);
      }
      $actions{'href'} ||= 'javascript:void(0);';
    }
  }

  if(keys %actions && !$actions{'href'}) {
    $actions{'nohref'} = 'nohref';
    delete $actions{'href'};
  }

  return unless $actions{'title'} || $actions{'href'};
  $actions{'alt'} ||= '';

  return join q(), map { qq( $_="$actions{$_}") } keys %actions;
}

1;

{'fraction_non_alphanumeric': 0.21567454382291354, 'fraction_numerical': 0.009871373018247084, 'mean_word_length': 3.3620352250489236, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 63, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3941688', 'n_tokens_mistral': 2635, 'n_tokens_neox': 2539, 'n_words': 537}